Alguien apiló apresuradamente los regalos de Navidad, y es un desastre:
========================
| |
========================
=============
| |
| |
| |
| |
| |
| |
=============
=======
| |
| |
| |
=======
===================
| |
| |
| |
===================
=================
| |
| |
| |
| |
=================
=======
| |
| |
=======
Al igual que, en serio, ¿cómo se equilibra ese presente superior? Probablemente sea un martillo. Para evitar que esta torre de regalos se desmorone, debes reordenar los regalos para que se apilen bien:
=======
| |
| |
=======
=======
| |
| |
| |
=======
=============
| |
| |
| |
| |
| |
| |
=============
=================
| |
| |
| |
| |
=================
===================
| |
| |
| |
===================
========================
| |
========================
Las normas
- Cada presente consta de una parte superior e inferior de
=
caracteres, y una o más filas intermedias, que consisten en dos|
separados por espacios. El ancho del presente es el mismo en todas sus filas. - No hay líneas vacías.
- Los regalos consecutivos se superpondrán en al menos una columna.
- Los regalos se deben apilar en orden decreciente de ancho. En caso de empate, el regalo más alto debe ir por debajo del regalo más plano.
- Los regalos deben centrarse en el presente debajo. Si el presente no se puede colocar exactamente en el centro (porque la diferencia de ancho es impar), puede elegir cualquier posición que esté a medio carácter del centro.
- Puede asumir o no que la entrada tiene una nueva línea final, pero por favor indique su suposición.
- Su solución no tiene que funcionar para una entrada vacía, sino que debe poder manejar un único presente.
- Puede escribir un programa o función, que toma la entrada a través de STDIN o argumento de función y devuelve el resultado o lo imprime en STDOUT.
- Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
Japt , 18 bytes
Pruébalo en línea!
Utilizo una estrategia suficientemente diferente de la otra respuesta de Japt que pensé que valía la pena. Toma entrada y salida como una matriz de líneas
Explicación:
No sé exactamente por qué la "ordenación predeterminada" funciona así, pero he probado que la caja más alta de las dos con el mismo ancho está en la parte inferior, independientemente de cuál sea el primero en la entrada.
fuente
"=="
con'=²
para guardar un byte.Rubí, 164
¡Buen desafío! No pude descifrarlo mucho más.
Explicación
La entrada
String
se corta en un lugarArray
donde cada presente es un elemento. Luego, la matriz se ordena por la cantidad de caracteres de tubería y se ordena nuevamente por la cantidad de signos iguales.Luego elimina todos los espacios en blanco iniciales e imprime cada línea individualmente, centrada por el ancho del regalo más grande.
Se comporta igual con o sin una nueva línea final en la entrada.
Versión legible
fuente
05AB1E ,
2320 bytes-3 bytes gracias a @ErikTheOutgolfer .
Pruébalo en línea.
Explicación:
Notas:
c
a mayúsculasC
.|
se puede eliminar si se nos permite tomar la entrada como una lista de líneas de cadena.|
elimina de todos modos.fuente
ðδÛ
se puede usar en lugar deεðÛ}
aquí,¶'=.ø
es lo mismo que…=\n=
(\n
significa nueva línea),0'=.ø
es lo mismo que…=0=
..ø
lugar de las cadenas literales de 3 caracteres. Y gracias porðδÛ
. En realidad nunca lo uséδ
antes y no tenía idea de que funcionaba así.Adjunto , 91 bytes
Pruébalo en línea!
Sin golf
fuente
Perl 5
-n0
, 123 bytesPruébalo en línea!
fuente
Python 2 ,
221196 bytesPruébalo en línea!
Espera una cadena entre comillas sin arrastrar líneas nuevas como entrada
No es genial, pero es lo mejor que puedo hacer.
fuente
Japt ,
232019 bytesEnfoque similar a la solución de Kevin . El primer byte puede eliminarse si podemos tomar la entrada como una matriz de líneas.
Intentalo
fuente
Soy un novato en el código de golf, y no soy nada como un experto en JavaScript, pero el desafío es interesante y divertido. Me gustaría ver qué trucos usaría un verdadero experto en js.
Supuestos
Código
La entrada está adentro
g[]
. La producción enm[]
.El código funciona por
construyendo una matriz de objetos, cada objeto representando una caja, con dos miembros: K, una clave de clasificación es (ancho x 100 + altura) y O, una matriz de las cadenas (recortadas) que forman la caja. Al construir la matriz, el código recuerda el ancho del cuadro más ancho.
La matriz de objetos de cuadro se ordena en orden por la clave K. Cuando los cuadros tienen el mismo ancho, la clave garantiza que estén ordenados por alto.
Después de ordenar los cuadros, las cadenas de cada cuadro se insertan en la matriz de salida con espacios iniciales agregados, que colocan el cuadro centralmente sobre el más ancho.
Pruébalo en línea!
fuente