El reto
El objetivo de este desafío es determinar si una cadena determinada se puede escribir usando solo una línea de un teclado QWERTY estándar del Reino Unido.
Esto es code golf
, ¡la solución más corta en bytes gana!
IO
La entrada será una sola cadena de cero o más caracteres en el rango decimal ASCII de 32-126 inclusive. Puede suponer para este desafío que una cadena vacía no requiere escritura y, por lo tanto, puede escribirse con una sola línea.
Puede tomar la entrada como una cadena, una lista de caracteres o una forma equivalente para su idioma.
La salida debe ser un valor verdadero para cualquier cadena que se pueda escribir usando una sola línea, o falsey para una que no se puede escribir.
Diseño del teclado
Para aclarar cualquier ambigüedad sobre cuál es la distribución estándar del teclado a continuación, hay una lista de teclas disponibles en cada línea, incluidas las teclas superiores alternativas (a las que se accede mediante Mayús).
- Línea 1
- Estándar:
`1234567890-=
- Estándar:
- Línea 2
- Estándar:
qwertyuiop[]
- Estándar:
- Línea 3
- Estándar:
asdfghjkl;'#
- Mayúscula:
ASDFGHJKL
- Especial: Bloqueo de mayúsculas
- Estándar:
- Línea 4
- Estándar:
\zxcvbnm,./
- Alterno:
|<>?
- Mayúscula:
ZXCVBNM
- Especial: cambio
- Estándar:
- Línea 5
- Especial: barra espaciadora
Las teclas superiores alternativas solo se pueden presionar si Shift también está en la misma línea, y solo se puede acceder a las teclas mayúsculas a través de Mayúsculas o Mayúsculas. ¡Realmente solo puedes usar una línea de teclado!
Casos de prueba
-> true (empty string)
45-2=43 -> true (line 1)
qwerty -> true (line 2)
tryitout -> true (line 2)
Qwerty -> false (no shift or caps on line 2)
#sad -> true (line 3)
AsDf -> true (caps lock used)
@sDF -> false (no shift for alternate upper)
zxcvbn? -> true (line 4)
zxc vbn -> false (spacebar on separate line)
123abc -> false (multiple lines)
-> true (just space bar)
!!! -> false (exclamation marks cannot be printed by a single line)
fuente
Respuestas:
Python 2 ,
130123121115 bytesPruébalo en línea!
Python 3 , 111 bytes
Pruébalo en línea!
-4 bytes, gracias a nedla2004
fuente
Retina 0.8.2 ,
7271 bytesPruébalo en línea! Explicación: Cada alternancia coincide con una fila diferente del teclado. El
(?i)
en el medio del patrón hace que todo el resto del patrón coincida entre mayúsculas y minúsculas. Editar: guardado 1 byte gracias a @KirillL.fuente
opqr
se puede cambiar ao-r
por -1. Además, ¿olvidó un carácter de retroceso para la línea 1, no lo veo?[][...
:)05AB1E ,
6647 bytesToma la entrada como una lista de caracteres.
-19 bytes gracias a @Emigna . Olvidé por completo que teníamos qwerty-keyboard constantes incorporados. :RE
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Perl 5
-pl
, 76 bytesPruébalo en línea!
El obvio enfoque regex.
fuente
Ruby
-n
,8681 bytesPruébalo en línea!
fuente
JavaScript (Node.js) ,
999895 bytesPruébalo en línea!
-1 del comentario de @Kirill L. en la respuesta Retina.
-3 agradece a @Ismael Miguel y @Arnauld por su esfuerzo combinado.
fuente
asdfghjkl
yASDFGHJKL
allí? ¿Por qué no usas lai
bandera, comox=>/.../i.test(x)
?QWERTYUIOP
no debería coincidir con la expresión regular. El cheque adicional costará más que codificar esas letras mayúsculas directamente en la expresión regular.x=>/^([-`=\d]+|[wetyuio-r\[\]]+)$/.test(x)||/^([asdfghjkl;'#]+|[zxcvbnm,.\/<>?\\|]+| *)$/i.test(x)
tiene la misma duración|
ahorra 1 byte.\
,]
y-
(vea ClassAtomNoDash en la especificación). El guión también puede aparecer sin escape si es el primer o el último carácter (de lo contrario, se interpreta como un separador de rango de caracteres).Perl 6 ,
102101100bytes-1 byte gracias a nwellnhof!
Pruébalo en línea!
Implementación bastante estándar. Probablemente haya una solución más breve basada en expresiones regulares para esto, pero no conozco la expresión regular de Perl 6 lo suficientemente bien como para intentarlo.
fuente
max
lugar de?any
(y enmin
lugar de?all
).m:P5//
. Pero no creo que valga la pena publicar ninguno de ellos como respuesta.Java 10,
209208 bytes-1 byte gracias a @TFeld .
Pruébalo en línea.
Explicación:
fuente
!!!
pesar de que los signos de exclamación no se pueden imprimir con una sola línea. Acabo de agregar eso como un caso de prueba(?i)
para las otras letras mayúsculas?p==" "
lugar dep.equals(" ")
Powershell, 87 bytes
Puerto de Neil's Retina regex .
fuente
Jalea , 55 bytes
Pruébalo en línea!
La primera línea produce una lista de las líneas del teclado y la segunda verifica si la entrada del programa está contenida en una sola línea (o cero) y si no hay caracteres que no puedan escribirse (como
QWE!@#
).fuente
C , 150 bytes
Pruébalo en línea!
No ganará ningún premio, pero este es un enfoque divertido: asignamos caracteres en las cinco filas del teclado
4 8 16 32 64
y todos los caracteres no válidos3
. O bit a bit el valor para cada carácter en la cadena juntos, y verificamos si el resultado satisfacex&(x-1) == 0
, lo cual es cierto cuandox
es una potencia de 2 o cero, es decir, siempre quex
tenga como máximo un bit establecido.fuente
LUA ,
282262259270 bytesPruébalo en línea!
fuente
PHP, 98 bytes
Estoy un poco triste porque no hay nada más corto que regex. Probablemente no sea la solución más rápida.
Ejecutar como tubería
-F
o probarlo en línea .La solución no regex más corta que encontré (124 bytes; salto de línea y pestaña para facilitar la lectura):
sale con código
1
de verdad,0
de falsedad. Ejecutar como tubería con-R
.Requiere PHP 5.4 o posterior; para PHP anterior, use en
array(...)
lugar de[...]
(+5 bytes)o use estos 123 bytes con
-nR
PHP <7:fuente
AWK ,
163119113 bytesEsta es una respuesta AWK, devuelve una cadena numérica 1 para verdadero, 0 cadena para falso. (Escrito como invocación AWK como archivo awk -f para uso interactivo).
Pruébalo en línea!
Sin embargo, no maneja el carácter TAB como está escrito (extensión trivial) como no parte de la especificación.
fuente
print
es suficiente: ¡ Pruébelo en línea!{print/^[-```1234567890=]*$/||/^[]qwertyuiop\[]*$/||/^[asdfghjkl;'#ASDFGHJKL]*$/||/^[zxcvbnm,.\/\|<>?ZXCVBNM]*$/||/^ *$/}
Bash , 119 bytes
Incluye un eco para proporcionar una salida "legible". Si coloca un envoltorio adecuado de shell (su elección) alrededor para incluir impresión / salida, entonces puede guardar 8 bytes. Mi lectura del desafío sugiere que la solución debería generar una indicación de salida adecuada, por lo que me quedo con 119 bytes.
Pruébalo en línea!
fuente