challenge バイナリクロック

 時刻を二進数相当の表現で出力する時計アプリケーションを書いてください。
 20:18の場合,例えば以下の様な出力をするイメージです。

出力例:
 ■□■□□
□■□□■□
 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
#! c:\ruby\bin\ruby.exe -Ks

String.class_eval do |string|
    def words
        self.split(//)
    end
    def fix_width(width, padding)
        (self.words.size > width) ? self : (padding * (width - self.words.size) + self)
    end
end

Fixnum.class_eval do |fixnum|
    alias :to_s_orig :to_s
    def to_s(base, width)
        binary = self.to_s_orig(base).fix_width(width, "0")
    end
end

class BinaryClock
    attr_accessor :now
    def initialize
        self.now = Time.now
    end
    def print
        output(self.now.hour.to_s(2, 5))
        output(self.now.min.to_s(2, 6))
    end
private
    def output(binary)
        puts binary.words.map { |f| f == "0" ? "□" : "■" }.join.fix_width(6, " ")
    end
end

BinaryClock.new.print

Posted feedbacks - Scheme

0->o, 1->Oです.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
(use srfi-19)
(define (binary-clock)
  (define (integer->binary-string int)
    (regexp-replace-all
     #/1/
     (regexp-replace-all #/0/ (number->string int 2) "o")
     "O"))
  (let1 cur (time-utc->date (current-time))
        (format #t
                "\n ~2,'0d:~2,'0d\n~6,,,'o@a\n~6,,,'o@a"
                (date-hour cur)
                (date-minute cur)
                (integer->binary-string (date-hour cur))
                (integer->binary-string (date-minute cur)))))
(binary-clock)

1
2
3
4
5
6
7
(use srfi-19)

(print (regexp-replace-all*
        (let1 d (current-date)
          (format " ~5,'0b~%~6,'0b" (ref d 'hour) (ref d 'minute)))
        #/1/ "■"
        #/0/ "□"))

Index

Feed

Other

Link

Pathtraq

loading...