34 votes

Quelle est votre question préférée sur le Projet Euler ?

Je cherchais des questions relatives à Projet Euler sur Stack Overflow, et il semble que de nombreuses personnes aient posé des questions à ce sujet, et qu'il y ait encore plus de personnes qui le recommandent, que ce soit pour le plaisir, pour apprendre une nouvelle langue ou pour s'entraîner aux questions d'entretien. Tout cela me semble impliquer qu'il y a beaucoup de gens sur SO qui résolvent des problèmes de Project Euler de temps en temps. Je viens juste de commencer, donc je me demandais :

Quelle a été votre question préférée sur le projet Euler ? Pourquoi ? Avez-vous eu l'idée d'une astuce astucieuse, ou avez-vous appris de nouvelles mathématiques, ou avez-vous découvert une fonctionnalité d'un nouveau langage de programmation ?

(Si possible, veuillez inclure la question réelle dans votre réponse).

25voto

Ólafur Waage Points 40104

Problème 67

Puisqu'ils vous disent que vous ne pouvez pas obtenir la réponse par force brute pour cette question.

Voici l'ensemble de la question

En commençant par le haut du triangle ci-dessous et en se déplaçant vers les chiffres adjacents de la rangée inférieure, le total maximum de haut en bas est de 23.

alt text

C'est-à-dire 3 + 7 + 4 + 9 = 23.

Trouvez le total maximum de haut en bas dans triangle.txt (clic droit et "Enregistrer le lien/la cible sous..."), un fichier texte de 15K contenant un triangle de cent rangées.

NOTE : C'est une version beaucoup plus difficile de Problème 18 . Il n'est pas possible d'essayer tous les chemins pour résoudre ce problème, car il y a 2 99 tout à fait ! Si vous pouviez vérifier un trillion (10 12 ) routes chaque seconde, il faudrait plus de vingt milliards d'années pour les vérifier toutes. Il existe un algorithme efficace pour résoudre ce problème ;o)

25voto

mattiast Points 1482

Mon préféré est le numéro 227, car il y a une histoire amusante à son sujet. Dans notre réseau universitaire, il y a un ordinateur à quatre cœurs que tout le monde peut utiliser pour des calculs de haute performance. Mon ami se plaignait qu'il était un peu lent ces derniers temps. Nous avons vu qu'il y avait un processus nommé "prob-227-e" en cours d'exécution, qui avait déjà utilisé trois semaines ( !) de temps CPU.

J'ai immédiatement deviné qu'il devait s'agir du problème du projet Euler. J'ai jeté un coup d'oeil au problème, et en 20 minutes j'avais écrit un script Octave de dix lignesscript qui résout un système d'équations 100x100 et s'exécute en un clin d'oeil (et produit la bonne réponse). J'ai ensuite envoyé ce script par e-mail à l'utilisateur et, le lendemain, il m'a répondu pour me remercier et m'expliquer ce qu'il avait fait, à savoir une sorte de simulation par force brute.

L'élégance est toujours payante : )


La question

Les joueurs s'assoient autour d'une table ; le jeu commence avec deux joueurs opposés qui ont chacun un dé. À chaque tour, les deux joueurs qui ont un dé le lancent. Si un joueur obtient un 1, il passe le dé à son voisin de gauche ; s'il obtient un 6, il passe le dé à son voisin de droite ; sinon, il garde le dé pour le tour suivant. La partie se termine lorsqu'un joueur possède les deux dés après qu'ils aient été lancés et passés, ce joueur a alors perdu.

Dans un jeu avec 100 joueurs, quel est le nombre attendu de tours que dure le jeu ?

16voto

Canavar Points 29161

alt text

Combien de routes y a-t-il à travers un grille 20×20 ?

Problème 15 est le premier problème qui vous oblige à réfléchir aux formes et à le résoudre de manière mathématique. Donc j'aime ça.

12voto

Motti Points 32921

Mon moins La question préférée est #54 sur les mains de poker, ce n'est pas mathématique et cela ne semble pas conduire à une solution élégante.

Problème 54

Au jeu de cartes du poker, une main se compose de cinq cartes qui sont classées, de la plus basse à la plus haute, de la manière suivante :

  • Carte haute : La carte de valeur la plus élevée.
  • Une paire : Deux cartes de même valeur.
  • Deux paires : Deux paires différentes.
  • Un brelan : Trois cartes de même valeur.
  • Droit : Toutes les cartes sont des valeurs consécutives.
  • Flush : Toutes les cartes de la même couleur.
  • Full House : Un brelan et une paire.
  • Quatre d'une sorte : Quatre cartes de même valeur.
  • Quinte flush : Toutes les cartes sont des valeurs consécutives de la même couleur.
  • Royal Flush : Dix, valet, reine, roi, as, de la même couleur.

Les cartes sont évaluées dans l'ordre : 2, 3, 4, 5, 6, 7, 8, 9, 10, valet, dame, roi, as.

