Mientras escribía números, noté después de un tiempo que mi teclado tenía la Shifttecla presionada y bloqueada y que todo lo que escribía eran $%&
caracteres similares. Y aún peor, había estado cambiando entre los diseños de teclado en inglés y español, así que no sé cuál usé para cada número.
Reto
Dada una cadena que contiene caracteres de símbolos, intenta adivinar qué número escribí. Mi teclado produce los siguientes caracteres para los números cuando Shiftse presiona:
1234567890
----------
!"·$%&/()= Spanish layout
!@#$%^&*() English layout
- La entrada será una cadena no nula y no vacía compuesta de los símbolos anteriores.
- La salida será un solo número si la distribución del teclado se puede inferir de la cadena (es decir, si la cadena contiene un
@
diseño en inglés y si la cadena contiene un"
diseño en español) o si el número es el mismo para ambos diseños (es decir, la entrada es la!$
que se traduce como14
para ambos diseños); de lo contrario, la salida serán los dos números posibles para ambos diseños si no se puede inferir y los números resultantes son diferentes. - La cadena de entrada siempre se escribirá en un diseño único. Por lo tanto, no necesita esperar
"@
como entrada.
Ejemplos
Input --> Output
------------------
/() 789 (Spanish layout detected by the use of /)
$%& 456,457 (Layout cannot be inferred)
!@# 123 (English layout detected by the use of @ and #)
()&! 8961,9071 (Layout cannot be inferred)
((·)) 88399 (Spanish layout detected by the use of ·)
!$ 14 (Layout cannot be inferred but the result is the same for both)
!!$$%% 114455 (Layout cannot be inferred but the result is the same for both)
==$" 0042/42 (Spanish layout, if a number starts with 0 you can choose to
omit them in the result or not)
Single character translations:
------------------------------
! 1
" 2
· 3
$ 4
% 5
& 6,7
/ 7
( 8,9
) 9,0
= 0
@ 2
# 3
^ 6
* 8
Este es el código de golf , ¡así que puede ganar el código más corto para cada idioma!
·
es un desafío ...·
es inútil para el español, solo se usa en catalán.{(8, 9, 6, 1), (9, 0, 7, 1)}
aceptable una salida como (para el cuarto caso de prueba)?Respuestas:
Jalea ,
3231 bytesPruébalo en línea!
fuente
Python 3 , 76 bytes
Pruébalo en línea!
fuente
Perl 6 , 62 bytes
Pruébalo en línea!
Devuelve un conjunto. (Podría reducirse dos o tres bytes si no hubiera un error en el manejo de # de Rakudo en las listas de búsqueda).
fuente
Java (JDK) , 173 bytes
Golfed
Pruébalo en línea!
Sin golf
La matriz de búsqueda de hash mágico
Después de experimentar un poco con los valores, me di cuenta de que cada uno de los valores ASCII de los caracteres del
!"·$%&/()=@#^*
módulo 16 devuelve un número único. El 'conjunto de búsqueda de hash mágico' almacena los números en inglés asociados con cada carácter en este índice único, y cada uno de los números en español en este índice se compensa en 16, haciendo que la obtención del número requerido del conjunto sea trivial para cada idioma. Se almacena un hash para valores que no son válidos para ninguno de los idiomas.fuente
toCharArray()
y el cálculo del exponente que se aplicará al valor int lo hicieron mucho más largo que las dos.contains()
declaraciones.s.equals(e)|s.contains("#")
puede sers.matches(e+"|.*#.*")
.Japt, 38 bytes
Emite una serie de cadenas con el diseño español primero.
Intentalo
fuente
Jalea , 38 bytes
Pruébalo en línea!
fuente
()
o(())
como entrada, pero su código no devuelve nada. Supongo que es una limitación con lo que Jelly recibe como entrada.'()'
y'(())'
respectivamente. Sí, si no cita el argumento, solo se ingresa como una cadena si no se puedeeval
ajustar a un valor de Python 3.Retina 0.8.2 , 60 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Duplicar la entrada.
Intente traducir cada línea de acuerdo con un diseño de teclado diferente.
Deduplicar el resultado.
Solo mantenga líneas que solo contengan dígitos.
fuente
m
en tu última etapa?JavaScript (ES6), 99 bytes
Pruébalo en línea!
¿Cómo?
x >= 0
fuente
05AB1E ,
4241 bytesPort of @dylnan 's Jelly respuesta .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Ver este consejo 05AB1E mío (sección Cómo comprimir listas de números enteros? ) Para entender por qué
•Hhç₁d©u÷^Σ(“ðΣèõĆ\n-•184в
es[33,34,183,36,37,38,47,40,41,61,33,64,35,36,37,94,38,42,40,41]
). Este (junto con el2ä
) es de 1 byte más corto que tomar los valores Unicode de la cadena:'""!ÿ·$%&/()=""!@#$%^&*()"‚Ç
.fuente
!$
y!!$$%%
deberían generar solo un número, ya que el resultado es el mismo para ambos diseños y no hay ambigüedad.Ruby , 68 bytes
Pruébalo en línea!
fuente
Limpio , 116 bytes
Pruébalo en línea!
Toma entrada y está codificado en CP437. TIO solo admite UTF-8, por lo que se utiliza un escape en el código de demostración para obtener el valor de byte literal 250 correspondiente al punto central (contado como un byte).
fuente
!$%
entrada debe generar solo un número, no dos, ya que el resultado es el mismo para ambos diseños.APL (Dyalog) , 40 bytes
Función de prefijo tácito anónimo. Aunque no
·
se utiliza, está en el conjunto de caracteres de un solo byte Dyalog . Asume indexación basada en 0 (⎕IO←0
) que es predeterminada en muchos sistemas.Pruébalo en línea!
⊂
todo el argumento'=!"·$%&/()' ')!@#$%^&*('⍳¨
índices de los caracteres en cada una de estas cadenas{∪⍵/⍨~10∊¨⍵}
aplique la siguiente lambda (⍵
es el argumento):10∊¨⍵
para cada lista de dígitos, si 10 (que indica "no encontrado") es miembro del mismo~
negación local (es decir, solo aquellos donde se encuentran todos los dígitos)⍵/⍨
filtrar el argumento por eso∪
encontrar los elementos únicos de esofuente
Dart , 125 bytes
Sin golf:
Pruébalo en Dartpad!
fuente
T-SQL, 143 bytes
La entrada se toma a través de la tabla i existente con el campo varchar v , según nuestros estándares IO .
Une la tabla de entrada con las dos cadenas de caracteres diferentes, luego usa la nueva función SQL 2017
TRANSLATE
para intercambiar caracteres individuales yTRY_CAST
ver si terminamos con un número. Si no,TRY_CAST
vuelveNULL
.El exterior final
SELECT DISTINCT
combina resultados idénticos y filtra elNULLS
.fuente