Classificar os livros didáticos
A escola está começando em breve (se ainda não o fez) e, portanto, é hora de colocar nossos livros didáticos em ordem. Você precisa classificar seus livros em ordem alfabética, mas isso leva muito tempo para decidir escrever um programa para fazê-lo.
Exemplos
Entrada:
_
| | _
|F| | |
|o|_|P|
|o|B|P|
| |a|C|
| |r|G|
|_|_|_|
Saída:
_
| |_
|F| |
_|o|P|
|B|o|P|
|a| |C|
|r| |G|
|_|_|_|
Entrada
A entrada será um conjunto de livros que precisam ser reorganizados em ordem alfabética. Ele irá conter apenas: |
, _
, , e
A-Za-z
. Os títulos dos livros são lidos verticalmente, de cima para baixo.
Você pode optar por assumir que a entrada é preenchida com espaço em branco para ajustar um retângulo. Se você optar por preencher sua entrada com espaço em branco, especifique-o na sua resposta.
A altura máxima máxima do livro que seu programa precisará suportar é de 5.120 linhas, sem falhar.
Os livros terão sempre uma espessura e sempre terão pelo menos um livro na entrada
Saída
A saída precisará ser o mesmo conjunto de livros organizados em ordem alfabética. A altura dos livros deve permanecer a mesma e o título deve ter o mesmo espaçamento da parte superior quando reorganizados.
Os livros devem ser classificados em ordem alfabética. Se o seu idioma possui uma função de classificação, você pode usá-lo. Caso contrário, você pode usar a classificação alfabética, conforme descrito aqui .
Exemplos de títulos de livros
_
| |
| |
|F|
|o|
|o|
| |
| |
|B|
|a|
|r|
| |
| |
|_|
O título deste livro é:
"Foo Bar"
Os títulos dos livros conterão apenas letras e espaços.
Espaço em branco à direita é permitido
Ganhando
Este é o código-golfe, pelo que o código mais curto em bytes vence.
Respostas:
CJam, 60 bytes
Tentei portar minha resposta em Python, que também é semelhante à abordagem do @ RetoKoradi .
Experimente online . A entrada deve ser preenchida com espaços para formar um retângulo.
fonte
Python 3, 231 bytes
Apenas um hack rápido. Feche os livros, classifique, rezip, cuidando das colunas
|
enquanto estivermos nisso.Insira uma cadeia de linhas múltiplas, preenchida com espaços à direita em um retângulo. A saída possui mais um espaço à direita em cada linha do que o necessário.
Ungolfed
fonte
Ruby (
209204200198 bytes)A
transpose
função nesta solução requer que todas as linhas tenham o mesmo comprimento; portanto, a entrada precisa ser preenchida com espaço em branco.Explicação
fonte
ruby
versão é necessária? Com o 2.1.2 para o exemplo de entrada da pergunta, recebo "` transpose ': o tamanho do elemento difere (6 deve ser 2) (IndexError) ".gsub(?|,' ')
→tr(?|,' ')
.Python 2 - 399 bytes
Espera que a entrada não tenha uma nova linha à direita.
fonte
CJam,
756665 bytesIsso espera que a entrada preenchida com espaços forme um retângulo.
Experimente online
Agradeço a @ Sp3000 e @Dennis por sugestões sobre o corte de cordas no bate-papo, além de me indicar que o
$
operador pode aceitar um bloco como argumento.Ainda não estou totalmente feliz com o segundo loop. Mas depois de tentar algumas outras opções sem melhor sucesso, estou ficando cansado.
Explicação:
fonte
Scala
359341 bytesespera que todas as linhas tenham o mesmo comprimento (ou seja, preenchidas com espaços)
ungolfed & comentou:
fonte