Distância Levenshtein e OEIS (ladrões)

11

Este é o post do ladrão. O posto policial está aqui .


Sua tarefa é pegar uma entrada inteira N e gerar o enésimo dígito na sequência OEIS A002942 .

A sequência consiste nos números quadrados escritos ao contrário:

1, 4, 9, 61, 52, 63, 94, 46, 18, 1, 121, 441, ...

Observe que os zeros à esquerda são cortados ( 100 se torna 1 , não 001 ). Concatenar isso em uma string (ou um número longo fornece):

1496152639446181121441

Você deve emitir o enésimo dígito nesta sequência / número. Você pode escolher N como indexado com 0 ou 1 (indique qual deles você escolhe).

Casos de teste (indexados 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

Seu código deve funcionar para números de até N = 2 ^ 15 (a menos que seu idioma não possa manipular números inteiros de 32 bits por padrão, nesse caso, N pode ser menor).


Ladrões:

Você deve tentar quebrar as postagens dos policiais.

Seu código deve estar no mesmo idioma que o posto do policial e ter uma distância de Levenshtein exatamente igual à distância fornecida pelo policial. Seu código não pode ser maior que a solução original (mas pode ter o mesmo tamanho).

Você pode verificar a distância de Levenshtein aqui!

O vencedor será o ladrão que mais invadiu as postagens.

Stewie Griffin
fonte
Espere ... então, se o resultado do assaltante não precisar ser o mesmo do programa original pretendido ... O policial não pode simplesmente escrever um programa e fazer uma distância ...?
Urna de polvo mágico
Bem, os policiais devem fornecer o código alternativo para marcar o envio como seguro e ser elegível para a vitória. Eu esclareci no posto policial. :)
Stewie Griffin
Eu nunca tentei um desafio de policial e ladrão. Tudo isso foi muito confuso para mim, hah!
Urna de polvo mágico

Respostas:

3

JavaScript, Arnauld

/*ZZ*/m=>[...Array(m+1).keys()].map(eval(atob("eD0+K1suLi4iIit4KnhdLnJldmVyc2VgYC5qb2luYGA="))).join``[m]
Lynn
fonte
1
@ Arnauld OK, acho que corrigi- Array(m+1)lo.
Lynn
Faz. FWIW, adicionei a solução pretendida ao meu post.
Arnauld
2

Código 6502 da máquina (C64), Felix Palmen

Eu testei isso com todos os casos de teste de perguntas e alguns extras (como 2 ^ 15 ... que levaram algum tempo), e parece funcionar da mesma forma que o original com 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

Demonstração online , uso: sys49152, n em que n é a entrada indexada em 0.

Jo.
fonte
Isso está correto porque você encontrou algum código totalmente inútil do qual eu não estava ciente e a alteração está neste código: o
Felix Palmen
1

Lua , Katenkyo

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

Experimente online!

Não conheço Lua, mas era simples, substituí um espaço por uma nova linha.

Erik, o Outgolfer
fonte
Hum, não pensei sobre isso, o original era sobre substituir (0+)(%d+)$por (0+)(%d+), então era sobre regex ^^ '#
7891
1

Python 2 , dylnan

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

Experimente online!

Nota: este envio de policial foi corrigido e não funcionou para entradas inferiores a 5. Enquanto eu estava lá, construí esta solução que tem a distância correta de Levenshtein E corrige o erro.

Leo
fonte
1

Perl 5, (-p) Xcali

Atualizado após o comentário, Levenshtein Distância entre

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

e

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

é 55

Experimente online

Nahuel Fouilleul
fonte
Dado que o M5.010 é "gratuito", acho que não deve contar aqui. Não tenho muita certeza de como contar as bandeiras -aversus -p. As duas soluções que eu criei usavam as mesmas bandeiras. Eu acho que a bandeira seria colocada na frente sem espaço, mas estou disposto a ser influenciado por outras pessoas.
Xcali 3/11
atualizei minha resposta
Nahuel Fouilleul 3/17/17
1

Kevin 8, Kevin Cruijssen

/*!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);}

Experimente online!

Log de alterações

  • Substituído .replaceAll()por new Long().
  • Removido o teste para quadrados perfeitos. Agora, usando quadrados perfeitos diretamente.
  • Atualizados todos os nomes de variáveis ​​para maiúsculas.
  • Reescreveu as desigualdades.
  • E, finalmente, adicionou um comentário principal de 21 bytes para alcançar o LD correto.
Arnauld
fonte
1
Ah legal. Isso é completamente diferente do que eu tinha em mente, mas é bom que você tenha 92 LD de qualquer maneira. A solução que eu tinha em mente era: n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}( 118 bytes, 92 LD em comparação com a minha outra resposta).
Kevin Cruijssen 4/17/17
1

Octave , Stewie Griffin

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

Experimente online!

Na verdade, eu estava tentando minha própria resposta do Oitava e descobri a existente. A mina já era significativamente mais curta, portanto, adicionar um comentário no final foi suficiente para chegar à distância necessária de 63.

Tom Carpenter
fonte
Bem feito :-) Eu tinha um laço com input()e tudo o que se passa com ele ...
Stewie Griffin
1

PHP, Jo.

<?for($j++;strlen($p)<$argv[1];$j++)$p.=(int)strrev($j**2);echo($p[$argv[1]+2-3]);

Experimente online!

(Eu estava planejando mudar a desigualdade para obter LD ainda maior ...)

Colera Su
fonte
0

Código 6502 da máquina (C64), Felix Palmen

Também pode ser um crack "simples", mas parece funcionar como o original.
Ter o LD = 1 é tão tentador tentar decifrá-lo (desculpe, Felix). :)

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

Demonstração online , uso: sys49152, n em que n é a entrada indexada em 0.

Jo.
fonte
Não tenho certeza se tenho que aceitar isso. Ele substitui E9(um comando subtrair) pelo EBqual é indefinido no código da máquina 6502, mas acontece o mesmo nos chips NMOS 6502 e 6510. Este programa poderia, por exemplo, travar no C64 DTV1. Mas é improvável encontrar um C64 real que não o execute corretamente, portanto, pode ser considerado um crack válido? Eu poderia pedir opiniões sobre meta ....
Felix Palmen
Eu estaria interessado em entrada aqui na meta .
Felix Palmen
@FelixPalmen em breve irei responder esta resposta.
Jo.
mantenha, veja também meu comentário sobre meta. A comunidade expressou claramente a opinião de que é válida. É minha culpa não exigir apenas o código 6502 documentado, e lembro disso no futuro.
Felix Palmen