$timestart = microtime(true);
$lignes = file("input2");
if ($lignes === false) die("erreur de lecture");
$valid = 0;
for ($i=0; $i<count($lignes); $i++)
{
$ligne = explode(" ", $lignes[$i]);
$minmax = explode("-", $ligne[0]);
$min = $minmax[0];
$max = $minmax[1];
$lettre = substr($ligne[1], 0, 1);
$mdp = $ligne[2];
//part 1
//if (substr_count($mdp, $lettre)>= $min && substr_count($mdp, $lettre)<=$max ) $valid++;
//part 2
$min--;
$max--;
if (substr($mdp,$min,1) == $lettre xor substr($mdp,$max,1) == $lettre) $valid++;
}
echo "valides: $valid";
$timeend = microtime(true);
echo "<hr>temps : " . number_format($timeend-$timestart, 4);
Les trois quotes
Je me suis lancĂ©, php && symfony pour ma part (câest juste pour me simplifier la vie, oui je pourrais faire des scripts php simples)
PHP nâest pas le plus adaptĂ©, je pense que Python tirerait bien son Ă©pingle (pour Advent et en gĂ©nĂ©ral), mais je ne suis plus dev depuis si longtemps que je retrouve mes vieilles habitudes.
Au taf il le font en swift, js, etc⊠chacun son language de prédilections (pas envie de chercher le nom des fonctions)
JS câest top, rapide, lĂ©ger, mais pour la lecture de fichier dans le navigateur, no way. Enfin, de mes faibles connaissances de ce langage.
On va quand mĂȘme pas partir dans un dĂ©bat « X est mieux que Y, Z câest pourri pour ca ! » ?
On peut tout faire avec tout si on maĂźtrise.
On discute gentiment en attendant demain, pas de gué-guerre ici.
Ăa doit ĂȘtre en NodeJS.
Allez tous vous rhabiller, yâa un type sur reddit qui rĂ©sous tous les puzzles en K9. Sa solution du jour 2
x:{(`i$"-"\x;z=*y)}.'" "\'0:`2.txt
+/{({x_!1+y}/x)'+/y}/'x
+/~{=/y@x-1}/'x
lĂ pour le coup câest cryptique au possible
Balise spoiler pls
Hop, day2 fini aussi :
ma solution en Python
import re
f = open("Z:\donnees\developpement\Python\AdventOfCode\day2.txt", "r")
validePasswordStar1 = 0
validePasswordStar2 = 0
for line in f:
result = re.match("(\d+)-(\d+) (\w): (.+)", line)
if result:
min = int(result.group(1))
max = int(result.group(2))
char = result.group(3)
mdp = result.group(4)
# Star 1
occurence = mdp.count(char)
if (occurence >= min) and (occurence <= max):
validePasswordStar1 += 1
#Star 2
if ((mdp[min-1] == char) and (mdp[max-1] != char)) or \
((mdp[max-1] == char) and (mdp[min-1] != char)):
validePasswordStar2 +=1
f.close()
print("Star 1 : Nombre de valide: %d"%validePasswordStar1)
print("Star 2 : Nombre de valide: %d"%validePasswordStar2)
Et le resultat :
Star 1 : Nombre de valide: 546
Star 2 : Nombre de valide: 275
[Finished in 0.087s]
Pour la solution dâhier, jâai un RNA si vous voulez
Câest impressionant, mais je comprend toujours pas lâinteret de programmer comme ca. câest pas plus efficace, mais câest completement illisible âŠ
Je pense que lâintĂ©rĂȘt est avant tout artistique
Câest comme programmer en BrainFuck ou en Ook
Pour le coup lĂ , mĂȘme sans balise spoilerâŠĂ§a me donne envie de reprendre Perl et Haskell. Nan, je dĂ©conne.
et voila :
Résumé
import re
import time
current_milli_time = lambda: int(round(time.time() * 1000))
def day2(data,part):
passwordValid=0
for d in data:
if part == 1:
if d['mini']<= sum(map(lambda x : 1 if d['letter'] in x else 0, d['pwd'])) <= d['maxi'] :
passwordValid += 1
else :
if (d['pwd'][d['mini']-1]==d['letter'] and d['pwd'][d['maxi']-1]!=d['letter']) or (d['pwd'][d['mini']-1]!=d['letter'] and d['pwd'][d['maxi']-1]==d['letter']):
passwordValid+=1
return passwordValid
if __name__ == '__main__':
start = current_milli_time()
file1 = open('in.py', 'r')
Lines = file1.readlines()
file1.close()
data = []
for l in Lines:
resplit = re.split("(\d+)-(\d+) (\w): (.+)", l)
if len(resplit) >= 4:
mini = int(resplit[1])
maxi = int(resplit[2])
letter = resplit[3]
pwd = resplit[4]
data.append({'mini':mini,'maxi':maxi,"letter":letter, "pwd":pwd})
resultat=day2(data,2)
print(resultat)
end = current_milli_time() - start
print(end)
Tiens @Ewi, a quoi sert cette instruction ? Je voulais déjà te le demander dans ton exemple précedent
Et sinon, il te manque un file.close(), câest pas bien Blague Ă part, ca sert vraiment a quelques choses en 2020 les file.close() ? Jâai lâimpression que les fichiers sont clos en fin dâexecution de toute facon non ?
Ăa sert a dĂ©finir un bloc logique qui nâest exĂ©cutĂ© que si le script est lancer (par opposition a « appelĂ© depuis un autre module »).
edit : __name__
est une variable automatiquement crĂ©Ă©e par Python, disponible, nâimporte oĂč, dans tous les scripts. Elle vaut "__main__"
si tu as lancer le script Ă la main.