Вызов
Ваша задача - закодировать целое число в виде строки символов ASCII , а затем успешно декодировать его после случайного перемешивания указанной строки.
Вы напишите две программы / функции , которые будут называться Encoder и Decoder .
кодировщик
- Ввод: целое число в диапазоне .
- Вывод: строка из ASCII символов (не обязательно для печати).
дешифратор
- Входные данные: случайная перестановка строки .
- Выходные данные: целое число .
счет
Пусть быть максимальной длиной по во всех возможных значениях . Если кодировщик действует недетерминированно (что разрешено, см. Ниже), тогда будет максимальной длиной которая может возникнуть (возможно, ).
Пусть - длина кодера в байтах, а - длина декодера в байтах.
Тогда ваш счет .
Победа присуждается при подаче наименьшего балла .
Лимит времени
Существует несколько произвольных временных ограничений в 1 минуту на время выполнения как кодера, так и декодера для одного тестового случая (то есть одного значения ).
Цель состоит в том, чтобы избежать решения, которое находит, что грубая сила кодирует, перечисляя все последовательности с определенными свойствами. Если ваше решение делает что-то более умное, оно, скорее всего, будет соответствовать временным ограничениям и будет считаться действительным. Аналогично, если он работает на TIO для некоторых случайно выбранных значений он будет считаться действительным. В противном случае я протестирую его на своей машине, но учтите, что если ваше решение чисто грубое, оно почти наверняка потерпит неудачу.
правила
- Кодер и декодер должны быть написаны на одном языке .
- Декодер необходимо выводить правильно целое число для каждого из возможных перестановок из строки , возвращенного кодировщик .
- Кодер и декодер являются не разрешается обмениваться информацией любым способом (например , с помощью глобальных переменных или файлов).
- Выходные данные кодера не обязательно должны быть детерминированными (то есть один и тот же вход может выдавать разные выходные строки, если кодировщик запускается несколько раз), но декодер всегда должен угадывать правильное целое число .
- Кодер и декодер могут принимать и возвращать целое число в любом удобном способе (например , если это нормально для ввода , чтобы быть
14
,"14"
или[1,4]
). - Кодер может выводить строку либо путем печати его на
stdout
или путем возвращения строки, список / массив символов или список / массив целых чисел в диапазоне ; Обратите внимание , что декодер будет принимать в качестве входных данных перестановки возвращаемой в кодировщике , поэтому он должен принять строку в том же формате , как . - Стандартные лазейки запрещены.
- Если возможно, объясните, как работает ваш код и почему правильная оценка.
пример
Предположим, что .
- Кодер принимает в
14
качестве входных данных. Это может вывести"qwerty"
.- Декодер принимает перестановку в
"qwerty"
качестве входных данных, например"tweyqr"
. Он должен выводиться14
(в любом удобном формате).
Кодировщик мог бы вернуться , [113,119,101,114,116,121]
а также, в этом случае декодер получил бы (например) [116,119,101,121,113,114]
.
Обратите внимание, что строка, возвращаемая кодировщиком, также может содержать непечатаемые символы ASCII (но всегда в диапазоне [0x00, ..., 0x7F]
).
Ответы:
Желе (17 байт + 18 байт) × длина 6 = 210 баллов
Попробуйте онлайн! (или с дополнительной отладочной информацией)
Пройдя путь к решению этой задачи, нацеленной на заявленное условие победы, я подумал, что было бы интересно перейти к гипотетическому альтернативному условию победы: code-golf, учитывая минимально возможную максимальную длину для вывода.
объяснение
кодирование
Первый шаг в кодировании состоит в том, чтобы представить входные данные как base 36 (
b36
). 36 6 = 2176782336> 2147483647, поэтому в результате будет не более 6 цифр, каждая из которых находится в диапазоне 0–35.Затем мы преобразуем это в представление, которое содержит 6 различных цифр. Для этого существует несколько возможных алгоритмов, но один из них используется для добавления 1 к наименьшей цифре, 2 к второй наименьшей, 3 к третьей наименьшей и т. Д. Это означает, что если бы две цифры были одинаковыми, одна из них будет произвольно считаться меньшей, и, таким образом, они станут другими; и очевидно, что этот алгоритм не может привести к тому, что две разные цифры станут одинаковыми. Чтобы представить это в Jelly, мы используем
Ụ
(«сортировать индексы по значениям»), чтобы получить список индексов в отсортированном порядке;Ụ
снова, чтобы инвертировать это, эффективно отображая каждый элемент оригинала в его положение в отсортированном порядке; а такжеµ…+
добавить оригинал в новый список. Результатом является представление входного числа в виде шести различных цифр в диапазоне 1–41 (минимум 0 + 1, максимум 35 + 6).Затем мы разделить это на еще одну форму: в отсортированный список цифр в диапазоне 1-41, наряду с числом от 1 до 720 , который представляет , какие из 720 возможных перестановок цифр были в (The.
Œ¿
ИṢ
извлечь количество перестановок и сортируются список соответственно.)Наконец, мы конвертируем число от 1 до 720 в base 3 (
b3
), инвертируем его (U
) и кодируем шесть базовых 3 цифр и шесть 1–41 цифр, упаковывая их каждый в один символ ASCII, используя обратный divmod (значение символьный мод 3 - это базовая цифра 3, значение, деленное на 3, - это цифра 1–41). Возможный диапазон результатов составляет (1 × 3) + 0 = 3 минимум и (41 × 3) + 2 = 125 максимум, что соответствует нашему диапазону ASCII. Упаковка выполняется через×3
и+
вместе с дополнительным,µ
чтобы убедиться, что каждая команда работает с нужным битом данных. (Здесь есть небольшая хитрость в том, что мы умножаем на 3 перед извлечением перестановки; это избавляет от необходимости тратить байт на группирующего персонажа.)Кстати, причина, по которой следует изменить номер 3 базы, состоит в том, что он может содержать меньше цифр, чем номер 1–41. (У него не может быть больше; наименьшее число, для которого n !> 3 n немного выше 6.) Желе эффективно вставляет конечные нули при сложении двух чисел разной длины, чтобы они совпали; замыкающие нули будут влиять на интерпретацию числа, но ведущие нули не будет, поэтому обратный используется для того, чтобы лишние нули в конечном итоге где - то , что не испортит наш ответ.
Декодирование
Первый шаг в декодировании состоит в извлечении двух чисел (номер основания 3 и номер 1–41). Мы можем легко получить их цифры с помощью Division (
:3
) и Modulo (%3
) соответственно, но как узнать, в каком порядке они были? Ну, числа 1–41 имели свои цифры в отсортированном порядке, а цифры в соответствующих позициях двух чисел были сохранены в одних и тех же символах; таким образом, мы можем определить, в каком порядке были перемешаны цифры номера 1–41 (глядя на их относительные значения), и знаем, что цифры номера основания-3 должны были быть перетасованы таким же образом. На самом деле, поскольку символы нашей кодировки ASCII сортируются так же, как цифры числа 1–41 (все они отличались друг от друга и более значимы, чем цифры базовых 3),Ṣ
, Таким образом, оба извлечения начинаются сṢ
, затем%3
или по:3
мере необходимости.В то время как цифры номера 1–41 все еще в отсортированном порядке, у нас есть очень удобный / краткий способ вернуться к 0–35 цифрам базы 36; просто вычтите 1 из первого, 2 из второго, 3 из третьего и так далее. В Jelly это можно сделать с помощью
_J
(«индекса вычитания»).В то же время, в другой ветви декодирования, мы возвращаем цифры числа 3 базы обратно в order (
U
) и преобразуем их из базы 3 обратно в индекс перестановки с помощьюḅ3
.Затем мы можем объединить две ветви с
œ?Ç
;œ?
означает «перестановка с учетом этого индекса перестановки» иÇ
означает «результат применения строки выше», т. е. это то, что говорит Jelly для запуска обеих строк отдельно на одном входе.Теперь у нас есть цифры исходного числа, в базе 36 (из-за
_J
) и в исходном порядке (из-заœ?
), поэтому мы можем просто сделатьḅ36
преобразование обратно из базы 36 в одно целое число.Комментарий
ТИО! ссылка выше использует 312699167 в качестве числа для кодирования. Это число в базе 36 равно
[5, 6, 6, 8, 7, 35]
и, таким образом, демонстрирует все аспекты кодирования: 35 тестирует предел диапазона 0–127, который мы имеем; дубликаты 6s проверяют разрешение идентичных цифр в исходной базе 36; и тот факт, что цифры почти (но не совсем) отсортированы, означает, что число перестановок очень мало, что дает ему намного меньше цифр, чем число в базовом 36, и, таким образом, показывает необходимость обратить его перед добавлением к оригиналу.Это действительно удобно, как все константы здесь сочетаются друг с другом. 36 6 только лишь достаточно высоко , чтобы соответствовать 2 31 , 3 6 только лишь достаточно высоко , чтобы соответствовать 6 !, и (36 + 6) × 3 только лишь достаточно высоко , чтобы соответствовать в пределах 128 возможностей мы имеем. (Последнее ограничение здесь наименее жесткое, потому что мы могли бы использовать 0-индексирование, а не 1-индексирование, чтобы использовать символы в диапазоне 0-2. Тем не менее, это дало бы достаточно места для использования 37 в качестве основы, а не чем 36.)
источник
Желе (
43 байта +65 байтов) × длина 8 =8064 баллаПопробуйте онлайн!
Желе , (
21 байт +43 байт) × длина 10 =6040 балловПопробуйте онлайн!
объяснение
Решение 1
Это использует алгоритм, отличный от большинства других ответов. Мы начнем с кодирования значения в шестнадцатеричном (
b⁴
), как и в других ответах, а затем возьмем кумулятивную сумму (Ä
). Каждый вход будет давать разные выходные данные (поскольку обе эти операции являются обратимыми), и, учитывая, что шестнадцатеричное кодирование будет содержать не более 8 цифр, максимальные значения которых равны 7 (для 8-й последней цифры) и 15 (для последней до 7-й- последние цифры), максимальное число в списке вывода будет 7+ (7 × 15) = 112, что меньше 127, требуемого в вопросе. Кроме того, вывод будет обязательно в отсортированном порядке, что позволяет нам обратить вспять перемешивание.Для декодера мы сначала обращаем shuffle с помощью sort (
Ṣ
); затем поменяйте местами суммарную сумму, добавив ноль (Ż
) и взяв разность последовательных пар (I
); затем преобразовать обратно из шестнадцатеричного (ḅ⁴
).Решение 2
Вопрос на самом деле позволяет нам принимать входные данные в виде списка (предположительно десятичных) цифр, поэтому мы можем «обмануть», просто удалив базовое преобразование; максимальное число, используемое в выходных данных, будет тогда 2 + (9 × 9) = 83 (фактически 82, потому что 2999999999 находится вне диапазона, поэтому наихудший возможный ввод - 1999999999). Результирующее кодирование является довольно ужасным с точки зрения кодирования для этой проблемы, но его преимущество заключается в том, что оно очень лаконично для генерации, что перевешивает многословность кодирования.
Этот ответ выглядит как обман, так что это не мое основное решение этой проблемы, но кажется, что его стоит добавить, потому что он технически соответствует правилам и дает лучший результат.
Комментарий
Я имею в виду некоторые алгоритмы для получения длины менее 8, но кажется маловероятным, что вы могли бы реализовать алгоритм длины 7 в ≤9 байт (без мошенничества) или ≤5 байт (мошенничество), поэтому, набрав в этом вопросе, это вероятно, лучший способ сделать это. (В любом случае, я мог бы найти решение для альтернативной задачи «минимизировать длину кодирования», просто для удовольствия.)
В отличие от некоторых решений, использование 16 в качестве основы здесь не критично; Есть много других чисел, которые будут работать для решения длины 8 (например, 18). Я выбрал 16 для первого решения просто потому, что у Jelly есть 1-байтовый способ для представления этого, и другие жизнеспособные базы должны будут использовать несколько байтов из программы. Конечно, второе решение должно использовать 10 в качестве основы, чтобы использовать лазейку.
Спасибо @Dennis за указание на некоторые новые команды Jelly, которые сделали этот алгоритм еще более трудным для написания.
источник
Ä
это сокращение от+\
,Ż
это сокращение от0;
.Язык программирования Шекспира , 10 * (264 + 494) =
8650 79107580Кодировщик: 264 байта
Попробуйте онлайн!
Декодер: 494
Попробуйте онлайн!
Это была вещь.
Кодировщик кодирует каждую цифру в виде цифры плюс индекс цифры, умноженной на двенадцать. Декодер сохраняет все входные данные в памяти Ford, а затем зацикливает их на счетчике, выводя и удаляя каждую цифру ниже, чем счетчик * 12 + 10.
Объяснение:
кодировщик
дешифратор
источник
Python 2.7, 31 * (52 + 37) = 2759
Кодировщик (
6952 байта):Декодер (
4137 байт):Сохраняет все ненулевые биты во входном номере в качестве значений ascii. Значение символа ascii хранит позицию установленного бита. Например, значение «а» будет означать, что установлен 97-й бит.
Несколько улучшений, благодаря @ Delfad0r
Попробуйте онлайн!
источник
e =
иd =
в начале - анонимные функции прекрасно работают. Также обратите внимание, что в заявлении о проблеме четко сказано, что кодировщик может возвращать список целых чисел вместо символов, поэтому вы можете избежать преобразования целое число -> символ-> целое число. Кроме того, вы можете использоватьn&(1<<i)
вместоn&(1<<i)>0
и сохранить 2 байта. Наконец, верхняя граница дляi
(127) слишком велика, 32 достаточно и сохраняет 1 байт.(52+37)*31=2759
самой длинной, когда установлены все 31 бит.lambda n:[chr(i)*(n&1<<i>0)for i in range(32)]
сохранить 6 байтов.Stax , оценка 8 × (10 + 9) = 152
Кодировщик, 10 байт
Запустите и отладьте его
Кодировщик выводит строку в возрастающем порядке.
Декодер, 9 байт
Запустите и отладьте его
источник
05AB1E , максимальная длина 8 * (8 + 7) байтов = 120
Кодировщик (8)
Попробуйте онлайн!
Декодер (7)
Попробуйте онлайн!
Использует ту же технику, что и Wastl и Jonathan .
источник
Python 3 , 8 * (45 + 38) = 664
Кодер (45 байт):
Декодер (38 байт):
Попробуйте онлайн!
источник
lambda l:sum(x%16<<x//16*4for x in l)
работает просто отлично :)lambda n:[n>>4*i&15|i<<4for i in range(8)]
и 1 в декодере:lambda l:sum(x%16<<x//16*4for x in l)
для общего результата 632JavaScript (ES6), 8 * (40 + 32) = 576
Кодировщик (40 байт)
Декодер (32 байта)
демонстрация
Попробуйте онлайн!
Как?
Вход делится на 8 блоков по 4 бита, и каждый блок кодируется с 1 из 16 возможных символов. Самый старший бит последнего блока никогда не устанавливается.
источник
Желе , (8 + 9) байтов * 8 макс. Длина = 136
Кодировщик (нижний колонтитул форматирует список так, как это делает Python для ясности)
дешифратор
Теоретически возможно иметь максимальную длину шесть, это может быть сделано в 22 байта или меньше?
Как?
7fffffff
[7,15,15,15,15,15,15,15]
[7,15,15,15,15,15,15,15] + [0,16,32,48,64,80,96,112] = [7,31,47,63,79,95,111,127]
Кодировщик :
Декодер :
источник
Шекспир Программирование Язык , 31 * (472 +
383379344) =265052638125296Предыдущий счет: 16909322 * (246 + 217) = 7829016086
Это все еще очень высоко, но это самый низкий уровень, о котором я могу думать прямо сейчас.
Кодер:
Попробуйте онлайн!
декодер:
Попробуйте онлайн!
В основном, если строка содержит символ с кодом ASCII (n + 1), устанавливается n-ая двоичная цифра.
источник
Python 3, (208 байт + 200 байт) * 6 длина = 2448
Попробуйте онлайн! (содержит оба, дополнительный байт - новая строка между ними).
-4 байта (-24 балла), используя пустой список (который позволял большему количеству начинаться с 0)
Кодировщик (208 байт)
Декодер (200 байт)
Замечания:
Перестановка может быть полностью изменена без потерь для строго не увеличивающихся (т.е. отсортированных) списков.
Строго не увеличивающиеся числовые списки одинаковой длины могут быть полностью упорядочены (как в Python).
Мы можем определить, что списки сначала упорядочены по длине, чтобы сформировать общий порядок всех отсортированных списков.
Мы можем сформировать индексируемую последовательность этих списков , если мы определим , что только действительные значения в списке являются целыми числами от
0
до127
включительно (т.е. существует конечное число действительных списков с длинойL
).Стратегия:
Кодировщик: По заданному номеру
N
найдитеN
действительный строго не возрастающий список.Декодер. По заданному (перемешанному) допустимому списку отсортируйте его и верните индекс в последовательности действительных списков.
Общее объяснение кода:
T=lambda n,d:n*T(n+1,d-1)//d if d>1else d and n or 1
Вычислить число
n
th-d
симплексИбо
d=0
всегда1
Для
d=1
,n
(количество точек в линии точек с длинойn
)d=2
n
d=3
n
Объяснение кодера:
def E(n,h=128):
d=l=0
,s=[]
n
является входным числом,h
является «высоким значением» (то есть наибольшим допустимым числом + 1),d
является длиной, на которой будет выводиться,s
является выводом,l
является «низким значением» (начиная с 0, поясняется ниже)while n>=T(h,d):
,n-=T(h,d)
,d+=1
Существуют
T(h,d)
допустимыеd
списки длин , и наши вычисления проще, еслиn
это индекс относительно списка[0]*d
(по индексу0
) вместо фактического индекса, поэтому уменьшитеn
соответствующим образом. Это также корректируетd
(длину), чтобы быть правильным для данногоn
.for i in range(d):
Эффективно: «за
i+1
номер в списке»Вот где я объясню
l
, «низкое значение»После того, как число было добавлено в список, не меньшее число, чем оно может быть помещено в список (чтобы сохранить его сортировку),
l
равно как и последнее число, которое было добавлено в список.while n>=T(h-l,d+~i):
,n-=T(h-l,d+~i)
,i+=1
Если
n
он слишком велик для кодирования сl
этой «цифрой», отрегулируйтеn
соответственно и увеличьтеl
s+=[l]
Кодировать
n
с помощьюl
этой «цифры».Сначала у нас есть
h
опции для того, какую «цифру» вводить следующей, но как только мы введем «цифру» (которая назначенаl
), мы ограничимсяh-l
вариантами для следующей «цифры».Сначала были
T(h,d)
действительные списки, но мы добавили «цифру»l
, уменьшив количество оставшихся «цифр»d-1
и количество действительных следующих «цифр»h-l
, чтобы число действительных списков после этого былоT(h-l,d-1)
Объяснение декодера:
def D(s):
,s.sort()
,l=0
,d=len(s)
s
это (перемешанный) список ввода, так чтоs.sort()
это;l
это «низкое значение» (h
«высокое значение» - это просто литерал128
s в коде для сохранения байтов),n
это выходное число,d
это длина.n=sum(T(128,D)for D in range(d))
Отрегулируйте
n
до точки в последовательности[0]*length
for i in s:
Для каждой цифры:
for j in range(l,i):
,n+=T(128-j,d-1)
Отрегулируйте
n
до точки в последовательности[...prevdigits, thisdigit, 0...]
l=i
: Установите «низкое значение» на самую последнюю цифруd-=1
: Уменьшить длину, так как мы использовали цифруreturn n
: После того,n
как были откорректированы все цифры, это правильный номер; верни это.Извините, если это не ясно, но вот моя оригинальная версия без отладки. Попробуйте онлайн! , который не использует пустой список, поэтому 1 от всех чисел, используемых в этой версии
источник
Рубин (36 + 29 байт) * 8, оценка 520
Encode:
Попробуйте онлайн!
Decode:
Попробуйте онлайн!
Как это работает:
Число кодируется с использованием 4-битных фрагментов и 3-битного индекса.
Декодер берет входной массив и снова помещает каждый кусочек на свое место.
источник
Древесный уголь , оценка 10 * (10 + 15) = 250.
Использует десятичную; предыдущее решение на основе базы 16 набрало
328296264.Может выводить непечатные символы. В частности, символ 10 сложно ввести в древесный уголь.
Кодировщик, 10 байт:
Попробуйте онлайн! Ссылка на подробную версию кода.
Декодер, 15 байт:
Попробуйте онлайн! Ссылка на подробную версию кода.
Версия с использованием списка целых чисел
360296 (основание 16; десятичное число будет 310):Кодер, 19 байт:
Попробуйте онлайн! Ссылка на подробную версию кода.
Декодер, 18 байт:
Попробуйте онлайн! Ссылка на подробную версию кода.
Версия с использованием печатаемых символов 360 баллов (было
416384368 в базе 16):Кодер, 19 байт:
Попробуйте онлайн! Ссылка на подробную версию кода.
Декодер, 17 байт:
Попробуйте онлайн! Ссылка на подробную версию кода.
источник
Brachylog , 17 + 18 байтов * 8 длина = 280
Кодер:
декодер:
P может быть добавлен в конец энкодера без эффекта. Декодер запускается путем помещения (перемешанного) результата в качестве вывода и получения исходного числа на входе.
Если будет (правильно реализованный) предикат накопленной суммы, оценка может снизиться до 20
Попробуйте онлайн!
источник
05AB1E , оценка: (2 + 2 байта ) * 11 максимальная длина = 44
Кодировщик (2 байта ):
Попробуйте онлайн.
Декодер (2 байта ):
Попробуйте онлайн.
Вход кодера и выход декодера представляют собой список цифр.
Порт @ ais523 второго ответчика Jelly .
Объяснение:
Потому что231- 1
.¥
источник
Гол> <> , 8 * (14 + 13) = 216
Кодер Попробуй онлайн! 14 байт:
Декодер Попробуй онлайн! 13 байт:
Так как это может выводить непечатаемые символы ascii, что мешает работе декодера, теперь есть версия, использующая числа в выводе / вводе:
кодировщик Попробуй онлайн! 14 байт:
дешифратор Попробуй онлайн! 13 байт:
Кодирование:
Кодирование работает путем разбиения заданного числа на 8 x 4-битных кусков. Эти чанки затем сдвигаются вправо на 3 бита, и исходное местоположение чанка добавляется в конце как число от 0 до 7. Таким образом, кодировка выглядит следующим образом:
источник
Perl 6 , 10 * (10 + 12) =
340220Кодер:
декодер:
Попробуйте онлайн!
Функция кодировщика упаковывает каждую цифру в 0-значный номер. Затем кодировщик сортирует список чисел и получает по модулю 10, другими словами, вторую цифру числа.
Всего 10, так как это максимальная длина 2 31 -1.
источник
Haskell , 10 * (23 + 51) = 740
Вот программа, которая кодирует, перемешивает, декодирует и проверяет значения: попробуйте онлайн!
Кодировщик, 23 байта
Попробуйте онлайн!
Декодер, 51 байт
Попробуйте онлайн!
объяснение
Так как нам разрешено использовать ввод в качестве десятичных цифр, мы будем использовать это .. Кодировщик отображает каждую встречающуюся цифру
10*index + digit
, обратите внимание, что всеdigit
s будут в,[0..9]
так что мы можем отменить вышеупомянутое, используяdivMod
. После восстановления индексов и цифр нужно лишь отсортировать индексы и избавиться от них.источник
Шелуха , 10 * (7 + 8) = 150
N
Кодировщик, 7 байт
Попробуйте онлайн!
Декодер, 8 байт
Попробуйте онлайн!
источник
Попробуйте онлайн! (содержит 5 дополнительных байтов для назначений и новой строки).
Пользы
⎕IO←0
Как:
источник
PHP, 8 * (44 + 53) = 776
кодер, 44 байта:
печатает разделенный пробелами список целых чисел. Беги как труба с
-nR
.максимум 8 байтов с 4 битами данных (нижний полубайт) и 3 битами веса (верхний полубайт).
Проще говоря:
поместите каждую шестнадцатеричную цифру в собственный символ и используйте верхнюю половину байта, чтобы сохранить положение цифры.
пример:
1457893891
(0x56e5b203
) Превратится в0x03
,0x10
,0x22
,0x3b
,0x45
,0x5e
,0x66
,0x75
→
3 16 34 59 69 94 102 117
декодер, 53 байта:
или
или
взять целые числа из аргументов командной строки. Бежать с
-nr
.Попробуйте их онлайн .
источник
Python 2 , 10 * (68 + 54) = 1220
Попробуйте онлайн!
РЕДАКТИРОВАТЬ: Спасибо Джо Кинг за указатели - не уверен, почему я оглянулся на 32, оглядываясь назад.
Кодирует позицию и значение каждого места как один символ, начиная с
[пробел] (позиция 0, значение 0)байта NUL 0x0.Расшифровывает:
источник
32
смещение? Кроме того,[-1]
может быть%10
вместо этого, в нужном местеC (gcc) , 10 * 112 = 1120
Попробуйте онлайн!
У меня есть глобальные переменные, но они фактически не передают никакой информации между двумя функциями. Объявление переменной для
c
используется в обеих функциях, экономя 2 байта в длине кода.Версия, которая использует печатный ASCII только для штрафа за
35 байтов, здесь:Спасибо @ceilingcat за 70 улучшений.
источник