Расстояние Левенштейна и OEIS (Грабители)

11

Это пост грабителя. Сообщение полицейского здесь .


Ваша задача - взять целочисленный вход 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 = 5,      ==> 1
N = 17,     ==> 1   <- Important test case! It's not zero.
N = 20,     ==> 4
N = 78,     ==> 0
N = 100,    ==> 4
N = 274164, ==> 1

Ваш код должен работать для чисел до N = 2 ^ 15 (если ваш язык по умолчанию не может обрабатывать 32-битные целые числа, в этом случае N может быть меньше).


Грабители:

Вы должны попытаться взломать посты ментов.

Ваш код должен быть на том же языке, что и пост полицейского, и иметь расстояние Левенштейна, точно равное расстоянию, указанному полицейским. Ваш код не может быть длиннее исходного решения (но он может быть того же размера).

Вы можете проверить расстояние Левенштейна здесь!

Победителем станет грабитель, взломавший большинство постов.

Стьюи Гриффин
источник
Подождите ... так что, если результат грабителя не должен совпадать с исходной предполагаемой программой ... Разве полицейский не может просто написать одну программу и составить дистанцию ​​...?
Волшебная Осьминог Урна
Ну, полицейские должны предоставить альтернативный код, чтобы пометить представление как безопасное и иметь право на победу. Я уточнил в посте полицейского. :)
Стьюи Гриффин
Я никогда не пробовал коп-грабитель. Все это очень смущало меня, ха!
Волшебная Осьминог Урна

Ответы:

3

JavaScript, Арнаулд

/*ZZ*/m=>[...Array(m+1).keys()].map(eval(atob("eD0+K1suLi4iIit4KnhdLnJldmVyc2VgYC5qb2luYGA="))).join``[m]
Линн
источник
1
@Arnauld Хорошо, я думаю, Array(m+1)это исправлено.
Линн
Оно делает. FWIW, я добавил предполагаемое решение в свой пост.
Арно
2

Машинный код 6502 (C64), Феликс Пальмен

Я проверил это со всеми контрольными случаями вопросов и довольно многими дополнениями (например, 2 ^ 15 ... это заняло некоторое время), и, похоже, он работает так же, как и оригинал с LD = 1.

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 88 30 09 B9
5B 00 29 0F 95 5B 10 F3 A9 00 95 5B CA 10 F9 A9 01 A0 03 99 69 00 88 10 FA A0
20 A2 76 18 B5 E6 90 02 09 10 4A 95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11
A2 09 B5 5C C9 08 30 04 E9 03 95 5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9
A9 01 85 FB A2 03 A9 00 95 FB CA D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00
A2 03 95 69 CA 10 FB A0 20 A2 02 46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75
ED 95 ED E8 10 F7 A2 7D 06 26 36 AA E8 10 FB 88 10 DD A0 0B A9 00 99 5A 00 88
D0 FA A0 20 A2 09 B5 5C C9 05 30 04 69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8
D0 FB A2 09 B5 5C 2A C9 10 29 0F 95 5C CA 10 F4 88 D0 D7 E0 0A F0 05 E8 B5 5B
F0 F7 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90 F1 88 B9 5B 00 C9 30 F0 F8 A2
7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05 B9 5B 00 D0 EA A2 7C F6 7F D0
03 E8 10 F9 4C 73 C0 B9 5B 00 4C D2 FF

Демонстрация в сети , использование: sys49152, n, где n - 0-индексированный вход.

Джо.
источник
Это правильно, потому что вы нашли какой-то совершенно бесполезный код, о котором я не знал, и изменение в этом коде: o
Феликс Пальмен,
1

Луа , Катенкё

i=1s=""while(#s<...+0)do s=s..((i*i)..""):reverse():gsub("(0+)(%d+)$","%2")i=i+1 end
print(s:sub(...,...))

Попробуйте онлайн!

Я не знаю, Луа, но это было просто, просто заменил пробел новой строкой.

Эрик Outgolfer
источник
Hum, не думать о том, что оригинал был о замене (0+)(%d+)$с (0+)(%d+), так что это было около регулярного выражения ^^
Katenkyo
1

Python 3 , HyperNeutrino

lambda o:"".join(str(p*p+2*p+1)[::~0].lstrip("0")for p in range(o+1))[o]

Попробуйте онлайн!

Мистер Xcoder
источник
Ninja'd через 9 секунд: P
Уриэль
да интересно, был не тот, который у меня был, но приятно :)
HyperNeutrino
Вы также можете сделать ''вместо""
Уриэль
@ Уриэль Да, я знаю массу альтернатив.
г-н Xcoder
Альтернативная трещина была бы lambda i:"".join(str( (-~k)**2)[::-1]for k in range(i+1))[i].
Эрик Outgolfer
1

Питон 2 , Дилнан

