Mi fuente está en orden, ¿es la tuya?

14

Su desafío es escribir un programa, función, etc. que calcule si la cadena pasada está "en orden". Eso significa que los caracteres de la cadena tienen códigos de caracteres que están en orden de menor a mayor. El código char más pequeño debe ser el primero. Con eso me refiero a los puntos de código unicode más bajos a los más altos. No importa qué página de códigos use su idioma.

Debe devolver un valor si la entrada está "en orden" y otro si no lo está. Los valores deben ser distintos, pero no hay otra restricción en los valores de salida. Por ejemplo, puede imprimir / devolver / imprimir truepara !1AQaq¡±(en orden) y falsepara aq!QA. Los dos valores distintos no necesitan ser verdaderos o falsos ni nada por el estilo, solo dos valores distintos. Las cadenas repetidas (p. Ej. aa) Están en orden.

Solo necesita admitir hasta unicode U+007E( ~) (ascii 126)

Sin embargo, los caracteres de su programa deben estar en orden. ¡Buena suerte y feliz !

programador 5000
fuente
¿No necesitas tener valores de verdad / falsedad? dos verdad funcionaria?
Rɪᴋᴇʀ
Además, ¿el código de caracteres más pequeño siempre está en el primer carácter? ¿O se puede revertir?
Rɪᴋᴇʀ
12
Code-golf honestamente parece una mala condición de victoria para esta forma de fuente restringida. El juego de bolos de código para la mayoría de los personajes únicos sería más interesante.
fəˈnɛtɪk
1
Los contras de @Pavel Pop no funcionan bien para lograr una tarea particular de una manera particular.
Dennis
2
se repite la cadena en orden? por ejemplo, está "aa"en orden?
tsh

Respuestas:

14

Brachylog , 2 bytes

.o

Pruébalo en línea!

Explicación

.o
.   Assert that {the input} equals the output of the last command in the program
 o  Sort {the input}

Como programa completo, una falla de aserción da false., cualquier ejecución exitosa que no viole ninguna aserción datrue.


fuente
9

Jalea , 2 bytes

Ṣ⁼

Pruébalo en línea!

Explicación

Ṣ⁼
Ṣ    Sort {the input}
 ⁼   Compare that to {the input} for equality of the whole structure

⁼Ṣ también tiene la funcionalidad correcta ("comparar la entrada con la entrada ordenada"), por lo que fue solo un caso de ejecutar los dos programas en sí mismos para averiguar cuál estaba en orden (ciertamente no tengo los puntos de código Unicode de esta parte del extraño conjunto de caracteres de Jelly memorizado).


fuente
Su envío es incorrecto en la codificación Jelly, necesita serlo ⁼Ṣ. Puedes ver la página de códigos de Jelly aquí .
Erik the Outgolfer
@EriktheOutgolfer Eso se soluciona fácilmente; ⁼Ṣhace exactamente lo mismo que Ṣ⁼.
steenbergh
@steenbergh Esta presentación, como es ahora, no es válida. Aunque la solución es fácil, aún no se ha aplicado, y se desaconseja que otros editen código.
Erik the Outgolfer
1
@EriktheOutgolfer La discusión sobre esta respuesta es principalmente sobre qué página de códigos usar: el desafío hace referencia a Unicode (aunque no nos dice explícitamente que lo usemos) y Jelly tiene su propia página de códigos. Cualquiera sea el resultado, arreglar esta respuesta es trivial. Por lo tanto, no iría tan lejos como llamar a esta respuesta 'inválida', ni siquiera la votaría en su estado actual.
steenbergh
@steenbergh Yo tampoco he votado mal, solo estaba notificando a ais523 :)
Erik the Outgolfer
9

MATL , 5 bytes

GGS\a

Salidas 0si la entrada está en orden, de lo 1contrario.

Pruébalo en línea!

Explicación

Esto calcula el módulo de (los puntos de código de) cada carácter de la entrada con el mismo índice en la entrada ordenada. La entrada está en orden si y solo si todos los resultados son 0.

Por ejemplo, considere la cadena de entrada BCD!. Ordenarlo da '!BCD. Las matrices de puntos de código son respectivamente [66 67 68 33]y [33 66 67 68]. Calcular el módulo da [0 1 1 33], por lo que la entrada no está en orden. Tenga en cuenta que algunos resultados pueden ser 0incluso si los valores no fueran los mismos (aquí que sucede en la primera posición), pero eso no puede suceder en todas las entradas a menos que la entrada esté en orden.

G     % Push input string
GS    % Push input string and sort it
\     % Modulus, element-wise. This gives all zeros iff the input was in order
a     % Any: gives 1 if any entry is non-zero. Implicitly display
Luis Mendo
fuente
8

05AB1E , 3 2 bytes

¡Gracias a Kevin por cortar el 33% de mi código fuente!

Pruébalo en línea!

Explicación:

      There used to be a D here for 'Duplicate stack' 
      but we now use the same input twice implicitly
 {    Sort the copy
  å   Check if the sorted copy is a substring of the original
      This will only return 1 if the original input is sorted, 0 otherwise.
Steenbergh
fuente
D{Qtambién funciona ...
Neil A.
1
@ NeilA.Puede hacer lo mismo, pero los personajes no están en orden. El requisito es que su código fuente pase la misma prueba que los datos. Esto debería producir 1 .
steenbergh
1
Se Dpuede eliminar para -1 simplemente usando una entrada implícita dos veces.
Kevin Cruijssen
5

2sable , 2 bytes

Pruébalo en línea!

Explicación

{    # sorted input
 Ê   # not equals (implicit input)

Emite 0 si es orden, de lo contrario 1 .

Emigna
fuente
1
@steenbergh: Ah, perdí esa parte del desafío.
Emigna
1
@steenbergh: ¡arreglado! Afortunadamente, pudimos generar valores distintos :)
Emigna
2

Pyth, 2 bytes

<S

Falsesignifica ordenado, Truesignifica sin clasificar.

Banco de pruebas

Esto fue bastante poco trivial. La solución más obvia a este problema, sin la fuente restringida, es SIinvariante en la clasificación. Pero eso no está ordenado. Entonces pensé en qS, que implícitamente usa la variable de entrada dos veces, verificando si es igual a su yo ordenado. Pero mientras q < s, q > Sasí que esto tampoco funcionó. Pero <viene antes S, y la única forma en que la versión ordenada no puede ser menor que la original es si la original fue ordenada, ya que la versión ordenada es la permutación lexicográficamente mínima de los elementos.

isaacg
fuente
1

CGL (lenguaje de golf CGL) , 4 bytes (no competitivos)

-:Sc

Explicación:

- Decrement the stack counter so the current stack is where input is put
: Split the first element of the current stack (input) into an array of single strings, make that the next stack, and increment the stack counter
S Sort the current stack
c Compare the current stack and the one before, push that to the next stack and increment the stack counter
(implicit) Output the first element of the current stack, true if in order, false if not.

No compiten porque :, Sy cse implementaron después de la creación de este desafío.

programador 5000
fuente
¿Hay pruebas de que este lenguaje fue creado antes de este desafío?
Kritixi Lithos
@KritixiLithos sí, y técnicamente es un lenguaje válido, pero haré que esto no compita porque las funciones necesarias para completar esto se realizaron después de este desafío. CGL todavía es un trabajo en progreso, y estoy usando desafíos para mostrarme qué nuevas funciones deberían agregarse.
programmer5000