Довжина двійкового коду тексту, набраного на комп'ютері щ використанням кодування Юнікод (кожний символ кодується 16 бітами), – 4Кб. Визначте кількість символів у тексті. Для розв'язування задачі складіть електронну таблицю, обчислення виконайте за до формул.
===== PascalABC.NET =====
procedure DateNum(s1: string; var s2: string);
begin
s1 := s1.MatchValue('\d{1,2}\s\w{3,}\s\d{1,4}\sгода');
if s1.Length > 0 then
begin
var aw := s1.ToWords;
s2 := aw[0] + '.';
var m := Arr('января', 'февраля', 'марта', 'апреля',
'мая', 'июня', 'июля', 'августа', 'сентября',
'октября', 'ноября', 'декабря');
var i := m.FindIndex(w -> w = aw[1]);
if i >= 0 then
s2 += (i + 1).ToString + '.' + aw[2]
else s2 := ''
end
else
s2 := ''
end;
begin
var s1 := 'Сегодня 12 декабря 2019 года, четверг';
var s2: string;
DateNum(s1, s2);
if s2.Length > 0 then
Println(s2)
else
Println('Дата записана некорректно')
end.
Объяснение:Дней недели всего 7, и их номера 0, 1, 2, ..., 6. А это значит, что для определения дня недели, с которого начинается K-й день года, достаточно рассмотреть остатки от деления K на 7. Действидельно, если остаток 1, то это – понедельник (дни 1, 8, 15, ...); остаток 2 – вторник (дни 2, 9, 16, ...), ...; остаток 0 – воскресенье (дни 7, 21, 35, ...).
Таким образом, если год начинается с понедельника (1 января), то достаточно взять K mod 7. А если 1 января – вторник? Тогда очевидно, чтобы получить остаток 2 (номер вторника в задаче), нужно до числа K добавить 1, а потом делить на 7: (K+1) mod 7 – первый день года даст 2-й день недели (вторник). Далее, если 1 января – среда, то вычисляем (K+2) mod 7 – первый день года даст 3-й день недели (3 – номер среды). И так далее, если на 1 января приходится N-й день недели (0, 1, 2, ..., 6), то вычисляем (K+N-1) mod 7 – в таком случае при K=1 получим остаток N ответ день недели первый день под номером N