LL Golf Hole 6 - 10進数を2進数に基数変換する
Posted feedbacks - Bash
pure bash。引数。2進数のみ。
bashのprintfだと%bが使えないようなので、8進数経由で。
1 2 3 4 5 6 | a=(000 001 010 011 0100 0101 110 111)
n=`printf '%o\n' $1`
while [ "$n" != '' ];do
echo -n ${a[${n:0:1}]}
n=${n:1}
done
|
楽をするならこんなのはどうでしょう。
e.g.
$ echo "obase=2; 255" | bc
11111111
# AIX 4.3.3.0, HP-UX B.11.00, Linux 2.4.2, SunOS 5.5.1で動作を確認。
どのシステムでも動くようにするなら、Bourne shellで愚直に。
e.g.
$ dec2bin() {
d=$1
t=''
[ $# -eq 0 ] && return 1
while [ $d -gt 0 ]; do
r=`expr $d % 2`
d=`expr $d / 2`
t="$r$t"
done
echo "${t:=0}"
return 0
} && dec2bin 255
# AIX 4.3.3.0, HP-UX B.11.00, Linux 2.4.2, SunOS 5.5.1で動作を確認。
なるほど。
で、POSIX Shell規格でしたらexprを呼ばずにいけるので、ちょっとだけ改造してみました。
1 2 3 4 5 | d=$1
while [ $d -gt 0 ];do
echo -n $(($d%2))
d=$(($d/2))
done
|
間違い、桁が逆でした。
1 2 3 4 5 6 | d=$1
while [ $d != 0 ];do
t=$(($d%2))$t
d=$(($d/2))
done
echo $t
|





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 ]