Цей виклик натхненний математикою - це факт. Програмування - ні .
Математичне позначення для факторіалу чи факту є знаком оклику !. Знак оклику також є загальним символом для notбагатьох мов програмування.
Виклик:
Візьміть рядок, що містить цифри та символи: + !як вхід та вихід наступного:
Все перед знаком оклику слід оцінювати як математичний вираз, так 2+2би і не було 4.
Все , після одного знаку оклику повинні бути додані в якості аксесуарів до того , що знаходиться перед ним, так: 2+2!5треба дати 45, тому що 2+2=4, і 5це аксесуар. 2+2!5+5повинні дати 410.
Оскільки !також означає not, що все, що не є аксесуаром після факту, не слід додавати. Отже, 2+2!!5слід давати 4, оскільки 5це не аксесуар. Тепер, not(not(true))==trueтак 2+2!!!5слід дати 45. 2+2!!5!5+5слід дати:, 410тому що 2+2=4, потім слідують факториал і !5!5+5. Перший 5- це не факт, але 5+5є після іншого знаком оклику, і, отже, факт знову.
Роз'яснення:
- Окличні знаки не будуть суміжними
+з ані з одного боку. - Не буде провідним
+для чисел (це5, ні+5). - Ви можете необов'язково включати провідний нуль, якщо це результат виразу перед першим
!. Обидва4і04приймаються вихідними для введення:0+0!4
Підсумок: оцінюйте кожну суму (трактуючи !як роздільники). Потім відкиньте всі числа, які з’являються після парного числа !(рахуючи з початку рядка). Потім видаліть усі !.
Тестові приклади:
!
<- Empty string
5
5
12!
12
!87
87
!!5
<- Empty string
5+5!2+2
104
5+5!!2+2
10
1!2!3!4!5!6!7!8!9
12468
10+10!!2+2!!3+3!4+4
208
2!!3!5
25
2!!3!5!7
25
10!!!!!!!5
105
Це код-гольф, тому найкоротший код у байтах (кожною мовою) виграє! Пояснення настійно рекомендується!
25(див. доданий тестовий випадок). Ще важливіше 2!!3!5!7все-таки даватимуть 25, тому що є парне число !ліворуч 7(тому ви не будете рахувати пробіг прямо перед номером, а все !ліворуч від нього).
Row?