Tenho certeza que todo mundo já viu antes que os copos possam ser empilhados em pirâmides (e outras formas):
A
A A A
A A A A A
A A A A A A A A
Sim, A
é definitivamente um personagem adequado para representar um copo.
Novos copos podem ser adicionados no chão, à direita da estrutura ou em cima de dois copos adjacentes. Aqui está a estrutura acima novamente, mas todos os locais disponíveis para novos copos estão marcados com _
:
_ A
A A A
A _ _ A A A A
A A A A A A A A _ _ _
Digamos que queremos construir um robô que possa montar essas pilhas de copos. O robô entenderá duas instruções simples para manipular essa estrutura:
a
: Adicione um copo novo no primeiro local disponível na ordem de leitura da esquerda para a direita (ou seja, digitalize as linhas de cima para baixo, da esquerda para a direita até encontrar um local disponível e coloque o copo ali). O exemplo acima se tornaria:A A A A A A A A A A A A A A A A A A
r
: Remova o primeiro copo na ordem de leitura da esquerda para a direita. O exemplo acima se tornaria:A A A A A A A A A A A A A A A A
Acontece que qualquer estrutura pode ser construída do zero usando apenas essas duas operações. Por exemplo
A
A A A
A A A A A
Pode ser construído com a sequência de instruções
aaaaaaaaaaaarrrrraa
O exemplo maior acima pode ser construído usando
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrraaaaaaarr
Aqui está um ainda maior:
A
A A A
A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A A
que pode ser construído com
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrraaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrraaaaaaaaaaaaaarrrrrrrrrrraaaaaaaa
Nota: Se os pontos no chão forem liberados pelas instruções de remoção, eles serão reutilizados antes de colocar os copos à direita de todos os copos existentes. Por exemplo
aaaarrra
vai render
A A
não
A A
Você pode pensar no chão como estando em cima de uma fileira semi-infinita de xícaras.
O desafio
Dada uma estrutura de copos empilhados, retorne uma sequência representando as instruções para construir essa estrutura. Sua pontuação principal é a soma dos números de instruções para os casos de teste fornecidos na parte inferior. Em caso de empate (o que é provável, porque estou convencido de que uma solução ótima e eficiente é possível), a solução mais curta vence.
Aqui estão mais alguns detalhes sobre as regras:
- Você pode assumir que não há espaços à esquerda na linha inferior da entrada; portanto, o ponto mais à esquerda do copo sempre deve ser usado.
- Você pode assumir qualquer quantidade razoável de espaços à direita (sem espaços, um espaço, preenchido com um retângulo, preenchido com um retângulo com um único espaço à direita).
- Opcionalmente, você pode esperar que a entrada termine em uma única nova linha à direita.
- Você pode escolher dois caracteres ASCII imprimíveis distintos (0x20 a 0x7E, inclusive) em vez de
A
espaços (as regras sobre espaços são transferidas para o caractere escolhido). - Sua saída deve conter apenas dois caracteres distintos que representam as operações (você pode escolher outros caracteres além de
a
er
). Opcionalmente, você pode imprimir uma única nova linha à direita. - Seu código deve ser capaz de resolver qualquer um dos casos de teste abaixo em menos de um minuto em um PC de mesa razoável (se levar dois minutos no meu, darei a você o benefício da dúvida, mas se levar dez, vencerei Acredito que seja possível um algoritmo ideal que resolva qualquer um deles em menos de um segundo).
- Você não deve otimizar seu código para casos de teste individuais (por exemplo, codificando-os). Se eu suspeito que alguém o faça, reservo-me o direito de alterar os casos de teste.
Você pode usar este script CJam para a operação reversa: ele precisará de uma sequência de instruções de construção e imprimirá a pilha de copos resultante. (Agradecemos a Dennis por reescrever o trecho e acelerá-lo significativamente.)
O Sp3000 também gentilmente forneceu esse script Python alternativo para o mesmo objetivo.
Casos de teste
Após cada caso de teste, há um número indicando o número ideal de instruções conforme a resposta de Ell.
A
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
820
A
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
1946
A
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
2252
A A
A A A A
A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
9958
A A
A A A A
A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
5540
A A A A A A A A A A A A A A A A A A A A
10280
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
10320
A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
5794
A
A A
A A A
A A A A A
A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
3297
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A
A A A A A A A A A A A
A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
4081
A
A A A A
A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
4475
A
A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
5752
Isso significa que a melhor pontuação possível é 64.515 instruções.