Esse desafio está relacionado ao lançamento de panquecas .
Você já deve ter ouvido falar da seleção de panquecas , onde uma pilha de panquecas é classificada por tamanho, inserindo uma espátula na pilha e lançando todas as panquecas acima da espátula, até que as panquecas sejam classificadas da menor para a maior no prato. O problema da panqueca queimada é um pouco diferente. Todas as panquecas agora têm um lado queimado e o lado queimado de cada panqueca deve ficar de frente para o prato depois que a triagem for concluída.
Por exemplo, dada a seguinte pilha (tamanho da panqueca à esquerda. 0
Significando lado queimado para baixo e 1
significando lado queimado para cima à direita):
1 0
3 1
2 1
Você pode virar a pilha inteira para pegar 20 30 11
, virar as duas primeiras para pegar 31 21 11
e virar a pilha inteira novamente para pegar 10 20 30
uma pilha classificada de panquecas queimadas. Esta sequência de movimentos, flip 3, flip 2, flip 3, pode ser representada como 3 2 3
.
O desafio
- Dada uma variedade de tamanhos de panquecas (não necessariamente exclusivos) e suas orientações, produza qualquer sequência válida de classificação de panquecas queimadas, ou seja, uma sequência de inversões que leva à pilha de panquecas sendo classificadas do menor para o maior com os lados queimados para baixo.
- A entrada e a saída podem ter qualquer formato são com separadores, mas especifique quais formatos você usa e indique qual extremidade do seu formato de entrada é a parte superior da pilha (TOS).
- É permitido virar zero panquecas.
- É permitida a mistura de separadores na entrada / saída.
Casos de teste
Para todos os casos de teste a seguir, a entrada é uma lista e a saída é uma sequência separada por espaço e o TOS está à esquerda.
[[1, 0], [3, 1], [2, 1]]
"3 2 3"
[[5, 1], [3, 0], [4, 1], [2, 1], [1, 0]]
"5 3 4 1 3 2 1"
[[5, 1], [3, 0], [3, 0], [1, 1]]
"4 3 2 3"
Como sempre, se algo não estiver claro ou incorreto, informe-me nos comentários. Boa sorte e bom golfe!
0
permitido na lista de saída?CJam (37 bytes)
Input é uma matriz no formato CJam em stdin; output é uma lista separada por nova linha de comprimentos de flip no stdout. O topo da pilha está no índice
0
;0
indica lado queimado para cima e1
indica lado queimado para baixo.Demonstração online
Dissecação
A saída é sempre
3n
invertida, onden
está o número de panquecas. Primeiro, colocamos a maior panqueca restante no topo; se estiver queimado, viramos a panqueca; e depois a colocamos no fundo e repetimos como se a pilha de panquecas fosse uma mais curta.fonte
Ruby,
1019593 bytesNão muito golfista, eu só queria fazer uma variante do tipo bogo. É uma função anônima que pega uma matriz de matrizes e imprime movimentos aleatórios para stdout até que as panquecas sejam classificadas.
Você pode, por exemplo, atribuir
f
e dizerf.call [[1, 0], [3, 1], [2, 1]]
-5 bytes de @Jordan com o uso brilhante de
rassoc
-2 bytes de @ Sherlock9
fonte
a.all?{...}
por!a.rassoc(1)
.r
)assoc
antes, mas, pensando bem, provavelmente é útil em muitos problemas neste site - acho que ele deve aparecer no post de dicas de golfe do Ruby. De qualquer forma, obrigado :) Eu também fui capaz de matar outro byte através da aplicação da lei deMorgans e substituindountil
porwhile
.b
só é sempre0
ou1
,1-b
também funcionaria e salvaria dois bytes.