Je viens de finir 2020 / day1 . Je code en Python, mais je vais peut être profiter de l’occasion pour refaire du OCaml
J’ai pas acheté de calendrier de l’avent whisky cette année (celui que je voulais était en rupture partout)
Alors toi je vais t’embêter parce que je me suis dit que ce serait une bonne occasion de découvrir le monde de Python et je n’ai AUCUNE idée des best practices, des librairies à utiliser et celles à éviter, donc…
Fait aussi, je vais essayer d’y penser tous les jours.
Au moins c’est plus à mon niveau que le calendrier du thread sport en confinement
on en reparle dans 15 jours
ça semble sympa ce calendrier de l’Avent du codeur. Mon anglais est un peu rouillé. Je me demandais où était l’input de l’énigme 1…il faut se connecter pour la faire apparaître.
Allez je vais tenter ça tiens, ça va être rigolu. En Python pour ma part.
yes
Oui j’ai l’impression qu’il apparait une fois connecté. Je ne l’avais pas non plus au début.
yes il faut se connecter, car les données (le puzzle) est différent pour chaque utilisateur
et voici ma version du défi day1 en Elixir
Solution Elixir
list = puzzle |> String.split() |> Enum.map(&String.to_integer/1)
[{i, j, k} | _] = for i <- list, j <- list, k <- list, i + j + k == sum, do: {i, j, k}
i * j * k
et ma version python :
Résumé
import time
current_milli_time = lambda: int(round(time.time() * 1000))
def sum2020(data):
print('start data scan')
for i in data:
for j in data:
for k in data:
if i + j + k == 2020:
return i,j,k
return None
if __name__ == "__main__":
start = current_milli_time()
file1 = open('in', 'r')
Lines = file1.readlines()
data = [int(i) for i in Lines]
data.sort()
j,i,k=sum2020(data)
print(i*j*k)
end = current_milli_time() -start
Pourquoi i, j, k ? Un double parcours pour moi suffit, donc i, j.
Ma version en php
for ($i=0; $i<count($t); $i++)
{
for ($j=0;$j<count($t); $j++)
{
if (($t[$i]+$t[$j]) == 2020) {echo ($t[$i]*$t[$j]); exit();}
}
}
Alors je comprends pas, j’ai fait exactement cette méthode (bourrine) mais ça me sort rien
Pour la deuxième partie.
J’ai fait bourrin subtil en arrêtant de vérifier si i+j > 2020 ou i+j+k > 2020 une fois la liste triée.
Ah ok…
For Each Cell1 In Range(« D4:D200 »)
If (Cell1.Value) > 2020 Then
Debug.Print (Cell1.Value + Cell2.Value + Cell3.Value)
Debug.Print (« Exit1 »)
Exit For
End If
For Each Cell2 In Range(« D4:D200 »)
If (Cell1.Value + Cell2.Value) > 2020 Then
'Debug.Print (Cell1.Value + Cell2.Value + Cell3.Value)
'Debug.Print (« Exit2 »)
Exit For
End If
For Each Cell3 In Range(« D4:D200 »)
If (Cell1.Value + Cell2.Value + Cell3.Value) > 2020 Then
'Debug.Print (Cell1.Value + Cell2.Value + Cell3.Value)
'Debug.Print (« Exit3 »)
Exit For
End If
Debug.Print (Cell1.Value + Cell2.Value + Cell3.Value)
If (Cell1.Value + Cell2.Value + Cell3.Value) = 2020 Then
Debug.Print (Cell1.Value * Cell2.Value * Cell3.Value)
Debug.Print (« OK »)
End If
Next
Next
Next