Debido a limitaciones técnicas de Stack Exchange, el título se representa incorrectamente. El título correcto para este desafío es
Hacer una
Word Icicle!
Word Icicle
Word cicle
ord cicle
ord icle
ord i le
or i le
or i l
or l
or
r
El desafío de hoy es hacer carámbanos con la palabra de entrada. Dada una cadena de ASCII completamente imprimible , y al menos 2 caracteres que no sean espacios, realice los siguientes pasos:
Imprime el estado actual de la cadena.
Reemplace el carácter léxicamente más pequeño (que no sea espacios) con un espacio. Si hay un empate, reemplace el carácter más a la izquierda.
Repita en líneas consecutivas hasta que la cadena contenga solo 1 carácter no espacial.
Esto crea el efecto de que la cadena de entrada parece que se está derritiendo ...
I'm Melting!!!
I'm Melting !!
I'm Melting !
I'm Melting
I m Melting
m Melting
m elting
m lting
m ltin
m lt n
m t n
t n
t
Reglas
Después de un par de iteraciones, su salida seguramente tendrá espacios finales en cada línea. Si elige truncarlos, eso está permitido.
Puede tener una línea vacía al final, pero no más.
Recuerde que la entrada puede contener varios espacios, pero estos se omiten de manera efectiva. Por ejemplo, la entrada
a a
debería dara a a
Puede tomar la entrada como una lista de cadenas si lo desea. Para la salida, puede devolver o imprimir una lista de cadenas, una sola cadena con nuevas líneas o matriz de caracteres / matriz 2D. En general, prefiero los formatos IO permisivos, por lo que es probable que otros formatos estén permitidos siempre que sean consistentes y se correspondan claramente con la salida correcta. En caso de duda, no dude en preguntar. Como de costumbre, se permiten programas o funciones completos.
¡Recuerde, este es un concurso para hacer la respuesta más corta en cualquier idioma! Si elige responder en Java, intente hacer la respuesta Java más corta (en bytes) que pueda.
Casos de prueba
Hello World! -->
Hello World!
Hello World
ello World
ello orld
ello orl
llo orl
lo orl
o orl
o or
or
r
AbCdEfGhIjKlMnOpQrStUvWxYz -->
AbCdEfGhIjKlMnOpQrStUvWxYz
bCdEfGhIjKlMnOpQrStUvWxYz
b dEfGhIjKlMnOpQrStUvWxYz
b d fGhIjKlMnOpQrStUvWxYz
b d f hIjKlMnOpQrStUvWxYz
b d f h jKlMnOpQrStUvWxYz
b d f h j lMnOpQrStUvWxYz
b d f h j l nOpQrStUvWxYz
b d f h j l n pQrStUvWxYz
b d f h j l n p rStUvWxYz
b d f h j l n p r tUvWxYz
b d f h j l n p r t vWxYz
b d f h j l n p r t v xYz
b d f h j l n p r t v x z
d f h j l n p r t v x z
f h j l n p r t v x z
h j l n p r t v x z
j l n p r t v x z
l n p r t v x z
n p r t v x z
p r t v x z
r t v x z
t v x z
v x z
x z
z
PPCG is da BEST -->
PPCG is da BEST
PPCG is da EST
PP G is da EST
PP G is da ST
PP is da ST
P is da ST
is da ST
is da T
is da
is d
is
s
({({})({}[()])}{}) -->
({({})({}[()])}{})
{({})({}[()])}{})
{ {})({}[()])}{})
{ {}) {}[()])}{})
{ {}) {}[ )])}{})
{ {} {}[ )])}{})
{ {} {}[ ])}{})
{ {} {}[ ] }{})
{ {} {}[ ] }{}
{ {} {} ] }{}
{ {} {} }{}
{} {} }{}
} {} }{}
} } }{}
} } } }
} } }
} }
}
Respuestas:
Python 2 ,
7170 bytes-1 byte gracias a ovs
Pruébalo en línea!
fuente
Retina , 28 bytes
Pruébalo en línea! Explicación:
Repita mientras el valor de entrada no esté en blanco.
Imprime el valor actual.
Ejecute el resto del script en el valor. Luego, ejecute el resultado de ese script como un script en el valor.
Ordena los personajes en orden.
Seleccione el primer carácter no en blanco y genere un programa Retina que reemplace la primera
$\
aparición literal ( ) de ese carácter ($&
) con un espacio (espacio final en el código original).fuente
APL (Dyalog Unicode) ,
1811 bytesPruébalo en línea!
usos
⎕io←1
; devuelve una matriz de cadenas (vector de vectores de caracteres)fuente
∪
necesario?⍋∘⍋
:)05AB1E , 9 bytes
Pruébalo en línea!
Explicación
fuente
{ðKv=yð.;
era mía, linda.:
reemplaza todos los caracteres en lugar de los.;
que reemplazan al primero (es decir, vea lo que hace su byte de 7!
en el caso de prueba). Además, el desafío establece explícitamente espacios excluyentes, por lo que su 7-byter no funcionaría para la entrada con múltiples espacios. PD: Buena respuesta, Luis! +1 de mi parte :).;
en primer lugar. Literalmente recuerdo haber luchado con eso el 1 de mayo a principios de este año ahora que lo mencionas.Pyth,
171413 bytesPruébalo aquí
fuente
sed
-rn
,142143bytesPruébalo en línea!
(nota: hay pestañas en el programa)
Como sed no tiene el concepto de orden lexicográfico, tuve que codificar el conjunto de caracteres ASCII imprimibles y ocupa más de la mitad del bytecount.
Usar sed 4.2.2 reducirá el bytecount en 2, ya que eso permite etiquetas sin nombre, ¡ Pruébelo en línea!
-r
habilita expresiones regulares extendidas (golfier)-n
deshabilita la impresión implícita del espacio del patrón al final del programaEl espacio del patrón comienza con la entrada
:a
etiquetaa
, este es el ciclo principal del programap
imprime el espacio del patrón (nombre elegante para el búfer)ahora agregamos el conjunto de caracteres ASCII imprimibles (excluyendo el espacio)
s/$/ ABCDEFGHIJKLMNOPQRSTUVWXYZ/
agregar una pestaña, que actúa como delimitador de 1 byte, seguido del alfabeto en mayúsculass<tab>
sustituto (sed puede tomar cualquier carácter como delimitador, en este caso, la pestaña se usa para evitar que un byte escape del/
)\w+$
el alfabeto en mayúscula que acabamos de agregar<tab>
con!"#$%\&'()*+,-./0123456789:;<=>?@&[\\]^_\`\L&{|}~<tab>
el resto de los caracteres, tenga en cuenta que\L&
es la versión en minúsculas del alfabeto en mayúsculas:b
etiquetab
, eliminar caracteres del conjunto inicial que no están presentes en la entrada/(.).* \1/!
si el primer carácter del conjunto ASCII no está en la entradas/ ./ /
eliminarlotb
repetirb
hasta que la sustitución falles/(.)(.*) \1.*/ \2/
reemplace el primer carácter en el conjunto ASCII presente en la entrada con un espacio y elimine el conjunto ASCIIta
recursefuente
sed
suficiente como para guardar al menos 4 bytes: ¡ Pruébelo en línea!Ruby ,
60585547 bytesPruébalo en línea!
fuente
a-b=[' ']
ya-b
por un rápido -2 bytesR ,
140100bytes-40 bytes ¡Gracias a Giuseppe!
Pruébalo en línea!
Una solución que utiliza
outer
y la magia de Giuseppe para funcionar correctamente es más larga en 104 bytes. Inspirado por esta respuesta .Pruébalo en línea!
fuente
rank
!Python 3 , 71 bytes
Pruébalo en línea!
-4 bytes gracias a ovs
fuente
*bool({*a}-{" "})
lugar deif{*a}-{" "}else[a]
RecursionError
?if/else
atajos pero*bool
no lo hace, así que sí, error de recursión como los ovs dijoPython 2 ,
70696664 bytesPruébalo en línea!
Thx para 2 bytes desde ovs mediante el uso en
S and f()
lugar deif S:f()
fuente
...If there is a tie, replace the leftmost character...
regla, puedes arreglar eso conreplace(min(...),' ',1)
Jalea , 8 bytes
Pruébalo en línea!
Idea
La idea básica es construir las columnas de la salida deseada directamente, en lugar de manipular la cadena y devolver todos los resultados intermedios.
Comenzamos numerando los caracteres de la cadena de entrada en el orden en que se eliminarán. Por el momento, fingiremos que también se eliminarán los espacios.
Ahora, construimos las columnas repitiendo cada carácter por su índice en esta enumeración.
Todo lo que queda es eliminar duplicados, para tener en cuenta los espacios.
Código
fuente
Perl 5
-n
,3734 bytesSe eliminaron tres bytes con la ayuda de @TonHospel
Pruébalo en línea!
fuente
\Q
para el último caso de prueba ... ¡Me lo perdí las primeras veces también!say&&s/\Q$a/ / while($a)=sort/\S/g
. También maneja adecuadamente0
JavaScript,
676665 bytes¡Porque no he jugado golf borracho en mucho tiempo!
Pruébalo en línea
¡Gracias a DanielIndie por señalar 4 bytes redundantes que incluye la cerveza!
fuente
K (ngn / k) ,
2624 bytesPruébalo en línea!
fuente
{@[x;y;:;" "]}
podría haber sido@[;;:;" "]
. ¿Qué versión de k usas? No estoy familiarizado con estas:_ci _ic _dv
.C # (compilador interactivo de Visual C #) , 129 bytes
Pruébalo en línea!
fuente
c!=32
puede serc>32
;c==32
puede serc<33
; y(char)999
puede ser'¡'
(o cualquier otro carácter por encima del rango unicode ASCII imprimible).while
afor
y colocando elvar s=ReadLine()
ys=s.Remove(i,1).Insert(i," ")
en su interior (por lo que los dos puntos y comas ya no son necesarios).Perl 5 con
-nlF/\s|/
, 39 bytesEsto podría estar empujando los límites de las banderas de Perl que no se cuentan, si es así, volveré a la respuesta anterior.
Pruébalo en línea!
fuente
-n
bandera: codegolf.stackexchange.com/questions/162161/make-a-word-icicle/…Haskell , 67 bytes
12 bytes guardados gracias a Laikoni
Pruébalo en línea!
Este termina en un error
Haskell ,
8379 bytesPruébalo en línea!
Este termina en un error
Haskell , 86 bytes
Pruébalo en línea!
Haskell ,
1009188 bytesPruébalo en línea!
fuente
f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b)
Pruébelo en línea!id=<<
eso es bastante inteligenteJavaScript (Node.js) ,
8065 bytesPruébalo en línea!
No sabía
replace
tomar string como string, no regexpfuente
K4 ,
282018 bytesSolución:
Ejemplo:
Explicación:
Es lo mismo que ngn está haciendo. Busque índices que den como resultado una lista ascendente, sobrescríbalos uno por uno
" "
, luego tome el distintivo para eliminar las líneas duplicadas:fuente
gcc 32 bits,
6665 bytesGracias por Jonathan Frech por -1 byte
fuente
*p==i?...:0;
probablemente podría ser*p-i?0:...;
.*p-1||(...)
es la misma longitud)f(a)
compila, ya quea
debería ser de tipochar*
, pero supongo que tiene algo que ver con su uso de gcc de 32 bits.char*p,i;f(long long a){for(i=31;++i;)for(p=a;*p;)*p==i?puts(a),*p=32:++p;}
en tio (64 bits) puede explicar cómof(a)
funcionaMATLAB, 74 bytes
Esto utiliza la forma de 2 salidas de la función max () para recuperar el carácter más pequeño y su índice, transformando la cadena a valores cero en los espacios y 256-el valor del carácter para los caracteres imprimibles.
fuente
Lisp común ,
240228224 bytesPruébalo en línea!
Es mi primera vez publicando.
Estoy en el proceso de aprender lisp, así que estoy seguro de que alguien puede pensar en algo más corto que esto.
fuente
APL (Dyalog Unicode) , SBCS de 39 bytes
Pruébalo en línea!
Dfn.
¿Cómo?
fuente
V , 27 bytes
Pruébalo en línea!
Hexdump:
fuente
PowerShell ,
10399 bytesPruébalo en línea!
Toma la entrada como una cadena en
$a
. Luego hacemos un bucle de2
a$a.length
(es decir, el número apropiado de tiempos verticales necesarios para eliminar todos los caracteres menos uno). En cada iteración, sacamos la cadena actual y la guardamos convenientemente$x
al mismo tiempo. A continuación, se construye un nuevo[regex]
objeto,$p
attern que consiste en los caracteres restantes en$a
que son-n
ote
qual al espacio,sort
ed, entonces el0
º uno de los mismos.Luego establecemos
$a
igual a una nueva cadena del objeto regex con el.Replace
método para reemplazar en la cadena$x
, el$p
attern, con un espacio" "
, pero solo la1
coincidencia st. Sí, esta sintaxis es rara.Las cadenas se dejan en la tubería e implícito
Write-Output
nos da una nueva línea entre ellas de forma gratuita, más una nueva línea final.fuente
Java (JDK 10) , 140 bytes
Pruébalo en línea!
Técnicamente hay una línea en blanco, pero no está vacía .
fuente
Stax , 9 bytes
Ejecutar y depurarlo
Este es el mismo algoritmo que la solución 05AB1E de Luis
fuente
MATL ,
1716 bytesPruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Excel VBA, 167 bytes
Una función de ventana inmediata anónima de VBE que toma la entrada del rango
[A1]
y las salidas a la ventana inmediata de VBE.No golfista y comentado
fuente
Japt ,
3218 bytes¡Ahorró 14 bytes gracias a Shaggy!
Pruébalo en línea!
fuente