Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
one_liner_fizzbuzz
Search
maimu
December 07, 2023
Programming
0
110
one_liner_fizzbuzz
maimu
December 07, 2023
Tweet
Share
More Decks by maimu
See All by maimu
rails_girls_is_my_gate_to_join_the_ruby_commuinty
maimux2x
0
270
ruby-flip-flop
maimux2x
0
100
before_rails_girls_after_rails_girls
maimux2x
0
580
my_study_of_ruby_method
maimux2x
1
120
about_rails_girls_document_translation
maimux2x
0
5.9k
best_for_fbc
maimux2x
0
41
homemade_service_release_front_and_back
maimux2x
0
350
enjoy_conferences
maimux2x
0
5.7k
5minutes_learning_OAuth
maimux2x
0
270
Other Decks in Programming
See All in Programming
[KR] Server Driven Compose With Firebase
skydoves
2
210
モジュラモノリス、その前に / Modular monolith, before that
euglena1215
8
720
"noncopyable types" の使いどころについて考えてみた
andpad
0
160
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
730
Програмиране с Rust, ФМИ, 2024
nikolads
0
110
実践サーバーレスパフォーマンスチューニング ~その実力に迫る~ / Practical Serverless Performance Tuning ~A Close Look at its Power~
seike460
PRO
2
190
C#および.NETに対する誤解をひも解く
ymd65536
0
310
20241004 モノタロウ式~ドメインモデリングとリアーキテクチャ
monotaro
PRO
1
350
コードレビューと私の過去と未来
jxmtst
0
290
複数プロダクトの技術改善・クラウド移行に向き合うチームのフレキシブルなペア・モブプログラミングの実践 / Flexible Pair Programming And Mob Programming
honyanya
0
240
個人開発で使ってるやつを紹介する回
yohfee
1
710
CSC509 Lecture 02
javiergs
PRO
0
170
Featured
See All Featured
The Brand Is Dead. Long Live the Brand.
mthomps
53
38k
Code Review Best Practice
trishagee
63
17k
Faster Mobile Websites
deanohume
304
30k
Designing Experiences People Love
moore
138
23k
Being A Developer After 40
akosma
84
590k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
240
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
Side Projects
sachag
452
42k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Adopting Sorbet at Scale
ufuk
73
9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
46
4.9k
Transcript
ワンライナーで FizzBuzz 2023/12/07 maimu
自己紹介 名前:maimu Xアカウント:maimux2x 所属:永和システムマネジメント エンジニア歴:4ヶ月 好きなRubyメソッド: Enumerable#map 好きなLinuxコマンド: tee
ワンライナーでFizzBuzz
なぜこのテーマなのか Linuxの勉強で学んだコマンドを使ってみたかった
ワンライナーとは? 1行で書かれたコマンドの組み合わせ
今回のお題
試作 seq 100 | awk '$1%15==0{print "FizzBuzz"}$1%5==0{print "Buzz"}$1%3==0{print "Fizz"}$1%15{print $1}'
コマンドについて seq : 連続した数字の列を出力・表示するコマンド awk : grepにプログラム機能をつけたようなもの(プログラミング言語) $1 : 読み込んだ行の1列目の文字列または数値
結果は・・・?
条件分岐を追加! 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; }'
今度はできた!
他のコマンドも試したい
ebanさんのツイートにまさにシェル芸という模範解答が https://twitter.com/eban/status/830272982303936512 seq 1 100|sed '5~5s/.*/Buzz/;3~3s/[^B]*/Fizz/' 模範解答を見つけてしまった・・・
参考にしつつ自分もやってみる seq 100 | sed -e '3~3s/.*/Fizz/' -e '5~5s/.*/Buzz/' -e
'15~15s/.*/FizzBuzz/'
コマンドについて sed : 指定したファイルをコマンドに従って処理する -e : sedで複数のコマンドを指定する際に使用する s : 指定されたパターンに基づいて置換する
~ : 処理対象の位置を指定するアドレス指定子
できた!
もう1個やってみる seq 100 | sed -e '15~15c\FizzBuzz' -e '3~3c\Fizz' -e
'5~5c\Buzz'
コマンドについて c : 指定した行をテキストに置き換える
できた!
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'
コマンドについて -e : 引数に記述されたRubyのコードを実行するためのオプション -n : 標準入力の内容を1行ずつ読み込む $_ : -nオプションで読み込んだ文字列が格納される変数
できた!
やってみた結果 • ワンライナーでFizzBuzzを4つ実行できた! ◦ 効率性は完全無視・・・ ◦ Rubyワンライナーは普通にコードを書いた方が分かりやすい・・・ • Linuxコマンドと少し仲良くなれた •
Rubyコマンドのオプションを初めて使った
今後の展望 • シェル・ワンライナー160本ノックをやり切りたい! • アイディアと手段を駆使したワンライナーを書いてみたい
参考文献 • man • 1日1問半年以内に習得 シェル・ワンライナー160本ノック