Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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本ノック