C’est un défi de code de golf auquel j’ai pensé avec un penchant mathématique. Le défi consiste à écrire le code le plus court possible, de manière à poser la question de savoir si le code se termine ou non. Un exemple de ce que je veux dire pourrait être la pièce suivante de code python, adapté d'un anwser à cette question cs StackExchange.
def is_perfect(n):
return sum(i for i in range(1, n) if n % i == 0) == n
n = 3
while not is_perfect(n):
n = n + 2
Les mathématiciens supposent qu'il n'y a pas de nombres impairs parfaits, mais comme cela n'a jamais été prouvé, personne ne sait si ce code se terminera jamais. Pouvez-vous proposer d'autres éléments de code (reposant peut-être sur d'autres problèmes non résolus, tels que la conjecture de Collatz ou la conjecture des nombres premiers jumeaux) qui sont plus courts, mais pour lesquels on ne sait pas s'ils se terminent ou non?
Edit: Certaines personnes ont évoqué une bonne règle supplémentaire - Les solutions à la question devraient être déterministes. Bien que cela puisse être encore plus intéressant si vous pouviez trouver des solutions plus courtes en utilisant le non déterminisme. Dans ce cas, la règle serait de rechercher un extrait dont la probabilité de terminaison est inconnue.
n=3
while sum(k*(n%k<1)for k in range(1,n))-n:n+=2
.Réponses:
Gelée , 7 octets
Essayez-le en ligne!
Contexte
Cela se terminera une fois qu'il aura trouvé une quatrième solution au problème de Brocard , à savoir une solution n! + 1 = m² avec (n, m) (4, 5), (5, 11), (7, 71) sur les entiers positifs. L'implémentation n'utilise pas d'arithmétique en virgule flottante, elle ne se terminera donc que si elle trouve une quatrième solution ou si n! ne peut plus être représenté en mémoire.
Le problème de Brocard a été utilisé pour la première fois dans cette réponse par @xnor.
Comment ça fonctionne
la source
Gelée ,
11 à9 octetsCela se terminera une fois que le sixième prime de Fermat aura été trouvé.
Essayez-le en ligne!
Comment ça fonctionne
la source
Pyth, 10 octets
Utilise la conjecture pour laquelle tous les nombres de Fermat
2^(2^n)+1
sont compositesn>4
.la source
Python, 36 octets
Utilise le problème de Brocard :
Calcule les factorielles successives et vérifie si elles sont carrées et ont
k>7
. Merci à Dennis pour 2 octets!Cela suppose que Python continue à avoir une arithmétique précise pour des nombres arbitrairement grands. Dans la mise en œuvre réelle, il se termine.
la source
-~n**.5
travaillerait pas à la place de(n+1)**.5
?~
, ce qui soulèverait simplement une erreur TypeError pour avoir tenté d'annuler un flottant bit par bit.Perl,
5038363433 octetsExplication: 196 est un nombre possible de Lychrel - un nombre qui ne forme pas un palindrome en ajoutant à plusieurs reprises son inverse à lui-même. La boucle continue jusqu'à ce que $ n soit égal à son inversion, inconnue pour la valeur initiale 196.
ce qui n'est pas valide.
donc aucun des nombres de cette séquence n'est valide.
Edit: Faites un golf en utilisant une boucle till au lieu d'une boucle for (en quelque sorte). De plus, j'avais moins d'octets que je ne le pensais (je devrais probablement regarder mon compte bytount plus attentivement à l'avenir).
Edit: Remplacé
$n
par$_
pour enregistrer 2 octets pour l’argument impliqué dansreverse
. Je pense que c'est aussi gâché que cette implémentation va se faire.Edit: je me suis trompé. Au lieu d'utiliser
until($%=reverse)==$_
je peux aller alors que la différence est non nulle (c. -à- vrai):while($%=reverse)-$_
.la source
MATL, 11 octets
Se termine si et seulement si la conjecture de Goldbach est fausse. C'est-à-dire que le programme s'arrête s'il trouve un nombre pair supérieur à
2
celui qui ne peut pas être exprimé par la somme de deux nombres premiers.la source
05AB1E , 8 octets
Se terminera lorsque le 6ème prime de Fermat sera trouvé.
Explication
la source
Python,
30 à28 octetsCe programme s’arrêtera si et seulement s’il existe un nombre entier n supérieur à 1 tel que 2 ^ (n-1) -1 soit divisible par n ^ 3. À ma connaissance, on ne sait pas s'il existe un nombre avec cette propriété (si un nombre satisfaisant cette propriété est un nombre premier, il est appelé un nombre premier de Wieferich d'ordre 3 à base 2, et il est possible de savoir s'il existe).
la source
(n-1)
par~-n
Haskell, 47 octets
Recherche du premier nombre quasi-parfait , qui est un nombre
n
dont la somme des diviseurs est2*n+1
. Au lieu d'ajouter 1, j'exclus 1 de la liste des diviseurs.la source
Brain-Flak,
212208204 octetsCe programme utilise un algorithme de multiplication écrit par MegaTom et un vérificateur non carré écrit par 1000000000.
Essayez-le en ligne
Ce programme commence à 8 et teste chaque nombre pour voir si n! +1 est un nombre carré. Il se ferme quand il en trouve un. C'est ce qu'on appelle le problème de Brocard et c'est un problème ouvert en mathématiques.
la source
Brachylog (v2), 3 octets dans le codage de Brachylog
Essayez-le en ligne! (expirera sans rien faire de visible, pour des raisons évidentes)
Programme complet; si exécuté sans entrée, recherche le premier nombre premier Smarandache et renvoie
true.
si et quand il en trouve un. C'est une question ouverte de savoir s'il existe des nombres premiers Smarandache. (Notez que l'algorithme de test principal de Brachylog, bien qu'il fonctionne en théorie sur des nombres arbitrairement grands, a tendance à s'exécuter lentement. C'est pourquoi, si vous souhaitez que Smarandache vous amorce vous-même, je vous recommande d'utiliser un autre langage.)Explication
Brachylog fonctionne sur les chiffres décimaux d’un nombre chaque fois que vous essayez de le traiter comme une liste. "Plage" suivi de "concaténer" est donc un moyen très succinct de générer la séquence de nombres de Smarandache (puis nous le filtrons par primalité; Brachylog le comportement par défaut du programme complet forcera le premier élément du générateur résultant). La plage a un zéro non significatif, mais heureusement, avec ce modèle d'écoulement, Brachylog supprime le zéro plutôt que d'échouer.
Voici un exemple qui trouve le premier nombre Smarandache égal à 6 (mod 11), comme démonstration d'un programme similaire qui se termine dans les 60 secondes au lieu d'avoir un statut d'arrêt inconnu:
Essayez-le en ligne!
Cela s’imprimerait
true.
comme un programme complet, mais j’ai ajouté l’Z
argument de la ligne de commande pour imprimer le numéro en question, ce qui montre mieux que cette approche générale fonctionne.la source
Python 2, 88 octets
Ce code se termine si 10223 est un numéro Sierpiński. 10223 est actuellement le plus petit candidat pouvant être ou ne pas être un numéro de Sierpiński, à partir de décembre 2013.
Un numéro Sierpiński est un nombre
k
dans lequel tous les numéros de la forme(k * 2^n) + 1
sont composites.la source
10223*2^31172165 + 1
été découverte . Depuis lors,21181
a été le plus petit nombre pour lequel on ne sait pas si c'est Sierpiński ou non.Pyth, 16 octets
Retourne la première valeur pour laquelle la conjecture de Collatz ne tient pas. Comme on ne sait pas si la conjecture est vraie pour tous les nombres, on ne sait pas si ce code va se terminer.
la source
Réellement , 16 octets
Essayez-le en ligne!
Ce code se termine si et seulement si un nombre composé
n
tel quetotient(n)
divisen-1
( le problème Lehmer ).Explication:
la source
Jelly ,
98 octets-1 octet grâce à @Dennis! (utilisez l'exponentiation au lieu de la multiplication pour éviter
Æṣ(0)
)Renverra une liste de zéro et le plus petit nombre parfait impair , s'il en existe.
Comment?
la source
Haskell, 46 octets
Se termine s'il trouve la 4ème solution au problème de brocard .
la source
Python, 92 octets
Ce n'est pas gagner un concours de golf de code, et cela nécessite une mémoire infinie et une profondeur de récursion, mais c'est une opportunité presque parfaite de résoudre un problème intéressant de deux cubes positifs . Curieusement, cela a commencé comme une idée de défi de code de golf, alors je suppose que j'ai bouclé la boucle.
la source
Python 2,
1239892 octetsCe code se terminera si la conjecture de Goldbach ne s'applique pas à tous les nombres pairs (c'est-à-dire si tous les nombres pairs peuvent être exprimés sous forme de la somme de deux nombres premiers). Il a actuellement été testé pour des nombres allant jusqu'à 4 * 10 ^ 18.
Un grand merci à @ Pietu1998 pour avoir beaucoup raccourci mon code!
EDIT: Merci à @JonathanAllan pour avoir supprimé 6 octets de mon code!
la source
g=lambda n:[p(b)*p(n-b)for b in range(n)]and g(n+2)
. Je pense aussi que cela devrait se lire "se terminera si la conjecture de Goldbach ne tient pas ".JavaScript (ES6),
104101 octetsUtilise la même méthode que la réponse Perl: définit n sur 196, puis ajoute plusieurs fois n à sa base 10 inverse jusqu'à ce que ce soit un palindrome en base 10. Cela serait plus court si JS prenait en charge des nombres à précision arbitraire, mais bon.
la source
Python, 80 octets
Se termine si la conjecture de Collatz s'avère fausse. Voir cette question .
la source
Python 2, 64 octets
Aucun nombre de Lychrel n'a été prouvé en base dix. 196 est le plus petit candidat du nombre de Lychrel en base dix. Il a été démontré que si un palindrome existait (faisant 196 pas un nombre de Lychrel), il aurait au moins un milliard (10 ^ 9) chiffres, car les gens ont exécuté l'algorithme aussi longtemps.
la source
Gelée , 7 octets
Essayez-le en ligne! (imprime deux éléments, et non 4, pour que vous puissiez réellement le voir s'arrêter)
Explication
la source
R, 30 octets, discutable si c'est déterministe
Le générateur de nombres aléatoires par défaut de R possède une équidistribution dans 653 dimensions consécutives, mais on ne le sait pas dans 654 dimensions. Ainsi, il peut y avoir ou non une séquence de nombres pseudo-aléatoires qui échantillonne l'élément le plus bas d'un vecteur donné 654 fois dans une ligne (ici le vecteur
1:2
).Puisque le RNG de R est périodique (bien qu’il ait une très longue période), j’affirme que cela est déterministe puisqu’il ira en boucle au début. Vos opinions peuvent différer, bien sûr.
la source
Python 3, 101 octets
Je sais que c'est plus long que beaucoup d'autres, mais j'ai passé beaucoup de temps à voir à quel point je pouvais jouer au golf.
Cette tente de réfuter la somme des puissances d'Euler Conjecture pour
k=6
(il existe pas de solution entière positive à l'équation diophantienneA^6+B^6+C^6+D^6+E^6==F^6
), pour laquelle aucun n'a été trouvé contre - .En Python 2 (104 octets):
Moins joué au golf:
Version Mathy sans eval:
Référence alternative: Conjecture d'Euler sur la somme des pouvoirs - MathWorld
la source
Python, 68 octets
Essayez-le en ligne
Essaie de répondre à l'une des questions de Gelfand .
la source
Clojure, 154 octets
Vérifie si un nombre supérieur à 82 000 ne contient que des 0 et des 1 pour la base 2 jusqu'à la base 5. En d'autres termes, il vérifie s'il existe un autre nombre dans cette séquence .
Dans ce groupe spécial, il n'y a que trois chiffres:
0
,1
et82,000
. Il n’ya pas d’autres chiffres qui suivent cette règle qui sont inférieurs à environ3*10^19723
.la source
Pyt , 14 octets
Port de la réponse de mbomb007 .
la source