StickStack - це дуже проста мова програмування на основі стеку, що містить лише дві інструкції:
|
висуває довжину стека на стек-
спливає два верхні елементи зі стека і відштовхує їх різницю (second topmost - topmost
)
Мовні деталі
- Стек порожній на початку програми.
- Всі вказівки виконуються послідовно зліва направо.
- Якщо на стеку менше 2 чисел,
-
інструкція є незаконною. - В кінці виконання стек повинен містити рівно одне число .
Будь-яке ціле число може бути створене програмою StickStack. Наприклад:
|||--||-- generates the number 2 through the following stack states:
[]
[0]
[0, 1]
[0, 1, 2]
[0, -1]
[1]
[1, 1]
[1, 1, 2]
[1, -1]
[2]
Щоб оцінити свій код StickStack, ви можете скористатися цим онлайн-інструментом (CJam) . (Дякую @Martin за код.)
Завдання
Ви повинні написати програму або функцію, яка вказала ціле число у вигляді вхідних даних або повертає рядок, що представляє програму StickStack, яка виводить задане число.
Оцінка балів
- Ваш основний бал - загальна тривалість програм StickStack для наведених нижче тестових випадків. Нижча оцінка - краща.
- Ваше подання дійсне лише в тому випадку, якщо ви запустили свою програму на всі тестові випадки та підрахували ваш результат.
- Ваш вторинний (tiebreaker) бал - це тривалість вашої генеруючої програми чи функції.
Вхідні тестові справи
(Кожне число є різним тестом.)
-8607 -6615 -6439 -4596 -4195 -1285 -72 12 254 1331 3366 3956 5075 5518 5971 7184 7639 8630 9201 9730
Ваша програма повинна працювати для будь-яких цілих чисел (з якими може працювати ваш тип даних), а не лише для наведених тестових випадків. Рішення тестових номерів не повинні бути жорстко закодовані у вашій програмі. Якщо виникнуть сумніви в жорсткому кодуванні, тестові номери будуть змінені.