d=lambda y:y if y%10>0 else d(y/10)
lambda n:''.join([str(d(x*x))[::-1]for x in range(1,n+1)])[n-1]#fix

Попробуйте онлайн!

Примечание: это представление полицейского было ошибочным и не работало для входов ниже 5. Пока я работал над этим, я построил это решение, которое имеет правильное расстояние Левенштейна И исправляет ошибку.

Лео
источник
1

Perl 5, (-p) Xcali

Обновлено после комментария, Левенштейн Расстояние между

a$j.=int reverse$_**2for 1..$_;$_--;say$j=~s/.{$_}(.).*/$1/r

и

p$_=substr w.(join"",map{whyddwzz;0|reverse$_**2}1..$_),$_,1

это 55

Попробуйте онлайн

Науэль Фуйе
источник
Учитывая, что M5.010 является «бесплатным», я не думаю, что он должен здесь учитываться. Я не совсем уверен, как считать -aпротив -pфлагов. Два предложенных мной решения использовали одинаковые флаги. Я бы подумал, что флаг будет просто прикреплен к передней части без пробела, но я хочу, чтобы другие склонялись к этому.
Xcali
обновил мой ответ
Nahuel Fouilleul
1

Java 8, Кевин Круйссен

/*!FooBarFooBarFoo!*/N->{String R="",T=R;for(int I=1,J;N+2>R.length();I++){for(T="",J=(I*I+"").length();0<J;T+=(I*I+"").charAt(--J));R+=new Long(T)+"";}return R.charAt(N);}

Попробуйте онлайн!

Журнал изменений

  • Заменено .replaceAll()на new Long().
  • Убрал тест на идеальные квадраты. Теперь напрямую используем идеальные квадраты.
  • Обновлены все имена переменных в верхнем регистре.
  • Перепишите неравенства.
  • И, наконец, добавлен 21-байтовый ведущий комментарий для достижения правильного LD.
Arnauld
источник
1
О, классно. Это совсем не то, что я имел в виду, но приятно, что ты все равно получил 92 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 по сравнению с другим моим ответом.)
Кевин Круйссен
1

Октава , Стьюи Гриффин

@(n)regexprep(fliplr(num2str((1:n)'.^2))'(:)',' +0*','')(n)%abcdefghijk

Попробуйте онлайн!

На самом деле я пытался найти свой собственный ответ в Octave и заметил существующий. Мой был уже значительно короче, поэтому добавление комментария в конце было достаточно, чтобы добраться до требуемого расстояния 63.

Том Карпентер
источник
Хорошо сделано :-) У меня была петля input()и все, что с этим
Стьюи Гриффин
0

Машинный код 6502 (C64), Феликс Пальмен

Также может быть «простая» трещина, но, похоже, она работает как оригинал.
Наличие LD = 1 просто так заманчиво попытаться взломать его (извините, Феликс). :)

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 98 88 30 09
B9 5B 00 29 0F 95 5B 10 F2 95 5B CA 10 FB A0 20 A2 76 18 B5 E6 90 02 09 10 4A
95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11 A2 09 B5 5C C9 08 30 04 EB 03 95
5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9 A9 01 85 FB A2 03 A9 00 95 FB CA
D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00 A2 03 95 69 CA 10 FB A0 20 A2 02
46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75 ED 95 ED E8 10 F7 A2 7D 06 26 36
AA E8 10 FB 88 10 DD A2 0B A9 00 95 5A CA D0 FB A0 20 A2 09 B5 5C C9 05 30 04
69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8 D0 FB A2 09 B5 5C 2A C9 10 29 0F 95
5C CA 10 F4 88 D0 D7 E8 B5 5B F0 FB 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90
F1 88 B9 5B 00 C9 30 F0 F8 A2 7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05
B9 5B 00 D0 EA A2 7C F6 7F D0 03 E8 10 F9 4C 68 C0 B9 5B 00 4C D2 FF

Демонстрация в сети , использование: sys49152, n, где n - 0-индексированный вход.

Джо.
источник
Я не уверен, должен ли я принять это. Он заменяет E9(команда вычитания), EBкоторая не определена в машинном коде 6502, но происходит так же на чипах NMOS 6502 и 6510. Эта программа, например, аварийно завершает работу на C64 DTV1. Но вряд ли найдется настоящий C64, который не выполнит его правильно, так что это можно считать допустимым взломом? Я мог бы попросить мнения о мета ....
Феликс Пальмен
Я был бы заинтересован в вводе здесь на мета .
Феликс Пальмен
@FelixPalmen Я скоро сниму этот ответ.
Джо.
держать его, см. также мой комментарий к мета. Сообщество четко выразило мнение, что оно действительно. Я виноват, что не требую только документированный код 6502, и я буду помнить об этом в будущем.
Феликс Пальмен