¡Firma esa palabra 2!
No hace mucho tiempo, publiqué un desafío llamado ¡ Firma esa palabra! . En el desafío, debe encontrar la firma de la palabra, que son las letras ordenadas (por ejemplo, la firma de this
is hist
). Ahora bien, ese desafío funcionó bastante bien, pero hubo un problema clave: fue MUY fácil (vea la respuesta de GolfScript ). Entonces, publiqué un desafío similar, pero con más reglas, la mayoría de las cuales han sido sugeridas por los usuarios de PPCG en los comentarios sobre el rompecabezas anterior. ¡Así que, aquí vamos!
Reglas
- Su programa debe tener una entrada, salida y luego la firma en STDOUT o su equivalente en cualquier idioma utilizando su.
- No está permitido el uso integrado de funciones de ordenación, así que cosas como
$
no está permitido en GolfScript. - Multicaso debe ser apoyada - sus cartas grupo de programas deben de mayúsculas y minúsculas juntos. Entonces, la firma de
Hello
eseHllo
, noHello
como la respuesta de GolfScript en la primera versión. - Debe haber un intérprete / compilador gratuito para su programa, al que debe vincular.
Puntuación
Tu puntuación es tu recuento de bytes. El conteo de bytes más bajo gana.
Tabla de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
ThHihs
, ¿podemos generarhHhist
o tenemos que generarhhHist
oHhhist
?Respuestas:
Pyth, 10 bytes
Pruébelo en línea: demostración
Explicación:
fuente
Haskell, 51
El
zip
crea una lista de pares de caracteres[('a','A'), ...('z','Z')]
. Debido al truncamiento, no es necesario especificar el segundo punto final. Para cada par de la lista, tomamos las letras en la cadena de entradas
que son cualquiera de los dos caracteres del par.fuente
Python 3,
7270 bytesAsume que la entrada consta de solo
[a-zA-Z]
.(-2 bytes gracias a @xnor)
fuente
"".join(c*b ...)
de"".join(c ... if b)
la misma manerasum(n ... if b)
puede sersum(n*b ...)
.c=1 for d in(input()+'~')*26:print(d[ord(d)&32^c:],end='');c+=d>'z'
(67)GOTO ++, 531 bytes
Página del proyecto GOTO ++
Aquí hay una versión ligeramente más legible y comentada del código (tenga en cuenta que
GOTO
comienza un comentario en GOTO ++):fuente
function(arg)
yfunction() arg
ambos son válidos. Además, los corchetes prioritarios son} {
y no los aburridos( )
Pyth,
1514 bytesGracias por Isaac por eliminar 1 byte.
Todavía no sé mucho sobre Pyth, por lo que es posible que esto no se juegue bien.
Pruébalo aquí
fuente
s
es lo mismo quejk
en una lista de cuerdas.JavaScript (ES6), 71
74Limitado a A-Za-z (ver comentario de @Matthieu M)
Editar también se utiliza para componer una sola expresión con comas, para evitar el 'retorno'. Aquí se requiere una salida, por lo que puedo usar un simple
for
y olvidarme de las comas.Usando la comprensión de la matriz, el conteo de bytes es 73, pero eso ya no es EcmaScript 6 válidoNota habitual: pruebe ejecutar el fragmento en cualquier navegador compatible con EcmaScript 6 (en particular, no Chrome ni MSIE. Probé en Firefox, Safari 9 podría funcionar)
fuente
Javascript,
112194 bytesEsto está muy lejos de "golf" pero estoy un poco ocupado en este momento, solo editado para eliminar la clasificación.
fuente
console.log(input.split('').sort((a,b)=>a.toLowerCase().localeCompare(b.toLowerCase())).join(''))
Pitón 3, 64
Una pequeña mejora en la respuesta de Sp3000 , que utiliza la idea de iterar iterando los índices de caracteres, y para cada uno, iterando a través de la entrada para tomar caracteres que coincidan con el caso.
Esto usa un solo bucle, pasando por la entrada 26 veces. El separador
~
se usa para saber cuándo ir al siguiente índice de caracteresc
. A si personajed
coincide con el valorc
en mayúsculas y minúsculas, los últimos cinco bits del valor de bit ded
son corregidos conc
, con un 0 que indica una coincidencia.Entonces, el carácter
d
se imprime exactamente cuando el resultado es0
, con una cadena vacía de otra manera.fuente
Python 2.7,
114106 bytesRegistra la presencia de un carácter en una matriz de 123 longitudes (para incluir los rangos AZ y az) y luego lo itera para obtener las entradas distintas de cero.
Ineficiente, pero más eficiente que la fuerza bruta (pero ya :().
Probándolo
fuente
HelloWorldhi
, consigo['d', 'e', 'H', 'h', 'i', 'lll', 'oo', 'r', 'W']
if l[j]
tampoco.join
ed). -8 bytes. Gracias :)PHP,
275270 bytesExplicación:
El código genera una matriz con cada letra del alfabeto, que tiene su valor ASCII como clave de matriz. A continuación, el código genera una nueva matriz que contiene los valores ASCII de la entrada. Luego, el valor más bajo se imprime y se elimina.
Uso:
Llame al script con un argumento:
php -d error_reporting=0 script.php Hello
Versión sin golf:
Cualquier consejo es muy apreciado.
fuente
Haskell,
8353 bytesUso:
f "HelloWorldhi"
->"deHhillloorW"
.Cómo funciona: deja
y
ser la cadena de entradaEditar: 30 bytes guardados, ¡imagínense eso! Gracias @Mauris.
fuente
import Data.Char;f y=[c|x<-[' '..],c<-y,toLower c==x]
(53 bytes)? (Esto llevará un tiempo terminar, porquelength [' '..] == 1114080
, pero es finito.)Python 3, 61 bytes
Una nueva respuesta a una técnica diferente!
Observando eso
ord('a')&31==ord('A')&31
y aquelloord('z')&31==ord('Z')&31
, simplemente podemos crear una matriz de cadenas vacías y para cada carácter agregarlo al índice de la matriz de su valor ASCII&31
. Cuando lo imprima, se ordenará.Limitado a la entrada
a-zA-Z
.fuente
Python 3,
9792 bytesLa mejor manera de ordenar es claramente generar todas las permutaciones, y luego elegir el mínimo, que simplemente se ordena :)
Las cadenas están en minúsculas antes de la comparación para cumplir con las reglas de 'mayúsculas y minúsculas'.
Advertencia: puede ser muy lento con cuerdas grandes.
Un intérprete se encuentra aquí .
fuente
Python 3, 118 bytes
Podría jugar golf mucho más corto, lo sé
fuente
if q not in i:
conif~-(q in i):
..remove()
función en él.Powershell, 164 bytes
Estoy seguro de que hay una forma más limpia de hacer esto, pero no pude encontrar nada más. Simplemente toma la entrada como una matriz de caracteres, realiza una ordenación por inserción y escupe la salida. Pierde horriblemente, incluso a otros idiomas que no son de golf.
Código:
Uso:
Ampliado y explicado:
fuente
Julia, 61 bytes
Julia lo mostrará como una salida de cadena si lo llama en REPL. Si tiene que imprimir a STDOUT, entonces necesita 78 bytes:
Un intérprete para Julia se puede encontrar aquí . Otro, en el que ya he puesto algo de código, es aquí . Tenga en cuenta que, con el segundo, deberá hacer que el terminal (en la parte inferior) sea visible arrastrando el límite hacia arriba. Al hacer clic en "ejecutar", se ejecutará en el terminal en la línea de comando normal (y, por lo tanto, no mostrará el resultado si se llama sin println). Alternativamente, puede escribir
julia
en el terminal en sí, luego manejar todo lo que aparezca dentro del REPL.Y para un poco más de diversión, aquí hay algunas otras implementaciones
Gnome Sort (83 bytes):
Mi propio algoritmo de clasificación (84 bytes):
fuente
Scala, 82 bytes
desde la línea de comando:
probablemente se pueda jugar un poco más ... simplemente implementando el tipo de inserción usando fold.
fuente
código de máquina x86,
5142 bytesClasificación de burbujas, con algunos trucos de reutilización de registros para reducir bytes aquí y allá; el archivo .COM se ejecuta en DosBox, recibe la entrada de la línea de comando e imprime la salida a la salida estándar.
Asamblea comentada:
fuente
Java (JDK 10) , 125 bytes
Pruébalo en línea!
Usando una especie ingenua.
fuente
Perl, 88 bytes
Solo un simple Bubble Sort. Llame con la opción -n para pasar el texto.
p.ej:
Salida:
fuente
PHP, 106 bytes
El código:
No hay nada especial en el código;
count_chars()
produce una matriz indexada por códigos ASCII que contiene el número de ocurrencias para cada carácter ASCII. El resto es una iteración aburrida sobre esta matriz.Ejemplo de ejecución:
Se puede guardar un byte adicional usando PHP 7: reemplazar
$c[$i]
con($c=count_chars($argv[1]))[$i]
y eliminar la asignación$c
desde el comienzo del programa.fuente
Haskell, 74 bytes
Completamente diferente de mi otra respuesta . Esta vez es un tipo de inserción simple.
fuente
Pip,
1814 bytesRepositorio de GitHub para Pip
Parece que no hay competencia con Pyth, pero esto es bastante respetable.
Funciona solo en cadenas que contienen
a-zA-Z
. Para cada letra del alfabeto, utiliza una operación de filtro para tomar las letras de la cadena de entrada que igualan esa letra sin distinción entre mayúsculas y minúsculas:Dos notas:
AZO
se escanearía comoA ZO
lugar deAZ O
;x
al final del código (imprimiendo así una cadena vacía después de finalizar el bucle).Ejecución de muestra (utilizando la
x
variante):fuente
Perl 5
-a
, 31 bytesPruébalo en línea!
fuente