LL Golf Hole 6 - 10進数を2進数に基数変換する
Posted feedbacks - sed
無駄にsedで実装してみます。標準入力。2進のみ。
かなりダサいので誰か短くしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #!/bin/sed -f
s/^/@/
:a
/@0\?$/{s///;b}
/[02468]$/s/.*@/0&/
/[13579]$/s/.*@/1&/
s/@/&#/
:b
/#1$/{
s///
ba
}
/#10/{s//5#/;bb}
/#11/{s//5#1/;bb}
/#12/{s//6#/;bb}
/#13/{s//6#1/;bb}
/#14/{s//7#/;bb}
/#15/{s//7#1/;bb}
/#16/{s//8#/;bb}
/#17/{s//8#1/;bb}
/#18/{s//9#/;bb}
/#19/{s//9#1/;bb}
/#[3579]/{
h
s/.*#\(.\)*/\1/
y/3579/1234/
G
/#.$/{s/\(.\)\n\(.*\)#./\2\1/;ba}
s/\(.\)\n\(.*\)#./\2\1#1/
bb
}
/#[02468]/{
h
s/.*#\(.\).*/\1/
y/02468/01234/
G
s/\(.\)\n\(.*\)#./\2\1#/
}
/#./bb
s/#//
ba
|
外部コマンドを使って楽するとこんな感じ。ほとんど単なるsh。
標準入力に「10」とか食わせると2進変換、「10 8」のように空白で区切って基数を付けるとその基数で変換。
1 2 | /\(.*\) \+\(.*\)/{s//echo "obase=\2;\1"|bc/e;b}
s/.*/echo "obase=2;&"|bc/e
|
こっちのほうが短いですね。
1 2 3 | s/\(.*\) \+\(.*\)/echo "obase=\2;\1"|bc/e
t
s/.*/echo "obase=2;&"|bc/e
|



takano32
#7211()
[
Ruby
]
Rating0/6=0.00
与えられた10進数の整数を2進数に変換してください。ただし、与えられる整数は0以上とします。
与える整数についてはリテラルで与える、標準入力で与える、引数で与えるなどは自由とします。
余力のあるものはこのプログラムを短くしてみたり、さまざまな基数への変換に対応させてみてください。
※LL Future実行委員の高野光弘です。この出題は LL Future公式の出題であり、優れたものについてはLL Golfのセッションでご紹介させていただくかもしれません。ご理解の上、ご投稿ください。また、LL Futureのチケットは現在も発売中です。よろしければ、メインイベントの方にもぜひご参加ください。
see: Integer - Rubyリファレンスマニュアル
Rating0/6=0.00-0+
[ reply ]