En las competiciones deportivas, a menudo sucede que los ganadores se presentan en los podios, con la persona del primer lugar en lo más alto en el medio, la persona del segundo lugar en la altura media a la izquierda y la persona del tercer lugar en lo más bajo y a la derecha. Vamos a recrear eso aquí con algunos ajustes especiales.
Los podios se presentan a continuación:
@---@
| @ |
@---@| | |
| @ || | |
| | || | |@---@
| | || | || @ |
Esto formará la base para este desafío. El siguiente paso es hacer que los podios sean lo suficientemente anchos para adaptarse a las personas (cadenas ASCII imprimibles) que están en ellos. Sin embargo, queremos asegurar la belleza estética (porque esta es una oportunidad fantástica para tomar fotos), por lo que cada podio debe tener el mismo ancho, y el ancho debe ser extraño. Además, las personas (obviamente) querrán pararse en el centro del podio, por lo que las cuerdas deben estar centradas lo mejor posible. (Puede alinearse tanto a la izquierda como a la derecha, y no es necesario que sea coherente). Los podios anteriores son del tamaño mínimo y se consideran3
anchos.
Por ejemplo, dada la entrada que ["Tom", "Ann", "Sue"]
representa el primer, segundo y tercer lugar respectivamente, genera los siguientes podios:
Tom
@---@
Ann | @ |
@---@| | |
| @ || | | Sue
| | || | |@---@
| | || | || @ |
Sin embargo, si tenemos en Anne
lugar de Ann
, tendremos que subir al siguiente tamaño 5
y centrar las cuerdas lo mejor posible. Aquí, estoy alineando para que la letra "extra" Anne
esté a la izquierda del centro, pero puedes elegir a qué lado alinear.
Tom
@-----@
Anne | @ |
@-----@| | |
| @ || | | Sue
| | || | |@-----@
| | || | || @ |
Vamos por algunos nombres más largos. Que tal ["William", "Brad", "Eugene"]
:
William
@-------@
Brad | @ |
@-------@| | |
| @ || | | Eugene
| | || | |@-------@
| | || | || @ |
Aquí podemos ver que Brad
tiene mucho espacio en blanco, Eugene
menos, y se William
ajusta a la perfección.
Para un caso de prueba más largo, ¿qué tal ["A", "BC", "DEFGHIJKLMNOPQRSTUVWXYZ"]
:
A
@-----------------------@
BC | @ |
@-----------------------@| | |
| @ || | | DEFGHIJKLMNOPQRSTUVWXYZ
| | || | |@-----------------------@
| | || | || @ |
Finalmente, tenemos la entrada más pequeña posible, algo como ["A", "B", "C"]
:
A
@---@
B | @ |
@---@| | |
| @ || | | 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 nombre). - Puede imprimirlo en STDOUT o devolverlo como resultado de una función.
- Un programa completo o una función son aceptables.
- Cualquier cantidad de espacios en blanco extraños es aceptable, siempre y cuando los caracteres se alineen apropiadamente.
- 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:
JavaScript (ES8), 196 bytes
Pruébalo en línea!
fuente
Groovy ,
187,176,156, 150 bytesPruébalo en línea!
(nota: el tio groovy interpreter no pudo manejar las listas de indexación usando valores largos, aunque groovy 2.5.6 sí. Por lo tanto, la respuesta tio está usando en
*.toShort()
lugar de*.toLong()
agregar un byte)Define un cierre al
f
que se puede llamar mediante:dónde
f
devuelve una cadena.Explicación:
Desenmascarando el código, tenemos:
f={n->
- defina el cierre f con un en-paramn
m=n*.size().max()|1
- encontrar el nombre máximo len, binario o número imparh=' '*(m/2)
- h contendrá espacios de piso (m / 2), utilizados más tardea=...
- crea una lista de codificación con elementos:@---@
patrón, acolchado para len| @ |
patrón, acolchado para len| | |
patrón, acolchado para len'307...'*.toLong().sum{a[it]}
- use indicaciones en la lista de codificación para construir el resultado..sum
usa el hecho de que string + string en groovy es válido.'3073...'*.toLong()
usa el*.
operador de propagación para llamartoLong()
a cada carácter y devolver una lista de números.a
se ha insertado, se han eliminado las líneas de puntos, etc.fuente
Lienzo , 45 bytes.
Pruébalo aquí!
Explicación:
Abusa "y no necesita ser consistente", lo que lo hace bastante ininteligible.
fuente
Python 2 ,
197190 bytesPruébalo en línea!
-6 bytes, gracias a Andrew Dunai
fuente
x,y,p='@| '
y usando enp
lugar de' '
Python 2 , 157 bytes
Pruébalo en línea!
fuente
Carbón , 63 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Calcule el número de espacios en cada mitad de un podio.
Pase sobre cada lugar. Tenga en cuenta que se espera que la entrada esté en el orden 2, 1, 3.
Posición al inicio de la línea que tendrá el texto.
Imprima el texto con suficiente relleno izquierdo para centrarlo.
Obtén la altura del podio.
Dibuja el podio.
Enfoque alternativo, también 63 bytes:
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Calcule el número de espacios en cada mitad de un podio.
Pase sobre cada lugar. Tenga en cuenta que se espera que la entrada esté en el orden 2, 1, 3.
Posición al inicio de la línea que tendrá el texto.
Imprima el texto con suficiente relleno izquierdo para centrarlo.
También muestre la parte superior del podio insertando
-
s entre los caracteres de la cadena@-@
para alcanzar el ancho correcto.Imprima el resto del podio espaciando la
|
s apropiadamente, excepto que el carácter del medio está@
en la primera fila.fuente
R
308302299-6 bytes gracias a @JAD
-3 bytes gracias a @Guiseppe, ahora tengo menos de 300
Probablemente haya una mejor manera de crear el diseño; Debería probar qué opciones tengo para los marcos de datos.
Pruébalo en línea
fuente
i=max(1,nchar(a)%/%2)
. Generar aymatrix
usarwrite
puede ser más corto (en lugar de adata.frame
). Sugiero usarformat
conj="c"
para justificar automáticamente las cosas, y tambiénstrrep
es útil en este caso. ¿Quizás probar la sala de chat golfR para intercambiar ideas?strrep
; Tendré que investigar eso.Limpio , 209 bytes
Pruébalo en línea!
fuente
Python 2 , 188 bytes
Pruébalo en línea!
-5 gracias a TFeld .
fuente
PHP, 147 bytes
Golfed 93 bytes de mi idea inicial, un sencillo
<?=
:toma nombres de argumentos de la línea de comandos. Ejecutar
-nr
o probarlo en línea .Requiere PHP 7; produce advertencias en PHP 7.2 (y más tarde, presumiblemente). Vea el TiO para una corrección de +5 bytes.
cartografía:
Descompostura:
El pre-incremento para
$i
me salva de cualquier truco para las nuevas líneas.El espacio en blanco para
6
también puede estar vacío; así que hice esoPero usar
$argv[0]
para la cadena del borde superior-
fue el mejor golf de todos. (¡y guardado 9 bytes!)fuente
Go, 436 bytes
Ir es terrible para el golf. Pero:
Desglosado:
fuente
Java 8,
399394373 BytesEsta solución es probablemente demasiado larga, pero es una solución :)
Se guardaron 5 bytes al iterar directamente en orden (a = 1,0,2 en lugar de q = 0,1,2; a = f (q))Guardado 21 Bytes gracias a @KevinCruijssen:Como @KevinCruijssen sugirió, también se podría usar en
var
lugar deString
en Java 10+ y guardar algunos bytes adicionales. No hago esto por la sencilla razón de que todavía no tengo Java 10: D también, se podrían usar lambdas. Pero esto solo reduciría la cantidad de bytes si dejáramos de asignarlo a unaFunction<String[],String>
variable.En forma expandida:
La entrada se debe dar como una
String
matriz de longitud 3. Un ejemplo se ve así:Salida:
fuente
var
lugar deString
; llenó la matriz de longitud con un ciclo for-each; cambiadoif(m%2==0)m++;if(m==3)m=5;
am+=m%2<1?m==2?3:1:0
para el mismo efecto; cambiado todo%nr==0
a%nr<1
; cambiado el%(m-1)
a%~-m
; coloque todo dentro del bucle para que{}
se puedan quitar los corchetes .m-l[a]>>1
lugar de(m-l[a])/2
y eni<k+2?" ":j%~-m<1?"|":j==m/2?i==k+2?"@":"|"
lugar dei>=k+2?j%~-m<1?"|":j==m/2?i==k+2?"@":"|":" "
C (GCC)
302293292289287 bytes-6 bytes gracias a ceilingcat
Ejecútalo aquí
Desenmascarado y explicado (técnicamente no puede haber comentarios después de las barras diagonales en las macros, por lo que esto no se ejecutará)
Aquí está el código de llamada
y salida
fuente
for(;i--;memset(D+1,45,w))w=w<(L[i]=strlen(N[i]))?L[i]|1:w;
lugar defor(;i--;)w=w<(L[i]=strlen(N[i]))?L[i]|1:w;memset(D+1,45,w);
PowerShell para Windows,
231223 bytesPruébalo en línea!
La entrada es matriz
@('second','first','third')
. Versión desenrollada:fuente
Stax , 43 bytes
Ejecutar y depurarlo
fuente