El propósito de este desafío es producir una versión ASCII de la portada de este gran álbum de la banda de rock Pink Floyd.
Las uniones de ladrillo están hechas de caracteres _
y |
. Los ladrillos tienen caracteres de ancho 7 y alto 2, excluyendo las uniones. Entonces, la unidad básica, incluidas las uniones, es:
_________
| |
| |
_________
Cada fila de ladrillos está compensada por medio ancho de ladrillo (4 caracteres) con respecto a la fila anterior:
________________________________________
| | | | |
| | | | |
________________________________________
| | | | |
| | | | |
________________________________________
| | | | |
| | | | |
El muro se parametriza de la siguiente manera. Todos los parámetros se miden en caracteres, incluidas las uniones:
- Desplazamiento horizontal de la primera fila,
F
. Esta es la distancia entre el margen izquierdo y la primera unión vertical de la fila superior. (Recuerde también el desplazamiento relativo de medio ladrillo entre filas). Sus valores posibles son0
,1
, ...,7
. - Total anchura ,
W
. Esto incluye cruces. Su valor es un entero positivo. - Total de altura ,
H
. Esto incluye cruces. Su valor es un entero positivo.
La parte superior de la pared siempre coincide con la parte superior de una fila. El fondo puede ser irregular (si la altura total no es un múltiplo de 3
). Por ejemplo, aquí está la salida para 6
, 44
, 11
:
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
| | | | | |
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
y una explicación visual de los parámetros:
F=6
......
. ____________________________________________
. | | | | |
. | | | | |
. ____________________________________________
. | | | | | |
H=11 . | | | | | |
. ____________________________________________
. | | | | |
. | | | | |
. ____________________________________________
. | | | | | |
............................................
W=44
Reglas adicionales
Puede proporcionar un programa o una función.
El formato de entrada es flexible como de costumbre. La salida puede ser a través de STDOUT o un argumento devuelto por una función. En este caso, puede ser una cadena con nuevas líneas o una serie de cadenas.
Se permiten espacios finales o líneas nuevas.
El código más corto en bytes gana.
Casos de prueba
Las entradas están en el orden indicado anteriormente, es decir: desplazamiento horizontal de la primera fila, ancho total, altura total.
6, 44, 11:
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
| | | | | |
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
2, 20, 10:
____________________
| | |
| | |
____________________
| |
| |
____________________
| | |
| | |
____________________
1, 1, 1:
_
1, 2, 3:
__
|
|
3, 80, 21:
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
Respuestas:
Pyth,
4327 bytesYo necesito al golf que en gran medida el resultado ... es demasiado vergonzoso.
Pruébalo en línea ya.
Formato de entrada
Formato de salida
Explicación
fuente
C,
86858382 bytes3 bytes guardados gracias a Lynn.
1 byte guardado gracias a Charlie.
fuente
for(i=0;++i<w*h;)
o sii
se hace local (truco param):for(;++i<w*h;)
i;
pori=1;
y guarde un byte más en el bucle for.for(i=1;i<w*h;++i)
->for(i=0;++i<w*h;)
ahorra 1C, 92 bytes
Invocar como
b(F, W, H)
.fuente
Perl, 63 bytes
Contando el shebang como 2, la entrada se toma de stdin, con espacios en blanco separados.
Uso de muestra
fuente
Haskell, 83 bytes
Esto define una función infija ternaria
!
que devuelve una lista de cadenas. Ejemplo de uso:Cómo funciona:
fuente
JavaScript (ES6),
9695 bytesExplicación: Crea una cadena de los 7 espacios repetitivos más el
|
patrón o simplemente_
s repetidos , pero al menos lo suficiente como para poder extraer losw
caracteres necesarios para cada fila. Las primeras tres filas comienzan en la posiciónf^7
y luego las siguientes tres filas comienzan en la posiciónf^3
, así que lo logroalternando el bit 2 deusando el bit opuesto 2 en las últimas dos filas de cada bloque de 6 para ahorrar 1 byte.f
cada tercera filafuente
MATL,
423633 bytesEl formato de entrada es:
nCols
,offset
,nRows
Pruébalo en línea
El enfoque aquí es que configuramos una "plantilla" que luego indexamos usando los índices de fila (
[1 2 ... nRows]
) y los índices de columna desplazados por la primera entrada ([1 2 ... nCols] - shift
). Gracias a la indexación modular de MATL, automáticamente dará como resultado una salida en mosaico. Como nota al margen, para ahorrar algo de espacio, técnicamente trabajo con una versión transpuesta de la plantilla y luego tomo una transposición (!
) al final.La plantilla es esta:
fuente
Python 2,
9388 bytesEl segundo nivel de sangría es la pestañaGuardar algunos bytes gracias a Leaky Nun y algunas modificaciones propias, ahora también el desplazamiento correcto:código anterior:
Misma longitud que lambda sin nombre:
fuente
F,W,H=input()
print
h/3%2*4
o enh%6/3*4
lugar de4*(h%6>3)
print
declaración en la misma línea que lafor
declaración"| "
es más corto que("|"+7*" ")
si cuento correctamenteQBasic,
121109bytes(Probado en QB64)
Gracias a @DLosc por jugar golf con mi
IF
declaración con un equivalente matemático. Eso valía 12 bytes.Método general
Bucle a través de cada célula de uno en uno y determinar si debe ser una
_
,o
|
dependiendo de su ubicación.MOD
Las declaraciones y la lógica booleana se utilizan para determinar los límites de los ladrillos y cuánto escalonarlos.Código:
Nota de uso:
QBasic espera que las entradas sean números separados por comas.
fuente
IF
/THEN
agrega aún más paréntesis, pero ahorra 12 bytes:?CHR$((y MOD 3>0)*(((x-(y MOD 6>3)*4)MOD 8=F)*92+63)+95);
Java,
149,147,146, 143 bytesGolfizado:
Sin golf:
fuente
> 0
que podría guardar dos caracteres. Y, por supuesto, puede combinar las declaraciones aint y=0,x
.int
antesx
y usarint y=0,x
en el primer bucle for en su lugar para guardar 2 bytes. Además, actualmente puede cambiary%3==0
ay%3<1
. (Esto no es posible que...%8==0
a...&8<1
pesar de que, ya que su operación podría devolver un número negativo.)int...o
como parámetro y cambiarw
ao[1]
,h
ao[2]
, yo
queo[0]
es -3 bytes lugar.Rubí,
7266 bytes¡Gracias @Value Ink por 6 bytes!
Simple multiplicación de cuerda y corte.
Funciona en Ruby 2.3.0 (la versión 2.1 de Ideone arrojó un error de sintaxis).
fuente
i%6/4*4
lugar de(i%6>3?4:0)
y use en?_
lugar de'_'
, en?|
lugar de'|'
.?
truco de un solo personaje, ¡y la parte de "matemáticas" es realmente impresionante!((' '*7+?|)*w)[f^7^i%6&4,w]
te ahorra dos bytes.Julia:
150128116108107 bytescorrer con argumentos:
julia -e 'o=2;h=18;w=40;include("codegolf.jl")'
Si crees que llamar desde bash es una trampa y quieres una función dentro del intérprete, entonces la versión de la función es de 117 bytes :)
manifestación
(¡Gracias, @ glen-o por el consejo adicional para guardar bytes!)
fuente
h
yw
en ladrillos, no en caracteresrepmat([32],6,8)
), y luego renombrando repmat para afeitar a otro personaje (g=repmat;b=g([32],6,8)
y más adelanteb=g(b,h,w)[1:h,o+1:o+w+1]
). Luego reemplazarreinterpret
conmap
. Según mis cálculos, ahorrará 9 bytes entre estos cambios.JavaScript,
172168165157147142137 bytesfuente
s.repeat(w)
lugar deArray(w).fill(s).join``
?Dyalog APL, 29 bytes
↑⎕⍴⎕⍴¨a,4⌽¨a←'_',2⍴⊂⌽⎕⌽¯8↑'|'
pruebas:
6 44 11
,2 20 10
,1 1 1
,1 2 3
,3 80 21
⎕
se evalúa la entrada; como la expresión ejecuta de derecha a izquierda, se solicitaF
,W
yH
en ese orden¯8↑'|'
es' |'
⎕⌽
gira, corta los caracteres F desde el frente y los coloca al final de la cuerdael otro
⌽
significa revertir'_',2⍴⊂
crea una tupla de 3 de '_' seguida de dos copias separadas de la cadena hasta el momentoa,4⌽¨a←
agregue la 4 rotación de todo hasta ahora, terminamos con una tupla de 6⎕⍴¨
remodelar cada elemento al ancho⎕⍴
remodelar a la altura↑
mezclar vectores de vectores en una matrizfuente
En realidad ,
444340 bytesEste es un puerto real del algoritmo en la respuesta JS de Neil . Sugerencias de golf bienvenidas. Pruébalo en línea!
No golfista:
fuente
PowerShell ,
10188 bytesPruébalo en línea!
fuente
Octava
8076 bytespara correr desde la terminal:
octave --eval "o=2;h=18;w=44; codegolf"
(alternativamente, si cree que la llamada de terminal está haciendo trampa: p, entonces una implementación de función anónima toma 86 bytes :)
Llame
f(2,18,44)
al intérprete de octava.fuente
Bash + Sed,
411395381370 bytes:Bueno, aquí está mi primera respuesta en Bash, o cualquier lenguaje de script de shell para el caso. Esta es también, con mucho, la respuesta más larga aquí. Toma una secuencia de argumentos de línea de comandos separados por espacios en el formato
Offset Width Height
. Esto probablemente puede ser mucho más corto de lo que es actualmente, por lo que se agradece cualquier consejo y / o truco para jugar golf más abajo.fuente
Delphi / Object Pascal,
305,302, 292 bytesPrograma de consola completa que lee 3 parámetros.
sin golf
Lamentablemente, Delphi no tiene un operador ternario y es un lenguaje bastante detallado.
caso de prueba
Editar: podría reducir 3 bytes utilizando byte como tipo para todas las variables.
Edición 2: y las aplicaciones de consola no necesitan la declaración del programa, -10
fuente