Skip to content

問題101 別解3 について #76

Description

@ktrarai

問題101 別解3 について

... | awk 'BEGIN{n=$0}{if($0 - n <= 1){printf $0" " }else{printf "\n"$0" "} n=$0}END{print}'

ここまでの部分を実行すると

97 98 99
101 102
105 106 107 108
112 113 114
117
119
121 122 122

となって最後の 122 がひとつ余計に出力されます1。

また、 BEGIN{n=$0} の $0 も実効がないと思われます。というわけで、当該のコードはより適切には

awk 'BEGIN{n=0}{if($0 - n <= 1){printf $0" " }else{printf "\n"$0" "} n=$0}END{print ""}'

となるべきではないかと考えます。

瑣末な部分に対する指摘で恐縮ですが、以上、ご確認のほどよろしくお願いいたします。

Footnotes

  1. 全体のコマンドラインの最後の方の出力を整える処理 (awk 'NF>=2{print $1"-"$NF}NF==1{print}') によって解消してはいますが…。 ↩

Activity

  1. greymd commented on Sep 13, 2026

    @greymd
    Contributor

    ご指摘ありがとうございます!確認しました。
    確認しましたが、確かに冗長な箇所でしたね。。

    ご認識の通り、END{print} によって最後の $0 が再度出力されており、後段の処理で結果的に吸収されているものの、無駄な処理になっていました。
    なお、BEGIN 内の $0 は空であり、数値としては 0 として扱われるため、BEGIN句自は実質的な意味がありません。
    この別解は私が記載したものですが、試行錯誤の過程で不要な記述が残ったものと思われます。

    さらに確認したところ、AWKでは未初期化変数が数値文脈で 0 として扱われるため、BEGIN 節自体を省略できます。
    また、END 節を省略して末尾に改行が付かなくても、直後の perl -n はEOFまでの最終行を処理するため、今回のパイプラインでは問題ありません。
    したがって、該当部分は次のように簡略化できそうです。

    awk '{if ($0-n <= 1) {printf $0" "} else {printf "\n"$0" "} n=$0}'

    最終的な出力に影響する誤りではありませんが、解答例として改善できる点ですので、README.mdと回答ファイルに記載しておきました( #80 )。

    ご指摘ありがとうございました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions