No tenemos suficientes desafíos (semi) fáciles para principiantes. Cada vez se toman más y más fáciles. Así que intenté encontrar algo que los principiantes pudieran lograr, pero eso no es un duplicado.
Entrada:
Una sola cadena separada con su nueva línea de sistema operativo (es decir \r\n
),
o una matriz con varias cadenas.
Salida - Las escaleras :
Elimine todos los símbolos no alfabéticos y no numéricos. Entonces todo lo que queda es[A-Za-z0-9]
. Y luego 'construir una escalera'; básicamente ordenándolos en longitud con los más pequeños en la parte superior y los más anchos en la parte inferior.
Reglas de desafío:
- Cuando dos cadenas tienen la misma longitud, las fusionamos entre sí como una cadena grande (el orden no importa, por lo que podría ser del primero al último o del último al primero, cualquiera de los dos que prefiera).
- La regla anterior puede apilarse cuando las cadenas combinadas son de igual longitud nuevamente (ver caso de prueba 2).
Reglas generales:
- La entrada es STDIN y contiene solo caracteres ASCII. Y la salida es STDOUT.
- El caso de la salida debe ser el mismo que el de la entrada.
Cada envío debe ser un programa completo capaz de compilarse y ejecutarse, así que no solo un método / función.EDITAR: Soy bastante nuevo, así que quizás sea mejor usar el predeterminado de ahora en adelante, aunque prefiero un programa completo. Perdón por todos los que ya han publicado un programa completo. Siéntase libre de editar, e intentaré no cambiar la publicación a mitad del desafío la próxima vez.- Este es el código de golf , por lo que gana la respuesta más corta en bytes. Probablemente acepto la respuesta más corta en un año a partir de ahora.
¡No permita que las respuestas de code-golf lo desalienten a publicar lenguajes de golf no codegolf como C # y similares! Intenta encontrar la respuesta más corta para cualquier lenguaje de programación. - Siéntase libre de usar idiomas más nuevos que esta pregunta.
Casos de prueba:
Entrada 1:
This is a sample text,
that you will have to use to build stairs.
The wood may be of excellent quality,
or pretty crappy almost falling apart and filled with termites.
Bla bla bla - some more text
Ok, that will do
Salida 1:
Okthatwilldo
Thisisasampletext
Blablablasomemoretext
Thewoodmaybeofexcellentquality
thatyouwillhavetousetobuildstairs
orprettycrappyalmostfallingapartandfilledwithtermites
Entrada 2:
A
small
one
that
contains
equal
length
strings
for
the
special
rule
Salida 2:
A Or alternatively: A
length length
oneforthe theforone
smallequal equalsmall
stringsspecial specialstrings
thatrulecontains containsrulethat
Pasos explicados de 2:
Primer pedido en longitud:
A
one
for
the
that
rule
small
equal
length
strings
special
contains
Primera fusión:
A
oneforthe
thatrule
smallequal
length
stringsspecial
contains
Segundo orden de longitud:
A
length
thatrule
contains
oneforthe
smallequal
stringsspecial
Segunda fusión:
A
length
thatrulecontains
oneforthe
smallequal
stringsspecial
Tercer orden de longitud:
A
length
oneforthe
smallequal
stringsspecial
thatrulecontains
Entrada 3:
Test,
test.
This
is
a
test.
Salida 3:
a Or alternatively: a
is is
TesttestThistest testThistestTest
Entrada 4:
a
bc
d!
123
Salida 4:
123 Or alternatively: 123
adbc dabc
contains
No se supone que es en la salida 2. Se pone fusionó conthatrule
Respuestas:
Casco , 11 bytes
Pruébalo en línea!
Husk es más joven que este desafío (lo que no hace la diferencia oficialmente, pero aún así).
Explicación
fuente
mf□
, deberías estar celoso. Cuando "agrupar por longitud" esġL
, deberías sorprenderte.Python 3, 264 bytes
No soy bueno en el código de golf, así que estoy seguro de que esta no será la mejor respuesta de Python 3. Esto utiliza la recursividad y un dict ordenado con todas las palabras para cada longitud.
Toma la entrada de stdin como una lista, por ejemplo, pruébela con esta lista:
Saldrá:
fuente
filter(str.isalnum, l)
lugar de la"".join
parteRetina,
6963 bytesPruébalo en línea!
fuente
[^\w¶]|_
. Aunque todavía no estoy seguro de que sea óptimo.Oracle SQL 11.2, 346 bytes
Las líneas en la cadena de entrada están separadas por '¤'. De esa manera no es necesario crear una tabla para usar como entrada.
Consulta :
Sin golf
fuente
[\W_]
0-9
por\d
. ¿Quizás las reglas de expresiones regulares son diferentes en sql que en python / php / javascript? (js sigue siendo un caso especial debido a miradas atrás)Haskell, 129 bytes
Acepta e imprime una serie de cadenas. Si el resultado puede ser devuelto por la función (en contraste con impreso en stdout), puede omitir
print.
y guardar 6 bytes.Cómo funciona (tenga en cuenta que lo uso
x
para el parámetro de entrada que, por supuesto, no aparece en la versión anterior sin puntos):fuente
Python 3,
184180 bytesUna función que toma entrada, por argumento, como una lista de cadenas e imprime el resultado en STDOUT. La ejecución genera un error (debido al uso del operador + antes de la declaración de impresión), pero no antes de que se haya impreso la salida.
Cómo funciona
Pruébalo en Ideone
fuente
J , 48 bytes
Pruébalo en línea!
sin golf
explicación
(#~e.&AlphaNum_j_)&.>
eliminar no alfanumérico(#&> ,&.>//. ])
combinar artículos de la misma longitud^:_
sigue combinando hasta que deje de cambiar(/: #&>)
ordenar por longitudfuente
Javascript
198188186179 bytesEste es mi segundo programa javascript golf más largo
Probablemente se pueda jugar más golf
fuente
t
variable?.split()
, puedes usar[y]()
Perl 5 , 112 bytes
Pruébalo en línea!
fuente
Jalea , 17 bytes
Pruébalo en línea!
No estoy seguro de por qué
Ẏf¥€ØWṖ¤L€ĠịµÐLY
no funciona ...Explicación:
fuente
Pyth, 22 bytes
Pruébalo aquí
Explicación:
fuente
Pyth, 39 bytes
De vuelta al golf!
Ahí está el programa:
¡Pruébalo aquí!
Explicaciones
fuente
R
y enL
lugar dem
Java 8, 268 bytes
Un lambda vacío que acepta un mutable
List<String>
(es decir, implementosadd
yremove
; por ejemploArrayList
). La salida se imprime en salida estándar, delimitada por nueva línea, con una nueva línea final. Fundido aConsumer<List<String>>
.Pruébalo en línea
Esto terminó siendo mucho más largo de lo que esperaba. Como observó Kevin, es más complicado de lo que parece a primera vista.
Lambda sin golf
Primero, reduzco la entrada en lugar de letras y números. Luego proceso las entradas en grupos por longitud. Agrego elementos al primero de la lista hasta que se alcanza la siguiente longitud, eliminándolos a medida que avanzo. Si solo se usó el primer elemento, esa será la única cadena de esa longitud, por lo que se imprime. De lo contrario, la cadena unida se agrega a la lista para otra iteración. Ordeno la lista por longitud cada iteración antes de usar.
Comencé con una solución encantadora que utilizaba una cola prioritaria para realizar un seguimiento de las cadenas intermedias. Desafortunadamente,
java.util.PriorityQueue<String>
es bastante largo (y usar el tipo sin formato fue más largo), por lo que tuvo que desaparecer.fuente
Japt v2.0a1
-h
, 11 bytesEntrada y salida como matrices de cadenas.
Intentalo
fuente
[a-zA-Z0-9]
lugar de[a-zA-Z]
).JavaScript, 119 bytes
Siento que esto debería ser mucho más corto ...
Incluye 2 nuevas líneas principales en la salida.
Pruébalo en línea
fuente
g
de 118Perl 6 , 85 bytes
Pruébalo en línea!
Entradas y salidas como listas de cadenas.
fuente
Pyth, 21 bytes
La entrada es una lista de cadenas. Pruébelo en línea aquí , o verifique todos los casos de prueba aquí .
fuente
05AB1E , 16 bytes
Entrada como una lista de cadenas.
Pruébelo en línea o verifique todos los casos de prueba .
Podría haber sido de 14 bytes con
εžKÃ}Δé.γg}J}»
ifΔ
también funcionaría con una lista de cadenas.Explicación:
fuente
Powershell, Windows 10, 63 bytes
Entonces entrada ...
y código ...
Eso cubre la entrada / salida 1, trabajando en 2 y 3 ...
fuente