Contexte
Une séquence d'ensemble ex-croissante d'ordre est définie comme une séquence d'ensembles entiers qui satisfait les conditions suivantes:S 1 , S 2 , ⋯ , S n
- Chaque est un sous-ensemble non vide de . { 1 , 2 , ⋯ , N }
- Pour , , c'est-à-dire que deux ensembles consécutifs quelconques n'ont aucun élément en commun.S i ∩ S i + 1 = ∅
- Pour , la moyenne (valeur moyenne) de est strictement inférieure à celle de .S i S i + 1
Défi
Étant donné un nombre entier positif N
, affichez la longueur de la plus longue séquence d'ensemble d'ex-ordre croissant N
.
Cas de test
Ceux-ci sont basés sur les résultats de l'utilisateur de Project Euler thundre .
1 => 1 // {1}
2 => 2 // {1} {2}
3 => 3 // {1} {2} {3}
4 => 5 // {1} {2} {1,4} {3} {4}
5 => 7 // {1} {2} {1,4} {3} {2,5} {4} {5}
6 => 10 // {1} {2} {1,4} {3} {1,4,5} {2,3,6} {4} {3,6} {5} {6}
7 => 15 // {1} {2} {1,4} {3} {1,2,7} {3,4} {1,2,5,7} {4} {1,3,6,7} {4,5} {1,6,7} {5} {4,7} {6} {7}
8 => 21
9 => 29
10 => 39
11 => 49
12 => 63
13 => 79
14 => 99
15 => 121
16 => 145
17 => 171
18 => 203
19 => 237
20 => 277
21 => 321
22 => 369
23 => 419
24 => 477
25 => 537
Règles
Les règles de code-golf standard s'appliquent. La soumission valide la plus courte en octets l'emporte.
Prime
Ce problème a été discuté ici sur le forum Project Euler il y a environ 4 ans, mais nous n'avons pas réussi à trouver un algorithme à temps polynomial prouvable (en termes de N
). Par conséquent, j'accorderai +200 primes à la première soumission qui y parviendra ou prouverai son impossibilité.
Réponses:
Brachylog , 28 octets
Essayez-le en ligne!
C'est vraiment très lent.
N = 3
Cela prend environ 30 secondes et il ne s'est pas terminé après 12 minutesN = 4
.Explication
Version plus rapide, 39 octets
Cela prend environ 50 secondes sur mon ordinateur pendant
N = 4
.C'est le même programme, sauf que nous trions le sous-ensemble de sous-ensembles par moyenne au lieu de prendre une permutation aléatoire. Nous utilisons donc
{⟨+/l⟩/₁/₁}ᵒ
au lieu dep
.Nous devons obtenir une moyenne flottante car je viens de découvrir un bug ridicule dans lequel les flottants et les entiers ne se comparent pas par valeur mais par type avec des prédicats de commande (c'est aussi pourquoi j'utilise
<ᵈ
et non pas<₁
pour comparer les deux moyennes; ce dernier nécessiterait que double astuce d'inversion pour travailler).la source
CJam (81 octets)
Démo en ligne . Il devrait s'exécuter pour l'entrée
4
dans un délai raisonnable, mais je ne l'essayerais pas avec des entrées plus élevées.Dissection
la source
JavaScript (ES6), 175 octets
Une recherche récursive naïve et assez lente. Prend environ 15 secondes pour calculer les 7 premiers termes sur TIO.
Essayez-le en ligne!
ou testez cette version modifiée qui produit la plus longue séquence de jeu ex-croissante.
Comment?
Nous calculons d'abord l'ensemble de puissance de et le stockons dans :a{1,2,…,n} a
Partie récursive:
la source
Python 3 ,
205197184 184182 octetshuitvingt et un octets grâce aux ovs .Essayez-le en ligne!
la source
sum
au lieu dechain.from_iterable
.