Левенштейнська відстань та OEIS (Грабіжники)


11

Це пост грабіжника. Cop пост тут .


Ваше завдання - взяти цілий вхід 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 може бути нижчим).


Розбійники:

Вам слід спробувати зламати пости копів.

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

Ви можете перевірити відстань Левенштейн тут!

Переможцем стане розбійник, який зламав більшість постів.


Зачекайте ... тож якщо результат грабіжника не повинен відповідати початковій програмі ... Чи не може поліцейський просто написати одну програму і скласти відстань ...?
Magic Octopus Urn

Ну а поліцейські повинні надати альтернативний код, щоб відзначити подання безпечним та мати право на виграш. Я уточнив у посаді копа. :)
Стюі Гріффін

Я ніколи не пробував виклик міліціонерів. Все це дуже заплутало мене!
Magic Octopus Urn

Відповіді:



3

JavaScript, Arnauld

/*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(...,...))

Спробуйте в Інтернеті!

Я не знаю Луа, але це був простий, просто замінив пробіл на новий рядок.


Хум, не думав про це, оригінал був про заміну (0+)(%d+)$на (0+)(%d+), тож мова йшла про regex ^^ '
Katenkyo

1

Python 3 , HyperNeutrino

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

Спробуйте в Інтернеті!


Ninja'd за 9 сек: P
Уріель

так цікаво, був не той, що мав, але приємно :)
HyperNeutrino

Ви також можете зробити це ''замість""
Уріель

@Uriel Так, я знаю багато альтернатив.
Містер Xcoder


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.

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 порівняно з моєю іншою відповіддю)
Kevin Cruijssen

1

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

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

Спробуйте в Інтернеті!

Я насправді намагався відповісти власну Октаву і помітив існуючу. Шахта вже була значно коротшою, тому додавання коментаря наприкінці було достатньо, щоб дістатися до необхідної відстані 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, і я пам’ятатиму це про майбутнє.
Фелікс Палмен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.