LoginSignup
1

More than 5 years have passed since last update.

posted at

updated at

PythonでHelloWorld(縛り)

強いエンジニアにHelloWorldさせてみた(縛りあり)

この縛りで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

これで終了です!

他に何か方法を思いついた方はぜひコメント欄でお願いします!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1