challenge LL Golf Hole 6 - 10進数を2進数に基数変換する

与えられた10進数の整数を2進数に変換してください。ただし、与えられる整数は0以上とします。

与える整数についてはリテラルで与える、標準入力で与える、引数で与えるなどは自由とします。

余力のあるものはこのプログラムを短くしてみたり、さまざまな基数への変換に対応させてみてください。

※LL Future実行委員の高野光弘です。この出題は LL Future公式の出題であり、優れたものについてはLL Golfのセッションでご紹介させていただくかもしれません。ご理解の上、ご投稿ください。また、LL Futureのチケットは現在も発売中です。よろしければ、メインイベントの方にもぜひご参加ください。

1
2
# 標準入力から整数を受け取る
ruby -e 'puts gets.to_i.to_s(2)'

Posted feedbacks - OCaml

割り算を使わずに作ってみました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
let _ =
    let rec loop input result sr =
        let i = input lsr sr in
        if i = 0 then
            result
        else begin
            let result = (string_of_int (i land 1)) ^ result in
            loop input result (sr + 1);
        end;
    in

    let input = int_of_string (Sys.argv.(1)) in
    if input = 0 then
        print_endline "0"
    else
        print_endline (loop input "" 0);
;;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
let rec f acc i =
  let a,i = ((if i land 1 = 1 then "1" else "0") :: acc), (i lsr 1) in
  if i = 0 then String.concat "" a else f a i
in f [] (int_of_string Sys.argv.(1));;


(* 先にstringを作っておいたほうが速くなります。*)
let bin_of_int i =
  let res = String.create (Sys.word_size-1) in
  let rec loop pos i =
    res.[pos] <- if i land 1 = 1 then '1' else '0';
    let i = i lsr 1 in 
    if 0 = i then String.sub res pos (Sys.word_size - 1 - pos)
    else loop (pos - 1) i
  in loop (Sys.word_size-2) i;;

Index

Feed

Other

Link

Pathtraq

loading...