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本ノック