Calendrier de l'avent 🎄 (mais sans chocolats)

Je viens de finir 2020 / day1 :slight_smile:. Je code en Python, mais je vais peut être profiter de l’occasion pour refaire du OCaml :crazy_face:

1 « J'aime »

J’ai pas acheté de calendrier de l’avent whisky cette année (celui que je voulais était en rupture partout) :sob:

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… :smiley: :smiley: :smiley:

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 :smiley:

1 « J'aime »

on en reparle dans 15 jours :wink:

@viewww va bien nous faire une petite notif quotidienne ?

1 « J'aime »

ç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 :+1:

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 :slight_smile:

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… :grinning:

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

Le tri ? Jamais entendu parlé ! :ninja: