La mayoría de los números cuadrados tienen al menos 1 número cuadrado diferente con el cual su distancia de Levenshtein es exactamente 1. Para un cuadrado dado , cada cuadrado que cumple con esta condición se llama vecino de de Levenshtein . Por ejemplo, es un vecino de Levenshtein de , ya que solo se requiere 1 edición ( ). Sin embargo, no es un vecino de Levenshtein de , ya que requiere un mínimo de 2 ediciones. Los números que tienen ceros a la izquierda ( ) no son vecinos de Levenshtein.
Su tarea es tomar un número cuadrado como entrada y generar, en cualquier formato razonable, la lista completa de sus vecinos de Levenshtein. Puede incluir vecinos repetidos en la lista, si lo desea, pero no puede incluir la entrada original, ya que no es un vecino de Levenshtein en sí mismo.
Cualquier formato razonable debe incluir algún tipo de separador entre las salidas, como ,
o una nueva línea, y puede generar caracteres con el valor Unicode correspondiente (es decir, brainfuck) en lugar de los números en sí. El orden de la salida no importa.
Esta entrada siempre será un número cuadrado, mayor que . Su programa no debería tener un límite teórico , pero si falla por grandes números por razones prácticas (por ejemplo, más allá de los números de 32 bits), está completamente bien.
Si la entrada no tiene ningún vecino de Levenshtein, la salida debe reflejar esto claramente, como no generar nada, una matriz / cadena vacía, un entero negativo, , etc.
Este es el código de golf , por lo que gana el código más corto en bytes.
Casos de prueba
Estos son los resultados para los cuadrados del al :
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
Adicionalmente, 1024
no tiene vecinos, por lo que es un buen caso de prueba.
2025
.32 * 32 = 1024
no tiene vecinos Levenshtein cuadrados.1024
no tiene ningún vecino de Levenshtein,Respuestas:
05AB1E ,
11 106 bytes-4 gracias a Grimy !! (el cuadrado primero en lugar de buscar cuadrados ahorra 3; use 10 ^ n guarda 1)
Toma un número entero, genera una lista, posiblemente vacía
Pruébalo en línea! - Esto es muy lento debido a la
°
, por lo que no tiene sentido intentarlo incluso9
.O pruebe una versión un poco más rápida : esta agrega ocho en su lugar con
8+
luego usa el mismo enfoque.¿Cómo?
fuente
9s«
en su 11-byter podría haber sido9ì
. ¡Buena respuesta al punto, sin embargo! +1 de mi parteт+Lnʒ.L
. Ridículamente lento 6:°Lnʒ.L
. Infinitamente lenta 5:∞nʒ.L
.∞nʒ.L
sea aceptable como respuesta porque los envíos tienen que terminar . Sin relación: su enlace TIO para la versión de 7 bytes utiliza9ì
, que es ~ 100 veces más lento queT+
para grandes números. Mi comentario solíaт+
(agregar 100) para estar seguro, pero resulta que8+
es suficiente en todos los casos.Retina 0.8.2 ,
142138 bytesPruébalo en línea! Explicación:
Para cada dígito, intente a) eliminarlo b) precederlo con un dígito diferente c) cambiarlo a un dígito diferente. Por ahora, el dígito diferente está marcado con a
#
.Para cada dígito potencial diferente, sustituya cada dígito posible.
Elimina los números que ahora comienzan con cero.
Eliminar todos los números duplicados. (Esto solo deja las líneas en blanco).
Convierte a unario.
Mantenga todos los números cuadrados excepto el último (que siempre es el número de entrada).
Convierta los números restantes de nuevo a decimal.
fuente
R ,
4241 bytesPruébalo en línea!
fuente
Python 2 ,
173167149148147144139138 bytesPruébalo en línea!
19 + 3 + 5 + 1 = 28! bytes gracias a Jonathan Allan .
fuente
[p for p in...]
Es redundante. Podemos devolver un conjunto (o duplicados).'0'<v[:1]
puede ser'1'<=v
. Es mucho más lento perorange(len(a)+1)
puede serrange(n)
. Use una variable parai
yi+1
rebanadas para evitar la suma. Usa una lambda. EDITAR guardar 48 de su anterior.Oracle SQL, 93 bytes
Prueba en SQL * PLus.
fuente
PHP , 62 bytes
Pruébalo en línea!
Este script imprime los vecinos de entrada de Levenshtein separados por
_
un separador final y, si no se encuentran vecinos, no imprime nada.Afortunadamente, PHP tiene una distancia incorporada para Levenshtein . Este script recorre todos los números cuadrados del 1 al
input * 91
, ya que todos los vecinos válidos de Levenshtein (distancia de 1) están en ese rango. Luego imprime cada número en ese rango que tiene una distancia de Levenshtein de 1 con la entrada.fuente
JavaScript (V8) ,
129125123bytesToma la entrada como una cadena. Imprime los vecinos de Levenshtein en STDOUT.
Pruébalo en línea!
Comentado
fuente
print()
pero no me di cuenta de que Node también lo tenía ...Gelatina ,
5338 bytesPruébalo en línea!
No hay una función integrada para la distancia de Levenshtein, por lo que genera todas las ediciones posibles de 1 distancia y luego excluye aquellas con cero a la izquierda y mantiene solo cuadrados perfectos. No filtra los duplicados (según lo permitido).
fuente
Wolfram Language (Mathematica) ,
6259 bytesPruébalo en línea!
Uso de la unida de la respuesta R .
fuente