Это полицейский пост. Сообщение Грабителя здесь .
Ваша задача - взять целочисленный ввод N и вывести N-ю цифру в последовательности OEIS A002942 .
Последовательность состоит из квадратных чисел, написанных в обратном порядке:
1, 4, 9, 61, 52, 63, 94, 46, 18, 1, 121, 441, ...
Обратите внимание, что ведущие нули обрезаются ( 100 становится 1 , а не 001 ). Конкатенация в строку (или одно длинное число дает):
1496152639446181121441
Вы должны вывести N-ую цифру в этой строке / числе. Вы можете принять N за 0 или 1 (укажите, какой из них вы выбрали).
Контрольные примеры (1-индексированные):
N = 1, ==> 1
N = 5, ==> 1
N = 17, ==> 1 <- Important test case! It's not zero.
N = 20, ==> 4
N = 78, ==> 0
N = 100, ==> 4
Ваш код должен работать для чисел до N = 2 ^ 15 (если ваш язык не может обрабатывать 32-битные целые числа по умолчанию, в этом случае N может быть меньше).
Менты:
Вы должны написать две функции / программы на одном языке, которые делают одно и то же. Вы должны опубликовать одну из функций / программ, а также расстояние Левенштейна между двумя функциями / программами, которые вы написали. Расстояние Левенштейна измеряется в символах (поэтому добавление двухбайтового символа даст LD = 1).
Раскрытый код не может быть длиннее исходного решения (но может иметь одинаковый размер). Грабители попытаются написать код с точным расстоянием Левенштейна, которое вы дали (оно может отличаться от вашего нераскрытого кода, если оно работает).
Победителем станет безотказная подача, которая имеет самое низкое расстояние Левенштейна.
Вы можете проверить расстояние Левенштейна здесь!
Если ваша заявка не будет взломана в течение 7 дней, вы можете указать альтернативный код, который вы написали, и пометить вашу отправку как безопасную.
источник
Ответы:
Haskell , LD = 13, трещины
Попробуйте онлайн!
Я дважды проверил, что ведущие нули обрезаны;)
Объяснение:
источник
cQuents 0 , LD = 1, трещины
Попробуйте онлайн!
Я думал, что это не работает для ведущих нулей, но на самом деле это работает - обратная функция в cQuents кодируется как
int(reversed(str(n)))
.объяснение
источник
JavaScript (ES6), LD = 103 ( взломан )
Использование такого большого расстояния Левенштейна, вероятно, не лучшая стратегия, но давайте все равно попробуем.
Контрольные примеры
Показать фрагмент кода
Предполагаемое решение
Закодированная часть:
источник
+
код гарантирует, что обратная строка приведена к числу.Python 2, 104 байта, LD = 21 неверно и взломан
PS Разрешено ли неограниченное количество пробелов и комментариев? Если так, то это не будет трудно взломать.источник
\n
s (около 50)Машинный код 6502 (C64), LD = 1 ( взломан )
Демонстрация онлайн , использование:
sys49152,n
гдеn
ввод 0-index.В последнем тестовом случае вам нужно немного терпения, так как эта бедная машина должна делать миллионы битовых сдвигов и дополнений, чтобы представить вам результат;)
Язык здесь - машинный код, поэтому LD измеряется в этом формате - тем не менее, чтобы дать начало, вот программа в
ca65
исходном коде на ассемблере:... и вот скрипт компоновщика для
ld65
:источник
Perl 5 , 59 + 1 (
-a
) = 60 байт, LD = 55Попробуйте онлайн!
источник
Java 8, (177 байт) LD = 92 ( взломано @Arnauld )
( Я использовал этот онлайн LD-калькулятор. )
Это, вероятно, не так уж сложно, если вы просто играете в гольф. :)
Объяснение:
Попробуй это здесь.
источник
n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}
( 118 байт, 92 LD )Октава , LD = 63, трещины
Попробуйте онлайн!
Передача составляет 77 байт, поэтому нужно заменить совсем немного =)
источник
Машинный код 6502 (C64), LD = 1, безопасный
Демонстрация онлайн , использование:
sys49152,n
гдеn
ввод 0-index.Предполагаемое решение: (diff)
30
( Код операцииbmi
) заменяется на90
(код операцииbcc
). Это соответствует следующей части в источнике ассемблера:Это работает, потому что этот код проверяет, меньше ли число 8. Для этого
cmp
инструкция выполняет вычитание, соответственно устанавливая флаги. Таким образом, если аккумулятор содержит число меньше 8, это приводит к потере значения, стирающему флаг переноса, поэтому правильная инструкция ветвления действительно существуетbcc
.bmi
(разветвление при отрицательном значении), как и в исходном коде, просто работает и здесь, потому что сравниваемые числа достаточно малы, поэтому результат вычитания заканчивается в отрицательном диапазоне ($80-$ff
) при возникновении недостаточного значения .Онлайн демо
Это улучшенная / сжатая версия моего предыдущего представления . Среди некоторых других приемов по уменьшению размера, он удаляет ненужный код, который содержался, и допускает своего рода «простой» *) взлом. В целом размер уменьшен на 16 байт. На этот раз будет немного сложнее найти эквивалентную программу с LD 1 :)
*) наверняка еще какую-то работу найти, конечно :)
Опять же, вот
ca65
исходный код ассемблера, чтобы помочь начать работу с кодом:... и вот скрипт компоновщика для
ld65
:источник
Lua: LD = 1, трещины
Никаких причудливых трюков здесь :)
источник
Mathematica, LD = 43 трещины
Попробуйте онлайн!
источник
PHP, LD = 35 ( треснувший )
1-индексированных
Попробуйте онлайн!
источник
Python 3: LD = 9 | Трещины
Это должно быть довольно (очень) легко получить: P
источник
.lstrip("0")
часть может быть просто скопирована.C ++, LD = 159
0-индексированный, входной
argv[1]
, скомпилированный в GCC 7.2.0источник
Groovy , 61 байт (LD = 23)
Попробуйте онлайн!
источник