バイナリクロック
Posted feedbacks - Ruby
時刻を二進数相当の表現で出力する時計アプリケーションを書いてください。
20:18の場合,例えば以下の様な出力をするイメージです。
出力例:
■□■□□
□■□□■□
20:18の場合,例えば以下の様な出力をするイメージです。
出力例:
■□■□□
□■□□■□
see: Binary Clock Widget
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
|
ワンライナー。秒まで表示。0->"o",1->"."です。
1 | puts Time.now.to_a[0..2].map{|e| ("%06b"%e).tr("01",".o")}.reverse.join("\n")
|
0->".",1->"o"の間違いでした。□■で表示なら以下のコード。
1 2 | require "jcode"
puts Time.now.to_a[0..2].map{|e| ("%06b"%e).tr("01","□■")}.reverse.join("\n")
|



lunlumo #9282() [ Ruby ] Rating6/8=0.75
20:18の場合,例えば以下の様な出力をするイメージです。
出力例:
■□■□□
□■□□■□
see: Binary Clock Widget
Rating6/8=0.75-0+
[ reply ]