Inspirado en un meme que vi hoy más temprano.
Descripción del desafío
Considere una cuadrícula de alfabeto infinito:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
...
Tome una palabra ( CODEGOLF
en este ejemplo) y conviértala en una subsecuencia de la cuadrícula, reemplazando las letras no utilizadas por un espacio y eliminando las letras al final de la cuadrícula infinita por completo:
C O
DE G O
L
F
Ejemplos
STACKEXCHANGE
ST
A C K
E X
C H
A N
G
E
ZYXWVUTSRQPONMLKJIHGFEDCBA
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
F
F
ANTIDISESTABLISHMENTARIANISM
A N T
I
D I S
E ST
AB L
I S
H M
E N T
A R
I
A N
I S
M
Notas
- Se permiten espacios en blanco al final.
- No necesita rellenar
la últimalínea con espacios. Por ejemplo, si la entrada esABC
, puede salirABC
sin 23 espacios finales. - Puede suponer que la entrada coincidirá con la
[A-Z]+
expresión regular. - Alternativamente, puede usar el alfabeto en minúsculas, en cuyo caso la salida coincidirá
[a-z]+
. - Se debe utilizar una nueva línea (
\n
,\r\n
o equivalente) a las líneas separadas, que es una lista de cadenas no es un formato de salida adecuado. - Este es un desafío de código de golf , ¡así que haga su código lo más corto posible!
BALLOON
(dos caracteres adyacentes que son iguales).Respuestas:
Casco , 15 bytes
Pruébalo en línea!
Explicación
fuente
Java 10,
161159152 bytes-2 bytes gracias a @Nevay .
-7 bytes de impresión directamente en lugar de devolver una Cadena y convertir a Java 10.
Explicación: "
Pruébalo aquí
La primera parte del método divide la palabra de entrada en partes con un delimitador.
Por ejemplo:
CODEGOLF
→CO;DEGO;L;F
oBALLOON
→B;AL;LO;O;N
.La segunda parte recorre estas partes y usa la expresión regular
[^...]
para reemplazar todo lo que no coincide con un espacio.Por ejemplo,
.replaceAll("[^CO]"," ")
deja elC
, yO
, y reemplaza todo lo demás con un espacio.fuente
B;AL;LO;O;N
?for(char c:s)x+=p<(p=c)?c:";"+c;
.C (gcc) , 69 bytes
Pruébalo en línea!
fuente
Perl 5 , 44 bytes
Código de 40 bytes + 4 para
-lF
.Pruébalo en línea!
fuente
Python 2 , 92 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 79
Editar Como se acepta una nueva línea principal, puedo guardar 2 bytes
Por 1 byte más, puedo aceptar entradas en minúsculas o mayúsculas:
Menos golf
Prueba
fuente
\n
con una nueva línea literal dentro de los backticks para -1 byte.MATL ,
2423 bytesUtiliza letras minúsculas.
¡Pruébalo en MATL Online!
Explicación
fuente
Japt ,
1816 bytes-2 bytes gracias a @Shaggy
Entrada en mayúscula solamente.
Pruébalo en línea!
Explicación
Cambie a variables alternativas, donde
B
está el alfabeto en mayúsculas.Divida la cadena de entrada entre caracteres donde el primero es mayor o igual que (
¨
) el segundo.Asigne cada partición por la función, donde
X
está la partición actual.Asigna cada carácter del alfabeto en mayúscula a lo siguiente,
Z
siendo la letra actual.Elimina todas las letras de la partición actual de la letra actual. Si la letra actual está contenida en la partición actual, esto da como resultado una cadena vacía.
Si eso es verdad (no una cadena vacía), devuelve un espacio (
S
), de lo contrario devuelve la letra actual.Une el resultado de la línea anterior con nuevas líneas e imprime el resultado.
fuente
r"[^{Z}]"S
parece un poco ridículo, pero tampoco puedo encontrar una mejor manera ...kX
!kX ?S:Z
paraoX ªS
guardar dos bytesPyth, 18 bytes
Pruébalo aquí
Nueva línea inicial en salida, alfabeto en minúsculas.
fuente
Jalea , 19 bytes
Pruébalo en línea!
fuente
OI<1®;
->>2\0;
para guardar un byte (en realidad también lo hice>2\0;œṗµØAf€ȯ€⁶µ€Y
para 18, lo que personalmente me parece más fácil de analizar)BALLOON
o algo así.<2\1;¬
; Oh bien.C (gcc),
9163 bytes-28 gracias a ASCII-only
Pruébalo en línea!
Anterior:
Sí, hay una solución más corta, pero me di cuenta después de escribir esta ... ¡ Pruébelo en línea!
fuente
Mathematica, 101 bytes
Split
la entrada en secuencias de letras estrictamente crecientes, comparando letras adyacentes conOrder
. SiOrder[x,y] == 1
, entoncesx
precedey
al alfabeto y, por lo tanto, puede aparecer en la misma línea.Para cada secuencia de letras, cree un patrón para que coincida con las cadenas
Except
de esas letras;#|##
es una abreviatura deAlternatives
. Reemplace las letrasAlphabet
que coinciden con el patrón con espacios.Ilustración de los pasos intermedios:
fuente
Golfscript,
2221 bytesPruébalo en línea!
-1 byte gracias a la cuidadosa redefinición final del
n
incorporado.Explicación (con una versión ligeramente diferente):
fuente
Retina , 80 bytes
Pruébalo en línea!
Siempre hay exactamente una nueva línea principal. El código un poco torpemente antepone la palabra con el alfabeto junto con un marcador (punto y coma). Luego mueve el marcador hasta la primera letra de la palabra, mientras cambia todas las demás letras que pasa a espacios. También elimina la primera letra de la palabra. Repite esto hasta que la primera letra de la palabra ya no esté detrás del marcador. Luego borra ese marcador y el resto del alfabeto, y lo reemplaza con una nueva línea y el alfabeto con un marcador nuevamente. Sigue repitiendo esto hasta que la palabra de entrada esté vacía, luego limpia el último alfabeto y marcador, dejando la salida deseada.
fuente
05AB1E , 18 bytes
Pruébalo en línea!
Tengo problemas con 05AB1E
ć
(extracto 1) dejando una cadena / lista vacía en la pila después de extraer el último elemento. Esta solución sería 1-2 bytes más corta si no fuera por eso.fuente
ð,
significa "imprimir un espacio y una nueva línea".Retina ,
130126 bytesPruébalo en línea! Editar: Guardado 4 bytes usando el generador de alfabeto de @ MartinEnder. Explicación:
Añade el alfabeto.
Alinee tantas letras como sea posible con su posición en el alfabeto.
Comience una nueva línea antes de la primera letra que no se pudo alinear.
Elimine el alfabeto, pero luego haga todo de nuevo hasta que no haya letras desalineadas.
fuente
q / kdb + ,
4845 bytesSolución:
Pruébalo en línea!
Nota: El enlace es a una K (oK) puerto de esta solución ya que no hay TIO para q / kdb +.
Ejemplos:
Explicación:
Q se interpreta de derecha a izquierda. La solución se divide en dos partes. Primero divida la cadena donde el siguiente carácter es menor o igual que el actual:
"STACKEXCHANGE"
->"ST","ACK","EX","CH","AN","G","E"
Luego tome una cadena de 26 espacios en blanco y aplique la entrada en los índices donde la entrada aparece en el alfabeto, e imprima en stdout.
"__________________________"
->__________________ST______
Descompostura:
Notas:
fuente
Powershell,
7063 bytes-7 bytes gracias @Veskah
Pruébalo en línea!
Explicación:
Para cada personaje en el argumento salpicado:
$x
y$x
valor claro (rv
es alias para Remove-Variable ), si un código del carácter actual es menor o equivalente (-le
) a un código del carácter anterior.$x
, almacénelo en$x
. También refresca un valor de carácter anterior.Salida al final
$x
.fuente
|% *ht
para guardar algunos bytes pero parece que no funcionó.Jalea ,
2421 bytes3 bytes gracias a Erik the Outgolfer.
Pruébalo en línea!
fuente
SOGL V0.12 , 22 bytes
Pruébalo aquí!
fuente
JavaScript (ES6), 87 bytes
Acepta entradas en mayúsculas o minúsculas. La salida coincide con el caso de la entrada.
Pruebas
Mostrar fragmento de código
fuente
Haskell,
81 7473 bytes¡Guardado 1 byte gracias a Laikoni !
Pruébalo en línea.
Optimizaciones de Haskell Hugs
El intérprete de Hugs me permite guardar un byte más haciendo en
(!cycle$['A'..'Z']++"\n")
lugar de:(!cycle(['A'..'Z']++"\n"))
pero a GHC no le gusta el primero . (Esto ahora es obsoleto; Laikoni ya reescribió esa línea de una manera que ahorró 1 byte).Aparentemente, Hugs tampoco requiere paréntesis alrededor del patrón de lista, por lo que podría guardar dos bytes más yendo de:
q@(w:y)!(x:z)
aq@(w:y)!x:z
.fuente
a=['A'..'Z']++'\n':a;(!a)
. Interesante ahora que Hugs parece tener reglas algo más laxas.a=...:a
truco ¡Gracias!Python 3 ,
8785 bytesPruébalo en línea!
fuente
J , 39 bytes
Pruébalo en línea!
fuente
Carbón de leña , 15 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
APL (Dyalog Classic) , 20 bytes
Pruébalo en línea!
fuente
K (ngn / k) ,
2928 bytesPruébalo en línea!
{
}
funcionar con argumentox
>':x
para cada personaje, ¿es mayor que el personaje anterior?~
negar&
¿Dónde (en qué índices) tenemos verdad(
)_x
cortarx
esos índices, devolver una lista de cadenas{
}'
para cada una de esas cuerdasel alfabeto inglés
x?
encuentre el índice de la primera aparición de cada letrax
, use0N
(un valor "nulo" especial) si no se encuentrax@
indicex
con eso; indexación con0N
retornos" "
, por lo que obtenemos una cadena de longitud 26 en la que las letrasx
están en sus posiciones alfabéticas y todo lo demás son espaciosfuente
R ,
129117bytesPruébalo en línea!
Explicación (sin golf):
fuente
R , 95 bytes
Simplemente recorra el alfabeto en mayúsculas repetidamente mientras avanza un contador en 1 si encuentra la letra en la posición del contador de la palabra e imprime la letra, un espacio en caso contrario.
Pruébalo en línea!
fuente
GolfScript , 37 bytes
Pruébalo en línea!
Hice un Golfscript con un nombre diferente, pero tenía una salida incorrecta.
fuente