Сцена это:
Питер в спортзале со своим приятелем Брайаном, когда Брайан вдруг остро нуждается в своем ингаляторе. Брайану удается сообщить Питеру код его кодового замка, прежде чем он упадет на пол.
В тот момент, когда Питер добирается до шкафчика Брайана и видит, на что указывает индикатор, Стьюи устраивает ему засаду и распыляет полную баллончик с перцем в лицо, ослепляя Питера.
Питер теперь должен попытаться открыть замок, не глядя на него. Он начинает поворачивать циферблат вправо, считая числа, пока он их пропускает. Затем он по правильному номеру начинает поворачивать циферблат влево, продолжая считать, и, наконец, поворачивает его вправо, пока не откроется замок.
Соревнование:
Напишите функцию / программу, которая принимает два входа: комбинацию от Брайана и положение индикатора. Выведите числа, которые должен подсчитать Питер.
Правила:
- Комбинация и позиция индикатора должны быть отдельными аргументами.
- Ввод может быть либо из командной строки, либо в качестве аргументов функции.
- Вывод должен быть распечатан на экране / отображен иначе (не в файл)
- Предположим, что начальная позиция не совпадает с первым числом, и что все три числа в комбинации являются уникальными
- Это замок, показанный на рисунке ниже, с возможными номерами: 0-39.
Инструкции:
Чтобы открыть замок ниже, вам необходимо выполнить ряд инструкций:
- Вы должны знать свой код. Предположим, что это (38, 16, 22) на данный момент.
- Поверните циферблат 3 раза вправо (пройдя начальный номер три раза), затем остановитесь, когда первое число (38) совпадет с индикатором.
- Поверните циферблат на 1 полный оборот влево, пропустив первый номер, и остановитесь, когда второй номер (16) совпадет с индикатором.
- Поверните циферблат вправо и остановитесь, когда третье число (22) совпадет с индикатором.
- Потяните замок вниз
Пример:
Input
38 16 22
33
Output
33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 39 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22
Применяются стандартные правила игры в гольф.
Решения, которые публикуются позже, все еще могут выиграть, если они короче, чем ответ Денниса.
function combination(code){alert("Help! Someone open this locker, the combination is "+code+"!")}
Ответы:
CJam,
5239 байтПопробуйте онлайн в интерпретаторе CJam .
Как это устроено
источник
Groovy,
189175 байтовПредполагается, что индикатор передается как arg0, а комбо - как arg1, arg2 и arg3 в командной строке ...
источник
Perl 5 , 129 + 1 (-a) = 130 байт
Попробуйте онлайн!
Как?
источник
Python 2, 262 байта
Это так долго. Но также происходит много поворотов.
Попробуйте онлайн!
Я думаю, что могу лучше объединить некоторые части в моей последней строке, но я все еще новичок в коде гольфа, и я не знаю, как быстро справиться с этой комбинацией списков.
Есть идеи по улучшению этого?
источник
Haskell ,
135112 байтовПопробуйте онлайн!
Сохранено 23 байта благодаря Laikoni
источник
l s t=
, объявивs#t=
вместо этого инфиксный оператор . Он также работает более двух аргументов:(a%b)c s=
.s+1
.