7.24. Разбиение месяца на недели
7.24. Разбиение месяца на недели
Представьте, что нужно разбить месяц на недели, например чтобы напечатать календарь. Эту задачу решает приведенный ниже код. Возвращаемый массив состоит из подмассивов, по семь элементов в каждом. При этом первому элементу каждого внутреннего массива соответствует воскресенье. Начальные элементы для первой недели и конечные для второй могут быть равны nil.
def calendar(month,year)
days = month_days(month,year)
t = Time.mktime(year,month,1)
first = t.wday
list = *1..days
weeks = [[]]
week1 = 7 - first
week1.times { weeks[0] << list.shift }
nweeks = list.size/7 + 1
nweeks.times do |i|
weeks[i+1] ||= []
7.times do
break if list.empty?
weeks[i+1] << list.shift
end
end
pad_first = 7-weeks[0].size
pad_first.times { weeks[0].unshift(nil) }
pad_last = 7-weeks[0].size
pad_last.times { weeks[-1].unshift(nil) }
weeks
end
arr = calendar(12,2008) # [[nil, 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, nil, nil, nil]]
Чтобы было понятнее, распечатаем этот массив массивов:
def print_calendar(month,year)
weeks = calendar(month,year)
weeks.each do |wk|
wk.each do |d|
item = d.nil? ? " "*4 : " %2d " % d
print item
end
puts
end
puts
end
# Выводится:
# 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
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Урок № 93. Закрытие месяца
Урок № 93. Закрытие месяца Многие отчеты в программе можно настроить и получить сразу после формирования соответствующих бухгалтерских проводок. Это, например, ведомости и карточки по счетам 50, 51, 60, 62, 76 и др. Однако есть целый ряд отчетов, для получения которых необходимо
7.3. Определение дня недели
7.3. Определение дня недели Есть несколько способов определить день недели. Во-первых, метод экземпляра to_a возвращает массив, содержащий всю информацию о моменте времени. Можно обратиться к его седьмому элементу; это число от 0 до 6, причем 0 соответствует воскресенью, а 6 —
7.5. Вычисление n-ого дня недели в месяце
7.5. Вычисление n-ого дня недели в месяце Иногда, зная год и месяц, хочется вычислить дату, скажем, третьего понедельника или второго вторника в этом месяце. Такую задачу решает код в листинге 7.1.Чтобы найти n-ое вхождение данного дня недели, мы передаем n в качестве первого
7.11. Определение недели в году
7.11. Определение недели в году Что такое «порядковый номер недели», не вполне ясно. Разные компании, коалиции, правительственные учреждения и органы стандартизации по-разному определяют это понятие. Путаница связана с тем, что год может начинаться с любого дня недели. Все
Литералы месяца
Литералы месяца В табл. 10.4 показаны литералы месяцев.Таблица 10.4. Литералы месяцев и правильное английское написание Число Аббревиатура (не чувствительно к регистру) Полное название месяца (не чувствительно к
ВОПРОС НЕДЕЛИ: Каким вы видите компьютер будущего?
ВОПРОС НЕДЕЛИ: Каким вы видите компьютер будущего? xarkonnenдизайнер в рекламном агентствеКак невидимую и неощутимую часть информационной среды. Мозговой нанобиотехнологический имплантат, взаимодействующий с прочими имплантатами и внешними устройствами и датчиками.
ВОПРОС НЕДЕЛИ К каким последствиям может привести …
ВОПРОС НЕДЕЛИ К каким последствиям может привести … …распространение на компьютерный бизнес борьбы с «серым» импортом, подобно той, что ведется сейчас на рынке мобильных телефонов?Артем Емельяновменеджер по маркетингу ISM ComputersК самым неприятным для простого
Кафедра Ваннаха: Удивительные приключения недели
Кафедра Ваннаха: Удивительные приключения недели Ну, то, что Россия в прошлом веке перешла на григорианский календарь, знают многие. Произошло это в соответствии с «Декретом о введении в Российской республике западноевропейского календаря», принятом 24 января 1918 г.
Григорий Рудницкий, Андрей Крупин Приручение Коалы или два месяца с Ubuntu 9.10
Григорий Рудницкий, Андрей Крупин Приручение Коалы или два месяца с Ubuntu 9.10 За развитием операционной системы Ubuntu я наблюдаю вот уже несколько лет. Особенно заметно интерес возрастает в апреле и октябре месяцах, когда традиционно выпускаются финальные релизы новых
+Две недели: Хакер возвращается
+Две недели: Хакер возвращается Двумя неделями позднее хакер вновь всплыл в сети TransWorld. На этот раз хакер переписал на их сервер программу, которая при исполнении могла пересылать по почте файл с паролями на другую систему в Интернете. Вначале Натан не мог понять, как
+Три недели: Усиление защиты
+Три недели: Усиление защиты Взломы продолжались. Время от времени хакер (или хакеры!) запросто заходил из Интернета. Каждый раз, когда Натан затыкал одну дыру в защите, хакер быстро находил другую. К этому времени сотрудники TransWorld работали в режиме реагирования. Они
Ученые из MIT предсказали шпионский скандал с PRISM еще 3 месяца назад Михаил Ваннах
Ученые из MIT предсказали шпионский скандал с PRISM еще 3 месяца назад Михаил Ваннах Опубликовано 17 июня 2013 Есть в городе Париже целое семейство улиц, названных именами ученых – Бюфона, Кювье, Монжа, Сент-Илера… Окрестил их так император Франции