A maioria dos números quadrados ter pelo menos 1 número quadrado diferente com que sua distância Levenshtein é exatamente 1. Para um dado quadrado , cada quadrado que atenda esta condição é chamada um vizinho Levenshtein de . Por exemplo, é um vizinho de de Levenshtein , pois apenas 1 edição ( ) é necessária. No entanto, não é um vizinho de Levenshtein de , pois exige um mínimo de 2 edições. Os números com 0 iniciais ( ) não são vizinhos de Levenshtein.
Sua tarefa é pegar um número quadrado como entrada e gerar, em qualquer formato razoável, a lista completa dos vizinhos de Levenshtein. Você pode incluir vizinhos repetidos na lista, se desejar, mas não incluir a entrada original, pois não é um vizinho de Levenshtein.
Qualquer formato razoável deve incluir algum tipo de separador entre as saídas, como ,
ou uma nova linha, e pode gerar caracteres com o valor Unicode correspondente (por exemplo, cérebro), em vez dos próprios números. A ordem da saída não importa.
Essa entrada sempre será um número quadrado maior que . Seu programa não deve ter limite teórico , mas se falhar por grandes números por motivos práticos (por exemplo, além dos números de 32 bits), tudo bem.
Se a entrada não tiver vizinhos de Levenshtein, a saída deve refletir claramente isso, como a saída de nada, uma matriz / string vazia, um número inteiro negativo, etc.
Isso é código-golfe , então o código mais curto em bytes vence.
Casos de teste
Estes são os resultados para os quadrados de a :
1: 4, 9, 16, 81
4: 1, 9, 49, 64
9: 1, 4, 49
16: 1, 36, 169, 196
25: 225, 256, 625
36: 16, 361
49: 4, 9
64: 4
81: 1, 841
100: 400, 900, 1600, 8100
121: 1521
144: 1444
169: 16, 1369
196: 16, 1296, 1936
225: 25, 625, 1225, 2025, 4225, 7225
256: 25
289: 2809
324: 3249
361: 36, 961
400: 100, 900, 4900, 6400
Além disso, 1024
não possui vizinhos, por isso é um bom caso de teste.
2025
são.32 * 32 = 1024
não há vizinhos Levenshtein quadrados.1024
não tem vizinhos Levenshtein, vou editar esse exemplo emRespostas:
05AB1E ,
11 106 bytes-4 graças a Grimy !! (coloque primeiro o quadrado em vez de procurar os quadrados com 3; use 10 ^ n com 1)
Pega um número inteiro, gera uma lista possivelmente vazia
Experimente online! - Isso é muito lento devido ao
°
, então não adianta tentar nem por isso9
.Ou Tente uma versão um pouco mais rápida - esta adiciona oito
8+
e usa a mesma abordagem.Quão?
fonte
9s«
seu 11-byter poderia ter sido9ì
. Boa resposta direta, no entanto! +1 de mim.т+Lnʒ.L
. Ridiculamente lento 6:°Lnʒ.L
. Infinitamente lenta 5:∞nʒ.L
.∞nʒ.L
seja aceitável como resposta porque os envios precisam terminar . Independente: o link do seu TIO para a versão de 7 bytes9ì
é aproximadamente 100x mais lento do queT+
para números grandes. Meu comentário costumavaт+
(adicione 100) ser seguro, mas acontece que8+
é suficiente em todos os casos.Retina 0.8.2 ,
142138 bytesExperimente online!Explicação:
Para cada dígito, tente a) removê-lo b) precedendo-o com um dígito diferente c) alterando-o para um dígito diferente. Por enquanto, o dígito diferente está marcado com um
#
.Para cada dígito potencial diferente, substitua cada dígito possível.
Remova os números que agora começam com zero.
Remova todos os números duplicados. (Isso deixa as linhas em branco.)
Converta para unário.
Mantenha todos os números quadrados, exceto o último (que é sempre o número de entrada).
Converta os números restantes novamente em decimal.
fonte
R ,
42bytesExperimente online!
fonte
Python 2 ,
173167149148147144139138 bytesExperimente online!
19 + 3 + 5 + 1 = 28! bytes thx para Jonathan Allan .
fonte
[p for p in...]
é redundante. Podemos retornar um conjunto (ou duplicatas).'0'<v[:1]
pode ser'1'<=v
. É muito mais lento, masrange(len(a)+1)
pode serrange(n)
. Use uma variável parai
ei+1
fatias para evitar a soma. Use uma lambda. EDIT salvar 48 do seu anterior.Oracle SQL, 93 bytes
Teste no SQL * PLus.
fonte
PHP , 62 bytes
Experimente online!
Esse script imprime os vizinhos de entrada de Levenshtein separados por
_
um separador à direita e, se nenhum vizinho for encontrado, não imprime nada.Felizmente, o PHP possui uma distância embutida para Levenshtein ! Esse script percorre todos os números quadrados de 1 a
input * 91
, pois todos os vizinhos válidos de Levenshtein (distância de 1) estão nesse intervalo. Em seguida, imprime todos os números nesse intervalo que possuem uma distância de Levenshtein de 1 com a entrada.fonte
JavaScript (V8) ,
129 125123 bytesRecebe a entrada como uma sequência. Imprime os vizinhos de Levenshtein em STDOUT.
Experimente online!
Comentado
fonte
print()
mas não sabia que o Node também o tinha ...Geléia ,
5338 bytesExperimente online!
Não existe uma distância interna para a distância de Levenshtein, portanto gera todas as edições possíveis de uma distância e exclui aquelas com zero à esquerda e mantém apenas quadrados perfeitos. Não filtra duplicatas (conforme permitido).
fonte
Wolfram Language (Mathematica) ,
6259 bytesExperimente online!
Usando o limite da resposta R .
fonte