Dada cualquier cadena, imprímala en forma de triángulo donde el texto corre hacia arriba y hacia abajo a lo largo de cada diagonal. Por ejemplo, una entrada de "Hello World"
debería salir:
d
l
r d
o l
W r d
o l
o W r d
l o l
l o W r d
e l o l
H l o W r d
e l o l
l o W r d
l o l
o W r d
o l
W r d
o l
r d
l
d
El espacio entre cada carácter en una fila debe ser al menos 1, para mantener el formato adecuado.
code-golf
string
ascii-art
code-golf
string
abstract-algebra
code-golf
ascii-art
binary
fractal
code-golf
array-manipulation
sorting
permutations
code-golf
code-generation
code-golf
sequence
binary
code-golf
date
code-golf
array-manipulation
restricted-source
decision-problem
primes
code-golf
multi-threading
code-golf
array-manipulation
code-challenge
decision-problem
natural-language
test-battery
code-golf
array-manipulation
code-golf
array-manipulation
code-golf
code-golf
graph-theory
maquiavelo
fuente
fuente
H l o W r d
es una fila central válida? Preguntando porque en tu ejemplo cada fila tiene 3 espacios entre cada personaje.Respuestas:
Carbón ,
107 bytesPruébalo en línea!Pruébalo en línea! Los enlaces son a la versión detallada del código. Explicación:La primera vez pude usar elUE
comando.fuente
UE
...UE
...05AB1E ,
1087 bytes¡Gracias a Emigna por guardar 2 bytes!
Utiliza la codificación 05AB1E . Pruébalo en línea!
fuente
¶«
. (también verificó la validez con OP)â
enðâ
lugar deSð«
!Python 2 , 75 bytes
Pruébalo en línea!
Ruud ahorró 3 bytes.
fuente
C,
86787370 caracteresPruébalo en línea!
Explicación
Implementación ingenua: dos ciclos, relleno de arriba a abajo, de izquierda a derecha (99 bytes):
Aquí, pone () solo imprime \ n en la salida. Combinemos declaraciones de variables y combinemos j ++ con algo (94 bytes):
Bueno. La variable j tiene un rango de 0 ... 2n; déjelo estar dentro de -n ... n, esto simplifica las matemáticas. Observe que la expresión booleana a la derecha de && siempre tiene el valor 0 o 1. Esto significa que podemos reemplazar && con &. 91 bytes:
Y ahora nos dimos cuenta de que imprimimos un espacio extra. Y sí, no necesitamos printf () para imprimir un solo símbolo. 86 bytes:
Aun mejor. Observe que la condición i * i> = j * j es la misma que i> = abs (j), pero más corta. Vamos a mover pone () en la expresión de incremento de bucle. ¿Y adivina qué? En realidad, no necesitamos las llaves alrededor de i + j. 78 bytes:
¿Sabía que putchar () devuelve el carácter que ha impreso? Usemos XOR para probar números para equivalencia. Reemplacemos el espacio con su código ASCII, 32. Recuerde que el código de caracteres al final de la línea es 13. Y finalmente: ¿Sabía que GCC / Clang admite https://en.wikipedia.org/wiki/Elvis_operator ? 73 bytes:
Finalmente, ¿adivina qué? No necesitamos dos para bucles. Podemos reemplazar feo ~ i + j con solo ij. 70 bytes:
Trabajo futuro: ¿cambiar la dirección del circuito? Esto podría ahorrar algunos bytes, si se hace correctamente.
fuente
SOGL V0.12 ,
13109 bytesUtiliza una función que acabo de agregar , pero que se documentó hace un tiempo.
Pruébalo aquí!
En ese enlace
,
se agrega porque esto espera la entrada en la pila y se{
agrega porque de lo contrario,
se ejecutaría cada vez en el ciclofuente
Haskell , 73 bytes
Pruébalo en línea!
fuente
Gaia , 16 bytes
Pruébalo en línea!
Explicación
fuente
Python 2 ,
8683 bytes-3 gracias a officialaimm
Pruébalo en línea!
fuente
Jalea , 15 bytes
Pruébalo en línea!
fuente
Octava,
59635857 bytesPruébalo en línea!
fuente
99
: buena idea :-)Java, 292 bytes (lo siento)
fuente
boolean a=1<0,o=L%2>0;
.. 2. Si no es necesarioi
, utilice este bucle:for(i=0;i++<n;)
. 3. Puede deshacerse deo
:j%2<L%2
entoncesj%2>L%2
. 4. Usard
como flip toma tantos caracteres: solo hazloj<(x<0?-x:x)
. 5. Tienes muchas más variables de las necesarias. 6. No necesita un programa completo: una lambda o método es suficiente. - Si quieres un ejemplo Java de golf, mira mi respuesta .Haskell , 81 bytes
Pruébalo en línea!
fuente
Java (OpenJDK 8) , 116 bytes
Pruébalo en línea!
Explicación
fuente
C ++, 135 bytes
Bien, aquí está mi oportunidad con C ++:
¡Pruébelo en línea (ideone)!
fuente
Haskell ,
140137 bytesPruébalo en línea!
Guardado 3 bytes gracias a Challenger5
No creo que sea óptimo ...
f
produce una de las líneas (m
= 0 o 1 es el módulo del número de línea,n
es el número de la línea)g
intercala líneas "impares" y "pares", y agrega al resultado un espejo de sí mismo.fuente
f
como una función de infijo (como en(m#n)s=...
) en lugar de una función de prefijo.Pyth , 25 bytes
Pruébalo aquí
fuente
Jalea , 18 bytes
Pruébalo en línea!
fuente
Mathematica 105 Bytes
Tal vez podría eliminar otro byte o dos, pero el recuento de caracteres sobrecargado de lidiar con cadenas en Mathematica hace que desafíos simples como este no sean competitivos.
fuente
J, 54 bytes
Pruébalo en línea!(tenga en cuenta que la salida en TIO tiene una nueva línea y tres espacios, pero eso no proviene de la llamada a la función; probablemente sea lo que el intérprete J hace automáticamente).
Creo que la idea general para resolver esto es correcta, pero hay cosas pequeñas que probablemente estoy haciendo de manera subóptima que se están agregando al conteo de bytes.
Variantes anteriores
55 bytes
56 bytes
Explicación
Esto se dividirá en algunas funciones. Además, no fui tan minucioso con las últimas partes de la explicación, así que avíseme si desea una mejor explicación para cierta parte y puedo editarla.
dup
duplica cada carácter tantas veces como su índice (más uno) en la cadenaspace
inserta espacios entre cada personajepad
rellena los caracteres con la cantidad correcta de espaciostrans
transpone la matriz resultanteLlamada de muestra:
Dup
Los resultados están encuadrados para evitar que J rellene los extremos con espacios (ya que son de longitud desigual).
Llamada de muestra:
Espacio
Llamada de muestra:
Almohadilla
Básicamente, rellene el primer elemento con longitud - 1 espacios, el segundo con longitud - 2, etc. También elimina el boxeo.
Llamada de muestra:
Transponer
Esta es solo la función incorporada
|:
que toma la transposición de una matriz.fuente
|:@(-@i.@-@#|."0 1((,@,.~' '#~#)@$"0~1+i.@#))
. seguramente se podría jugar más golf. esta parte-@i.@-@#
es una fruta baja, muy probablementef=. <some tacit expression>
luego5!:2 <'f'
ofrece una visualización en caja y5!:4 <'f'
una visualización de árbol. en mi caso,$"0~1+i.@#
primero intente ejecutar con una cadena, luego ejecute todo a la derecha de|."0 1
, luego entienda eso|."0 1
y todo a la izquierda, guarde la transposición final, solo está haciendo las rotaciones necesarias.#
ayuda aquí, 26 bytes con|:@((-#)|."_1(1j1##)"0)~#\
JavaScript (ECMAScript 6), 161 bytes
Pruébalo en línea!
fuente
Perl 5 , 86 + 2 (-F) = 88 bytes
Usé las sugerencias de @ Dom y algunos de mis propios ajustes para reducir el recuento de bytes.
Pruébalo en línea!
fuente
-aF
para poner todas las letras@F
y un par de pequeños ajustes (-F
cuenta como 3 ya que necesita un espacio después): ¡ Pruébelo en línea!perl -e'code...'
yperl -eF 'code...'
. También-a
es innecesario cuando se usa-F
, por lo que el byte se puede cortar.-F
acepta un argumento, pero no queremos pasar uno (-F
nos permite controlar qué se-a
divide, sin argumento, dividir cada carácter por sí mismo), por lo que es la diferencia entreperl -ae '...'
yperl -aF -e '...'
. Por defecto se-a
divide en/\s+/
. Espero que ayude a aclarar!$#F
! ¡Siempre olvídate de eso!q / kdb +, 55 bytes
Solución:
Ejemplo:
Explicación:
QUE HACER. la versión sin golf es de 66 bytes:
Prima:
Para obtener el mismo resultado que el ejemplo (74 bytes):
fuente