Espera ... esto no es trolling.
Antecedentes
En estos días en YouTube, las secciones de comentarios están llenas de tales patrones:
S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S
donde String
es un simple marcador de posición y se refiere a cualquier combinación de caracteres. Estos patrones suelen ir acompañados de un It took me a lot of time to make this, pls like
o algo, y a menudo el OP tiene éxito en acumular una serie de Me gusta.
La tarea
Aunque tiene un gran talento para acumular votos positivos en PPCG con sus encantadoras habilidades de golf, definitivamente no es la mejor opción para hacer comentarios ingeniosos o hacer memes de referencia en las secciones de comentarios de YouTube. Por lo tanto, sus comentarios constructivos hechos con un pensamiento deliberado acumulan algunos 'me gusta' en YouTube. Quieres que esto cambie. Por lo tanto, recurre a hacer los patrones cliché mencionados anteriormente para lograr su máxima ambición, pero sin perder tiempo tratando de escribirlos manualmente.
En pocas palabras, su tarea es tomar una cadena, digamos s
, y generar 2*s.length - 1
subcadenas de s
, delimitadas por una nueva línea, para cumplir con el siguiente patrón:
(para s
= "Hola")
H
He
Hel
Hell
Hello
Hell
Hel
He
H
Entrada
Una sola cuerda s
. Se aplican los valores predeterminados de entrada de la comunidad. Puede suponer que la cadena de entrada solo contendrá caracteres ASCII imprimibles.
Salida
Varias líneas separadas por una nueva línea, que constituyen un patrón apropiado como se explicó anteriormente. Se aplican los valores predeterminados de salida de la comunidad. Se permiten líneas en blanco iniciales y finales (que no contienen caracteres o caracteres que no se pueden ver, como un espacio) en la salida.
Caso de prueba
Un caso de prueba de varias palabras:
Input => "Oh yeah yeah"
Output =>
O
Oh
Oh
Oh y
Oh ye
Oh yea
Oh yeah
Oh yeah
Oh yeah y
Oh yeah ye
Oh yeah yea
Oh yeah yeah
Oh yeah yea
Oh yeah ye
Oh yeah y
Oh yeah
Oh yeah
Oh yea
Oh ye
Oh y
Oh
Oh
O
Tenga en cuenta que hay distorsiones aparentes en la forma de salida del caso de prueba anterior (por ejemplo, la línea dos y la línea tres de la salida parecen iguales). Esos son porque no podemos ver los espacios en blanco finales. Su programa NO necesita tratar de corregir estas distorsiones.
Criterio ganador
Este es el código de golf , por lo que gana el código más corto en bytes en cada idioma.
YouTube Comments #1
en el título.""
? ¿Qué tal un solo personaje"H"
? Si es así, ¿cuál debería ser el resultado para ambos casos?Respuestas:
brainfuck , 32 bytes
Pruébalo en línea!
El mismo bucle se usa para ambas mitades del patrón.
Explicación:
fuente
JavaScript (ES6), 36 bytes
Pruébalo en línea!
Comentado
fuente
Unix (LF)
. Problema resuelto de una vez por todas. :)05AB1E (heredado) ,
43 bytesTachado ya
4
no es 4 :)Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
En la nueva versión de 05AB1E, y
»
se requiere explícito después deη
, por lo que uso la versión heredada de 05AB1E aquí para guardar un byte.fuente
\xce\xb7\x2e\xe2\x88\x8a
08 2e 17
, que puede ejecutar y verificar con la--osabie
bandera: tio.run/…IBM PC DOS, ensamblaje 8088,
4443Desmontado:
Explicación
Bucle
2 * input length - 1
para cada fila. La función de visualización de cadenas (INT 21H,9
) de la API de DOS escribe una$
cadena terminada en la pantalla, por lo que cada vez que se realiza el bucle, el carácter después del último que se muestra se intercambia con el terminador de fin de cadena.El contador de bucle se compara con la longitud de la cadena, y si es mayor (es decir, la parte ascendente de la salida), la posición de cadena / intercambio se incrementa, de lo contrario, se reduce (en realidad,
-1-1+1
es menos bytes que una estructura de ramificación if / else).Programa ejecutable independiente, toma la cadena de entrada de la línea de comando.
Salida
Descargar YT2.COM (43 bytes)
fuente
SHR SI, 1
.Python 2 ,
6052 bytesPruébalo en línea!
Python 3.8 (prelanzamiento) , 50 bytes
Pruébalo en línea!
fuente
x:=s[:n]
.MATL , 8 bytes
Pruébalo en línea!
:)
Me gusta esta publicación para el smiley en el código que me tomó mucho tiempo hacer.fuente
J , 11 bytes
Función de prefijo tácito anónimo. Devuelve una matriz de caracteres rellena de espacio.
Pruébalo en línea!
]\
la lista de prefijos[:(
...)
aplique la siguiente función a esa lista|.
la lista inversa,
antepuesto con}:
la lista restringida (sin el último elemento)fuente
[:(
y te}:,|
ves tan triste ...Perl 6 , 31 bytes
Pruébalo en línea!
Bloque de código anónimo que toma una cadena y devuelve una lista de líneas.
Explicación:
fuente
Japt -R , 4 bytes
Reducción acumulativa en una cadena.
-1 byte gracias a @Shaggy
Pruébalo en línea!
fuente
-flag
o <language>-flag
. Además, | Se me olvidó acumulada Reducir era una cosa, te juro que salté sobre él cada vez que lo vi-flag
?Japt
-R
,97 bytes-2 bytes gracias a Shaggy
Pruébalo en línea!
fuente
Ã
es una cosaPerl 5 (
-p
), 26 bytesTIO
fuente
Haskell
525044 bytesinstance Semigroup b => Semigroup (a -> b)
Pruébalo en línea!
fuente
inits
requiere que se use una importación, por lo que tendrá que agregarimport Data.List
o algo similar.import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
R ,
79656258 bytesPruébalo en línea!
-14 por el conocimiento superior de la función de Giuseppe
-3 con indexación más limpia
-4 gracias al movimiento de Nick Kennedy y Giuseppe hacia
scan
ywrite
Evitar bucles (y
substr
) es bueno.fuente
sapply
,substring
harán lo que quieras (con una línea vacía final adicional), ¡y por 65 bytes ! Definitivamente no habría pensadosubstring
si no hubiera visto tu buen uso desubstr
aquí.scan
ywrite
? ¡Solo 59 bytes!""
con1
.Jalea ,
54 bytes-1 byte gracias a @JonathanAllan !
Pruébalo en línea! Creo que esta es mi segunda respuesta Jelly?
No sé si esto es óptimo.Estoy más convencido de que es óptimo. Devuelve una matriz de líneas.Explicación
Otro enfoque, propuesto por @JonathanAllan, es
;\ŒḄ
, que reduce de forma acumulativa (\
) la concatenación (;
), que es otra forma de generar prefijos.fuente
Y
salirse del código (yo haría el pie de páginaÇY
oÇŒṘ
para evitar la impresión aplastante implícita de un programa completo). En una nota al margen, esto también se implementa de manera equivalente;\ŒḄ
para el mismo recuento de bytes (también puede pasar el argumento ya"blah"
que Jelly interpreta esto como una lista de caracteres; el suyo es en realidad una lista de listas de caracteres, como verá si haces el pie de páginaÇŒṘ
)Python 3.8 (prelanzamiento) , 48 bytes
Pruébalo en línea!
Utiliza expresiones de asignación con
:=
para acumular una lista de prefijos y luego nuevamente para guardar el resultado para concatenar su reverso (sin el primer carácter).Python 2 , 51 bytes
Pruébalo en línea!
Casi tenemos la siguiente buena solución de 45 bytes, pero tiene la cadena original dos veces y no veo una forma corta de solucionarlo.
Pruébalo en línea!
fuente
print('\n'.join(f(s)))
?x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]
. Vea los ejemplos en la parte superior aquí .Carbón de leña , 5 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
G
dibuja un polígono relleno,^
especifica que los lados están abajo a la derecha y abajo a la izquierda (el polígono se cierra automáticamente),Lθ
especifica la longitud de esos lados como la longitud de la entrada original y el finalθ
especifica la cadena de relleno.fuente
C # (Visual C # interactivo Compilador) ,
123109948474 bytesAsume que podemos devolver una matriz de matriz de caracteres (creo que podemos hacerlo, ya que una matriz de caracteres es una representación válida para una cadena y una matriz de cadenas es una representación válida para varias líneas)
Pruébalo en línea!
fuente
Adjunto , 15 bytes
Pruébalo en línea!
Bastante simple.
Bounce
s (se agrega al reverso sin centro)Prefixes
de la entrada.Alternativamente, 21 bytes:
Bounce@{_[0..0:~-#_]}
reiniciando el prefijo.fuente
Brachylog (v2), 6 bytes
Pruébalo en línea!
Envío de funciones, devolviendo una serie de líneas. Basada en la respuesta de @ Fatalize .
Explicación
El orden de desempate aquí se establece mediante el
⊆
que, cuando se usa con este patrón de flujo, prefiere la salida más corta posible, se rompe al colocar los elementos dados lo antes posible . El resultado más corto posible es lo que queremos aquí (debido a que no es posible tener prefijos duplicados), y colocar los elementos dados (es decir, los prefijos) lo antes posible los colocará en la primera mitad (redondeada) salida. Dado que también estamos exigiendo que se coloquen en el mismo orden, obtenemos exactamente el patrón que necesitamos a pesar de que la descripción que le dimos a Brachylog es muy general; los desempates resultan exactamente correctos, lo que hace que Brachylog elija la salida que queremos en lugar de alguna otra salida que obedezca a la descripción.fuente
PowerShell,
898766 bytes-2 bytes gracias a @AdmBorkBork
Pruébalo en línea!
En realidad no funcionó como se especificó antes, ¡perdón por eso! Lo edité y también logré eliminar algunos bytes.
fuente
--$d
lugar de($d-1)
guardar una pareja al final.PowerShell , 46 bytes
Pruébalo en línea!
PowerShell , 42 bytes (especial de YouTube, sucio)
Se sabe que la longitud máxima de un comentario en YouTube es de 10.000 caracteres. Ok, usa esto como el límite superior.
Pruébalo en línea!
fuente
APL (Dyalog Unicode) , SBCS de 9 bytes
Función de prefijo tácito anónimo. Devuelve la lista de cadenas.
Pruébalo en línea!
,\
la lista de prefijos (encendido, la concatenación acumulativa)(
...)
aplique la siguiente función a esa lista:⌽
la lista invertida1↓
suelte el primer elemento,
anteponer⊢
la lista no modificadafuente
Ruby ,
514240 bytesPruébalo en línea!
Gracias a Doorknob por -2 bytes.
fuente
...
con,
JavaScript (Node.js) , 90 bytes
Esto probablemente se pueda jugar mucho más, Arnauld ya tiene uno mucho más corto, ¡pero me divertí al menos!
Pruébalo en línea!
fuente
SNOBOL4 (CSNOBOL4) , 118 bytes
Pruébalo en línea!
Parece que hay un error en esta implementación de SNOBOL; intentar reemplazar la etiqueta
D
con la etiqueta2
causa un error, aunque el manual de Vanilla SNOBOL indica que (énfasis agregado)Mi suposición es que el intérprete CSNOBOL solo admite una sola etiqueta que comienza con un número entero.
fuente
APL + WIN, 31 bytes
Solicitudes de entrada de cadena:
Explicación:
fuente
F # (.NET Core) ,
6761 bytesPruébalo en línea!
La entrada es un
string
y la salida es aseq<string>
Otra solución podría ser
let f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]
para 80ish bytes ... No estoy seguro de que valga la pena analizarlo.fuente
sed ,
3135 bytesPruébalo en línea!
Explicación
Al comienzo de cada iteración del bucle, el espacio del patrón es un "fragmento central" de la salida deseada, y cada bucle agrega una copia acortada en la parte superior e inferior.
fuente
sed
. Lo mismo en TIO. ¿Quésed
implementación usa y cómo le pasa la entrada? (Por cierto, cambiar la sustitución paras/.\n.*\|.$//
arreglarlo.)sed
implementación (usando GNU versión 4.2.1), simplemente no noté el error. He jugado con otras soluciones y no puedo encontrar nada que agregue menos de cuatro bytes, así que estoy adoptando tu solución, gracias.Python 2 ,
13110084 bytesMi primera respuesta en Code Golf!
-47 bytes en general gracias a @ SriotchilismO'Zaic
Pruébalo en línea!
fuente
;
s en lugar de líneas nuevas para evitar la sangría. Tampoco hay necesidad de espacios entreprint
y''
a
una cadena en lugar de una lista, ya no la necesitajoin
y puede simplementeprint a
.x
.J , 12 bytes
Pruébalo en línea!
Todavía 1 byte más que el de Adám
K (oK) ,
1211 bytes-1 byte gracias a ngn
Pruébalo en línea!
fuente
{x,1_|x}@,\