Existe um "jogo" existente no qual os piratas dividem racionalmente as moedas de ouro de acordo com certas regras. Citando da Wikipedia :
Existem 5 piratas racionais, A, B, C, D e E. Eles encontram 100 moedas de ouro. Eles devem decidir como distribuí-los.
Os piratas têm uma ordem estrita de antiguidade: A é superior a B, superior a C, superior a D e superior a E.
As regras de distribuição do mundo pirata são assim: que o pirata mais velho proponha uma distribuição de moedas. Os piratas, incluindo o proponente, votam se aceitam essa distribuição. Em caso de empate, o proponente tem voto de qualidade. Se a distribuição for aceita, as moedas são desembolsadas e o jogo termina. Caso contrário, o proponente é jogado para fora do navio pirata e morre, e o próximo pirata mais velho faz uma nova proposta para iniciar o sistema novamente.
Os piratas baseiam suas decisões em três fatores. Primeiro de tudo, cada pirata quer sobreviver. Segundo, dada a sobrevivência, cada pirata deseja maximizar o número de moedas de ouro que recebe. Terceiro, cada pirata prefere jogar outro ao mar, se todos os outros resultados forem iguais. Os piratas não confiam um no outro e não farão nem honrarão nenhuma promessa entre piratas, além de um plano de distribuição proposto que fornece um número inteiro de moedas de ouro para cada pirata.
Desafio
Tome como entrada um número inteiro n
, 1 <= n <= 99, onde n
é o número de piratas - e produza a distribuição de moedas, começando com o primeiro pirata.
Casos de teste (a primeira linha é entrada; a segunda saída):
1
100
2
100 0
3
99 0 1
5
98 0 1 0 1
Isso é código-golfe , então a solução mais curta em bytes vence.
n < 100
? Navios piratas com excesso de pessoal e pouco dourados também precisam de ajuda distributiva.Respostas:
Gelatina ,
1110 bytesExperimente online! ou verifique todos os casos de teste de uma só vez .
Como funciona
Para a entrada n , a tarefa se resume a criar a lista x, 0, 1, 0,… de comprimento n cuja soma é 100 .
fonte
Python, 33 bytes
Calcula o primeiro valor, acrescenta alguns
0, 1, 0, 1...
, trunca no comprimenton
.Observe que
-n/2+101
não é possível abreviá-lo101-n/2
porque unário e binário-
têm precedência diferente: o primeiro é analisado como(-n)/2
e o segundo como101-(n/2)
.A recursão foi muito mais longa (45):
fonte
MATL , 12 bytes
Isso usa a versão atual (9.2.2) do idioma / compilador, anterior a esse desafio.
Exemplo
Explicação
fonte
Pitão, 13 bytes
Conjunto de teste .
fonte
Python,
6258 bytesEDIT: Que bom que eu fiz um one-liner. Mas eu perco por Python. Portanto, isso é apenas para referência. Obrigado @Zgarb
Ele pega a entrada, cria uma lista de paridade de todos os números de 1 a i. Em seguida, define o primeiro elemento em i como soma 101 (n) e imprime.
Experimente aqui
fonte
Javascript ES6, 45 bytes
Graças a @ Neil por 1 byte salvo!
fonte
202-a>>1
salva um byte.𝔼𝕊𝕄𝕚𝕟, 14 caracteres / 26 bytes
Try it here (Firefox only).
Não é ruim, mas também não é bom ...
Explicação
fonte
Sério,
2317 bytesEDIT : Obrigado @quintopia
Utiliza a mesma abordagem da minha resposta Python, mas faço o módulo 2 usando mapeamento e, várias vezes, giro minha pilha.
Explicação :
Este código empurra a entrada (eu vou chamá-lo
i
). Em seguida, empurrarange(1,i+1)
e faz uma função. Em seguida, empurra 2, gira a pilha e, finalmente, pega o módulo.Em seguida, mapeie essa função no intervalo iterável. Isso fornece a paridade de cada elemento na lista.
Por fim, duplica a pilha, soma a lista de paridades, pressiona 2, 10 ^ 2 e 100 + 1 e subtrai a soma (deixe-me chamar esse valor
n
). Em seguida, o código empurra 0, gira a pilha por 1 e define o elemento índice 0 da lista como n. A lista resultante é impressa implicitamente.fonte
,R`2@%`M;Σ2╤u-0(T
Japonês, 14 bytes
Mais um desafio em que me encontro desejando um built-in que acabei de considerar adicionar ...
Experimente online!
fonte
ActionScript 3, 87 bytes
function x(n){var l=[],i=1;for (l[0]=int(101-n/2);i<n;){l[i]=++i%2;}return l.join(" ")}
Não é a melhor linguagem de golfe, mas gosto de postar as3 respostas.
fonte
05AB1E , 12 bytes (não comp)
Experimente online!
fonte
s)˜
pode ser¸ì
.Perl
514944 bytesPrecisa das seguintes opções perlrun
-E
fonte
QBIC ,
2825 bytesExplicação
fonte