• Aucun résultat trouvé

Ce programme liste toutes les solutions possibles (ou aucune les cas échéant)

N/A
N/A
Protected

Academic year: 2022

Partager "Ce programme liste toutes les solutions possibles (ou aucune les cas échéant)"

Copied!
5
0
0

Texte intégral

(1)

C224- Cryptarithmes d’actualité [* à *** à la main, de préférence sans l’aide d’un automate]

CORONA + VIRUS = VAINCU avec VAINCU nombre premier Pierre Leteurtre propose MASQUE + TEST = YENAPAS

Raymond Bloch propose AH + L + EPIDEMIE + PATINE = PHILIPPE Maurice Bauval propose : GUERI + TEST = MASQUE

Michel Lafond propose : H*HYPOXIES(1) = YYYYYYYYY avec * = signe de la multiplication

(1)Hypoxie : manque d’apport en oxygène qui apparaît dans les formes sévères du covid19.

Solutions proposées par Michel Dominique

Pour résoudre les cryptarithmes proposés, un programme en Python a été écrit (voir ci-dessous).

Ce programme liste toutes les solutions possibles (ou aucune les cas échéant).

Ensuite, l'humain prend le relais pour en déduire les solutions qui satisfont aux contraintes de l'énoncé de chaque cryptarithme.

Le choix a été de générer toutes les combinaisons de 10 chiffres sans limiter (alors que certaines restrictions pouvaient être posées a priori,

comme éliminer les nombres avec un 0 comme premier chiffre) Solutions (repérée par ***):

- cryptarithme 1: CORONA + VIRUS = VAINCU avec VAINCU nombre premier Solution :-) CORONA + VIRUS = VAINCU : 659543 + 70918 = 730461

Solution :-) CORONA + VIRUS = VAINCU : 659543 + 72918 = 732461 ***

La première solution est à écarter car on vérifie facilement que le résultat VAINCU est divible par 3 (avec la somme de ses chiffres).

On peut vérifier également que VAINCU est premier dans la seconde solution, c'est donc la solution cherchée.

- cryptarithme 2: GUERI + TEST = MASQUE

Solution :-) GUERI + TEST = MASQUE : 97348 + 5325 = 102673 ***

Solution :-) GUERI + TEST = MASQUE : 59471 + 3423 = 62894 Solution :-) GUERI + TEST = MASQUE : 87641 + 5635 = 93276 Solution :-) GUERI + TEST = MASQUE : 85731 + 6726 = 92457

Seule la première solution est à conserver car pour les autres le M de masque vaut 0, ce qu'on écarte a priori.

- cryptarithme 3: MASQUES + TESTS = YENAPAS Pas de solution :-( MASQUES + TESTS = YENAPAS

- cryptarithme 4: DIX + NEUF = VIRUS, sachant que DIX (contrairement aux apparences) est un nombre impair, NEUF est divisible par 13 et le VIRUS est unique.

16 solutions avec premier chiffre non nul:

Solution :-) DIX + NEUF = VIRUS : 504 + 9872 = 10376 Solution :-) DIX + NEUF = VIRUS : 502 + 9874 = 10376 Solution :-) DIX + NEUF = VIRUS : 603 + 9872 = 10475 Solution :-) DIX + NEUF = VIRUS : 605 + 9832 = 10437 Solution :-) DIX + NEUF = VIRUS : 602 + 9873 = 10475

(2)

Solution :-) DIX + NEUF = VIRUS : 602 + 9835 = 10437 Solution :-) DIX + NEUF = VIRUS : 704 + 9832 = 10536 Solution :-) DIX + NEUF = VIRUS : 702 + 9834 = 10536 Solution :-) DIX + NEUF = VIRUS : 804 + 9572 = 10376 Solution :-) DIX + NEUF = VIRUS : 802 + 9574 = 10376 Solution :-) DIX + NEUF = VIRUS : 803 + 9672 = 10475 Solution :-) DIX + NEUF = VIRUS : 805 + 9632 = 10437 Solution :-) DIX + NEUF = VIRUS : 802 + 9673 = 10475 Solution :-) DIX + NEUF = VIRUS : 802 + 9635 = 10437 Solution :-) DIX + NEUF = VIRUS : 804 + 9732 = 10536 Solution :-) DIX + NEUF = VIRUS : 802 + 9734 = 10536

L'énoncé impose que DIX doit être impair, NEUF divisible par 13 et que la valeur de VIRUS doit être unique.

On peut également rajouter que VIRUS ne doit pas commencer par un zéro.

Il reste donc:

Solution :-) DIX + NEUF = VIRUS : 603 + 9872 = 10475 Solution :-) DIX + NEUF = VIRUS : 605 + 9832 = 10437 Solution :-) DIX + NEUF = VIRUS : 803 + 9672 = 10475 ***

Solution :-) DIX + NEUF = VIRUS : 805 + 9632 = 10437

Comme NEUF doit être divisible par 13, la seule solution est la troisième (9672 = 13 * 744):

DIX + NEUF = VIRUS : 803 + 9672 = 10475

- cryptarithme 5: AH + L + EPIDEMIE + PATINE = PHILIPPE

Solution :-) AH + L + EPIDEMIE + PATINE = PHILIPPE : 40 + 2 + 89378638 + 945318 = 90323998

