• 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

今日、11月11日はポッキー&プリッツの日!!

じゃなくて

バイナリデーですね!!!!

(参照: スラッシュドット・ジャパン|Happy Binary Day!

バイナリデーにちなんでバイナリ時計をRuby書いてみました。

ネタでチャチャチャと書いたので、超適当です。 たぶん、できてます。

左からHH:MM:SSです。

   1  #/usr/bin/env ruby
   2  
   3  require 'curses'
   4  
   5  class BinaryClock
   6  
   7    def initialize
   8      @clock = {}
   9      @clock[:hour] = Array.new(2)
  10      @clock[:min] = Array.new(2) 
  11      @clock[:sec] = Array.new(2)
  12    end
  13  
  14    def run
  15      curses_screen = Curses.init_screen
  16      
  17      loop do
  18        Curses.clear
  19        get_time
  20        curses_screen.addstr(bin_clock_str)
  21        Curses.refresh
  22        sleep(1)
  23      end
  24  
  25    end
  26  
  27    private
  28    def get_time
  29      time = Time.now
  30      hour = split_integer(time.hour, 2)
  31      min = split_integer(time.min, 2)    
  32      sec = split_integer(time.sec, 2)
  33  
  34      0.upto(1) do |i|
  35        @clock[:hour][i] = to_bin_array(hour[i])
  36        @clock[:min][i] = to_bin_array(min[i])
  37        @clock[:sec][i] = to_bin_array(sec[i])
  38      end
  39  
  40    end
  41  
  42    def split_integer(n, k=0)
  43      int_array = n.to_s.split(//).map{|i| i.to_i}.reverse
  44      int_array_size = int_array.size
  45      int_array += Array.new(k - int_array_size){0} if int_array_size < k
  46      return int_array
  47    end
  48  
  49    def to_bin_array(n)
  50      binary = []
  51  
  52      3.downto(0) do |i|
  53        if n >= 2**i
  54          binary[i] = '*'
  55          n -= 2**i
  56        else 
  57          binary[i] = '-'
  58        end
  59      end
  60  
  61      return binary
  62    end
  63  
  64    def bin_clock_str
  65      str = ""
  66  
  67      3.downto(0) do |i|
  68        str << "#{@clock[:hour][1][i]}\t" + 
  69               "#{@clock[:hour][0][i]}\t" + 
  70               "#{@clock[:min][1][i]}\t" +
  71               "#{@clock[:min][0][i]}\t" + 
  72               "#{@clock[:sec][1][i]}\t" +
  73               "#{@clock[:sec][0][i]}\n"
  74      end
  75  
  76      return str
  77    end
  78  
  79  end
  80  
  81  bin_clock = BinaryClock.new
  82  bin_clock.run

追記: 2008/11/11 17:30

今気づいたら、URLが http://blog.s21g.com/articles/1024 でした。 バイナリ的にきれいな数字ですね!

追記: 2008/11/26 00:25

Githubにおいてみました。

posted by Png y_tsuda on Tue 11 Nov 2008 at 17:07
Contents
バイナリ時計
Comments
Aleksey: The uname check is only due to a somewhat slopp... '11-2
Yu Tsuda: あぁ、そうですね、、syncすると戻ってしまいますね・・・。 ご指摘ありがとうございます!! '09-7
ursm: /usr/portage 以下のファイルは更新のたび元に戻ってしまうので、/etc/porta... '09-7
Yu Tsuda: 見た目だけでも、わざわざGentooをこういうリストに入れてるのがすごいなぁと思ったりしたので... '09-3
Leonard Chin (レオ): ただし、VirtualBoxで「Gentoo」などを選択しても、別にどのOSを入れても大丈夫だ... '09-3
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