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
Ваша программа должна работать для любых целых чисел (которые может обрабатывать ваш тип данных), а не только для заданных тестовых случаев. Решения для тестовых номеров не должны быть жестко запрограммированы в вашей программе. Если возникнут сомнения в жестком кодировании, номера тестов будут изменены.