ただし文字・数値リテラルを使わずに
早速ソース
$ false;echo $? |
awk '{one=$0;zero=one-one;two=one+one;three=one+two;
four=one+three;seven=three+four;eight=seven+one;
nine=eight+one;print(seven two);print(one zero one);
print(one zero eight);print(one zero eight);
print(one one one);print(three two);print(one one nine);
print(one one one);print(one one four);
print(one zero eight);print(one zero zero);print(three three); }'|
awk '{printf("%c",$0)}END{printf("\n")}'
[実行結果]
Hello world!
何番煎じかわかりませんが、会社のSlackに気まぐれで貼ったら意外と受けが良かったので。
見やすいように適当に改行入れてます。
解説
false;echo $?
false
は終了コード1
を返すコマンドです。
続けて実行しているecho $?
で直前のコマンド(false
)の終了コードを出力しています。
awk '{one=$0;zero=one-one;...print(three three); }'
echo $?
の値が$0
に入っているため、one
という変数に格納します。
コレで1
を作ることが出来たので、1 - 1 = 0
、1 + 1 = 2
のようにしてどんどん数値を作っていきます。
また、print()
では変数や文字列同士をスペースを挟むことで結合して出力できます。
例) print("1" "2")
=> 12
コレを用いて、先程作った数値から"Hello world!"の各文字に対応する文字コードを作っていきます。
H
= 72
e
= 101
l
= 108
o
= 111
=
32
w
= 119
r
= 114
d
= 100
!
= 33
awk '{printf("%c",$0)}END{printf("\n")}'
あとは、printf("%c",x)
でxの文字コードに対応する文字を表示させます。
printf()
はprint()
と違って改行を出力しないため、最後に改行を出力します。
以上です。
もっと簡潔に書けるよ!とかあればよろしくお願いします。