(inspirado en esta publicación sobre Puzzling. PRECAUCIÓN: LOS SPOILERS PARA ESE PUZZLE ESTÁN A CONTINUACIÓN).
El teclado del teléfono estándar correlaciona letras con números de la siguiente manera:
1 ->
2 -> ABC
3 -> DEF
4 -> GHI
5 -> JKL
6 -> MNO
7 -> PQRS
8 -> TUV
9 -> WXYZ
0 ->
Una palabra de entrada dada se define como una palabra ordenada si, cuando se traduce a las pulsaciones del teclado usando lo anterior, el número resultante no disminuye o no aumenta. En otras palabras, el número resultante no puede aumentar y disminuir.
Por ejemplo, la palabra se CAT
traduce como 228
no decreciente y, por lo tanto, como una palabra ordenada. Sin embargo, la palabra DOG
es 364
, que aumenta y disminuye, y por lo tanto no es una palabra ordenada.
El reto
Dada una palabra, salida ya sea ordenada o no.
Entrada
- Una palabra (no necesariamente una palabra del diccionario) que consta de letras del alfabeto ASCII (
[A-Z]
o[a-z]
) únicamente, en cualquier formato adecuado . - Usted elige si la entrada es todo en mayúsculas o minúsculas, pero debe ser consistente.
- La palabra tendrá al menos 3 caracteres de longitud.
Salida
Un valor de verdad / falsey consistente para saber si la palabra de entrada es Ordenada (verdad) o no Ordenada (falsey).
Reglas
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Ejemplos
Aquí hay algunas palabras ordenadas (es decir, verdad), y hay más sobre el rompecabezas vinculado.
CAT
TAC
AAA
DEMONS
SKID
LKJONMSRQP
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Aquí hay algunas palabras no ordenadas (es decir, falsey)
DOG
GOD
ROSE
COFFEE
JKLMNOGHI
abc->t9
este desafío es controlar la monotonía?abc->t9
.AAA
Respuestas:
Python 2 ,
16414813277 bytes-16 bytes gracias a la sugerencia de Rod en otro lugar . Un maldito -55 bytes gracias a Arnold Palmer.
Pruébalo en línea!
La entrada debe ser mayúscula. Salidas
True
o enFalse
función de su orden.Explicación
La primera línea asigna cada letra a un número.
Esto funciona basado en:
* Los valores son redondeados. :PAGS
La segunda línea sale si la lista de números está en orden ascendente o descendente.
fuente
JavaScript (ES6),
83 ... 7170 bytesDevuelve un booleano.
Casos de prueba
Mostrar fragmento de código
¿Cómo?
Conversión de letras
Usamos
parseInt(c, 35)
para convertir cada letra de la cadena de entrada a algún número en [ 10 .. 34 ]. Como es base 35, "Z" se convierte en suNaN
lugar.La expresión
* .32 | 0
asigna este número en el intervalo [ 3 .. 10 ], lo que lleva a 8 grupos correctos de letras para "A" a "Y" . Necesitamos|| 10
obtener el valor correcto para "Z" .Prueba de orden
Llevamos un registro de los signos de diferencias entre números consecutivos en la máscara de bits v , inicialmente establecida en 3 (0b11):
El valor anterior se almacena en la misma variable x que la entrada. Esto garantiza que la primera iteración, donde no existe un valor anterior , no borrará ningún bit, porque una cadena que contiene solo letras no es mayor ni menor que cualquier número:
Se ordena una palabra a menos que se encuentren ambos signos, lo que conduce a v = 0 y hace que
every()
falle.fuente
Gelatina ,
28, 27, 25, 23, 22, 21, 19,18 bytesPruébalo en línea!
¡Fue muy divertido escribirlo!
Explicación:
Gracias a @ErikTheOutgolfer, @leakynun y @BusinessCat por todos los bytes guardados. :)
fuente
05AB1E , 36 bytes
Pruébalo en línea!
fuente
.•1нJ©½è`ÇHø¹á₂N¸°…ÈáÀ•#
porA•22ā₂•S£
.MATL ,
2625 bytesLa entrada está en letras mayúsculas. La salida es
1
o0
.Pruébalo en línea!
Explicación
fuente
Casco ,
22 21 1918 bytesDevoluciones
1
para entradas verdaderas,0
para entradas falsas. Las entradas deben estar en mayúsculas. Pasa todos los casos de prueba. Pruébalo en línea!Explicación
fuente
Python 2 , 60 bytes
Pruébalo en línea!
Acepta entradas en minúsculas.
Cómo funciona
⌊3681 / x ⌋ disminuye desde
a
;c
yd
;f
yg
;i
yj
;l
ym
;o
yp
;s
yt
;v
yw
;z
.fuente
C ++,
375199195194 bytesGracias a la respuesta JavaScript de Shaggy:
-5 bytes gracias a Zacharý
fuente
int j=1,i=0,d=0
al bucle for?i
yd
se utilizan fuera del bloque de bucle, no puedoi==0||d==0
==>i*d==0
.!(i*d)
? (quitando el espacio despuésreturn
)05AB1E , 30 bytes
Pruébalo en línea!
-1 gracias a Magic Octopus Urn .
fuente
¥0K0.SË
porque¥0‹Ë
no es correcto? No puedo decir si0.S
es necesario.¥0K0‹Ë
parece funcionar.Retina , 65 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Cambia la primera letra de cada tecla a un dígito. (Esto está desactivado en 1, pero eso no importa para una verificación ascendente / descendente. Por otro lado, los ceros harían mi vida más difícil, así que dejé un personaje de relleno).
Mezcle todas las letras restantes hasta 1 y repita hasta que se hayan convertido a dígitos.
Convierta los dígitos en unarios, pero solo una vez por ejecución de dígitos idénticos. Los valores unarios se separan con un
<
...... pero si el LHS resulta ser mayor que el RHS, corrija el
<
a>
.Elimine los
1
mensajes que ya no son necesarios.Verifique que la palabra esté ordenada. (El final
>
viene del último dígito que siempre se compara mayor que el espacio vacío que lo sigue).fuente
Pyth , 23 bytes
¡Una de mis primeras respuestas Pyth no triviales! Guardado 6 bytes gracias a @LeakyNun. La solución inicial está abajo.
Banco de pruebas.
Pyth , 29 bytes
Banco de pruebas.
Explicación
fuente
05AB1E ,
2117 bytesCódigo
Utiliza la codificación 05AB1E .
Pruébalo en línea! o Verifique todos los casos de prueba!
Explicación
Esto ahora esencialmente asigna las siguientes letras a los siguientes números:
fuente
JavaScript (ES6),
1079795928885 bytesFunciona con cuerdas mixtas. Vuelve
1
por veracidad o0
por falsey.Intentalo
fuente
Math.min((parseInt(c,36)-3)/3.13|0,9)
en lugar"2..9"[parseInt(c,36)-10]
de guardar algunos bytesAAA
.Gaia ,
29272517 bytesPruébalo en línea!
Explicación
fuente
05AB1E , 13 bytes
Cada vez que veo una pregunta de teclado numérico, tengo que hacer una respuesta basada en pi.
Pruébelo en línea o verifique todos los casos de prueba
fuente
Jalea , 32 bytes
Pruébalo en línea!
fuente
32222323
así que ahorra solo 2 bytes.C # (.NET Core) , 133 bytes
Pruébalo en línea!
Siento que hay espacio para ahorrar, pero C # no es un lenguaje conciso, por lo que tal vez no. Sin golf:
En particular, creo que hay una forma más corta de expresar la verificación final de validez, posiblemente una forma de alinearla con el
Zip
. Encontrar una manera de expresarloZip
sin necesidad de almacenamiento temporal para elSkip
también ahorraría algo, pero dudo que haya algo más conciso para eso.fuente
Python 3 ,
143147148149130 bytesLo mejor que puedo hacer por ahora. La función cruda convierte la letra en el número basado en el código ASCII. Definitivamente hay algunas mejoras por hacer. 0 es verdadero, 1 es falsey (lo siento). Ahorré 10 bytes gracias a Rod, otros 3 gracias al Sr. Xcoder.
Pruébalo en línea!
fuente
x=[f(a)-f(b)for a,b in zip(s,s[1:])]
para guardar algunos bytesmin(int((ord(c)-58)/3.13),9)
es una forma más corta de convertir el carbónPython 2 ,
111103bytes-8 bytes gracias a @Arnold Palmer: no es
lower()
necesarioPruébalo en línea!
fuente
.lower()
ya que la entrada puede ser en cualquier caso que especifique.PHP 7,
98 + 1 95 + 184 + 1 bytesUn puerto de golf de la respuesta de Arnauld .
acepta mayúsculas; salida vacía para falsedad,
1
para verdad.Ejecutar como tubería con
-nR
o probarlo en línea .publicación original:
fuente
CJam,
37313027 bytesPruébalo en línea
Por supuesto, la versión fea termina siendo más corta ...
fuente
C (gcc) ,
183 169 153117 bytesPruébalo en línea!
Vieja solución:
Guardado 8 bytes gracias a ThePirateBay.
Vieja y vieja solución:
Vieja vieja vieja solución:
fuente
TI-Basic,
9266 bytesConvierte cada carácter de la cadena en un entero de 0 a 7, y toma la diferencia entre cada elemento consecutivo; luego verifica si las diferencias mínimas y máximas tienen el mismo signo (o si es 0).
fuente
ΔList(int(4^-1seq(inString("DEF GHI JKL MNO PQRSTUV WXYZ",sub(Ans,I,1))+3,I,1,length(Ans
ahorra un byte.Zsh ,
73 6957 bytes-12 bytes usando la
3681/code
conversión de @ anders-kaseorg .Pruébalo en línea! Pruébalo en línea!Pruébalo en línea!Algunas cosas que abusamos:
((statement,statement,...))
es una secuencia de expresiones aritméticas que devuelve verdad si la última declaración es distinta de cero.sólo un par deno se utiliza paréntesis. Se podría guardar un byte si se!
enlaza con menos fuerza que&
.0
en expansiones aritméticas.La función que utilizamos para asignar al número del teclado escomo solo necesitamos el cambio entre códigos, no hacemos el ajuste lineal.CODE / 3.2 - 18
(con un caso especial paraZ
), peroSe pueden guardar 2 bytes si se pueden intercambiar los valores de verdadero / falso.
fuente