Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3857 connectés 

 


Sujet auquel vous répondez
Sujet : [blabla@olympe] Le topic du modo, dieu de la fibre et du monde
skeye

Ydalb a écrit :

AOC day 10 done :o
 
Plus facile que les précédents je trouve :o
 
https://github.com/Ydalb/adventofco [...] /solve.php


 
Pfiouu que c'est compliqué. :o


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
masklinn

ratibus a écrit :

Bon je confirme, c'est pas un bug chez moi, ça dépend des données d'entrée des gens :D
Cette solution ne fonctionne pas en partie 1 sur mes données : https://www.reddit.com/r/adventofco [...] &context=3 :)


Ou alors c’est un bug dans les deux. Il y a régulièrement des edge cases qui sont présents que dans certains jeux de données, donc tu peux avoir une solution incorrecte / incomplète qui passe chez toi mais pas chez le voisin.

ratibus Bon je confirme, c'est pas un bug chez moi, ça dépend des données d'entrée des gens :D
Cette solution ne fonctionne pas en partie 1 sur mes données : https://www.reddit.com/r/adventofco [...] &context=3 :)
ratibus

Mackila a écrit :


 

Spoiler :

oui



J'ai identifié des nombres qui posent soucis :

Spoiler :


J'ai à un moment le nombre 41426456027.
 
Considérons l'opération new = old + 7  à effectuer et un test de divisibilité par 3 (qui est la configuration d'un de mes monkeys).
 
