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
94
one_liner_fizzbuzz
maimu
December 07, 2023
Tweet
Share
More Decks by maimu
See All by maimu
ruby-flip-flop
maimux2x
0
85
before_rails_girls_after_rails_girls
maimux2x
0
490
my_study_of_ruby_method
maimux2x
1
110
about_rails_girls_document_translation
maimux2x
0
5.8k
best_for_fbc
maimux2x
0
41
homemade_service_release_front_and_back
maimux2x
0
310
enjoy_conferences
maimux2x
0
5.7k
5minutes_learning_OAuth
maimux2x
0
260
RailsGirlsGatheringJapan2022
maimux2x
0
470
Other Decks in Programming
See All in Programming
I/O Extended Android in Korea 2024 ~ Whats new in Android development tools
pluu
0
250
[After Kotlin Fest 2024 LT Night @ Sansan] もっともっとKotlinを好きになる!K2 Compiler Pluginで遊んでみよう!
kitakkun
2
260
20240706_CDKConf
takuyay0ne
0
1.2k
最古の関数型言語「Lisp」ことはじめ / lisp_in_kamiyama
uhooi
1
190
DMMプラットフォームにおけるTiDBの導入から運用まで
pospome
7
3k
生成AIをkintoneに連携してみた
hideg
0
230
Play Billing Library 7.0.0 変更点まとめ@potatotips#88
kako351
0
160
Trial
cairolibrary720
1
130
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
81k
【Go言語】golangci-lintの使い方
tomo1227
0
280
Ruby メモリ管理 プログラミング
megmogmog1965
0
130
ピグパーティにおけるMongoDB CommunityバージョンからAtlasへの移行事例
10969hotaka
0
130
Featured
See All Featured
Designing for humans not robots
tammielis
247
25k
Designing the Hi-DPI Web
ddemaree
276
34k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
19k
Done Done
chrislema
179
15k
How STYLIGHT went responsive
nonsquared
93
5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
26
2.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
42
2.7k
A Philosophy of Restraint
colly
200
16k
Into the Great Unknown - MozCon
thekraken
20
1.3k
Being A Developer After 40
akosma
72
580k
Gamification - CAS2011
davidbonilla
78
4.9k
Navigating Team Friction
lara
181
13k
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本ノック