Ах, чоловіче, цей термін придатності не пише місяці листами! Я не можу сказати, чи закінчується це 10 березня чи 3 жовтня ... Зачекайте, ні, неважливо, рік говорить 2012. (алей-ой, напіввжита цегла сиру в смітник може подобатися профі)
Тож припустимо на мить, що ви занадто зайняті, щоб спробувати розібратися, коли термін дії цієї баночки маринари закінчується. Ви просто хочете версію Cliff Notes: наскільки ймовірно, що вона прострочена? Давайте напишемо якийсь код!
Вам відомо, що виробники друкують дату як упорядковану трійку цілих чисел у одному з трьох форматів:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
І ви знаєте, що деякі дати можна інтерпретувати лише одним або двома способами, а не всі три: 55 років 55-11-5
має бути роком, це означає, що ця конкретна скринька Twinkies закінчилась 5 листопада 1955 року. Рік іноді дається чотирма цифрами та не два, що може виключати деякі варіанти. Однак, якщо це дві цифри, 50..99 означає 1950..1999, а 0..49 означає 2000..2049.
Ваше завдання полягає в тому, щоб написати програму або функцію, яка займає масив цілих чисел, що є дійсною датою принаймні в одній з вищезгаданих інтерпретацій, і дає відсоток шансів, що це все-таки добре. Процентний шанс - це просто відсоток дійсних інтерпретацій дати, що наступає або пізніше, ніж сьогоднішня дата.
Масив цілих чисел буде [Int]
тип вашої мови тривалістю три, якщо він є аргументом функції, і дається як цілі чи знаки, косо-відмінні, або розділені пробілами (ви можете вибрати) цілі числа, якщо вони використовуються як вхід на STDIN до повна програма. *
"Сьогоднішня дата" може бути сьогоднішньою фактичною датою, отриманою за допомогою функції дати, або датою, вказаною в додатковому аргументі для функції або додаткового параметра в STDIN. Це може бути в епоху секунди Unix, ще одна трійка рік-місяць-день, введена одним із трьох вищезгаданих способів, або іншим більш зручним способом.
Приведемо кілька прикладів! Термін дії дати закінчується в стилі, розділеному тире, і для прикладів нижче припустимо, що сьогоднішня дата - 5 липня 2006 року.
14-12-14
- Обидві дійсні інтерпретації для цього (DMY та YMD) еквівалентні, 14 грудня 2014 р. Вихід 100, оскільки цей продукт, безумовно, ще хороший.8-2-2006
- Останнє число - напевно, оскільки воно має чотири цифри. Це може бути 8 лютого (минув) або 2 серпня (все ще добре). Вихід - 50 .6-7-5
- Це може бути що завгодно! Інтерпретація "5 липня 2006 року" все ще хороша (лише на один день), але решта двох - і в 2005 році, і їх слід кинути якнайшвидше. Вихід - 33 .6-5-7
- Тут два з трьох тлумачень безпечні. Ви можете округлити свій десятковий знак вгору або вниз, так що 66 або 67 добре.12-31-99
- Гаразд, це однозначно з межі століття (роки від 50 до 99 - це 19XX, а 31 не може бути місяцем). Великий жир 0 , і ви дійсно повинні частіше прибирати холодильник.
Ви можете з упевненістю припустити, що будь-який вхід, який не відповідає вищезазначеним стандартам, не є дотриманим вищезазначених правил виводу.
Немає веб-запитів або стандартних лазівки. Бібліотеки обробки дат дозволені. Це код гольфу: можливо, найкоротша програма виграє.
* Якщо ви використовуєте brainfuck або якусь подібну мову з обмеженими типами даних, ви можете припустити, що значення ASCII перших трьох символів, що вводяться, - цілі числа для дати. Це виключає чотиризначну логіку року, але я думаю, що ми були б дуже здивовані, побачивши в Brainfuck вирішення цього питання, аби вам це зробити.