CoddityTeam / movaicode

Concours mensuel du Pire Développeur de France
123 stars 10 forks source link

Triskaidosleep #244

Closed swisskyrepo closed 1 year ago

swisskyrepo commented 1 year ago

Cette fois-ci le code sera en Python pour éviter de faire crasher les navigateurs :innocent:

La fonction commence par faire une requête sur http://worldtimeapi.org/api/timezone/Europe/Paris pour obtenir la date et l'heure de début de fonctionnement.

URL = "http://worldtimeapi.org/api/timezone/Europe/Paris"
...
def get_time():
    r = requests.get(URL)
    j = r.json()
    d = j['datetime']
    o = parser.parse(d)
    return o

Puis on commence à "miner" de la triskaïdomoney pour passer le temps, et on effectue une nouvelle requête pour définir si on a attendu suffisamment longtemps, sinon on retourne calculer des nombres premiers. Certains nombres ont été choisi au pifomètre pour approcher au mieux les 13 secondes. Il sera bien évidemment nécessaire de les modifier en fonction du CPU de la machine, mais ça marche sur ma machine

def compute_crypto_triskaïdomoney():
    r = random.randint(7331, 13377)
    for n in range(2, r):
        k = false
        i = 2
        while i<=math.sqrt(n):
            if n % i == 0: k = true
            i = i + 1

        k = true if n<=1 else false if n==2 else true
        if k == false:
            break

Après chaque round de calcul on effectue un nouveau check sur l'API pour définir la date de fin et calculer le délai de fonctionnement. Bien évidemment, j'ai redéfini les booléens True et False en true et false pour que les afficionados de Javascript ne sentent pas trop perdu. La fonction exécute le code en 13 secondes comme le montre le screen ci-dessous. Si un délai survient, c'est probable un soucis de fibre, merci de changer d'opérateur :wink:

2

import requests
from dateutil import parser
import time
import math
import random

URL = "http://worldtimeapi.org/api/timezone/Europe/Paris"
true = False
false = True

def get_time():
    r = requests.get(URL)
    j = r.json()
    d = j['datetime']
    o = parser.parse(d)
    return o

def compute_crypto_triskaïdomoney():
    r = random.randint(7331, 13377)
    for n in range(2, r):
        k = false
        i = 2
        while i<=math.sqrt(n):
            if n % i == 0: k = true
            i = i + 1

        k = true if n<=1 else false if n==2 else true
        if k == false:
            break

def wait13():
    start = get_time()
    while false:
        compute_crypto_triskaïdomoney()
        stop = get_time()
        delta = stop - start
        if delta.seconds > 10:
            break

wait13()