Le code qui fonctionne (= donc la réponse est validée par le formulaire de l'AoC) et n'applique pas une division par le LCM
41426456027 + 7 = 41426456034
41426456034 / 3 = 13808818678 (on est en partie un, il faut diviser par 3)
13808818678 mod 3 = 1
 
Si on applique en amont la division par le LCM (dans mon cas 9699690) :
41426456027 mod 9699690 = 8779727
8779727 + 7 = 8779734
8779727 / 3 = 2926578
2926578 mod 3 = 0
 
Du coup dans un cas j'ai 1 en sortie et dans l'autre cas j'ai 0, donc ça oriente pas vers le même singe ensuite.
 
Et j'ai 2 autres nombres comme ça qui posent ce souci : 6648690481 et 1067073787.
 
Avec mon jeu de données https://github.com/ratibus/adventof [...] /input.txt tu as combien en partie 1 ? Le résultat attendu par AoC est : 88208
Si je divise par le LCM, j'obtiens 87615.

Mackila

ratibus a écrit :

Spoiler :

Ca fonctionne chez vous la partie 1, si vous faites un % LCM après la division entière par 3 ?



 

Spoiler :

oui


 
comme hephaestos pour moi, la grosse flemme de parser le bordel...
 

Spoiler :


using System.Collections.ObjectModel;
 
Collection<Monkey> AllMonkeys = new Collection<Monkey>();
 
void InitAllMonkeys()
{
    AllMonkeys.Clear();
    AllMonkeys.Add(new Monkey(new UInt64[] { 71, 56, 50, 73                 }, wl => wl * 11, wl => ((wl % 13) == 0) ? 1 : 7));
    AllMonkeys.Add(new Monkey(new UInt64[] { 70, 89, 82                     }, wl => wl + 1 , wl => ((wl %  7) == 0) ? 3 : 6));
    AllMonkeys.Add(new Monkey(new UInt64[] { 52, 95                         }, wl => wl * wl, wl => ((wl %  3) == 0) ? 5 : 4));
    AllMonkeys.Add(new Monkey(new UInt64[] { 94, 64, 69, 87, 70             }, wl => wl + 2 , wl => ((wl % 19) == 0) ? 2 : 6));
    AllMonkeys.Add(new Monkey(new UInt64[] { 98, 72, 98, 53, 97, 51         }, wl => wl + 6 , wl => ((wl %  5) == 0) ? 0 : 5));
    AllMonkeys.Add(new Monkey(new UInt64[] { 79                             }, wl => wl + 7 , wl => ((wl %  2) == 0) ? 7 : 0));
    AllMonkeys.Add(new Monkey(new UInt64[] { 77, 55, 63, 93, 66, 90, 88, 71 }, wl => wl * 7 , wl => ((wl % 11) == 0) ? 2 : 4));
    AllMonkeys.Add(new Monkey(new UInt64[] { 54, 97, 87, 70, 59, 82, 59     }, wl => wl + 8 , wl => ((wl % 17) == 0) ? 1 : 3));
}
 
InitAllMonkeys();
 
UInt64 MaxWorryLevel = 13 * 7 * 3 * 19 * 5 * 2 * 11 * 17;
 
for (int round = 1; round <= 20; ++round)
{
    for (int monkeyID = 0; monkeyID < AllMonkeys.Count; ++monkeyID)
    { // Monkey turn
        Monkey monkey = AllMonkeys[monkeyID];
        while (monkey.Items.Count != 0)
        {
            ++monkey.inspectionCount;
            UInt64 wl = monkey.Items[0];
            monkey.Items.RemoveAt(0);
            wl = (monkey.operationOp(wl) / 3) % MaxWorryLevel;
            AllMonkeys[monkey.nextMonkeyOp(wl)].Items.Add(wl);
        }
    }
}
 
Console.WriteLine("1 = " + AllMonkeys.Select( m => m.inspectionCount ).OrderBy( ic => ic ).Skip( AllMonkeys.Count-2 ).Aggregate( (a, b) => a*b ) ) ;
 
InitAllMonkeys();
 
for (int round = 1; round <= 10000; ++round)
{
    for (int monkeyID = 0; monkeyID < AllMonkeys.Count; ++monkeyID)
    { // Monkey turn
        Monkey monkey = AllMonkeys[monkeyID];
        while (monkey.Items.Count != 0)
        {
            ++monkey.inspectionCount;
            UInt64 wl = monkey.Items[0];
            monkey.Items.RemoveAt(0);
            wl = monkey.operationOp(wl) % MaxWorryLevel;
            AllMonkeys[monkey.nextMonkeyOp(wl)].Items.Add(wl);
        }
    }
}
 
Console.WriteLine("2 = " + AllMonkeys.Select(m => m.inspectionCount).OrderBy(ic => ic).Skip(AllMonkeys.Count - 2).Aggregate((a, b) => a * b));
 
public class Monkey
{
    public UInt64 inspectionCount = 0;
    public Collection<UInt64> Items = new Collection<UInt64>();
    public delegate UInt64 OperationOp(UInt64 wl);
    public OperationOp operationOp;
    public delegate int NextMonkeyOp(UInt64 item);
    public NextMonkeyOp nextMonkeyOp;
    public Monkey(UInt64[] items, OperationOp op, NextMonkeyOp nm)
    {
        foreach (UInt64 i in items) Items.Add(i);
        operationOp = op;
        nextMonkeyOp = nm;
    }
}

ratibus

beel1 a écrit :


Autres soucis, comme toujours dans les chantiers...
Cela dit, Mobalpa faisant pas de peinture, le plombier-cowboy s'est pas fait chier et a laissé la merde au peintre (bandes pas poncées par ex)
Le peintre a d'abord crisé mais après un café et le OK de son chef il était content d'être chez nous plutôt que peindre à la chaîne des apparts sortis de terre :D
Mais on a eu à faire au directeur à pompes en croco qui a essayé de nous manipuler pour faire réparer la baignoire (irréparable) que leur carreleur a pété (sans l'avouer) pour pas avoir à la changer. OK ça retardait le chantier mais les plus emmerdés c'était quand même nous (la vendeuse est intervenue et ils ont remplacé la baignoire). On s'en serait bien passé surtout qu'il y avait d'autres merdes et autres raccourcis pris à côté (trop long à tout détailler mais genre du PER dans du tube IRL, chaque fois qu'un plombier vient dans mon garage il me demande si j'ai fait la plomberie moi-même).
À côté de ça ils ont fait un faux plafond pour l'éclairage et déplacer la VMC, c'était propre, plutôt bien vu, pas cher et j'y aurait pas pensé (mais comme j'étais pris de court j'en ai pas profité pour isoler)


Ah ouais bien relou quand même :d

beel1

masklinn a écrit :


OK mais si t'es un boomer t'es pas concerné :o


Je fous en veille mon HTPC (fixe), qui pendant longtemps sortait de veille tout seul (je sais pas ce qui a fini par régler le problème) mais aussi qui de temps en temps crashe quand je lui le demande de se réveiller :o
Donc si ça m'intéresse quand même cette histoire :o

gfive

el muchacho a écrit :


T'as fait la partie 2 ?


Oui.

 

L'indice sur la "another way" m'a tt de suite mis sur l'idée de changer simplement une fonction.

 

Les valeurs de diviseurs m'ont donné presque instantanément la solution.

 

Mais j'étais très très bien réveille. :o

beel1

ratibus a écrit :


:jap:
L'insatisfaction vient de quoi au final ? Uniquement le souci de synchronisation menuisier/peintre ou bien d'autres soucis ?


Autres soucis, comme toujours dans les chantiers...
Cela dit, Mobalpa faisant pas de peinture, le plombier-cowboy s'est pas fait chier et a laissé la merde au peintre (bandes pas poncées par ex)
Le peintre a d'abord crisé mais après un café et le OK de son chef il était content d'être chez nous plutôt que peindre à la chaîne des apparts sortis de terre :D
Mais on a eu à faire au directeur à pompes en croco qui a essayé de nous manipuler pour faire réparer la baignoire (irréparable) que leur carreleur a pété (sans l'avouer) pour pas avoir à la changer. OK ça retardait le chantier mais les plus emmerdés c'était quand même nous (la vendeuse est intervenue et ils ont remplacé la baignoire). On s'en serait bien passé surtout qu'il y avait d'autres merdes et autres raccourcis pris à côté (trop long à tout détailler mais genre du PER dans du tube IRL, chaque fois qu'un plombier vient dans mon garage il me demande si j'ai fait la plomberie moi-même).
À côté de ça ils ont fait un faux plafond pour l'éclairage et déplacer la VMC, c'était propre, plutôt bien vu, pas cher et j'y aurait pas pensé (mais comme j'étais pris de court j'en ai pas profité pour isoler)

ratibus Sinon c'était magnifique le paysage au réveil ce matin :love:
https://i.imgur.com/jDPvI0Z.jpg
ratibus

masklinn a écrit :


Pas en PHP. Mais tu peux avoir pire: il passe pas en bigint il passe en float, sur une plateforme 32b ça veut dire que tu montes de 31 à 53 bits de précision entière, mais sur une plateforme 64b tu descend de 63 à 53 bits, donc tu passes à des valeurs approximatives [:dawa]


Non c'est pas ça le souci :o

Spoiler :

Ca fonctionne chez vous la partie 1, si vous faites un % LCM après la division entière par 3 ? Je pensais que la division par le LCM allait tout le temps fonctionner mais j'ai dû rater un truc dans le raisonnement.

Hermes le Messager

Jubijub a écrit :

-5°, y’a un coin dans le Jura suisse (la Brévine) où il fait -18°
 
 [:bakk52]


 

el_barbone a écrit :


 
-3 a 7h ce matin .... Apparemment dans la Creuse il a fait -12. [:bakk12]


 
Les complotistes en mode : On vous l'avait dit que c’était du pipeau le RC.  [:sardinelorano]  [:romano21]

masklinn

Flaie a écrit :


overflow probable


ratibus a écrit :


Non je pense pas.

Spoiler :

Quand je veux mettre cette ligne tout le temps (et pas uniquement dans la partie 2), ça casse ma partie 1 (mais pas sur les données de test) : https://github.com/ratibus/adventof [...] ve.php#L53
Je comprends pas pourquoi.



Pas en PHP. Mais tu peux avoir pire: il passe pas en bigint il passe en float, sur une plateforme 32b ça veut dire que tu montes de 31 à 53 bits de précision entière, mais sur une plateforme 64b tu descend de 63 à 53 bits, donc tu passes à des valeurs approximatives [:dawa]

ratibus

Flaie a écrit :


overflow probable


Non je pense pas.

Spoiler :

Quand je veux mettre cette ligne tout le temps (et pas uniquement dans la partie 2), ça casse ma partie 1 (mais pas sur les données de test) : https://github.com/ratibus/adventof [...] ve.php#L53
Je comprends pas pourquoi.

Flaie

ratibus a écrit :

Bon j'ai raté la partie 2 (ça me soûle, il y avait la même feinte une des années précédentes...) :(
Quand j'applique la solution à mon code ça fonctionne sur la partie 2 mais plus sur la partie 1 alors que ça fonctionne sur les 2 parties avec les données de test :fou:


overflow probable

el_barbone

Jubijub a écrit :

-5°, y’a un coin dans le Jura suisse (la Brévine) où il fait -18°
 
 [:bakk52]


 
-3 a 7h ce matin .... Apparemment dans la Creuse il a fait -12. [:bakk12]

ratibus Bon j'ai raté la partie 2 (ça me soûle, il y avait la même feinte une des années précédentes...) :(
Quand j'applique la solution à mon code ça fonctionne sur la partie 2 mais plus sur la partie 1 alors que ça fonctionne sur les 2 parties avec les données de test :fou:
el muchacho

Flaie a écrit :


Réfléchis a comment tu peux éviter que le nombre grossisse trop. Quel moyen mathématiques connaît tu pour ramener le nouveau level de worriness à un nombre plus petit commun à tous qui te permettrait de rester sur des long. Je suis que tu sais


Hmmm, okay, je vois. :jap:  
Bon par contre j'ai pas le temps de le faire ce matin. On verra ce soir.

Flaie

el muchacho a écrit :

aaargh j'ai pas le bon résultat pour part 2.
J'ai le round 1 correct mais au round 20 : [99, 97,8,103]
 
Un integer overflow ? edit: ah oui, même avec des Long, j'ai des nombres négatifs...
 
"you'll need to find another way to keep your worry levels manageable." ????
 
 Bon ben BigNum alors... ? Non probablement pas, ça explose, et les 10 000 rounds sont là pour faire exploser le temps. Du coup, je sèche.


Réfléchis a comment tu peux éviter que le nombre grossisse trop. Quel moyen mathématiques connaît tu pour ramener le nouveau level de worriness à un nombre plus petit commun à tous qui te permettrait de rester sur des long. Je suis que tu sais

el muchacho

gfive a écrit :

J'ai trouvé que l'énoncé d'aujourd'hui donnait presque trop d'indices :o


T'as fait la partie 2 ?

el muchacho aaargh j'ai pas le bon résultat pour part 2.
J'ai le round 1 correct mais au round 20 : [99, 97,8,103]

 

Un integer overflow ? edit: ah oui, même avec des Long, j'ai des nombres négatifs...

 

"you'll need to find another way to keep your worry levels manageable." ????

 

Bon ben BigNum alors... ? Non probablement pas, ça explose, et les 10 000 rounds sont là pour faire exploser le temps. Du coup, je sèche.

 

En attendant

Spoiler :


package AOC2022

 

import java.io.File

 

class Day11 {

 

   data class Monkey(val items: MutableList<Long>,
                 private val operation: String,
                 private val test: Long,
                 private val throwToIfTrue: Int, private val throwToIfFalse: Int) {

 

       var inspected = 0

 

       fun operate(item : Long): Long {
            var worry = operation.split(' ')
                .let { (instr, operand) ->
                    when(instr) {
                        "+" -> item + if (operand != "old" ) operand.toLong() else item
                        "*" -> item * if (operand != "old" ) operand.toLong() else item
                        else -> throw Exception("Unknown operation: $instr" )
                    }
                }
            return worry / 3
        }

 

       fun throwTo(worryLevel: Long) : Pair<Int, Long> {
            inspected++
            return Pair(if (worryLevel % test == 0L) throwToIfTrue else throwToIfFalse, worryLevel)
        }
    }

 

   var monkeys: MutableList<Monkey> = mutableListOf()

 

   fun parse(lines: List<String> ): List<Monkey> {
        var numChunk = 0
        val chunks = lines
            .chunked(7)
            .map { it.filter { it.isNotBlank() } }
        for(chunk in chunks) {
                monkeys.add(
                    Monkey(
                        chunk[1].substring(18).split(',').map { it.trim().toLong() }.toMutableList(),
                        chunk[2].substring(23).trim(),
                        chunk[3].substring(20).trim().toLong(),
                        chunk[4].substring(29).trim().toInt(),
                        chunk[5].substring(29).trim().toInt(),
                    )
                )
        }
        return monkeys
    }

 

   fun part1(lines: List<String> ): Int {
        for (monkey in parse(lines)) {
            println(monkey)
        }
        (1..20).forEach{ i ->
            println("Round " + i)
            for(monkey in monkeys) {
                for (item in monkey.items.toLongArray()) {   // copy to avoid concurrent modification
                    monkey.items.removeAt(0)
                    val (recipient, item) = monkey.throwTo(monkey.operate(item))
                    monkeys[recipient].items.add(item)
                }
            }
            for(monkey in monkeys) {
                println("${monkey}, ${monkey.inspected}" )
            }
        }
        val sortedByInspected = monkeys.map { it.inspected }.sortedByDescending { it }
        return monkeys[0].inspected * monkeys[1].inspected
    }

 

   fun part2(lines: List<String>  ): Unit {
    }
}

 

fun main() {
    val lines = File("src/main/kotlin/AOC2022/input11.txt" ).readLines()
    val day11 = Day11()
    println(day11.part1(lines))
    println(day11.part2(lines))
}

R3g Bon, la partie 1 était vite faite, mais ma solution scale pas...
Jubijub -5°, y’a un coin dans le Jura suisse (la Brévine) où il fait -18°
 
 [:bakk52]
gfive J'ai trouvé que l'énoncé d'aujourd'hui donnait presque trop d'indices :o
hephaestos J'ai envie de dire, en toute simplicité (pas de jugement, j'ai des trucs à faire moi aujourd'hui...) :
https://codeshare.io/8pKyNB

 

J'ai vite décidé que rentrer les données à la main serait le plus judicieux. Le plus relou a été de tout convertir en int64 pour la partie 2 ><.

Flaie J'en ai quand même méga chié, quasi 40 min les deux parties  
 
Day 11:

hephaestos

el muchacho a écrit :

Dans l'exemple, "Monkey 2 inspected items 7 times.".
 
Moi je compte 3, lors du round 1 et 0 les rounds suivants. Comment ils parviennent à 7 ?


Je viens de réaliser que les actions de chaque singe ne sont pas simultanées dans chaque ronde : si le singe 1 lance un truc au singe 2 dans la première ronde, le singe 2 va l'inspecter et le relancer. C'est peut-être ton erreur aussi ?

el muchacho Dans l'exemple, "Monkey 2 inspected items 7 times.".
 
Moi je compte 3, lors du round 1 et 0 les rounds suivants. Comment ils parviennent à 7 ?
el muchacho

ratibus a écrit :


Si j'en crois mon Github, j'avais mis 31 minutes sur la première partie et 13 sur la seconde :d
https://github.com/ratibus/adventof [...] 020/day_18
Sans récursivité par contre :o


T'es très fort.
 
Bon ça y est, on entre dans les problèmes du weekend. Mon dimanche est foutu :o

ratibus

el_barbone a écrit :


Nous on a pris un seul  ... Il était mal organisé (ça c'est bien fini pour nous, mais le chantier de la sdb a été une plaie pour nous)
L'idéal est dans prendre un seul qui gère ses (bons) sous traitants (c'est comme ça que ça c'est passé pour la cuisine et c'était nickel).


:jap:

el muchacho a écrit :


ce genre de truc, je ne me souvenais plus l'avoir résolu: https://adventofcode.com/2020/day/18
Je ne sais pas si je suis encore capable de le faire. Faudrait que je retente pour voir.


Si j'en crois mon Github, j'avais mis 31 minutes sur la première partie et 13 sur la seconde :d
https://github.com/ratibus/adventof [...] 020/day_18
Sans récursivité par contre :o

skeye

Ydalb a écrit :


Le tien est compliqué :o


not sure if serious.  [:sombrero67]  
 

el muchacho

ratibus a écrit :


Y a toujours pas de récursion, c'est bon pour moi :o


ce genre de truc, je ne me souvenais plus l'avoir résolu: https://adventofcode.com/2020/day/18
Je ne sais pas si je suis encore capable de le faire. Faudrait que je retente pour voir.

masklinn Les fans de JPEG XL [:rofl]
 
Ils s'injectent du copium au litre, pire que des butters  [:implosion du tibia] il y a une blockchain dans JXL?
Ydalb

skeye a écrit :


 
Pfiouu que c'est compliqué. :o


Tu n’es pas habitué c’est tout :o
 
Le tien est compliqué :o

el_barbone

ratibus a écrit :

Pour les gens qui ont fait refaire leur salle de bain : 1 seul artisan ou plusieurs sur le chantier ?
Quels corps de métier à privilégier car ça demande des compétences en plomberie/carrelage/elec...


Nous on a pris un seul  ... Il était mal organisé (ça c'est bien fini pour nous, mais le chantier de la sdb a été une plaie pour nous)
L'idéal est dans prendre un seul qui gère ses (bons) sous traitants (c'est comme ça que ça c'est passé pour la cuisine et c'était nickel).

nucl3arfl0 Je trouve mon code plus simpliste à la lecture, en fait [:clooney11]

 

Mais j'ai un gros biais évidemment.
Après, c'est certainement pas le plus optimal / performant.

skeye

Ydalb a écrit :

AOC day 10 done :o
 
Plus facile que les précédents je trouve :o
 
https://github.com/Ydalb/adventofco [...] /solve.php


 
Pfiouu que c'est compliqué. :o

skeye Day 10 done. Assez rapide finalement, le plus compliqué c'est de comprendre l'énoncé.[:joce]
Pas fait de fantaisies sur celui-ci, pas assez dormi cette nuit et pas le temps. :o  

Spoiler :


J'ai cru que j'avais le cerveau trop brumeux pour faire la partie 1 en une passe, mais c'est au calcul du total que j'avais introduit un décalage de 1 [:el g]
https://github.com/mrossard/aoc2022 [...] /day10.php

masklinn

R3g a écrit :


alors c'est ce que je croyais mais apparemment '-1'.isdigit() est False :/


Ah merde j'y avais pas pensé :D dsl. isnumeric() marche pas non plus :/

 

Et ya pas de `int.tryparse` ou équivalent :/

R3g


ouais c'est "normal", mais j'aurais trouvé "normal" d'avoir une méthode disant que '-1' représente un nombre

SekYo C'est "normal", "-" c'est pas un digit: https://docs.python.org/3/library/s [...] tr.isdigit
R3g

masklinn a écrit :

Bon après m'être souvenu de itertools::izip!, et que j'avais ajouté un post-increment à mes extensions, et un peu de nettoyage, je suis arrivé à un day10 dont je suis un peu content, en une passe (mais sans buffering du CRT): https://topaz.github.io/paste/#XQAA [...] 6E7nf7UZBH


 

masklinn a écrit :


FWIW map c'est bien si t'as une fonction que tu peux lui passer direct, mais là t'as aussi bien fait d'utiliser une listcomp imo.
 
Et t'as pas besoin de l[-1], tu peux juste l.isdigit().


alors c'est ce que je croyais mais apparemment '-1'.isdigit() est False :/
 
mais oui pour map je suis d'accord, c'est qu'il y a eu pas mal de refactoring pour arriver là.


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)