(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 CATtraduce como 228no decreciente y, por lo tanto, como una palabra ordenada. Sin embargo, la palabra DOGes 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->t9este desafío es controlar la monotonía?abc->t9.AAARespuestas:
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
Trueo enFalsefunció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 suNaNlugar.La expresión
* .32 | 0asigna este número en el intervalo [ 3 .. 10 ], lo que lleva a 8 grupos correctos de letras para "A" a "Y" . Necesitamos|| 10obtener 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
1o0.Pruébalo en línea!
Explicación
fuente
Casco ,
22 21 1918 bytesDevoluciones
1para entradas verdaderas,0para 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;cyd;fyg;iyj;lym;oyp;syt;vyw;z.fuente
C ++,
375199195194 bytesGracias a la respuesta JavaScript de Shaggy:
-5 bytes gracias a Zacharý
fuente
int j=1,i=0,d=0al bucle for?iydse 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.Ses 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
1mensajes 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
/{_BKmhS,9/a58Cd3.13zSKQ: la Q significa entrada evaluada y está implícita al final {- Deduplicar _ - Marcha atrás B - Bifurcar, crear una lista de dos elementos, [B, A (B)] K - Variable con autoasignación para: mz - Mapa sobre la entrada: hS - Mínimo (primer elemento de la lista ordenada) , - Cree una lista de dos elementos, [A, B] con estos elementos: 9 - El literal numérico 9 / - La división entera de: a58Cd: la diferencia absoluta entre 58 y ord (current_element) 3.13 - El literal numérico 3.13 SK - K ordenados / Q - Cuenta las ocurrencias de la entrada en [K, K [:: - 1]]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
1por veracidad o0por 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
32222323así 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 expresarloZipsin necesidad de almacenamiento temporal para elSkiptambié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,
1para verdad.Ejecutar como tubería con
-nRo 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(Ansahorra un byte.Zsh ,
73 6957 bytes-12 bytes usando la
3681/codeconversió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&.0en 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