Yukicoder No.478 一般門松列列
solution
門松列列${}_{n,k}$とは、長さ$n$の門松列列を作って前から$k$文字を適切に破壊すれば必ず作れる。 結果の列に辞書順最小などの制約はないので適当にする。 $O(N)$。
implementation
$54$byte perl。
<>!~$";print"3 "x$';print$_+$_%2*($_+1),$"for 1..$`-$'
$50$byte sh $\to$ ruby。
read n k;ruby -e"p *([1]*$k+[1,3,2,4]*$n)[0...$n]"
$46$byte perl。
print<>!~$",substr"1 "x$'."1 3 2 4 "x$`,0,$`*2
鑑賞
tailsさんの$45$byte perl: http://yukicoder.me/submissions/146584
print$,=$/=$",((1)x<>,(1,3,2,4)x6e3)[0..<>-1]
$"
は既定値が空白$,
は出力区切りprint 1,3,2,4
をprint 1,$",3,$",2,$",4
つまり空白区切りにするprint
の引数の位置で代入してるのは括弧をprint
に食われるのを防ぐため
$/
は入力区切り- 既定値は改行
\n
だが、ここに空白を入れることで<>
がいい感じになる
- 既定値は改行
後は上のとだいたい同じ