Reading Self-descriptive FizzBuzz

  • 531 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
531
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
1
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 超絶プログラマーへの道 @chiastolite12年10月1日月曜日
  • 2. スゴイ プログラマーに なりたい12年10月1日月曜日
  • 3. でもどうすれば?12年10月1日月曜日
  • 4. プログラム上達 するためには?12年10月1日月曜日
  • 5. 人のソースを 読む12年10月1日月曜日
  • 6. でも12年10月1日月曜日
  • 7. まずは基礎を 固めたい12年10月1日月曜日
  • 8. プログラマの 基礎といえば?12年10月1日月曜日
  • 9. FizzBuzz問題12年10月1日月曜日
  • 10. なるほど わかりました12年10月1日月曜日
  • 11. これですね12年10月1日月曜日
  • 12. Reading Self-descriptive FizzBuzz @chiastolite12年10月1日月曜日
  • 13. Self-descriptive FizzBuzz • Rubyを用いた超絶技巧プログラミング • http://www.slideshare.net/ mametter/ruby-2012 • 遠藤侑介さん(@mametter)作 • Ruby2.0 リリースマネージャ& コミッター12年10月1日月曜日
  • 14. demo12年10月1日月曜日
  • 15. さっそくソースを 読んでみましょう12年10月1日月曜日
  • 16. eval(s=s= %w@proc{| n|z=32.ch r;k="[#{n +=1}]";u= ":>==;<==?"[m=n**4 %-15,m+13]||"#{$f= k}";d="Y.E.#{c=64. chr}*)";$f||d<<z +k;t="eval(s=s=%w# {c+s=s[0, 334]}#$f# ";25.time s{|y|m=u. bytes.map {|v|t<<s; (0..[62-v ,2].min). map{|x|"i f0zgl11p0 zghuhku744d8hzeg41qtfx7xs7t wflr".to_i(36)[x+32+v*3-y/5 *44]<1?z*9:t.slice!(0,9)}<< z}.join.rstrip;y>23&&m[-9,9 ]=d;puts(m)}}[1]#pY.E.@*)12年10月1日月曜日
  • 17. なるほど12年10月1日月曜日
  • 18. わからん12年10月1日月曜日
  • 19. 基礎謎知識 • 自己複製 • フォント圧縮 • 実行可能なアスキーアート12年10月1日月曜日
  • 20. 遠藤さんのスライド を参照します12年10月1日月曜日
  • 21. 12年10月1日月曜日
  • 22. 12年10月1日月曜日
  • 23. 12年10月1日月曜日
  • 24. つまり 自己複製 をするプログラムを フォント 圧縮 で得たビットパターン合わせて 実行可能なアスキーアート として出力 している12年10月1日月曜日
  • 25. 何を言ってるのか わからねーと 思うが(ry12年10月1日月曜日
  • 26. ソースコードに 戻ります12年10月1日月曜日
  • 27. eval(s=s= %w@proc{| n|z=32.ch r;k="[#{n +=1}]";u= ":>==;<==?"[m=n**4 %-15,m+13]||"#{$f= k}";d="Y.E.#{c=64. chr}*)";$f||d<<z +k;t="eval(s=s=%w# {c+s=s[0, 334]}#$f# ";25.time s{|y|m=u. bytes.map {|v|t<<s; (0..[62-v ,2].min). map{|x|"i f0zgl11p0 zghuhku744d8hzeg41qtfx7xs7t wflr".to_i(36)[x+32+v*3-y/5 *44]<1?z*9:t.slice!(0,9)}<< z}.join.rstrip;y>23&&m[-9,9 ]=d;puts(m)}}[1]#pY.E.@*)12年10月1日月曜日
  • 28. 読みやすく します12年10月1日月曜日
  • 29. eval(s=s= %w@proc{|n| z=32.chr; k="[#{n+=1}]"; u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; d="Y.E.#{c=64.chr}*)"; $f||d<<z+k; t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; 25.times{|y| m=u.bytes.map{|v| t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*)12年10月1日月曜日
  • 30. とりあえず 1行ずつ 読んでみる12年10月1日月曜日
  • 31. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| z=32.chr; k="[#{n+=1}]"; u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; d="Y.E.#{c=64.chr}*)"; $f||d<<z+k; t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; 25.times{|y| m=u.bytes.map{|v| t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*)12年10月1日月曜日
  • 32. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; k="[#{n+=1}]"; u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; d="Y.E.#{c=64.chr}*)"; $f||d<<z+k; t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; 25.times{|y| m=u.bytes.map{|v| t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(‘’)の シンタックスシュガー12年10月1日月曜日
  • 33. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; d="Y.E.#{c=64.chr}*)"; $f||d<<z+k; t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; 25.times{|y| m=u.bytes.map{|v| t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 34. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; d="Y.E.#{c=64.chr}*)"; $f||d<<z+k; t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; 25.times{|y| m=u.bytes.map{|v| t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 35. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= ???? d="Y.E.#{c=64.chr}*)"; $f||d<<z+k; t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; 25.times{|y| m=u.bytes.map{|v| t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 36. u=":>==;<==?"[m=n**4%-15,m+13]||"#{$f=k}" • n=1ならm=-14 • n=5ならm=-5 • u= [1] • u= ;<==? • n=2ならm=-14 • n=15ならm=-0 • u= [2] • u= >==;<==? • n=3ならm=-9 • u= :>==12年10月1日月曜日
  • 37. FizzBuzz判定… だと…!?12年10月1日月曜日
  • 38. FizzBuzz判定… だと…!? …なんであれで計算できるのか誰か教えてください12年10月1日月曜日
  • 39. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; $f||d<<z+k; t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; 25.times{|y| m=u.bytes.map{|v| t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 40. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; #<= 署名(cは@) $f||d<<z+k; t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; 25.times{|y| m=u.bytes.map{|v| t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 41. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; #<= 署名(cは@) $f||d<<z+k; # <= ‘Fizz’,‘Buzz’,‘FizzBuzz’の際は’[n]’を別表示するため t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; 25.times{|y| m=u.bytes.map{|v| t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 42. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; #<= 署名(cは@) $f||d<<z+k; # <= ‘Fizz’,‘Buzz’,‘FizzBuzz’の際は’[n]’を別表示するため t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; #<= evalつけて’[n]‘とかつけて 25.times{|y| m=u.bytes.map{|v| t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 43. s[0,334] eval(s=s=%w@proc{|n|z=32.chr;k="[#{n +=1}]";u=":>==;<==?"[m=n**4%-15,m +13]||"#{$f=k}";d="Y.E.#{c=64.chr}*)";$f||d<<z +k;t="eval(s=s=%w#{c+s=s[0,334]}#$f#";25.times{|y| m=u.bytes.map{|v|t<<s;(0..[62-v,2].min).map{| x|"if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr".to_i(36) [x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)} <<z}.join.rstrip;y>23&&m[-9,9]=d;puts(m)}} [1]#pY.E.@*) ここ12年10月1日月曜日
  • 44. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; #<= 署名(cは@) $f||d<<z+k; # <= ‘Fizz’,‘Buzz’,‘FizzBuzz’の際は’[n]’を別表示するため t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; #<= evalつけて’[n]‘とかつけて 25.times{|y| # <= 1行毎に表示 m=u.bytes.map{|v| t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 45. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; #<= 署名(cは@) $f||d<<z+k; # <= ‘Fizz’,‘Buzz’,‘FizzBuzz’の際は’[n]’を別表示するため t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; #<= evalつけて’[n]‘とかつけて 25.times{|y| # <= 1行毎に表示 m=u.bytes.map{|v| <= 先頭の文字から表示 t<<s; (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 46. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; #<= 署名(cは@) $f||d<<z+k; # <= ‘Fizz’,‘Buzz’,‘FizzBuzz’の際は’[n]’を別表示するため t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; #<= evalつけて’[n]‘とかつけて 25.times{|y| # <= 1行毎に表示 m=u.bytes.map{|v| <= 先頭の文字から表示 t<<s; # <= 出力が可変長なので余裕を見て追加 (0..[62-v,2].min).map{|x| "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 47. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; #<= 署名(cは@) $f||d<<z+k; # <= ‘Fizz’,‘Buzz’,‘FizzBuzz’の際は’[n]’を別表示するため t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; #<= evalつけて’[n]‘とかつけて 25.times{|y| # <= 1行毎に表示 m=u.bytes.map{|v| <= 先頭の文字から表示 t<<s; # <= 出力が可変長なので余裕を見て追加 (0..[62-v,2].min).map{|x| #<= ? "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 48. vに入る値 • u.bytes.map{¦v¦ ... } • u= [1] • u= :>==;’ # fizz • u= ;<==?’ # buzz • u= :>==;<==?’ # fizzbuzz12年10月1日月曜日
  • 49. • [ 0 , "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?"].map{¦v¦ v.bytes.to_a}.flatten • [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63]12年10月1日月曜日
  • 50. • [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63].map{¦v¦ [62-v,2].min} • [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, -1]12年10月1日月曜日
  • 51. 12年10月1日月曜日 ?
  • 52. 12年10月1日月曜日
  • 53. 2 2 2 2 2 2 2 2 2 2 2 2 2 1 0 -112年10月1日月曜日
  • 54. 表示横幅の… だと…!?12年10月1日月曜日
  • 55. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; #<= 署名(cは@) $f||d<<z+k; # <= ‘Fizz’,‘Buzz’,‘FizzBuzz’の際は’[n]’を別表示するため t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; #<= evalつけて’[n]‘とかつけて 25.times{|y| # <= 1行毎に表示 m=u.bytes.map{|v| <= 先頭の文字から表示 t<<s; # <= 出力が可変長なので余裕を見て追加 (0..[62-v,2].min).map{|x| #<= 出力文字列の幅 "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 56. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; #<= 署名(cは@) $f||d<<z+k; # <= ‘Fizz’,‘Buzz’,‘FizzBuzz’の際は’[n]’を別表示するため t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; #<= evalつけて’[n]‘とかつけて 25.times{|y| # <= 1行毎に表示 m=u.bytes.map{|v| <= 先頭の文字から表示 t<<s; # <= 出力が可変長なので余裕を見て追加 (0..[62-v,2].min).map{|x| #<= 出力文字列の幅 "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z # <= ビットパターンから空白にするかソースにするか }.join.rstrip; y>23&&m[-9,9]=d; puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 57. !x+32+v*3-y/5*44 !n=2のとき12年10月1日月曜日
  • 58. 182 183 184 182 183 184 182 183 184 182 183 184 182 183 184 138 139 140 138 139 140 138 139 140 138 139 140 138 139 140 94 95 96 94 95 96 94 95 96 94 95 96 94 95 96 50 51 52 50 51 52 50 51 52 50 51 52 50 51 52 6 7 8 6 7 8 6 7 8 6 7 8 6 7 812年10月1日月曜日
  • 59. ! "if0zgl11p0zghuhku744 d8hzeg41qtfx7xs7twflr ".to_i(36) [x+32+v*3-y/5*44] !n=2のとき12年10月1日月曜日
  • 60. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 112年10月1日月曜日
  • 61. "if0zgl11p0zghuhku744 d8hzeg41qtfx7xs7twflr ".to_i(36) [x+32+v*3-y/5*44]<1 ? z*9:’*’*9 !n=2のとき12年10月1日月曜日
  • 62. *************************** *************************** *************************** *************************** *************************** ********* ********* ********* ********* ********* *************************** *************************** *************************** *************************** *************************** ********* ********* ********* ********* ********* *************************** *************************** *************************** *************************** ***************************12年10月1日月曜日
  • 63. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; #<= 署名(cは@) $f||d<<z+k; # <= ‘Fizz’,‘Buzz’,‘FizzBuzz’の際は’[n]’を別表示するため t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; #<= evalつけて’[n]‘とかつけて 25.times{|y| # <= 1行毎に表示 m=u.bytes.map{|v| <= 先頭の文字から表示 t<<s; # <= 出力が可変長なので余裕を見て追加 (0..[62-v,2].min).map{|x| #<= 出力文字列の幅 "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z # <= ビットパターンから空白にするかソースにするか }.join.rstrip; y>23&&m[-9,9]=d; # <= 最終行なら署名を入れる puts(m) } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 64. eval(s=s= #<= 自己複製用にソースをsに代入 %w@proc{|n| # <= eval で実行する用の文字列配列 @∼@ nには前回の数値 z=32.chr; # <= 半角スペース(通常のはjoinで消えるため) k="[#{n+=1}]"; # <= nをカウントアップ + 次回用の文字列生成 u=":>==;<==?"[m=n**4% -15,m+13]||"#{$f=k}"; #<= FizzBuzzでした d="Y.E.#{c=64.chr}*)"; #<= 署名(cは@) $f||d<<z+k; # <= ‘Fizz’,‘Buzz’,‘FizzBuzz’の際は’[n]’を別表示するため t="eval(s=s=%w#{c+s=s[0,334]}#$f#"; #<= evalつけて’[n]‘とかつけて 25.times{|y| # <= 1行毎に表示 m=u.bytes.map{|v| <= 先頭の文字から表示 t<<s; # <= 出力が可変長なので余裕を見て追加 (0..[62-v,2].min).map{|x| #<= 出力文字列の幅 "if0zgl11p0zghuhku744d8hzeg41qtfx7xs7twflr" .to_i(36)[x+32+v*3-y/5*44]<1?z*9:t.slice!(0,9)}<< z # <= ビットパターンから空白にするかソースにするか }.join.rstrip; y>23&&m[-9,9]=d; # <= 最終行なら署名を入れる puts(m) # <= 1行毎に出力 } }[1]#pY.E.@*) # <= * ‘’ は Array.join(’’)の シンタックスシュガー12年10月1日月曜日
  • 65. 以上12年10月1日月曜日
  • 66. 結論12年10月1日月曜日
  • 67. 超絶プログラマーへ の道は険しい12年10月1日月曜日