Проблема:
Два вражеских секретных агента разработали замечательный (для вас) способ общения!
Вот как работает процесс шифрования:
1) Возьмите ascii эквиваленты каждой буквы. (Пробелы, цифры или знаки препинания не отправляются)
2) Для каждой буквы в сообщении умножается эквивалент ascii и буква после него (если она существует, если ее нет, ее следует считать 0) (этот продукт хранится в массиве / списке) и суммируется (этот номер также хранится в другом списке).
3) Два списка (сумм и продуктов) объединяются (список сумм, затем список кратных в один массив) и передаются.
Вам нужно написать самую маленькую программу, способную перевернуть этот процесс и расшифровать сообщения, отправленные в этом формате!
Пример входных и выходных пар:
[173, 209, 216, 219, 198, 198, 225, 222, 208, 100, 7272, 10908, 11664, 11988, 9657, 9657, 12654, 12312, 10800, 0] -> “HelloWorld”
[131, 133, 164, 195, 197, 99, 4290, 4422, 6499, 9506, 9702, 0] -> “ABCabc”
Это код-гольф , поэтому выигрывает самое маленькое решение в байтах.
Сообщения об ошибках разрешены.
Ваша программа может быть задана либо в виде списка / одномерного массива, либо через запятую, если вы указали в своем представлении. По умолчанию это массив / список.
источник
Ответы:
Шелуха ,
76 байтПопробуйте онлайн! Согласно документации, ведение
m
не требуется, но в настоящее время, похоже, есть ошибка.Редактировать: -1 байт благодаря Zgarb!
Объяснение:
источник
`-
может быть≠
. Поведениеc
действительно выглядит как ошибка.брейкфук , 66 байт
Ввод - это зашифрованная строка. Предполагает бесконечные размеры клеток и 0 на EOF.
Как это устроено:
источник
Haskell ,
4535 байтПопробуйте онлайн!
объяснение
fst.span(<245)
берет все числа в начале списка, которые меньше 245. Это только числа из части суммирования, потому что наибольшее возможное суммированиеz + z = 122 + 122 = 244
и наименьшее возможное произведениеA * A = 65 * 65 = 4225
.scanr1(-)
берет последнее значение из списка и использует его в качестве начального аккумулятора. Затем сзади-вперед каждый элемент списка вычитается текущим аккумулятором, а результат используется в качестве следующего аккумулятора и добавляется в список.map toEnum
заменяет каждое число в списке соответствующим символом, чтобы воссоздать строку.источник
Желе , 9 байт
Попробуйте онлайн! или Проверьте оба теста.
Альтернатива.
объяснение
источник
Python 2 , 72 байта
Попробуйте онлайн!
источник
Python 2 , 92 байта
Попробуйте онлайн!
источник
Желе , 11 байт
Монадическая ссылка, содержащая список целых чисел и возвращающая список символов.
Попробуйте онлайн!
Как?
источник
Пыть , 60 байт
Принимает список целых чисел и возвращает строку символов.
Объяснение:
Попробуйте онлайн!
источник
JavaScript (ES6), 80 байт
Показать фрагмент кода
источник
VB Script -
7471 байт(Мне удалось сократить с 74 до 71 с помощью «Пока .. Венд» вместо «В»).
Входные данные находятся в массиве a (), выходные данные - в строке d.
объяснение
Я проверил это в файле vbscript с приведенным выше кодом, заключенным в функцию:
источник
Чистый ,
96817877 байтzero
нулевой символЯ мог бы сохранить еще один байт, если бы Clean не был так требователен к буквальным нулям в исходном файле.
Попробуйте онлайн!
источник
f=
.f=
это самое короткое назначение, поэтому минимальный вызов добавляет два в любом случае.Perl 5 , 39 + 2 (
-ap
) = 41 байтПопробуйте онлайн!
источник
C (gcc) ,
9089 байтs+=(i%2?-1:1)*...
<~>s-=~(i%2*-2)
.Попробуйте онлайн!
источник
Стандарт ML (MLton) ,
858482 байтаПопробуйте онлайн!
Ungolfed:
Попробуйте онлайн!
источник
Perl 6 ,
43 3935 байтПроверь это
Проверьте это (делает то же самое как выше)
Проверь это
Проверь это
Объяснение:
источник
05AB1E , 9 байт
Попробуйте онлайн!
объяснение
источник
J
монета.ç
неявно превращает список символов в строку. Если я правильно понимаю проблему, программе необходимо вывести строку, а не список символов.Japt, 12 байт
Должен быть более короткий способ получить первую половину массива ...
Попытайся
источник
Python 2 , 70 байт
Попробуйте онлайн!
источник