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
73
one_liner_fizzbuzz
maimu
December 07, 2023
Tweet
Share
More Decks by maimu
See All by maimu
before_rails_girls_after_rails_girls
maimux2x
0
380
my_study_of_ruby_method
maimux2x
1
88
about_rails_girls_document_translation
maimux2x
0
5.7k
best_for_fbc
maimux2x
0
39
homemade_service_release_front_and_back
maimux2x
0
300
enjoy_conferences
maimux2x
0
5.6k
5minutes_learning_OAuth
maimux2x
0
250
RailsGirlsGatheringJapan2022
maimux2x
0
450
MyFirstDBDefinition
maimux2x
0
450
Other Decks in Programming
See All in Programming
CREってこういうこと? 体験入社 - 提案資料 - / what-is-cre-trial-employment
shinden
1
510
Domain-Driven Transformation
hschwentner
2
1.5k
Fast JSX: Don't clone props object #28768
yossydev
1
160
Ruby Pattern Matching
bkuhlmann
0
930
Go製Webアプリケーションのエラーとの向き合い方大全、あるいはやっぱりスタックトレース欲しいやん / Kyoto.go #50
utgwkk
6
1.7k
MetricKitで予期せぬ終了を検知する話 / Detect unexpected termination with MetricKit
nekowen
1
200
Amazon SQSコンシューマー疎結合への旅 - 出張! #DevelopersIO IT技術ブログの中の人が語る勉強会 #3
quiver
0
300
Hanami and htmx
bkuhlmann
0
220
Node.js v22 で変わること
yosuke_furukawa
PRO
11
3.9k
AppRouter Panel Talk
yosuke_furukawa
PRO
1
450
Milestoner
bkuhlmann
1
410
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
380
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
30
6.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
188
16k
The Language of Interfaces
destraynor
151
23k
Visualization
eitanlees
137
14k
The Cost Of JavaScript in 2023
addyosmani
21
3.9k
Designing the Hi-DPI Web
ddemaree
276
33k
Into the Great Unknown - MozCon
thekraken
14
1k
Imperfection Machines: The Place of Print at Facebook
scottboms
261
12k
What's new in Ruby 2.0
geeforr
337
31k
Building Applications with DynamoDB
mza
88
5.6k
Documentation Writing (for coders)
carmenintech
61
4k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
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本ノック