mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-23 07:29:02 -08:00
Merge pull request #663 from arjieng/calendar-ruby
Added ruby version calendar
This commit is contained in:
113
21_Calendar/ruby/calendar.rb
Normal file
113
21_Calendar/ruby/calendar.rb
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
class Calendar
|
||||||
|
def parse_input
|
||||||
|
days_mapping = {
|
||||||
|
"sunday": 0,
|
||||||
|
"monday": -1,
|
||||||
|
"tuesday": -2,
|
||||||
|
"wednesday": -3,
|
||||||
|
"thursday": -4,
|
||||||
|
"friday": -5,
|
||||||
|
"saturday": -6,
|
||||||
|
}
|
||||||
|
|
||||||
|
day = 0
|
||||||
|
leap_day = false
|
||||||
|
correct_day_input = false
|
||||||
|
|
||||||
|
while !correct_day_input
|
||||||
|
print "INSERT THE STARTING DAY OF THE WEEK OF THE YEAR: "
|
||||||
|
weekday = gets.chomp!
|
||||||
|
|
||||||
|
days_mapping.each do |k, v|
|
||||||
|
if k.to_s == weekday.downcase.to_s
|
||||||
|
day = v
|
||||||
|
correct_day_input = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
while true
|
||||||
|
print "IS IT A LEAP YEAR?: "
|
||||||
|
leap = gets.chomp!
|
||||||
|
if "y" == leap.downcase.to_s
|
||||||
|
leap_day = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
if "n" == leap.downcase.to_s
|
||||||
|
leap_day = false
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return day, leap_day
|
||||||
|
end
|
||||||
|
|
||||||
|
def start(weekday, leap_year)
|
||||||
|
months_days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
||||||
|
days = "S M T W T F S\n"
|
||||||
|
sep = "*" * 59
|
||||||
|
years_day = 365
|
||||||
|
d = weekday
|
||||||
|
|
||||||
|
if leap_year
|
||||||
|
months_days[2] = 29
|
||||||
|
years_day = 366
|
||||||
|
end
|
||||||
|
|
||||||
|
months_names = [
|
||||||
|
" JANUARY ",
|
||||||
|
" FEBRUARY",
|
||||||
|
" MARCH ",
|
||||||
|
" APRIL ",
|
||||||
|
" MAY ",
|
||||||
|
" JUNE ",
|
||||||
|
" JULY ",
|
||||||
|
" AUGUST ",
|
||||||
|
"SEPTEMBER",
|
||||||
|
" OCTOBER ",
|
||||||
|
" NOVEMBER",
|
||||||
|
" DECEMBER",
|
||||||
|
]
|
||||||
|
|
||||||
|
days_count = 0
|
||||||
|
|
||||||
|
for n in (1..12) do
|
||||||
|
days_count += months_days[n - 1]
|
||||||
|
print "** #{days_count} ****************** #{months_names[n - 1]} ****************** #{years_day - days_count} **\n"
|
||||||
|
print days
|
||||||
|
print sep
|
||||||
|
for nnn in (1..6) do
|
||||||
|
print "\n"
|
||||||
|
for g in (1..7) do
|
||||||
|
d += 1
|
||||||
|
d2 = d - days_count
|
||||||
|
|
||||||
|
break if d2 > months_days[n]
|
||||||
|
|
||||||
|
if d2 <= 0
|
||||||
|
print " "
|
||||||
|
elsif d2 < 10
|
||||||
|
print " #{d2} "
|
||||||
|
else
|
||||||
|
print "#{d2} "
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
print "\n\n"
|
||||||
|
|
||||||
|
break if d2 >= months_days[n]
|
||||||
|
end
|
||||||
|
d -= g if d2 > months_days[n]
|
||||||
|
print "\n"
|
||||||
|
end
|
||||||
|
print "\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if __FILE__ == $0
|
||||||
|
calendar = Calendar.new
|
||||||
|
input = calendar.parse_input
|
||||||
|
calendar.start(input[0], input[1])
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user