この縛りでHellWolrdしている記事がむちゃくちゃ面白かったので僕も回答を作ってみました
ルールも幾つか追加します。
既存のルール
- ソースコードにダブルクォート、シングルクォート、数字を書くこと無く、「LIFULL」と出力して下さい。
- 最後に改行を付けること。
- 言語は問いません。
追加ルール
- 引数の取得を禁止
- クラス及び関数の作成を禁止
- 変数名の取得を禁止
- import禁止
- True, Falseも数字扱い(それぞれ1と0になるため)
これだけ縛っても答えはたくさんありそうだ、、、他の縛りも作りたいがとりあえずこれでやっていきましょう!
やる
まずソースコード数字とシングルクォート、ダブルクォートが使えないのでこのままではASCIIコード変換と文字列の代入は出来ません
うーん........
とりあえず数字を作る方法を考えたのでやっていきます
数字を作る
まずこれをみてください
one = int(id(print)/id(print))
print(one)
# 出力: 1
pythonでは全てがオブジェクトです。そしてそれにはそれぞれidが割り振られています。
これを使えば数字が作れます
作る文字は"LIFULL"でしたよね。使う文字をASCIIコードで表すとそれぞれ
L:76
I:73
F:70
U:85
なんです。ただ、例えばLを作るときに76回変数one
を足すのは流石にヤバイので、素因数分解して素数で表せるようにします。
L
76は2**2*19
ですね
19を作るのが面倒くさいですがやっていきます
one = int(id(print)/id(print)) # 1
two = one+one # 1 + 1 = 2
three = two+one # 2 + 1 = 3
iL = two**two*(three**two*two+one) # 2^2 * (3^2 * 2 + 1)
L = chr(iL)
print(L) # "L"
Lが出来ました!
I
Iは ASCIIコードで73です。
先程のiL
が76なので
iI = iL-three # 76 - 3 = 73
I = chr(iI)
print(I) # "I"
Iも完成!
F
Fは70なのでこれも直前のiI
(73)を使い
iF = iI-three # 73 - 3 = 70
F = chr(iF)
print(F) # "F"
Fも出来ました!
U
ラストですね、UはASCIIで表すと85です。これはiLを使って
iU = iL+three**two # 76 + 3^2 = 85
U = chr(iU)
print(U) # "F"
これですべて揃いました!
組み合わせる
one = int(id(print)/id(print)) # 1
two = one+one # 1 + 1 = 2
three = two+one # 2 + 1 = 3
iL = two**two*(three**two*two+one) # 2^2 * (3^2 * 2 + 1)
L = chr(iL)
iI = iL-three # 76 - 3 = 73
I = chr(iI)
iF = iI-three # 73 - 3 = 70
F = chr(iF)
iU = iL+three**two # 76 + 3^2 = 85
U = chr(iU)
print(L+I+F+F+U+L) # LIFFUL
これで終了です!
他に何か方法を思いついた方はぜひコメント欄でお願いします!