on dirait du java.
Bon, jâattends 8h pour le faire avec mes etudiants
on dirait du java.
Bon, jâattends 8h pour le faire avec mes etudiants
Si seulement
Faut dire que je fais du Java à la base, donc ça doit vilainement se ressentir dans mon code. Un pro du Kotlin fera sans doute quelque chose de bien plus élégant à lire.
Jâai du code pour la part2 qui fonctionne sur les exemples mais pas sur mes donnĂ©es. Le code ne finit pas : je ne sais pas si câest une boucle infinie ou une explosion combinatoire
Montre nous ton code et on te dira
Si tu construis le graphe et essaye de compter les chemins un par un, câest sĂ»r que câest de lâexplosion combinatoire⊠Pour info avec mon jeu de donnĂ©es, la rĂ©ponse Ă©tait 396857386627072.
Sans me renseigner plus pour la part 2, jâaurais envie de compter par nombre le nombre de façons dâarriver desssus (ie il y a 3 façons dâarriver Ă lâadapteur 12) et de tout multiplier ensemble. Mais lâinstinct me dis aussi que ça va faire un nombre trop grand.
Voici mon code : Part2
jâen suis a 11
Yâa de lâidĂ©e mais je ne pense pas que ça marchera - jâavais pensĂ© à ça au tout dĂ©but et essayĂ© sur papier, mais ça ne colle mĂȘme pas avec le jeu de donnĂ©es simple donc jâai laissĂ© tomber.
Ensuite jâavais essayĂ© de faire un arbre des possibilitĂ©s, mais comme il y a plein de sous-branches qui se rĂ©pĂštent je suis passĂ© Ă un graphe pour Ă©viter les copies. Ăa parraissait beaucoup plus prometteur vu quâil nây a pas de cycles dans le graphe et quâil y a un ordre clair dans les noeuds, avec un dĂ©but et une fin prĂ©cis. Une petite recherche Google qui va bien plus tard je suis tombĂ© sur la page StackExchange Math qui va bien (linkĂ©e au dessus), ensuite il nây a plus quâĂ implĂ©menter lâalgo et magie ça marche.
Oui quand je suis arrivĂ© dans mon debuggeur Ă 10^50 pour lâexemple simple je me suis dit quâil y avait un soucis
oulah⊠need cofee, rien que lâĂ©noncĂ© est un challenge en lui-mĂȘme.
Ma solution en Python du coup.
Part 1 :
def day10_1(data,built_in):
diff=[]
for i in range(0,len(data)-1):
diff.append(data[i+1]-data[i])
diff.append(built_in - data[len(data)-1])
return diff.count(1)* diff.count(3)
if __name__ == '__main__':
fichier = open('input.txt', 'r')
lignes = fichier.read().splitlines()
data = [0] + [int(i) for i in lignes]
data.sort()
built_in = data[len(data)-1]+3
print(day10_1(data,built_in))
Je pense multiplier la taille de lâinput par pi, ou ptet le nombre dâor
Bon sinon dans Elixir (sans lib externe) on a accĂšs Ă cette API : https://erlang.org/doc/man/digraph.html
Câest tricher ?
Je ne vois pas pourquoi. Si tu as compris que le problĂšme peut se modĂ©liser Ă lâaide de graphes, le plus dur est fait, autant utiliser les libs qui vont bien si tu les as sous la main.
Il ne me semble pas que le but de lâAdvent of Code soit de rĂ©inventer la roue
pfff jâetais tellement loin.
Câest tellement rapide comme ça.
bon jâai fini par rĂ©ussir avec mon approche rĂ©cursive naĂŻve, seulement cette fois je mĂ©morisais les morceaux dâarbres / graph dĂ©jĂ parcourus.
Le temps dâexĂ©cution est passĂ© de â Ă 3ms
bon, premiere etoile super facile. La deuxiĂšme, plus chaud, les graphs, câest vieux
from collections import defaultdict
numberList = [0]
f = open("Z:\donnees\developpement\Python\AdventOfCode\day10.txt", "r")
for line in f:
numberList.append(int(line.rstrip("\n")))
f.close()
## Star 1
numberList.sort()
numberList.append(numberList[-1]+3)
delta = defaultdict(lambda: 0)
previousAdaptor = numberList[0]
for i in range(1,len(numberList)):
delta[numberList[i]-previousAdaptor] += 1
previousAdaptor = numberList[i]
print(delta)
print(f"star1 : {delta[1]*delta[3]}")
Et le resultat:
defaultdict(<function <lambda> at 0x000001C104ED89D0>, {1: 70, 3: 27})
star1 : 1890
[Finished in 0.098s]
Edit: bon, pour lâĂ©toile 2, ma fonction de parcours du graph fonctionne. Sur les deux tests, ca mâa sorti la bonne rĂ©ponse. Sur le jeu de donnĂ©es ⊠ca fait 5min que mon core I7 tourne Ă balle et il a pas fini va falloir faire autrement quâexplorer toutes les possibilitĂ©s je crois
oui jâen suis passĂ© par lĂ aussi, jâai laissĂ© tourner pendant 1h ca nâa rien donnĂ© non plus
Pour donner un ordre dâidĂ©e : sur mon input il y a 173 625 106 649 344 arrangements (173 625 milliards).