Si deux joueurs ont des mains de même rang, alors le rang composé de la valeur la plus élevée l'emporte ; par exemple, une paire de huit bat une paire de cinq (voir l'exemple 1 ci-dessous). Mais si deux rangs sont égaux, par exemple si les deux joueurs ont une paire de dames, alors les cartes les plus hautes de chaque main sont comparées (voir l'exemple 4 ci-dessous) ; si les cartes les plus hautes sont égales, alors les cartes les plus hautes suivantes sont comparées, et ainsi de suite.

Considérez les cinq mains suivantes distribuées à deux joueurs :

Hand         Player 1            Player 2           Winner
 1        5H 5C 6S 7S KD      2C 3S 8S 8D TD       Player 2
          Pair of Fives       Pair of Eights

 2        5D 8C 9S JS AC      2C 5C 7D 8S QH       Player 1
          Highest card Ace    Highest card Queen

 3        2D 9C AS AH AC      3D 6D 7D TD QD       Player 2
          Three Aces          Flush with Diamonds  

 4        4D 6S 9H QH QC      3D 6D 7H QD QS       Player 1
          Pair of Queens      Pair of Queens
          Highest card Nine   Highest card Seven

 5        2H 2D 4C 4D 4S      3C 3D 3S 9S 9D       Player 1
          Full House          Full House
          With Three Fours    with Three Threes

Le dossier, poker.txt contient mille mains aléatoires distribuées à deux joueurs. Chaque ligne du fichier contient dix cartes (séparées par un seul espace) : les cinq premières sont celles du joueur 1 et les cinq dernières celles du joueur 2. Vous pouvez supposer que toutes les mains sont valides (pas de caractères invalides ou de cartes répétées), que la main de chaque joueur n'est pas dans un ordre spécifique et que, dans chaque main, il y a un gagnant clair.

Combien de mains le joueur 1 a-t-il gagné ?

6voto

Dana Points 9876

Deux que j'ai eu beaucoup de plaisir à faire étaient Question 59 qui consistait à craquer un morceau de texte (faiblement) crypté et Question 96 qui était un résolveur de sudoku.

Je dois cependant admettre que ce sont des questions qui intéressent probablement davantage les programmeurs ayant des connaissances plus faibles en mathématiques (comme moi).

Problème 59

Chaque caractère d'un ordinateur se voit attribuer un code unique et la norme privilégiée est l'ASCII (American Standard Code for Information Interchange). Par exemple, uppercase A = 65 , asterisk (*) = 42 y lowercase k = 107 .

Une méthode de cryptage moderne consiste à prendre un fichier texte, à convertir les octets en ASCII, puis à faire un XOR de chaque octet avec une valeur donnée, tirée d'une clé secrète. L'avantage de la fonction XOR est que l'utilisation de la même clé de cryptage sur le texte chiffré permet de restaurer le texte en clair ; par exemple, 65 XOR 42 = 107 entonces 107 XOR 42 = 65 .

Pour un cryptage inviolable, la clé est de la même longueur que le message en clair, et la clé est constituée d'octets aléatoires. L'utilisateur conserve le message crypté et la clé de cryptage à des endroits différents. Sans les deux "moitiés", il est impossible de décrypter le message.

Malheureusement, cette méthode n'est pas pratique pour la plupart des utilisateurs. La méthode modifiée consiste donc à utiliser un mot de passe comme clé. Si le mot de passe est plus court que le message, ce qui est probable, la clé est répétée de manière cyclique dans le message. L'équilibre de cette méthode consiste à utiliser une clé de mot de passe suffisamment longue pour assurer la sécurité, mais suffisamment courte pour être mémorable.

Votre tâche a été facilitée, car la clé de cryptage se compose de trois caractères minuscules. Utilisation de cipher1.txt (clic droit et "Enregistrer le lien/la cible sous..."), un fichier contenant les codes ASCII cryptés, et sachant que le texte en clair doit contenir des mots anglais courants, décryptez le message et trouvez la somme des valeurs ASCII du texte original.

Problème 96

Su Doku (qui signifie en japonais "lieu des nombres") est le nom donné à un concept de puzzle populaire. Son origine n'est pas claire, mais il faut en attribuer le mérite à Leonhard Euler, qui a inventé une idée de casse-tête similaire, et beaucoup plus difficile, appelée les carrés latins. L'objectif des puzzles Su Doku, cependant, est de remplacer les blancs (ou zéros) dans une grille de 9 par 9 de telle sorte que chaque ligne, colonne et case de 3 par 3 contienne chacun des chiffres de 1 à 9. Vous trouverez ci-dessous un exemple d'une grille de départ typique et de sa grille de solution.

0 0 3  0 2 0  6 0 0      4 8 3  9 2 1  6 5 7
9 0 0  3 0 5  0 0 1      9 6 7  3 4 5  8 2 1
0 0 1  8 0 6  4 0 0      2 5 1  8 7 6  4 9 3

0 0 8  1 0 2  9 0 0      5 4 8  1 3 2  9 7 6
7 0 0  0 0 0  0 0 8      7 2 9  5 6 4  1 3 8
0 0 6  7 0 8  2 0 0      1 3 6  7 9 8  2 4 5

0 0 2  6 0 9  5 0 0      3 7 2  6 8 9  5 1 4
8 0 0  2 0 3  0 0 9      8 1 4  2 5 3  7 6 9
0 0 5  0 1 0  3 0 0      6 9 5  4 1 7  3 8 2

Une énigme Su Doku bien construite a une solution unique et peut être résolue par la logique, bien qu'il puisse être nécessaire d'employer des méthodes de "devinette et test" afin d'éliminer des options (les avis sont très partagés à ce sujet). La complexité de la recherche détermine la difficulté de l'énigme ; l'exemple ci-dessus est considéré comme facile car il peut être résolu par déduction directe.

Le fichier texte de 6K, sudoku.txt (cliquez avec le bouton droit de la souris et sélectionnez "Enregistrer le lien/la cible sous..."), contient cinquante puzzles Su Doku différents, dont la difficulté varie, mais dont les solutions sont toutes uniques (le premier puzzle du fichier est l'exemple ci-dessus).

En résolvant les cinquante énigmes, trouvez la somme des nombres à 3 chiffres trouvés dans le coin supérieur gauche de chaque grille de solution ; par exemple, 483 est le nombre à 3 chiffres trouvé dans le coin supérieur gauche de la grille de solution ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X