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 - Scheme

標準入力から数値・基数の順で。 R5RS だと基数は 2, 8, 10, 16、 Gauche だと 2〜36 です。

1
(print(number->string(read)(read)))

コマンドライン入力でオプション付きにしました。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env gosh
(define output
  (lambda (num base)
    (print (number->string (x->number num)(x->number base)))))

(define (main args)
  (let ((n (length args)))
    (cond
      ((= n 1)
         (display (car args))
         (print " number [base-number(2~36)]"))
      ((= n 2)
        (cond 
          ((< (x->number (cadr args)) 0) (print "number error(-)"))
          (else (output (cadr args) 2))))      
      ((or (< (x->number (caddr args)) 2) (> (x->number (caddr args)) 36))
         (print "base-number error(2~36)"))
      (else (output (cadr args) (caddr args))))))

stdin -> stdout
1
(format #t"~b"(read))

クラス使って
やりなおし
してみました。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/usr/bin/env gosh

(define-class <num> ()
   ((n :init-value 0 :init-keyword :n :accessor n-num)
    (b :init-value 2 :init-keyword :b :accessor b-num)))

(define-method write-object ((n <num>) port)
  (print (number->string (n-num n) (b-num n))))

(define (main args)
  (display "input number > ")(flush)
  (print (make <num> :n (x->number(read)))))

Scheme だと引き数の評価順序が規定されていないのでこっちの方が行儀がいいかな。入力は基数・数値の順に。

1
(let1 n(read)(print(number->string(read)n)))

Index

Feed

Other

Link

Pathtraq

loading...