2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

アスキーアートでfizzbuzzする。

Last updated at Posted at 2020-09-01

今回、超絶技巧プログラミングという素晴らしい本を読んだのでアスキーアートでFizzBuzzをしてみました。
四角の中に0x6d61という文字を書いています。結構見づらい…

eval(%w(1.upto(100)do|n|s=n;if(n%15==0);s="FizzBuzz
";e    lsi f(n% 5==   0);s="Buz z";els   if(n% 3==0
); s="F izz "; end ;puts(s);end ;;;; ;;;;;;;;  ;;;;
;; ;  ; ;;;; ;;;;;     ;;;;;    ;;;;     ;;;;; ;;;;
;; ;;;; ;; ;; ;;;; ;;; ;;; ;;;; ;;;; ;;; ;;;;; ;;;;
;;;   ;;; ;;;; ;;;;   ;;;;;;   ;;;;;;   ;;;;;; ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;)*"")

#解説

簡単にコードを解説していきます。まず%w部分でfizzbuzzのメインコードを
配列に分解してます。%wは%w(wei wei wei)と書くと[ "wei,"wei","wei"]に変換できます。
この仕組みのおかげでコードに空白を含めることが出来ます。次に*""の部分で配列を再度結合して文字列にしています。
この段階での最終コードは以下になります。

"1.upto(100)do|n|s=n;if(n%15==0);s=\"FizzBuzz\";elsif(n%5==0);s=\"Buzz\";elsif(n%3==0);s=\"Fizz\";end;puts(s);end;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"

最後にこれをevalで実行しています。

このrubyプログラムを作成するために以下のコードを書きました。
ほぼ「超絶技巧プログラミング」のコードを参考にしています。

ascii = """
###################################################
###    ### #### ###   ######### ######   ##### ####
## #### ### ## ### ############ #### ########  ####
## #  # #### #####     #####    ####     ##### ####
## #### ## ## #### ### ### #### #### ### ##### ####
###   ### #### ####   ######   ######   ###### ####
###################################################
 """
puts ascii.length
code = <<'END'
1.upto(100) do |n|
s = n;
if(n%15==0);
  s="FizzBuzz";
elsif(n%5==0);
  s="Buzz";
elsif(n%3==0);
    s="Fizz";
end;
puts(s);
end;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END
p code.length
code = code.split.join
code = 'eval(%w(' + code + ')*"")'
code = ascii.gsub("#") { code.slice!(0,1)}
puts code

流れとしてはcodeを空白なしの一行にしevalを連結してアスキーアートの#をcodeで置き換えています。
注意する点はアスキーアートと実行したいコードの長さが一緒じゃなければいけないので上のコードでは
;でパディングしてます。

最後にpaizaのlinkをおいておきます。
FizzBuzz

2
0
2

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
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?