- cryptarithme 6: H*HYPOXIES = YYYYYYYYY avec * = signe de la multiplication Solution :-) H * HYPOXIES = YYYYYYYYY : 9 * 98765432 = 888888888

================================= Programme Python

=================================

"""

Programme pour aider à résoudre les cryptarithmes du problème C224.

Toutes les solutions possibles sont calculées. Ensuite, il suffit d'en extraire les solutions qui satisfont aux contraintes de l'énoncé de chaque crytarithme.

"""

import sys

from itertools import permutations

# Valeurs possibles des lettres valeurs=[i for i in range(10)]

def get_value(v, op):

x = 0

for lettre in op:

x=int(v[lettre])+10*x

(3)

return str(x).zfill(len(op))

def solve(res, op1, op2, op3="", op4=""):

# ensemble avec les lettres différentes lettres = sorted(set(op1+op2+op3+op4+res))

print(lettres) if len(lettres) > 10:

sys.exit("Trop de lettres (> 10) !")

def listToDict(lstA, lstB):

zippedLst = zip(lstA, lstB) op = dict(zippedLst) return op

found = False

for val in permutations(valeurs, len(lettres)):

v = listToDict(lettres, val)

r1 = get_value(v, op1) r2 = get_value(v, op2) r3 = get_value(v, op3) r4 = get_value(v, op4) r = get_value(v, res)

if int(r1)+int(r2)+int(r3)+int(r4) == int(r):

found = True

print("Solution :-) ", op1, "+", op2, end='') if op3 != "":

print(" +", op3, end='') if op4 != "":

print(" +", op4, end='')

print(" =", res, ":", r1, "+", r2, end='') if op3 != "":

print(" +", r3, end='') if op4 != "":

print(" +", r4, end='') print(" =", r)

if not found:

print("Pas de solution :-( ", op1, "+", op2, end='') if op3 != "":

print(" +", op3, end='') if op4 != "":

print(" +", op4, end='') print(" =", res)

#=================================================================

(4)

if len(sys.argv) < 2:

print("Usage: ", sys.argv[0], " num_jeu (0 for all)") sys.exit("End of game!")

game = sys.argv[1]

if game == "1" or game == "0":

# cryptarithme à résoudre op1 = "CORONA"

op2 = "VIRUS"

res = "VAINCU" # ce nombre doit être premier solve(res,op1,op2)

if game == "2" or game == "0":

# cryptarithme à résoudre op1 = "GUERI"

op2 = "TEST"

res = "MASQUE"

solve(res,op1,op2)

if game == "3" or game == "0":

# cryptarithme à résoudre: a t-il une soluton ? op1 = "MASQUES"

op2 = "TESTS"

res = "YENAPAS"

solve(res,op1,op2)

if game == "4" or game == "0":

# cryptarithme à résoudre

op1 = "DIX" # doit être impair op2 = "NEUF"

res = "VIRUS" # doit être unique solve(res,op1,op2)

if game == "5" or game == "0":

# cryptarithme à résoudre op1 = "AH"

op2 = "L"

op3 = "EPIDEMIE"

op4 = "PATINE"

res = "PHILIPPE"

solve(res,op1,op2,op3,op4)

if game == "6" or game == "0":

def solve_mult(res, op1, op2):

# ensemble avec les lettres différentes lettres = sorted(set(op1+op2+res)) print(lettres)

(5)

if len(lettres) > 10:

sys.exit("Trop de lettres (> 10) !")

def listToDict(lstA, lstB):

zippedLst = zip(lstA, lstB) op = dict(zippedLst) return op

found = False

for val in permutations(valeurs, len(lettres)):

v = listToDict(lettres, val)

r1 = get_value(v, op1) r2 = get_value(v, op2) r = get_value(v, res)

if int(r1)*int(r2) == int(r):

found = True

print("Solution :-) ", op1, "*", op2, "=", res, ":", r1, "*", r2, "=", r)

if not found:

print("Pas de solution :-( ", op1, "*", op2, "=", res)

# cryptarithme à résoudre op1 = "H"

op2 = "HYPOXIES"

res = "YYYYYYYYY"

solve_mult(res,op1,op2)

Références

Documents relatifs

Compléter le programme Scilab suivant pour qu’il simule un échantillon de 10000 réalisa- tions de l’expérience, et renvoie le coefficient de corrélation de X 1 et X 2.. On

FICHE DE TRAVAUX DIRIGES DE MATHÉMATIQUES DES CONGÉS DE PÂQUES CLASSES DE PREMIERES LITTERAIRES.. PARTIE A : ÉVALUATIONS

Dans les années à venir, nous allons de plus installer des dizaines d’abris pour vélos couverts à Overijse et mettrons des vélos partagés à disposition dans chaque entité de

Chaque pizza est caractérisée par son numéro (entre 1 et N ), son prix (entre 10 et F et une liste d’initiales (4 au plus) des amis qui apprécient cette pizza.. Votre

 Avoir mis en place des automatismes de procédures pour faciliter un travail ultérieur où les élèves pourront se focaliser sur la démarche globale.  Pour travailler sur

D’APRES L’EPREUVE SPECIFIQUE 2006 - CCP - FILIERE TSI Math 2 Les calculatrices sont

ordonnée à l’origine déplacement horizontal.. Comment calculer les coordonnées du point d’intersection entre deux droites.  Le point d’intersection de la droite avec

cours d’introduction à la logique, printemps 2019, UniL, Philipp