Alguém tem empilhado às pressas os presentes de Natal, e é uma bagunça:
========================
| |
========================
=============
| |
| |
| |
| |
| |
| |
=============
=======
| |
| |
| |
=======
===================
| |
| |
| |
===================
=================
| |
| |
| |
| |
=================
=======
| |
| |
=======
Sério, como esse top apresenta equilíbrio. Provavelmente é um martelo. Para impedir que essa torre de presentes desmorone, você deve reordenar os presentes para que eles fiquem bem empilhados:
=======
| |
| |
=======
=======
| |
| |
| |
=======
=============
| |
| |
| |
| |
| |
| |
=============
=================
| |
| |
| |
| |
=================
===================
| |
| |
| |
===================
========================
| |
========================
As regras
- Cada presente consiste em uma parte superior e inferior dos
=
caracteres e uma ou mais linhas do meio, consistindo em duas|
separadas por espaços. A largura do presente é a mesma em todas as suas linhas. - Não há linhas vazias.
- Presentes consecutivos se sobrepõem em pelo menos uma coluna.
- Os presentes devem ser empilhados em ordem decrescente de largura. Em caso de empate, o presente mais alto deve ficar abaixo do presente mais plano.
- Os presentes devem estar centralizados no presente abaixo. Se o presente não puder ser colocado exatamente no centro (porque a diferença nas larguras é ímpar), você poderá escolher uma posição com meio caractere fora do centro.
- Você pode ou não presumir que a entrada tenha uma nova linha à direita, mas indique sua suposição.
- Sua solução não precisa funcionar para uma entrada vazia, mas deve poder manipular um único presente.
- Você pode escrever um programa ou função, que recebe entrada via STDIN ou argumento de função e retorna o resultado ou o imprime em STDOUT.
- Isso é código de golfe, então a resposta mais curta (em bytes) vence.
Japonês , 18 bytes
Experimente online!
Eu uso uma estratégia suficientemente diferente da outra resposta japonesa que achei que valeria a pena. Toma entrada e saída como uma matriz de linhas
Explicação:
Não sei exatamente por que a "classificação padrão" funciona assim, mas testei que a caixa mais alta das duas com a mesma largura está na parte inferior, independentemente da que ocorrer primeiro na entrada.
fonte
"=="
por'=²
para salvar um byte.Ruby, 164
Desafio puro! Não foi possível diminuir muito mais.
Explicação
A entrada
String
é dividida em umArray
local em que cada presente é um elemento. Em seguida, a matriz é classificada pelo número de caracteres de pipe e classificada novamente pelo número de sinais de igual.Em seguida, remove todo o espaço em branco à esquerda e imprime cada linha individualmente, centralizada pela largura do maior presente.
Ele se comporta da mesma forma com ou sem uma nova linha à direita na entrada.
Versão legível
fonte
05AB1E ,
2320 bytes-3 bytes graças a @ErikTheOutgolfer .
Experimente online.
Explicação:
Notas:
c
à direita para maiúsculasC
.|
pode ser eliminado se for permitido levar a entrada como uma lista de linhas de sequência.|
remove de qualquer maneira.fonte
ðδÛ
pode ser usado em vez deεðÛ}
aqui,¶'=.ø
é o mesmo que…=\n=
(\n
significa nova linha),0'=.ø
é o mesmo que…=0=
..ø
vez das strings literais de 3 caracteres .. E obrigado porðδÛ
. Na verdade, nunca useiδ
antes e não tinha ideia de que funcionava assim.Anexo , 91 bytes
Experimente online!
Ungolfed
fonte
Perl 5
-n0
, 123 bytesExperimente online!
fonte
Python 2 ,
221196 bytesExperimente online!
Espera uma sequência de caracteres entre aspas sem seguir novas linhas como entrada.
Não é ótimo, mas é o melhor que posso fazer.
fonte
Japonês ,
232019 bytesAbordagem semelhante à solução de Kevin . O primeiro byte pode ser removido se pudermos receber a entrada como uma matriz de linhas.
Tente
fonte
Sou um novato no código de golfe, e não sou como um especialista em javascript, mas o desafio é interessante e divertido. Gostaria de ver quais truques um verdadeiro especialista em js usaria.
Suposições
Código
A entrada é no
g[]
. Saída emm[]
.O código funciona por
construindo uma matriz de objetos, cada objeto representando uma caixa, com dois membros: K, uma chave de classificação sendo a (largura x 100 + altura) e O, uma matriz das cadeias (aparadas) que compõem a caixa. Ao criar a matriz, o código lembra a largura da caixa mais larga.
A matriz de objetos de caixa é classificada em ordem pela chave K. Onde as caixas têm a mesma largura, a chave garante que elas sejam classificadas por altura.
Depois de classificar as caixas, as cadeias de caracteres de cada caixa são inseridas na matriz de saída com os espaços à esquerda adicionados, que posicionam a caixa centralmente sobre a mais larga.
Experimente online!
fonte