Este es un desafío de golf de código bastante simple. Su programa, dada una cadena ASCII, es analizar esa cadena en dos cadenas, que evaluará. Si la segunda cadena es "posterior" a la primera, devolverá un 1, si es "anterior" a la primera, devolverá un -1, y si son iguales, devolverá 0. A aclare lo que significa "más adelante" y "más temprano", echemos un vistazo a los códigos de caracteres ASCII. Debe comparar cada carácter de la cadena, tratando cada uno de ellos como dígitos de un número. Más tarde se refiere a un número mayor, que ocurre después de un número menor. Las cadenas se formatearán con un guión para separar los dos grupos de entrada.
Echale un vistazo a éste ejemplo:
7-9como una entrada debe volver1.
7convierte a código ASCII55y9convierte a código ASCII57.Como
57ocurre numéricamente después55,9es posterior a7.
Otro ejemplo:
LKzb-LKajcomo una entrada debe volver-1Las secuencias de código ASCII para esto son
76-75-122-98y76-75-97-106
Este es un desafío de código de golf, y el recuento de bytes es cómo se puntuarán las entradas.
Se acepta cualquier entrada de los 95 caracteres ASCII imprimibles, excluyendo espacios y guiones para cualquier cosa que no sea separar la entrada. Además, no se garantiza que las cadenas tengan la misma longitud.
¡Buena suerte!
EDITAR: Para ser más claro, cada carácter debe tratarse como un dígito en un número. En el ejemplo LKzb-LKaj, aunque jes posterior a b, zes posterior a a, y dado que es un dígito más significativo, tiene prioridad. Una cadena suministrada siempre tendrá al menos 3 caracteres, eliminando cadenas vacías del alcance de este problema.
EDITAR: Aquí hay algunos casos de prueba más, para su ayuda:
A-9->-111-Z->-13h~J*-3h~J*->0Xv-Y0->1
fuente

11-Z->-1no tiene sentido dada la redacción actual de la pregunta.Z(90) es mayor que1(49) y es la letra más significativa. Aclare cómo se comparan las cadenas de diferentes longitudes.A-AA?11>Zen tus ejemplos cuando1<Z. Debe haber algún comportamiento indefinido que ver con cadenas de diferentes longitudes o el ejemplo es incorrecto.~en 126, luego incrementaría el siguiente dígito en uno, devolviendo el dígito inicial a!. Cada aumento en el dígito más significativo es equivalente a incrementar el segundo dígito más significativo en 127.Respuestas:
Pyth - 11 bytes
Fácil, utiliza el
._signo para obtener el signo yCobtener códigos de caracteres.Pruébelo en línea aquí .
Banco de pruebas .
fuente
CJam, 12 bytes
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Java,
86118Una forma muy extraña de comparar cadenas. Hizo una solución rápida para que pase casos de prueba adicionales, más tarde buscará más golf.
Gracias a Vartan en comentarios por
signumsugerenciafuente
return s[0].compareTo(s[1]);11-Zregresar-1, regresa1."A".compareTo("Z")vuelve-25. Desafortunadamente.i = a!=b ? b-a : s[1].compareTo(s[0]);Parece que no lo entiendo ... Además, tal vez podrías usar Math.signum y ahorrarte declarando i;Perl, 31 bytes
30 bytes + 1 byte para
-p. Acepta entradas en STDIN.Explicación
Cuando los operandos
cmptienen diferentes longitudes, comochickenyegg, se alinean así:para que
egg>chicken(\0es un byte nulo). Pero queremos que estén alineados así:para que
chicken>egg.Para hacer esto, los concatenamos, una vez con
chickenbeforeeggy otra coneggbeforechicken:Ahora que nuestras dos cadenas tienen la misma longitud, eliminamos la palabra principal usando un XOR para obtener:
Y ahora podemos usar
cmppara encontrar cuál vino primero. (¡Ahí lo dije!)fuente
Python 2, 88 caracteres
cmpno hace lo correcto cuando tiene dos cadenas de longitud diferentes, por lo que tengo que rellenarlas con el carácter nulo (que seordconvierte en0) para manejar ese caso. Desafortunadamente, eso agregó unos 35 caracteres, además ahora son dos líneas en lugar de una porque necesito tanto la longitud de la entrada como para iterar sobre ella.fuente
1-2que debería devolver1retornos-1. Trabajo inteligente sin embargo.11-Acaso, que debería regresar-1, en lugar de regresar1en este ejemplo.R, 54 bytes
Esto requiere la biblioteca pracma. Divide la cadena de entrada en el
-. La derecha justifica las cuerdas. Los clasifica y hace una diferencia.Entonces para 11-7 terminamos con las cadenas "11" y "7". El rango de estos es [2, 1]. La diferencia es -1. Por 3h ~ J * -3h ~ J * obtenemos "3h ~ J *" y "3h ~ J *". El rango de estos es [1.5, 1.5] con una diferencia de 0.
Ejemplos de prueba
fuente
CoffeeScript,
143140139Aquí hay un jsfiddle con los resultados (mira en la consola)
fuente
PERL,
4636 BytesConvierte la lista argv en una cadena, se divide por el guión en un argumento sin espacios a la izquierda y a la derecha, luego devuelve una llamada cmp.
fuente
"@ARGV"=~/-/;print$`cmp$'(sin probar)cmp, pero no funciona cuando las longitudes de las cadenas son diferentes."A" cmp "9"es 1 mientras"11" cmp "Z"es -1, aunque ambas entradas deberían devolver el mismo valor para este desafío.Python 3, 84 bytes
Divida la entrada de cadena por
"-". Convierta las cadenas unicode en cadenas de bytes, luego interprete estas cadenas de bytes como enteros big-endian. Finalmente haga la comparación: (desafortunadamente)cmpya no está disponible en Python 3.Python 2, 69 bytes
fuente
printycmp.Python 2, 79 bytes
Solución bastante simple, y es fácil de entender. Compara longitudes de cadena, luego compara las cadenas de forma lexigráfica.
Pruébalo aquí
fuente
perl5, 64
Simplemente ejecútalo desde la línea de comandos. aunque se vería mejor con una nueva línea, pero eso cuesta 1 char.
Esta versión más larga maneja longitudes no coincidentes correctamente.
fuente
/-/,$_=$`cmp$'sería más fácil y puedes saltarte el-aF-bit. Además, cuento esto como 20 (16 para$_=$F[1]cmp$F[0]y 4 parapaF-, guardados en un archivo y ejecutados comoperl -paF- file.pl).cmpno funciona cuando las dos cadenas son de diferente longitud, como con11-Z./-/;$_=length$'<=>length$`||$' cmp$`y-p. ($`almacena todo antes de la coincidencia de expresiones regulares,$'almacena todo después). El uso enmaprealidad cuesta más bytes que simplemente llamarlengthdos veces.F #, 53
Esto tiene la forma de una función anónima (lambda), por lo que debe pegarla y proporcionar el parámetro directamente después de (o, usando la notación de tubería). Por ejemplo (en FSI):
fuente
JavaScript ES6,
4643 bytesfuente
11-Zdebería regresar-1pero regresa1.'11'>'Z'cuando'11'<'ZZ'no hay nada en la pregunta sobre cómo comparar cadenas de diferentes longitudes o qué valor tiene una cadena vacía?Ruby, 59 bytes
fuente
05AB1E ,
12119 bytesPruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente