Inspirado en este mini desafío de chat.
Dada una cadena como entrada (solo caracteres imprimibles ASCII), genera la cadena con las letras "lloviendo" hacia abajo. Cada letra debe ser un número aleatorio de líneas hacia abajo (aleatorio entre 0
y la longitud de la cadena, cada una con una probabilidad distinta de cero), y solo un carácter por columna. Todas las salidas posibles deben tener nuevamente una probabilidad distinta de cero.
Tal vez sea un poco confuso, así que aquí hay un ejemplo (tomado de ese CMC):
Hello World
d
H
o
llo
l
W
e
r
Tenga en cuenta cómo H
es un espacio hacia abajo, el d
cero es hacia abajo, y llo
todo sucede para alinearse. El r
es el más alejado, en 9
, pero aún es menor que la longitud de la cuerda desde la parte superior. Este es solo un ejemplo, hay docenas de otras posibilidades de entrada Hello World
.
Otros ejemplos podrían ser:
test
t
e
s
t
PP&CG
& G
P
P C
- La entrada y salida se pueden dar por cualquier método conveniente .
- La entrada está garantizada como no vacía (es decir, nunca recibirá
""
como entrada). - Puede imprimirlo en STDOUT o devolverlo como resultado de una función.
- Un programa completo o una función son aceptables.
- Cualquier cantidad de espacio en blanco extraño es aceptable, siempre y cuando los caracteres se alineen apropiadamente (por ejemplo, siéntase libre de rellenar como un rectángulo).
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Respuestas:
R , 104 bytes
Pruébalo en línea!
Entrada como una cadena; escribe a stdout.
fuente
scan(,'')
y anidando un montón de llamadas, pero sinceramente, prefiero ampliamente el enfoque de la función, este otro es horrible para una ganancia mínima. Sin embargo, podría provocar algunas ideas. Pruébalo en línea!sample(l,,T)
suficiente en lugar desample(l,l,T)
(-1 byte).JavaScript (ES6), 72 bytes
Toma la entrada como una lista de caracteres. Devuelve una matriz de caracteres.
Pruébalo en línea!
fuente
(0|'A') === (0|undefined)
ya no se garantizaría que las letras restantes aparecieran en la última fila. (Entonces, básicamente, es como si|!a[y+1]
se hubiera eliminado por completo.)Math.random()
devuelve un número en [0, 1), por lo que no podríaMath.random()<.5
convertirseMath.random()>0
?math.random()
implementación que tiene un estado interno y, por lo tanto, no pueden generar una salida única.Pyth - 9 bytes
Lista de salidas de líneas.
Pruébalo en línea .
fuente
J ,
3019 bytesPruébalo en línea!
fuente
0|:]{.~"+_1-#?#
por 15 bytes0|:]{.~"+_2-#?@##
por 17 bytes sin cambiar el comportamiento de su respuesta.Japt , 8 bytes
-1 byte de @Shaggy
Pruébalo en línea!
fuente
APL (Dyalog Unicode) , SBCS de 16 bytes
Función de prefijo tácito anónimo
≢
longitud de la cuerda1+
uno agregado a eso≢⍴
copias de "longitud" de ese∘?
enteros aleatorios en el rango 1 ... esos, y luego ...∘-
negar, y luego ...⊢↑¨⍨
tomar muchos elementos de cada personaje, rellenando a la izquierda con espacios∘↑
Mezcle la lista de cadenas en la matriz, rellenando con espacios a la derecha⍉
transponerPruébalo en línea!
fuente
Japt , 8 bytes
Intentalo
fuente
Jalea , 10 bytes
Pruébalo en línea!
fuente
0..(length - 1)
? La pregunta especifica entre 0 y la longitud de la cadena. ¿O me estoy perdiendo algo?Ruby ,
595755 bytesPruébalo en línea!
Entradas 1D, salidas de matriz 2D de caracteres.
fuente
PHP , 88 bytes
Pruébalo en línea!
O 94 bytes usando la función de enteros aleatorios criptográficos de PHP .
Pruébalo en línea!
Entrada de
STDIN
, salida aSTDOUT
. Correr como:-1 byte (cadena vacía en lugar de espacio) y +1 byte (error en el lado de las reglas) gracias a @ ASCII-only!
fuente
<?php
que?>
cierra. también parece que está bien si$o
es la cadena vacíarand
función PHP , ya que puede tener un texto de entrada que requiere más al azar que el tamaño del interno semillas de rand utiliza, por lo que técnicamente su respuesta no cumple con esta condición en todas las situacionesrand
no es útil para mucho, sin embargo, todas las versiones compatibles / de producción de PHP (7.1+) usan Mersenne Twister RND (mt_rand
) internamente para una generación de números aleatorios. ¿Le preocupa que esto no sea lo suficientemente aleatorio para este desafío?mt_rand
También utiliza un sistema de números pseudoaleatorio internamente, y también tiene las limitaciones. Suponiendo que PHP se compila con números de 64 bits (y que la semilla, utilizada pararand
omt_rand
acepta este rango completo) generaría salidas únicas para palabras de hasta 13 caracteres o menos. Bastante limitante si me preguntasCarbón ,
109 bytesPruébalo en línea! El enlace es a la versión detallada del código. Editar: guardado 1 byte gracias a @ ASCII-only. Explicación:
Como señala ASCII-only, puede mover las letras aleatoriamente hacia arriba en lugar de hacia abajo para obtener el mismo efecto (excepto que puede haber espacio en blanco adicional en la parte inferior en lugar de en la parte superior). Imprimir una matriz de caracteres hacia arriba es equivalente a imprimir una cadena normalmente, por lo que el relleno simplemente compensa cada carácter verticalmente en una cantidad aleatoria.
fuente
05AB1E (heredado) , 9 bytes
Ingrese como una cadena o lista de caracteres (cualquiera está bien).
Pruébalo en línea.
Alternativa de 9 bytes mucho más lenta:
Entrada como una lista de caracteres.
Pruébalo en línea.
Ambos utilizan la versión heredada de 05AB1E, ya que la nueva versión requiere un explícito
€S
antes de laζ
..Explicación:
fuente
gD¸s∍ÝδΩ
pero es más largo ... y ooo ... esto ni siquiera funciona en el nuevo 05AB1E;).C (gcc) , 131 bytes
Pruébalo en línea!
fuente
R[j=i%l]?32:s[j]));
lugar deR[j]?32:s[j]))j=i%l;
Julia, 69 bytes
Esto define una función
f
que acepta unString
oVector{Char}
y devuelve unaMatrix{Char}
.Sin golf:
Ejemplo:
Esto seguramente podría ser mejor; Mis habilidades de golf son bastante oxidadas.
Pruébalo en línea!
fuente
Perl 5
-F
,5049 bytes-1 por @DomHastings
Pruébalo en línea!
fuente
map$_||$",@$_
!PowerShell ,
10810298 bytes-4 bytes gracias a mazzy
Pruébalo en línea!
Básicamente itera
1..length
la cadena dos veces, una para obtener ubicaciones de línea aleatorias para cada carácter y una segunda vez para construir cada línea usando esos índices. Descubrir cómo hacerlo en un barrido es donde están los grandes ahorros de bytes.fuente
SmileBASIC 3, 62 bytes
fuente
Rojo , 84 bytes
Pruébalo en línea!
fuente
Python - 92 bytes
fuente
import random
from random import*
lugar.map(None,...
que no funciona en Python 3, por lo que debe especificar Python 2 en su título.K (oK) , 20 bytes
Solución:
Pruébalo en línea!
Explicación:
fuente
Python 3 ,
140131 bytesPruébalo en línea!
fuente
Python 3, 208 bytes
Crea una lista de opciones aleatorias, luego hace una lista de columnas con espacio en blanco en todas partes excepto en el índice especificado por cada opción aleatoria. Las columnas se transponen en filas y se imprimen con nuevas líneas entre ellas.
Pruébalo en línea!
fuente