Meu professor do Precalc tem um dos seus problemas favoritos que ele inventou (ou mais provavelmente roubou inspirado no xkcd ) que envolve uma fileira de n
mictórios. "Xeque-mate" é uma situação em que todo mictório já está ocupado OU possui um mictório próximo a eles. Por exemplo, se uma pessoa é uma X
, então
X-X--X
é considerado xeque-mate. Observe que uma pessoa não pode ocupar um urinol próximo a um urinol já ocupado.
Tarefa
Seu programa analisará um número stdin
, argumentos de linha de comando ou um argumento de função. Seu programa imprimirá ou retornará o número de maneiras pelas quais o xeque-mate pode ocorrer com o número digitado de mictórios.
Exemplos
0 -> 1
(as contagens de casos nula como checkmate)
1 -> 1
( X
)
2 -> 2
( X-
ou -X
)
3 -> 2
( X-X
ou -X-
)
4 -> 3
( X-X-
, -X-X
, ou X--X
)
5 -> 4
( X-X-X
, X--X-
, -X-X-
, ou -X--X
)
6 -> 5
( X-X-X-
, X--X-X
, X-X--X
, -X--X-
ou -X-X-X
)
7 -> 7
( X-X-X-X
, X--X-X-
, -X-X--X
, -X--X-X
, X-X--X-
, X--X--X
ou -X-X-X-
)
8 -> 9
( -X--X--X
, -X--X-X-
, -X-X--X-
, -X-X-X-X
, X--X--X-
, X--X-X-X
, X-X--X-X
, X-X-X--X
, X-X-X-X-
)
...
Pontuação
O menor programa em bytes vence.
''
. É o mesmo que com fatorial e permutações, 0! = 1, porque existe exatamente uma maneira de organizar 0 itens.Respostas:
Oásis , 5 bytes
Código
Versão extendida
Explicação
Experimente online!
fonte
info.txt
info.txt
é útil, ele contém uma documentação para cada comandos OasisJava 7,
6542 bytesA sequência apenas adiciona elementos anteriores para obter novos. Gorjeta de chapéu para orlp e Rod para esse método mais curto;)
Velho:
Após o quinto elemento, a lacuna na sequência aumenta pelo elemento cinco anterior.
fonte
f
função do outro trecho em vez de recorrência. Me estúpido, fixação ...u>0?u:1;
) não pode se tornar1;
?u>0?u:1;)
por1;
se alterar a primeira comparação parau>1
, então em u = 2 a saída será g (0) + g (-1), que será 2Python 2,
42403935 bytesGerando os conjuntos reais:
fonte
Ruby,
5834 bytesFortemente inspirado pela resposta Java original dos Geobits.
Veja em repl.it: https://repl.it/Dedh/1
Primeira tentativa
Veja em repl.it: https://repl.it/Dedh
fonte
Python, 33 bytes
Usa os casos base deslocados
f(-1) = f(0) = f(1) = 1
. SeTrue
pudesse ser usado para 1, não precisaríamos de 3 bytes para o+()
.fonte
J,
312723 bytesEconomizou 4 bytes graças a milhas!
Uma explicação está para vir em breve.
Solução antiga
Esta é uma agenda. O LHS é um gerúndio composto por dois verbos:
>.1&^
e-&3+&$:-&2
. O primeiro é usado se a condição (2&<
) falhar. Isso significa que o fork>.1&^
é ativado sobre o argumento. Observar:Aqui,
>.
leva o máximo de dois valores. Assim, produz 1, 1 e 2 como os termos iniciais.O segundo verbo no gerúndio é um garfo:
Os dentes esquerdo e direito são aplicados ao verbo, subtraindo 3 e 2 respectivamente; então o verbo do meio é chamado com argumentos esquerdo e direito iguais a esses.
$:
chama o verbo em cada argumento e+
adiciona esses dois. É basicamente equivalente a($: arg - 3) + ($: arg - 2)
Casos de teste
fonte
MATL ,
2523 bytesExperimente online! Ou verifique todos os casos de teste .
Explicação
Duas convoluções! Yay!
Isso cria uma matriz, digamos A, onde cada configuração possível é uma linha.
1
nesta matriz representa uma posição ocupada. Por exemplo, para entrada,4
a matriz A éO código convolve a matriz A com
[1 1 1]
. Isso fornece uma matriz B. As posições ocupadas e os vizinhos das posições ocupadas em A fornecem um resultado diferente de zero na matriz B:Portanto, a primeira condição para uma configuração ser um xeque-mate é que B não contém zeros nessa linha. Isso significa que naquela fila de A não havia posições vazias, ou havia algumas que eram vizinhas de posições ocupadas.
Precisamos de uma segunda condição. Por exemplo, a última linha atende à condição acima, mas não faz parte da solução porque a configuração não era válida para começar. Uma configuração válida não pode ter duas posições ocupadas vizinhas, ou seja, não pode ter duas contíguas
1
em A. Equivalentemente, não pode ter dois valores contíguos em B excedendo1
. Assim, podemos detectar isso convolvendo B com[1 1]
e verificando que, na matriz resultante, C,nenhum valor nessa linha excede
3
. O resultado final é o número de configurações que atendem às duas condições.fonte
PHP,
10511393 bytes+3 para
n=1
; +9 para$argv
, -1-3 jogou-20: notei que não tenho as combinações, mas apenas a contagem
correr com
-r
loop de 2 ** n-1 a 0:
11
,000
,00
no início ou no final, ou uma única0
resultado de impressão
mesmo tamanho, regex um pouco mais simples
11
,00
no início ou no final, ou000
PHP, 82 bytes
A resposta de Arnauld portou e jogou golfe :
imprime nada para n = 0
fonte
n=0
: insira?:1
antes da final;
Gelatina , 11 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
JavaScript (ES6) / Recursivo,
3027 bytesEdit: salvou 3 bytes graças a Shaun H
JavaScript (ES6) / Não recursivo
9077 bytesEdit: salvou 13 bytes graças a Conor O'Brien e Titus
fonte
((i|r|l)&(k-1))
pode se tornar((i|r|l)&k-1)
, ou mesmo((i|r|l)&~-k)
i<<1
->i*2
oui+i
!(i&(x=i>>1|i+i))&&((i|x)&(k-1))==k-1
; e se você pode inserir em,k--
algum lugar, pode substituirk-1
pork
para salvar parênteses.&(k-1)
não precisa de parênteses de qualquer maneira; mas você pode usar&~k
.f=n=>n<3?n||1:f(n-2)+f(n-3)
Mathematica, 35 bytes
Define uma função
a
. Pega um número inteiro como entrada e retorna um número inteiro como saída. Solução recursiva simples.fonte
AnyDice , 51 bytes
Deve haver mais respostas do AnyDice por aqui.
Minha solução define uma função recursiva que calcula
a(n)=a(n-2)+a(n-3)
. Ele retornaa(0)=a(1)=1
ea(2)=2
usa alguma mágica de divisão inteira.Experimente online
Nota: a saída pode parecer estranha, e é porque geralmente é usada para gerar probabilidades de dados. Basta olhar para o número à esquerda do gráfico de barras.
fonte
Perl,
3534 bytesInclui +1 para
-p
Dê entrada no STDIN
checkmate.pl
:Uma fórmula secreta recém-desenvolvida. O Ripple atualiza 3 variáveis de estado sem a necessidade de atribuições paralelas.
É igualmente curto (mas muito mais lento e consome muito mais memória) resolver apenas o problema original:
mas isso não funciona para
0
fonte
JavaScript (ES6), 62 bytes
É a primeira vez que preciso de dois nomes de variáveis fictícios. Uma versão recursiva provavelmente seria mais curta, mas eu realmente gosto
reduce
... Edit: Encontrei uma solução, também com 62 bytes, que possui apenas uma variável dummy:fonte
Geléia , 19 bytes
A solução recursiva é
provavelmentemais curta ...Veja no TryItOnline
Ou veja a série
n = [0, 99]
, também no TryItOnlineQuão?
Retorna o
n+3
número do th Padovan contando combinaçõesfonte
> <> , 25 + 2 = 27 bytes
Precisa que a entrada esteja presente na pilha no início do programa, portanto, +2 bytes para o
-v
sinalizador. Experimente online!A primeira linha inicializa a pilha para
1 1 2 n
, onden
está o número de entrada. A segunda linha, executando para trás, verifica quen
é maior que 1. Se for,n
é decrementada e o próximo elemento na sequência é gerado da seguinte maneira:A linha final gera o número na parte inferior da pilha, que é o elemento necessário na sequência.
fonte
CJam , 20 bytes
Experimente online!
Explicação
Isso usa o relacionamento de recorrência mostrado na página OEIS .
fonte
05AB1E , 12 bytes
Explicação
Experimente online!
fonte
FRACTRAN,
10493 bytesEntrada é
11**n*29
e saída é29**checkmate(n)
.Isso é divertido, principalmente porque atualmente estou sendo derrotado por Python, JS e Java. Mesmo número de bytes que o PHP: D Sugestões de golfe são bem-vindas.
Ungolfing
fonte
Na verdade, 25 bytes
Isso parece um pouco longo para uma simples
f(n) = f(n-2) + f(n-3)
relação de recorrência. Sugestões de golfe são bem-vindas. Experimente online!Ungolfing
fonte
Na realidade , 18 bytes
Este é realmente um exemplo da resposta mais longa de Dennis para Jelly. Sugestões de golfe são bem-vindas. Experimente online!
Ungolfing
fonte
Stax , 7 bytes
Execute e depure
Usa a relação de recorrência.
C(n) = C(n-2) + C(n-3)
fonte
C (gcc) , 33 bytes
Experimente online!
fonte
Haskell , 27 bytes
Experimente online!
fonte