Mon professeur Precalc a l’un de ses problèmes préférés qu’il a inventé (ou plus probablement une étole inspirée de xkcd ) qui implique une rangée d’ n
urinoirs. "Checkmate" est une situation dans laquelle chaque urinal est déjà occupé OU a un urinoir occupé à côté. Par exemple, si une personne est un X
, alors
X-X--X
est considéré comme maté. Notez qu'une personne ne peut pas occuper un urinoir à côté d'un urinoir déjà occupé.
Tâche
Votre programme utilisera un nombre stdin
, des arguments de ligne de commande ou un argument de fonction. Votre programme imprimera ensuite ou renverra le nombre de façons dont Checkmate peut se produire avec le nombre d’urinaux entrés.
Exemples
0 -> 1
(cas nul compte comme mat)
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-
)
...
Notation
Le plus petit programme en octets gagne.
''
. C'est pareil qu'avec factoriel et permutations, 0! = 1, car il existe exactement 1 façon d'organiser 0 élément.Réponses:
Oasis , 5 octets
Code
Version étendue
Explication
Essayez-le en ligne!
la source
info.txt
info.txt
est utile, il contient une documentation pour chaque commande OasisJava 7,
6542 octetsLa séquence ajoute simplement les éléments précédents pour en obtenir de nouveaux. Chapeau pointe à orlp et Rod pour cette méthode plus courte;)
Vieux:
Après le cinquième élément, l’écart dans la séquence augmente de l’élément cinq précédent.
la source
f
fonction de l'autre extrait au lieu de revenir en arrière. Stupide moi, enu>0?u:1;
devenir1;
?u>0?u:1;)
par1;
si vous modifiez la première comparaison enu>1
, alors sur u = 2, la sortie sera g (0) + g (-1), ce qui sera 2Python 2,
42403935 octetsGénérer les ensembles réels:
la source
Ruby,
5834 octetsFortement inspiré par la réponse Java originale de Geobits.
Voir sur repl.it: https://repl.it/Dedh/1
Premier essai
Voir sur repl.it: https://repl.it/Dedh
la source
Python, 33 octets
Utilise les cas de base décalés
f(-1) = f(0) = f(1) = 1
. SiTrue
pouvait être utilisé pour 1, nous n’aurions pas besoin de 3 octets pour le+()
.la source
J,
312723 octets4 octets sauvés grâce aux miles!
Une explication est à venir bientôt.
Ancienne solution
Ceci est un agenda. Le LHS est un gérond composé de deux verbes:
>.1&^
et-&3+&$:-&2
. Le premier est utilisé si la condition (2&<
) échoue. Cela signifie que la fourchette>.1&^
est activée sur l'argument. Observer:Ici,
>.
prend le maximum de deux valeurs. Ainsi, il donne 1, 1 et 2 comme termes initiaux.Le deuxième verbe dans le gérondif est une fourchette:
Les dents gauche et droite sont appliquées au verbe, en soustrayant 3 et 2 respectivement; alors le verbe du milieu est appelé avec des arguments gauche et droit égaux à ceux-ci.
$:
appelle le verbe sur chaque argument et+
ajoute les deux. C'est fondamentalement équivalent à($: arg - 3) + ($: arg - 2)
Cas de test
la source
MATL ,
2523 octetsEssayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Deux convolutions! Yay!
Cela construit un tableau, dit A, où chaque configuration possible est une ligne.
1
dans ce tableau représente une position occupée. Par exemple, pour l’entrée,4
le tableau A estLe code convoque ensuite le tableau A avec
[1 1 1]
. Cela donne un tableau B. Les positions occupées et les voisins des positions occupées dans A donnent un résultat non nul dans le tableau B:Donc, la première condition pour qu'une configuration soit un compagnon est que B ne contienne aucun zéros dans cette ligne. Cela signifie que dans cette rangée de A, il n'y a pas de positions vides, ou il y en avait mais étaient voisins des positions occupées.
Nous avons besoin d'une deuxième condition. Par exemple, la dernière ligne remplit la condition ci-dessus, mais ne fait pas partie de la solution car la configuration n'était pas valide pour commencer. Une configuration valide ne peut pas avoir deux positions occupées voisines, c'est-à-dire ne peut pas avoir deux contigus
1
dans A. De la même manière, elle ne peut pas avoir deux valeurs contiguës dans B dépassant1
. Donc, nous pouvons le détecter en convoquant B avec[1 1]
et en vérifiant que, dans le tableau résultant, C,aucune valeur dans cette ligne ne dépasse
3
. Le résultat final est le nombre de configurations qui remplissent les deux conditions.la source
PHP,
10511393 octets+3 pour
n=1
; +9 pour$argv
, -1-3 joué au golf-20: remarqué que je n'ai pas à faire les combinaisons, mais seulement leur compte
courir avec
-r
boucle de 2 ** n-1 à 0:
11
,000
,00
au début ou à la fin, ou un seul0
résultat d'impression
même taille, regex légèrement plus simple
11
,00
au début ou à la fin, ou000
PHP, 82 octets
La réponse d’Arnauld a porté et joué au golf :
n'imprime rien pour n = 0
la source
n=0
: insérer?:1
avant la finale;
Gelée , 11 octets
Essayez-le en ligne! ou vérifier tous les cas de test .
Comment ça marche
la source
JavaScript (ES6) / Récursif,
30 à27 octetsEdit: sauvegardé 3 octets grâce à Shaun H
JavaScript (ES6) / Non récursif
9077 octetsEdit: 13 octets sauvegardés grâce à Conor O'Brien et Titus
la source
((i|r|l)&(k-1))
peut devenir((i|r|l)&k-1)
, ou même((i|r|l)&~-k)
i<<1
->i*2
oui+i
!(i&(x=i>>1|i+i))&&((i|x)&(k-1))==k-1
; et si vous pouvez insérer,k--
quelque part, vous pouvez remplacerk-1
park
pour sauver les parens.&(k-1)
n'a pas besoin de parents de toute façon; mais vous pouvez utiliser à la&~k
place.f=n=>n<3?n||1:f(n-2)+f(n-3)
Mathematica, 35 octets
Définit une fonction
a
. Prend un entier en entrée et retourne un entier en sortie. Solution récursive simple.la source
AnyDice , 51 octets
Il devrait y avoir plus de réponses AnyDice ici.
Ma solution définit une fonction récursive qui calcule
a(n)=a(n-2)+a(n-3)
. Elle retournea(0)=a(1)=1
et ena(2)=2
utilisant la magie de la division entière.Essayez-le en ligne
Remarque: le résultat peut paraître étrange, car il est généralement utilisé pour générer des probabilités de dés. Il suffit de regarder le nombre à gauche du graphique à barres.
la source
Perl,
35 à34 octetsComprend +1 pour
-p
Donnez votre avis sur STDIN
checkmate.pl
:Une formule secrète nouvellement développée. Ripple met à jour 3 variables d'état sans avoir besoin d'assignations parallèles.
Il est tout aussi court (mais beaucoup plus lent et prenant beaucoup plus de mémoire) de résoudre simplement le problème initial:
mais cela ne fonctionne pas pour
0
la source
JavaScript (ES6), 62 octets
C'est la première fois que j'ai besoin de deux noms de variables factices. Une version récursive serait probablement plus courte, mais j'aime beaucoup
reduce
... Edit: Une solution, également de 62 octets, a été trouvée.la source
Gelée , 19 octets
La solution récursive est
probablementplus courte ...Voir à TryItOnline
Ou voir la série pour
n = [0, 99]
, également à TryItOnlineComment?
Retourne le
n+3
nombre de Padovan en comptant les combinaisonsla source
> <> , 25 + 2 = 27 octets
L'entrée doit être présente sur la pile au démarrage du programme, donc +2 octets pour le
-v
drapeau. Essayez-le en ligne!La première ligne initialise la pile sur
1 1 2 n
, oùn
est le numéro saisi. La deuxième ligne, en marche arrière, vérifie que la valeurn
est supérieure à 1. Si c'est le cas, ellen
est décrémentée et l'élément suivant de la séquence est généré comme suit:La dernière ligne affiche le nombre au bas de la pile, qui est l'élément requis de la séquence.
la source
CJam , 20 octets
Essayez-le en ligne!
Explication
Ceci utilise la relation de récurrence indiquée dans la page OEIS .
la source
05AB1E , 12 octets
Explication
Essayez-le en ligne!
la source
FRACTRAN,
10493 octetsL'entrée est
11**n*29
et la sortie est29**checkmate(n)
.C’est surtout pour le plaisir, d’autant plus que Python, JS et Java me font perdre leur identité . Même nombre d’octets que PHP: D suggestions de golf bienvenues.
Ungolfing
la source
En fait, 25 octets
Cela semble un peu long pour une
f(n) = f(n-2) + f(n-3)
relation de récurrence simple . Les suggestions de golf sont les bienvenues. Essayez-le en ligne!Ungolfing
la source
En fait , 18 octets
Ceci est en fait un port de la réponse de Jelly plus longue de Dennis. Les suggestions de golf sont les bienvenues. Essayez-le en ligne!
Ungolfing
la source
Stax , 7 octets
Exécuter et déboguer
Utilise la relation de récurrence.
C(n) = C(n-2) + C(n-3)
la source
C (gcc) , 33 octets
Essayez-le en ligne!
la source
Haskell , 27 octets
Essayez-le en ligne!
la source