얼마 전 KLDP에 새로 올라온 코드 골프 문제를 소개하는 글이 올라왔었습니다. 저는 쭉 C 언어 하나만 사용해왔는데, 이런 장난감 문제들은 C로 풀려고 하면 얼마나 귀찮은지... 그런 핑계를 대면서 풀어볼 생각도 하지 않았었어요.
이번 다음 DevDay 참석을 위해 루비를 급열공했었는데. 루비라는 언어가 얼마나 이쁘고 착하던지 쏙 반해버렸거든요. 그래서 루비로 한 번 풀어보기로 결심!
시간을 입력 받아서 출력으로 아날로그 시계를 표시하는 문제였습니다. (윗 링크 참고)
아날로그 시계를 표시할 방법을 머리 싸매고 고민하다가 그냥 포기하고, 단순무식하게 리스트에 좌표값을 하나씩 때려 넣어서 루프를 돌려서 출력하도록 했습니다. 좀 더 똑똑하게 출력하는 방법이나, 이쁘지 않은 루프나 if 문 대신 좀 더 루비스러운 방법으로 코딩하는 방법을 알고 계시는 분은 좀 알려주세요. (굽신굽신)
예외처리도 하나도 없고, 코드도 엉망이고, 게다가 코드골프 문제는 코드를 최소한으로 줄이는게 목표인데 저는 500바이트까지 줄여보다가 그냥 포기하고 가독성을 위해서 코드를 더 늘려버리는 만행까지 저질렀습니다. ^^;;
좀 시간이 지나고 머리 속이 리셋되면 다시 풀어봐야겠어요.
이번 다음 DevDay 참석을 위해 루비를 급열공했었는데. 루비라는 언어가 얼마나 이쁘고 착하던지 쏙 반해버렸거든요. 그래서 루비로 한 번 풀어보기로 결심!
시간을 입력 받아서 출력으로 아날로그 시계를 표시하는 문제였습니다. (윗 링크 참고)
clock = [[1, 4, 12, 0],
[2, 3, 11, 55],
[2, 5, 1, 5],
[3, 2, 10, 50],
[3, 6, 2, 10],
[4, 1, 9, 45],
[4, 7, 3, 15],
[5, 2, 8, 40],
[5, 6, 4, 20],
[6, 3, 7, 35],
[6, 5, 5, 25],
[7, 4, 6, 30]]
hour, min = gets.strip.split(':').map { | i | i.sub(/^0/, '').to_i }
if hour > 12
hour -= 12
end
if min % 5
min = min - (min % 5)
end
puts "#{hour}:#{min}"
for i in (1..7)
out = " "
clock.each do | y, x, h, m |
if i == y
if hour == h and min == m
out[x-1] = 'x'
elsif hour == h
out[x-1] = 'h'
elsif min == m
out[x-1] = 'm'
else
out[x-1] = 'o'
end
end
end
puts out
end
아날로그 시계를 표시할 방법을 머리 싸매고 고민하다가 그냥 포기하고, 단순무식하게 리스트에 좌표값을 하나씩 때려 넣어서 루프를 돌려서 출력하도록 했습니다. 좀 더 똑똑하게 출력하는 방법이나, 이쁘지 않은 루프나 if 문 대신 좀 더 루비스러운 방법으로 코딩하는 방법을 알고 계시는 분은 좀 알려주세요. (굽신굽신)
예외처리도 하나도 없고, 코드도 엉망이고, 게다가 코드골프 문제는 코드를 최소한으로 줄이는게 목표인데 저는 500바이트까지 줄여보다가 그냥 포기하고 가독성을 위해서 코드를 더 늘려버리는 만행까지 저질렀습니다. ^^;;
좀 시간이 지나고 머리 속이 리셋되면 다시 풀어봐야겠어요.


덧글
고인현 2008/10/14 17:52 # 삭제 답글
php 로 191바이트 했는데..1등이 157바이트네요...ㅡ.ㅡ; 어찌 해야할지..
지아 2008/10/14 17:56 #
오오... 가입하시고 파일 올리시면 될 듯 싶은데..191바이트면 1등이네요... + _ +