Une fontaine est un arrangement de pièces en rangées de sorte que chaque pièce touche deux pièces dans la rangée en dessous, ou se trouve dans la rangée du bas, et la rangée du bas est connectée. Voici une fontaine de 21 pièces:
Votre défi est de compter combien de fontaines différentes peuvent être fabriquées avec un nombre donné de pièces.
Vous recevrez en entrée un entier positif n
. Vous devez afficher le nombre de différentes n
fontaines en coin qui existent.
Règles d'E / S standard, échappatoires standard interdites. Les solutions devraient pouvoir calculer n = 10
en moins d'une minute.
Sortie souhaitée pour n = 1 ... 10
:
1, 1, 2, 3, 5, 9, 15, 26, 45, 78
Cette séquence est OEIS A005169 .
C'est le golf de code. Le moins d'octets gagne.
code-golf
sequence
combinatorics
isaacg
la source
la source
n
pour lequel le programme doit être garanti? (c'est-à-dire après quoi il peut se briser)n
, jusqu'aux limitations du type de données, du matériel, etc.Réponses:
Python, 57 octets
Comme observé sur OEIS , si vous décalez chaque ligne d'un demi-pas par rapport à la ligne en dessous, les tailles de colonne forment une séquence d'entiers positifs avec un pas vers le haut maximum de 1.
La fonction
f(n,i)
compte les séquences avec la sommen
et le dernier nombrei
. Ceux-ci peuvent être sommés récursivement pour chaque choix de la taille de colonne suivante de1
ài+1
, qui estrange(1,i+2)
. Tronquer pourrange(1,i+2)[:n]
éviter que les colonnes n'utilisent plus de pièces qu'il n'en reste, évitant d'avoir à dire que le négatifn
donne0
. De plus, cela évite un cas de base explicite, car la somme vide est0
et ne récurrente pas, maisf(0)
doit être définie à la1
place, ce quior 1
suffit (comme le ferait+0**n
).la source
M|sgL-Gd<ShHG1gQ0
Mathematica, 59 octets
Basé sur le programme Mathematica sur OEIS par Jean-François Alcover.
la source
1/(1-x/(1-x^2/(1-x^3/(1-x^4/(1-x^5/(...))))))
.Haskell,
6048 octetsMerci à @nimi d'avoir fourni une solution beaucoup plus courte!
Ancienne version.
La fonction calculant la valeur est
s
, l'implémentation de la formule récursive trouvée ici: https://oeis.org/A005169la source
t (n-p) q
. Golf Conseils: utiliser un opérateur infixe pourt
, échanger les gardes et utiliser aumap
lieu de la compréhension de la liste:n#p|p>n=0|p<n=sum$map((n-p)#)[1..p+1]|1<2=1
.s
devients=(#1)
, mais vous n'avez pas du tout à donner un nom à la fonction principale, cela(#1)
suffit donc. 48 octets.#
et$
ici d'abord =)#
est une fonction infix définie par l'utilisateur comme+
,*
, etc. sont des fonctions infixes prédéfinies.$
est une autre façon d'ajuster la priorité (en plus des parenthèses)f (g (h x))
->f$g$h x
ou dans notre cassum(map(...)[...])
->sum$map(...)[...]
.Haskell, 43 octets
Voir réponse Python pour l'explication.
Même longueur avec
min
plutôt quetake
:la source
Pyth,
2120 octetsEssayez-le en ligne. Suite de tests.
Il s'agit d'une implémentation directe de la formule récursive sur la page OEIS , comme la réponse Matlab .
la source
Matlab,
115105 octetsMise en œuvre de la formule récursive trouvée ici: https://oeis.org/A005169
la source
Julia,
4443 octetsCela utilise une formule récursive sur OEIS.
Explication
Quelqu'un d'autre a-t-il remarqué que la grève à travers 44 est régulière à 44 ??
la source
Python 3, 88 octets
la source
JavaScript (ES6), 63
Implémentation de la formule récursive sur la page OEIS
la source