tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

るびまゴルフになぜか Perl で参戦してみた

Rubyist Magazineるびまゴルフのお題を Perl でやってみました。

# Ruby だとオイラのウデではアンダーパーも厳しいからね。。。

お題はこんな感じ。
Rubyist Magazine - るびまゴルフ 【第 6 回】

seq という Unix コマンドがあります。このコマンドを使うと、数値を2つ引数にして、その間にある数を出力することができます。例えば 3 と 5 を引数として実行すると

% seq 3 5
3
4
5

というような実行結果になります。

今回はこのコマンドを実装してみて下さい。入力はコンマで区切られて標準入力から与えられるものとします。例えば

3,5

という入力に対して

3
4
5

と出力するようにして下さい。例えば

a,b=gets.split(',').map{|v|v.to_i}
a.upto(b){|i|puts i}

というようなコードと同じ出力が得られるようにして下さい。パーは 50Bytes とします。

と、言うわけでやってみました。ただし Perl で。

最初に1秒で思いついたやつはこんな感じ。

($b,$e)=split(/,/,<>);print"$_\n"for($b..$e)

45B ですね。一応アンダーパー。say が使えるともうちょい楽なんだけどねぇ。

で、たまたま今読んでる、マスタリングPerlで、「正規表現のgオプションをリストコンテキストで評価すると、マッチした文字が配列に入る」ことを知り、それを使ってみる。

$_=<>;($b,$e)=/\d+/g;print"$_\n"for($b..$e)

44B。相変わらずのぎりぎりアンダーパー。
Perl だとこんなもんですかね?

ARGV でいいなら結構短いです。(35B)。コード的にも結構普通な感じ。

print"$_\n"for($ARGV[0]..$ARGV[1])

Ruby の答えは次回見られるから、Perl の凄腕も誰か参戦してくれないかなぁ。。。

マスタリングPerl