×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
ワンライナーで FizzBuzz 2023/12/07 maimu
Slide 2
Slide 2 text
自己紹介 名前:maimu Xアカウント:maimux2x 所属:永和システムマネジメント エンジニア歴:4ヶ月 好きなRubyメソッド: Enumerable#map 好きなLinuxコマンド: tee
Slide 3
Slide 3 text
ワンライナーでFizzBuzz
Slide 4
Slide 4 text
なぜこのテーマなのか Linuxの勉強で学んだコマンドを使ってみたかった
Slide 5
Slide 5 text
ワンライナーとは? 1行で書かれたコマンドの組み合わせ
Slide 6
Slide 6 text
今回のお題
Slide 7
Slide 7 text
試作 seq 100 | awk '$1%15==0{print "FizzBuzz"}$1%5==0{print "Buzz"}$1%3==0{print "Fizz"}$1%15{print $1}'
Slide 8
Slide 8 text
コマンドについて seq : 連続した数字の列を出力・表示するコマンド awk : grepにプログラム機能をつけたようなもの(プログラミング言語) $1 : 読み込んだ行の1列目の文字列または数値
Slide 9
Slide 9 text
結果は・・・?
Slide 10
Slide 10 text
条件分岐を追加! seq 100 | awk '{ if ($1 % 15 == 0) print "FizzBuzz"; else if ($1 % 3 == 0) print "Fizz"; else if ($1 % 5 == 0) print "Buzz"; else print $1; }'
Slide 11
Slide 11 text
今度はできた!
Slide 12
Slide 12 text
他のコマンドも試したい
Slide 13
Slide 13 text
ebanさんのツイートにまさにシェル芸という模範解答が https://twitter.com/eban/status/830272982303936512 seq 1 100|sed '5~5s/.*/Buzz/;3~3s/[^B]*/Fizz/' 模範解答を見つけてしまった・・・
Slide 14
Slide 14 text
参考にしつつ自分もやってみる seq 100 | sed -e '3~3s/.*/Fizz/' -e '5~5s/.*/Buzz/' -e '15~15s/.*/FizzBuzz/'
Slide 15
Slide 15 text
コマンドについて sed : 指定したファイルをコマンドに従って処理する -e : sedで複数のコマンドを指定する際に使用する s : 指定されたパターンに基づいて置換する ~ : 処理対象の位置を指定するアドレス指定子
Slide 16
Slide 16 text
できた!
Slide 17
Slide 17 text
もう1個やってみる seq 100 | sed -e '15~15c\FizzBuzz' -e '3~3c\Fizz' -e '5~5c\Buzz'
Slide 18
Slide 18 text
コマンドについて c : 指定した行をテキストに置き換える
Slide 19
Slide 19 text
できた!
Slide 20
Slide 20 text
Rubyワンライナーでもやってみた seq 100 | ruby -ne 'if $_.to_i%15==0; puts "FizzBuzz" elsif $_.to_i%5==0; puts "Buzz" elsif $_.to_i%3==0; puts "Fizz" else puts $_ end'
Slide 21
Slide 21 text
コマンドについて -e : 引数に記述されたRubyのコードを実行するためのオプション -n : 標準入力の内容を1行ずつ読み込む $_ : -nオプションで読み込んだ文字列が格納される変数
Slide 22
Slide 22 text
できた!
Slide 23
Slide 23 text
やってみた結果 ● ワンライナーでFizzBuzzを4つ実行できた! ○ 効率性は完全無視・・・ ○ Rubyワンライナーは普通にコードを書いた方が分かりやすい・・・ ● Linuxコマンドと少し仲良くなれた ● Rubyコマンドのオプションを初めて使った
Slide 24
Slide 24 text
今後の展望 ● シェル・ワンライナー160本ノックをやり切りたい! ● アイディアと手段を駆使したワンライナーを書いてみたい
Slide 25
Slide 25 text
参考文献 ● man ● 1日1問半年以内に習得 シェル・ワンライナー160本ノック