Alice é estagiária em uma empresa que usa o Brainfuck como idioma principal para o desenvolvimento do lado do cliente e do servidor. Alice acabou de escrever seu primeiro código e está um pouco nervosa ao se preparar para sua primeira revisão de código.
Alice deseja que seu código seja formatado adequadamente e tenha uma boa aparência, mas ela não tem tempo para ler o guia de estilo da empresa com 328 páginas, então decidiu formatá-lo como um quadrado perfeito . Infelizmente, o tamanho do código pode ser insuficiente para formar um quadrado, então ela decidiu deixar um espaço retangular no meio. As folgas devem estar perfeitamente centralizadas e o mais próximo possível do quadrado .
Exemplos
++++++ +++++ +++++ +++++ +++++ +++++
++++++ +++++ +++++ + ++ ++ ++ +++++
++++++ ++ ++ + + + ++ + +
++++++ +++++ +++++ +++++ ++ ++ +++++
++++++ +++++ +++++ +++++ +++++ +++++
Perfect OK Acceptable Unacceptable No way! Nope.
Escreva um programa ou uma função para ajudar Alice. Dado o código de Alice como uma sequência de entrada, imprima o código formatado corretamente, conforme descrito abaixo, se possível. Se a formatação for impossível, emita chorando emoji:~(
.
Isso é código-golfe então as respostas são pontuadas em bytes, com menos bytes sendo o objetivo.
Restrições
- Seu programa ou função deve usar uma única seqüência de caracteres como entrada e gerar uma ou mais linhas de texto (ou retornar uma sequência de linhas múltiplas ou um conjunto de seqüências de caracteres, se você implementar uma função).
- A sequência de entrada pode conter caracteres ASCII, incluindo espaços em branco.
- Todos os espaços em branco na entrada devem ser ignorados. Eles não devem contar para o comprimento do código e não devem ser usados na saída.
- A sequência de entrada contém pelo menos um caractere que não é um espaço em branco.
- O código formatado deve ter os mesmos caracteres que não sejam espaços em branco na mesma ordem que no código de entrada.
- O código formatado deve ser um quadrado perfeito, ou seja, todas as linhas devem ter o mesmo comprimento e o número de linhas deve ser igual ao comprimento das linhas.
- O código formatado pode conter uma lacuna no meio.
- Somente caracteres de espaço (código ASCII 32) podem ser usados na lacuna.
- A folga (se presente) deve ser retangular.
- Toda linha de código formatado deve conter pelo menos um caractere que não seja um espaço em branco, ou seja, a largura do espaço deve ser estritamente menor que o quadrado (o espaço 5x1 é inaceitável para o quadrado 5x5).
- O espaço deve ser horizontal, ou seja, a largura do espaço deve ser maior ou igual à altura do espaço.
- O espaço deve estar perfeitamente centrado.
- Conseqüentemente, a paridade de largura e altura da lacuna deve ser igual à paridade de largura quadrada (por exemplo, para a diferença quadrada de 5x5 pode ser 1x1, 3x1 ou 3x3).
- Se possível, produza um quadrado sem folga.
- No caso de várias soluções, escolha uma com a folga mais próxima do quadrado, ou seja, a diferença entre a largura e a altura da folga é mínima (por exemplo: a folga 10x10 é mais preferível que 8x6 e 8x6 é mais preferível que 6x2).
- Se ainda houver um empate, escolha a solução com uma área de espaço mínima (por exemplo, o espaço 2x2 é mais preferível que 4x4).
- Se for impossível formatar o código, faça a saída
:~(
. - Nova linha após a última linha é opcional.
- [Novo] Você pode assumir com segurança que qualquer caractere com código abaixo de 33 é um espaço em branco. Espero que ajude você a jogar golfe.
Testes
Input Output Code length Comment
+++++++++ +++ 9 Alice is lucky,
+++ her code perfectly fits a square.
+++
++++++++ +++ 8 Though code length isn't enough for a square,
+ + a small gap fixes it.
+++
++++++ :~( 6 No luck, code cannot be formatted.
Hello, Hell 12 Input may contain any ASCII characters,
World! o , but whitespaces in input should be ignored.
W o
rld!
+++++ + +++++ +++++ 22 Gap is not required to be a square,
+++++ + +++++ +++++ it can be a rectangle.
+ +
+++++
+++++
+++ + +++ ++++++++ 28 There exists another solution:
+++ + +++ + + 6x6 square with 4x2 gap,
+++ + +++ + + but in Alice's opinion square gap
+++ + +++ + + makes code more readable.
+ +
+ +
+ +
++++++++
Testes complicados
This must be Thism 24 7x7 with 5x5 gap looks good,
5x5 with 1x1 ustbe but 5x5 with 1x1 gap is better,
gap. 5x 5w because gap area is smaller.
ith1x
1gap.
+++ +++ +++ :~( 18 In case you tried 5x5 square
+++ +++ +++ with 7x1 gap ;)
Recursos
Para economizar espaço, você pode encontrar código de amostra e casos de teste extras no tio.run
[Novo] Você pode dar uma olhada na tabela de soluções aceitas para entradas com até 100 caracteres . Troquei a largura e a altura porque parece mais intuição.
Inspirado por: Um quadrado de texto
Alterar
Adicionados 2 testes, bug corrigido no código de amostra.
Tabela de soluções adicionada até 100, clarificação de espaço em branco adicionada.