Você tem uma pilha de panquecas em um prato com uma calda de xarope por cima, tão espessa que não pode escorrer pelos lados. Você não ficará feliz em comer até que os dois rostos de cada panqueca tenham tocado pelo menos a calda, mas agora apenas uma face da panqueca superior o faz.
Você sabe que o xarope nunca absorve nem uma panqueca, mas pode ser transferido indefinidamente por meio do contato cara a cara entre duas panquecas. Depois que o rosto de uma panqueca toca o xarope, ele é considerado revestido em xarope para sempre e fará qualquer rosto sem revestimento com xarope que toque nele também. É possível transferir o xarope de e para o lado superior da placa também.
Você passa a revestir cada rosto de panqueca com calda, inserindo uma espátula abaixo de uma ou mais panquecas e virando-as por toda parte, exatamente como é feito na classificação de panquecas . (Infelizmente, essa espátula é resistente a xarope e não ajuda a distribuir o xarope tocando as faces da panqueca.) Infelizmente você perde a noção de quais faces da panqueca tocaram no xarope, mas você se lembra dos movimentos que fez.
Dadas as mudanças anteriores, você pode determinar se suas panquecas já estão todas revestidas com xarope?
Desafio
Escreva um programa que obtenha um número inteiro positivo N para o número de panquecas e uma lista de números inteiros positivos (todos <= N) para os lançamentos que você fez até agora. Cada número na lista representa o número de panquecas que foram invertidas. Produza um valor verdadeiro se as panquecas tiverem sido revestidas e um valor falso caso contrário. ( definição de verdade / falsidade )
A entrada deve vir de stdin ou da linha de comando e a saída deve ir para stdout (ou alternativas mais próximas). Tudo bem se sua entrada precisar de uma formatação extra: por exemplo, em [1, 1, 2, 2]
vez de 1 1 2 2
para a lista.
Exemplos
Suponha N = 2, então temos uma pilha de duas panquecas em um prato, começando com a calda por cima.
Se a lista for 1 1 2 2
, isso significa que ...
- vire a panqueca superior - revestindo a face superior da panqueca inferior
- vire a parte superior novamente - revestindo a face inferior original da panqueca superior
- virar ambos - revestindo a placa
- vire os dois novamente - revestindo a face inferior original da panqueca inferior
Como todas as quatro faces são revestidas, a saída seria algo como True
ou 1
.
Se a lista for 1 2 2 1
, isso significa que ...
- vire a panqueca superior - revestindo a face superior da panqueca inferior
- virar ambos - nada de revestimento
- vire os dois novamente - revestindo nada
- vire a parte superior novamente - revestindo a face inferior original da panqueca superior
Como o rosto que toca a placa ainda está sem xarope, a saída seria algo como False
ou 0
.
Notas
- A lista inversa pode ser arbitrariamente grande e pode estar vazia; nesse caso, a saída é falsa.
- A placa atua como transportadora de xarope, mas não importa se é revestida ou não. (Na verdade, qualquer solução de aleta vontade revestimento da placa, porque a face panqueca que toca deve ser revestida, mas independentemente.)
- A placa não pode ser virada.
- Você pode assumir que essas panquecas são discos de unidade sem lados para falar, apenas duas faces opostas.
Pontuação
Isso é código-golfe. A solução mais curta em bytes vence.
Put syrup on the pancakes!
;)