Rubyで円を描くパズル
問題
半径が与えられると、文字を使って円を描く関数print_circleを作れ。例えば、以下はprint_circle(10)の出力例。(正確に一致する必要はありません)
● ●●●●●●●●● ●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●● ●●●●●●●●●●●●● ●●●●●●●●● ●
解答
特にひねりはなく、円の定義から作りました。
def print_circle(r) (-r..r).to_a.each do |x| (-r..r).to_a.each do |y| if x ** 2 + y ** 2 <= r ** 2 print '●' else print ' ' end end print "\n" end end print_circle(10)
無意味に複雑にした版も作ってみました。
class TrueClass def to_mark '●' end end class FalseClass def to_mark ' ' end end def print_circle(r) (-r..r).to_a.each do |x| (-r..r).to_a.each do |y| print '' + (x ** 2 + y ** 2 <= r ** 2).to_mark end print "\n" end end print_circle(10)
今回のエントリは結城浩の『Perlクイズ』≪パズル≫ 2000-03-13 Puzzle.0006をベースにしています。