Posts tagged ニコ生
ついにというか何というか
歌ってみた用コミュの人数が、プログラ用コミュの人数を抜きましたwww
ついにメインとサブが逆転です。本当にありがとうございましたwww
最近歌枠ばっかやってるから当然っちゃ当然なんですけどね…www
まぁそれにしても、自分のプロフィール的に「歌」と「プログラム」という二面性が出ちゃってるわけで、いっそブログも分けてしまおうかとか考え中であります。
まぁ、気持ちとしてはどちらもメインなんで、どちらのコミュも今後ともどうぞよろしくお願いします☆
Perlgolfとか。
技術的な話題につき、興味ない人はヌルーしてね☆
最近よく視聴してるPerl放送の生主さんとこでGolf(ショートコーディング)なるものをやってたので、その場でリスナーとして勝手に参戦してみました。
お題:
引用元:(・3・)ぷぅログラミング
・ルール通ればなんでもおk。言語もなんでもおk。
・内容
入力:1以上の整数の数値
出力:入力された長さを1辺とする四角形で、外側は1、内側は0とする。・例
入力:3
出力:
111
101
111入力:5
出力:
11111
10001
10001
10001
11111
言語/バージョンはActivePerl 5.10.0で参戦。こういう変態的な事するにはやっぱりperl便利ねw
こんな感じになりました(51Bytes)。
$i=<>;print$_%$i<2?1x$i:(1,0 x($i-2),1),$/for 1..$i
さらにperl6対応にするとこんな感じに(48Bytes)。
$i=<>;say$_%$i<2??1x$i!!(1,0 x($i-2),1)for 1..$i
perl 5.10対応版の方で軽く説明すると、キモはprintの引数になっている3項演算子のこの部分:
$_%$i<2?1x$i:(1,0 x($i-2),1)
この部分がややこしいですが、見やすくなるように書き直すと
$_ % $i < 2 ? 1 x $i : (1, 0 x ($i - 2), 1)
ってことですね。
$_ は後置forの一時変数なので、
「1行目から(入力)行目まで処理を繰り返す際、Nを処理中の行数としたとき、N÷(入力)の余りが0または1(つまり「<2」)のときは1を(入力)個出力し、それ以外の場合は先頭が1、続いて0を(入力-2)個、最後に1を出力する」
という事になります。
「余りが0または1(つまり「<2」)」とは一体なんぞや?については、例を挙げて説明するとわかりやすいと思うのですが、
例えば(入力)が5のとき:
1(行目)÷5(入力)の余り・・・1
2(行目)÷5(入力)の余り・・・2
3(行目)÷5(入力)の余り・・・3
4(行目)÷5(入力)の余り・・・4
5(行目)÷5(入力)の余り・・・0
となるので、この1行目と5行目の処理をまとめた論理式になるわけですね!
というわけで
1(行目)÷5(入力)の余り・・・1なので「11111」を出力
2(行目)÷5(入力)の余り・・・2なので「10001」を出力
3(行目)÷5(入力)の余り・・・3なので「10001」を出力
4(行目)÷5(入力)の余り・・・4なので「10001」を出力
5(行目)÷5(入力)の余り・・・0なので「11111」を出力
となるわけです。
・・・良くこんな発想できたな自分w
いやぁ、楽しませてもらいました。
感謝感謝です!