Perl勉強日誌 - FizzBuzz
Perlを勉強し始めたので、
現状の知識でFizzBuzzってみます。
PerlでFizzBuzz
use 5.012; my @fizz = qw/Fizz/; my @buzz = qw/Buzz/; foreach (1..100) { say ("$fizz[$_%3]"."$buzz[$_%5]" || $_); }
実行結果
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz
その他の回答
こんな風に書けるらしい
print+(Fizz)[$_%3].(Buzz)[$_%5]||$_,$/for 1..100
プログラミング言語/Perl - プログラミングスレまとめ in VIP
まだまだ修行が足りん、、、
おまけ
def fb i (s="#{[:Fizz][i%3]}#{[:Buzz][i%5]}").empty? ? i.to_s : s end p (1..100).map{|i| fb i }
実行結果
["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz", "16", "17", "Fizz", "19", "Buzz", "Fizz", "22", "23", "Fizz", "Buzz", "26", "Fizz", "28", "29", "FizzBuzz", "31", "32", "Fizz", "34", "Buzz", "Fizz", "37", "38", "Fizz", "Buzz", "41", "Fizz", "43", "44", "FizzBuzz", "46", "47", "Fizz", "49", "Buzz", "Fizz", "52", "53", "Fizz", "Buzz", "56", "Fizz", "58", "59", "FizzBuzz", "61", "62", "Fizz", "64", "Buzz", "Fizz", "67", "68", "Fizz", "Buzz", "71", "Fizz", "73", "74", "FizzBuzz", "76", "77", "Fizz", "79", "Buzz", "Fizz", "82", "83", "Fizz", "Buzz", "86", "Fizz", "88", "89", "FizzBuzz", "91", "92", "Fizz", "94", "Buzz", "Fizz", "97", "98", "Fizz", "Buzz"]
Perl勉強日誌 - スマートマッチ
お久しぶりです。
しばらくブログ書いてませんでした。
(単純にさぼってました。。。orz)
諸事情ありまして、Perlを勉強し始めたので、
ログを残して行きたいと思います。
追記
スマートマッチは現在非推奨だそうです。
perl5180delta - perl v5.18.0 での変更点 - perldoc.jp
残念、、、、orz
(なんとなく、そんな気もしてましたがw)
今日のテーマ
リャマ本:15章
スマートマッチ
それ何?
Perlさんがスマート(賢く)にマッチしてくれる演算子。
らしいです。
つまり値の種類によって、いろいろ良い感じに比較してくれる、と。
スマートマッチ演算子は、Perl5.10.0で登場したそうですが、
問題があったらしく、Perl5.10.1でfixされたそうです。
その為、
use 5.010001; # use v5.10.1; の方が良いのか????
とするのが、良いそう。
スマートマッチ演算子
では実際に使ってみます。
my $hoge = "hello, world!!!"; say "matched regex" if $hoge ~~ /hello/; # ① say "matched string" if $hoge ~~ "hello, world!!!"; # ②
上記の
~~
これが「スマートマッチ演算子」です。
上記①の場合、
右辺が正規表現なので、正規表現で比較されています。
つまり、
$hoge =~ /hello/
と同じ事になるはず。
上記②の場合、
右辺が文字列なので、文字列として比較されています。
つまり、
$hoge eq "hello, world!!!"
と同じ事になるはず。
その他の比較
以下のページを見れば、どんなマッチが出来るか記載されています。
perlop - perldoc.perl.org