Skip to content

Instantly share code, notes, and snippets.

@maraigue
Created February 14, 2011 17:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maraigue/826238 to your computer and use it in GitHub Desktop.
Save maraigue/826238 to your computer and use it in GitHub Desktop.
サンタの家を出力するコードゴルフ
# サンタの家を出力するコードゴルフ(なるべく短くコードを書くことを競う)
# http://golf.shinh.org/p.rb?House+of+Santa+Claus
# 例えば、STDINから「7」と入力された場合、以下のような高さ7の家を出力する。
#(不可能な高さが入力されたときの挙動はどうでもよいっぽい。)
# /\
# / \
# /____\
# |\ /|
# | \/ |
# | /\ |
# |/__\|
#
# インデントとかコメントを削除すると215bytesになりました。
# def s v;" "*v;end;b=$<.read.to_i/3;puts((a=(0...b)).map{|x|s(b-x)+"/#{s 2*x}\\"},"/#{'__'*b}\\",a.map{|x|"|#{s x}\\#{s 2*(b-x-1)}/#{s x}|"},(0...(b-1)).map{|x|"|#{v=s(b-x-1)}/#{s 2*x}\\#{v}|"},"|/#{'_'*(2*b-2)}\\|")
# スペースを出力
def s v
" "*v
end
# bは居住部の高さの半分
b=$<.read.to_i/3
puts(
# 屋根(一番下を除く)
(a=(0...b)).map{|x|s(b-x)+"/#{s 2*x}\\"},
# 屋根(一番下)
"/#{'__'*b}\\",
# 建物(上半分)
a.map{|x|"|#{s x}\\#{s 2*(b-x-1)}/#{s x}|"},
# 建物(下半分、一番下を除く)
(0...(b-1)).map{|x|"|#{v=s(b-x-1)}/#{s 2*x}\\#{v}|"},
# 建物(一番下)
"|/#{'_'*(2*b-2)}\\|"
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment