Localizador de número de habitación
Me encontré con una técnica interesante para resolver problemas en mi trabajo cuando un colega me dio el número de sala equivocado para una reunión. De vez en cuando, mientras se dirige a una reunión, un miembro de mi equipo me enviará el número de habitación equivocado, generalmente porque están apurados en su escritorio y presionan la tecla equivocada.
Curiosamente, al llegar a la habitación equivocada, normalmente puedo adivinar a qué habitación se referían realmente imaginando un teclado numérico :
y al adivinar un número adyacente pretendían presionar.
Reto
Su desafío es escribir una función que tome un número de oficina del edificio (000-999) y genere las posibles soluciones de error tipográfico, suponiendo que su colega solo escriba mal un dígito.
La siguiente tabla muestra qué números son adyacentes entre sí en un teclado numérico:
0 -> 1,2
1 -> 0,2,4
2 -> 0,1,3,5
3 -> 2,6
4 -> 1,5,7
5 -> 2,4,6,8
6 -> 3,5,9
7 -> 4,8
8 -> 5,7,9
9 -> 6,8
Entrada
Un número de 3 dígitos: 000-999
. Suponga la entrada de exactamente 3 dígitos. Si el número es menor que 100 o menor que 10, se le darán los ceros iniciales. (es decir, 004 y 028).
Salida
Una lista de posibles habitaciones. Esto puede ser de la forma que desee, siempre que haya un delimitador entre los números de habitación. (es decir, espacio, coma, nueva línea, etc.) Si el número es menor que 100 o menor que 10, puede o no tener los ceros iniciales como salida, eso depende de usted. (es decir, 004 puede ser 004 04 4
, y 028 puede ser 028 28
)
Casos de prueba (los ceros iniciales son opcionales):
008 -> 108, 208, 018, 028, 005, 007, 009
123 -> 023, 223, 423, 103, 113, 133, 153, 122, 126
585 -> 285, 485, 685, 885, 555, 575, 595, 582, 584, 586, 588
777 -> 477, 877, 747, 787, 774, 778
963 -> 663, 863, 933, 953, 993, 962, 966
555 -> 255, 455, 655, 855, 525, 545, 565, 585, 552, 554, 556, 558
Este es el código de golf , por lo que gana el código más corto en bytes para cada idioma.
933
así que lo arreglé.Respuestas:
Wolfram Idioma (Mathematica) ,
112106 bytesReconociendo que un teclado numérico es básicamente un 3x3
GridGraph
con bordes agregados para 0, obtenemos los dígitos adyacentes para cada dígito de entradaAdjacencyList
.Esto se puede ver a continuación:
EdgeAdd[GridGraph[{3,3},VertexLabels->"Name",GraphLayout->"SpringEmbedding"],{0<->1,0<->2}]
rendimientos:Luego uso
Tuples
para descubrir todos los posibles errores y elegir aquellos con exactamente un error conSelect
yEditDistance
. Por cierto, esto funcionará para números de habitación más largos y también puede aumentar elEditDistance
parámetro para permitir más de un error. Podría ser capaz de jugar golf un poco más lejos pero quería mostrar mi enfoque.Versión un poco más de golf codificada a 3 números de habitación de longitud (106 bytes). Esto generará una lista de rango 3 correspondiente a cada dígito:
Pruébalo en línea!
fuente
DamerauLevenshteinDistance
en lugar deEditDistance
que también incluiría los errores de transposición.Python 2 , 89 bytes
Pruébalo en línea!
El 1 st y 5 th personajes no pueden ser indicados aquí (navegador dependiente), pero la cadena completa es equivalente a
[21, 204, 1035, 62, 157, 2468, 359, 48, 579, 68]
fuente
05AB1E , 29 bytes
Pruébalo en línea!
fuente
R , 190 bytes
Pruébalo en línea!
Mi segundo intento en CodeGolf! Bastante largo, 190 bytes, pero lo mejor que pude hacer con R. ¡Curioso por ver si otros tienen comentarios o pueden hacerlo mejor!
fuente
:
over*/+-
puede reducir algunos bytes en la primera línea, deshacerse de ellosdo.call
, tratarlosa
comomatrix
y transponerlos ahorra alrededor de 39 bytes: ¡ Pruébelo en línea!JavaScript (Firefox 30-57),
115109 bytesEditar: guardado 6 bytes gracias a @ edc65 (aunque las sugerencias
0
ahora aparecen después de otras sugerencias). Versión ES6,118112 bytes:fuente
[...[12,240,1350,26,157,2468,359,48,579,78][c]+'']
[for(...)]
fue una de las varias propuestas de sintaxis de comprensión de matriz que nunca llegaron a ser ECMAscript. Le permitió recorrer un iterador y filtrar y / o mapear sucintamente los resultados. (Lo encontré particularmente útil al hacer doble iteración).Java,
205177 bytesSé que es largo en comparación con las otras respuestas. Mi excusa: está en Java.
Oracle debería cambiar el nombre
toCharArray
a algo asígetCrs
.Créditos
-28 personajes de Kevin Cruijssen
fuente
(String b)->
puede ser justob->
y puede eliminar el final;
. En cuanto a las cosas reales para jugar al golf: solo se usaa
una vez, por lo que puede eliminarString[]a=...;
y usar"12,024,0135,26,157,2468,359,48,579,68".split(",")[...]
directamente. Además,Byte.parseByte
puede sernew Byte
. En total: 177 bytes .Ruby 97 bytes
Pruébalo en línea!
Alternativamente, 94 caracteres pero 100 bytes
Pruébalo en línea!
fuente
C (gcc) , 136 o 114 bytes
ASCII versión 136 bytes
Pruébalo en línea!
Unicode
114108bytes (TiO parece contar de manera extraña para esto)Gracias a @ceilingcat por esta versión.
Pruébalo en línea!
fuente
Perl 5 ,
12085 + 2 (-F
) = 87 bytesPruébalo en línea!
Ahorró 35 bytes al tomar prestada una idea de la respuesta rubí de @ AsoneTuhid.
fuente
Python 2 , 103 bytes
gracias a @Lynn por -4 bytes.
Pruébalo en línea!
fuente
in`0x134cd9a07d1e58feab643f7db24102`[int(v)::10]
(lo intentéint('…',36)
pero es un byte más largo).Julia 0.6 , 93 bytes
Pruébalo en línea!
0x502A044228550A21102B05406
es un valorUInt128
en el que se establece el1+10j
bit th si fi
está al ladoj
del teclado numérico.big(1)
es unBigInt
. Se utiliza para evitar el desbordamiento y utiliza menos caracteres queInt128(1)
oUInt128(1)
.fuente
SQL (SQLite), 533 bytes
Sin golf
Explicación
La entrada es una sola fila de texto en la tabla
t
con columnas
. Según tengo entendido, de acuerdo con esta meta respuesta, esta es una forma aceptable de entrada. La entrada se puede crear de la siguiente manera.Solución anotada
fuente
Kotlin , 117 bytes
Embellecido
Prueba
TIO
TryItOnline
fuente
Jalea , 35 bytes
Pruébalo en línea!
-1 gracias a Jonathan Allan .
Explicación siendo actualizada ...
fuente
Wẋ3
->ḷþ
T-SQL , 322 bytes
La entrada se toma de la columna
s
de una tabla de una sola fila llamadat
:Sin golf:
SQLFiddle
fuente