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

 

Sujet(s) à lire :
    - Who's who@Programmation
 

 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  24418  24419  24420  ..  27169  27170  27171  27172  27173  27174
Auteur Sujet :

[blabla@olympe] Le topic du modo, dieu de la fibre et du monde

n°2402481
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 03-12-2021 à 22:04:34  profilanswer
 

Reprise du message précédent :

Dion a écrit :

Un cadeau d'une bouteille de vin français/italien à 10 balles c'est 500 balles de prime googleyness/bon camarade [:spamafote]


C'est même pas 300 balles la prime bon camarade :(

 

La classe moyenne est exploitée, des vrais vaches à lait.

mood
Publicité
Posté le 03-12-2021 à 22:04:34  profilanswer
 

n°2402482
gfive
Posté le 03-12-2021 à 22:35:32  profilanswer
 

boarf..

 

PArt one :

 
Spoiler :


 public int solvePartOne(List<String> data) {
        int size = data.size();
        int elementLength = data.get(0).length();
        char[] gammaChars = new char[elementLength];
        char[] epsilonChars = new char[elementLength];
        for (int i = 0; i < elementLength; i++) {
            char most = most(data, size, i);
            gammaChars[i] = most;
            epsilonChars[i] = most == '0' ? '1' : '0';
        }
        int gammaValue = Integer.parseInt(new String(gammaChars), 2);
        int epsilonValue = Integer.parseInt(new String(epsilonChars), 2);
        return gammaValue * epsilonValue;
    }

 

   /**
     * Get the most encountered bit value at position
     *
     * @param position the position
     * @return '1' or '0'
     */
    private char most(List<String> data, int size, int position) {
        Iterator<Character> it = data.stream().map(s -> s.charAt(position)).iterator();
        long count = 0;
        while (it.hasNext() && count < (size / 2)) {
            if (it.next() == '1') {
                count++;
            }
        }
        return count >= size / 2 ? '1' : '0';
    }

 
 

Et part two :

 
Spoiler :


    public int solvePartTwo(List<String> data) {
        String o2 = getLevel(data, oxygenComparator);
        String co2 = getLevel(data, co2Comparator);
        int o2Value = Integer.parseInt(o2, 2);
        int co2Value = Integer.parseInt(co2, 2);
        return o2Value*co2Value;
    }

 

   public String getLevel(List<String> data, Function<Integer, Comparator<List<String>>> comparatorFactory) {
        int position = 0;
        while (data.size() > 1) {
            Comparator<List<String>> comparator = comparatorFactory.apply(position);
            final int pos = position;
            data = data.stream().collect(Collectors.groupingBy(s -> s.charAt(pos)))
                    .values().stream().max(comparator).orElseThrow();
            position++;
        }
        return data.get(0);
    }

 

   private Function<Integer, Comparator<List<String>>> oxygenComparator = position ->
            (o1, o2) -> {
                if (o1.size() == o2.size()) {
                    return (o1.get(0).charAt(position) == '1' ? 1 : -1);
                } else {
                    return o1.size() - o2.size();
                }
            };

 

   private Function<Integer, Comparator<List<String>>> co2Comparator = position -> oxygenComparator.apply(position).reversed();

 


Message édité par gfive le 03-12-2021 à 22:35:53

---------------
Tous les sud africains sont ségrégationistes, à part Ted. (P. Desproges)
n°2402483
beel1
Posté le 03-12-2021 à 22:36:20  profilanswer
 

beel1 a écrit :


d'ailleurs bindec() est sur 9 bits + bit de signe [:natas]


EVERY. F*CKING. YEAR. [:kiki]

n°2402484
nraynaud
lol
Posté le 03-12-2021 à 22:49:20  profilanswer
 

https://www.instagram.com/p/CXCDaFEoIzS/
 
[:rofl]


---------------
trainoo.com, c'est fini
n°2402485
Kenshineuh
Posté le 03-12-2021 à 23:35:17  profilanswer
 

[:florentg] ICH BIN SCHNAPPI DAS KLEINE KROKODIL  [:florentg]

n°2402486
gfive
Posté le 03-12-2021 à 23:41:04  profilanswer
 


 
Et si on n'a pas insta? :o


---------------
Tous les sud africains sont ségrégationistes, à part Ted. (P. Desproges)
n°2402487
nucl3arfl0
Better Call Saul
Posté le 03-12-2021 à 23:42:49  profilanswer
 

Pas d'insta pas de chocolat !

 

Mon pihole nazi me coupe les accès à insta  :whistle:

n°2402488
Kenshineuh
Posté le 03-12-2021 à 23:48:09  profilanswer
 

gfive a écrit :


 
Et si on n'a pas insta? :o


 
 :??: Tu peux voir la publi sans avoir de compte insta.

n°2402489
gfive
Posté le 03-12-2021 à 23:51:09  profilanswer
 

Bizarre, sur mon pc ça marche pas mais sur mon téléphone oui.

 

Et ca ressemble pas au proxy, je tombe sur la mire de login insta.


---------------
Tous les sud africains sont ségrégationistes, à part Ted. (P. Desproges)
n°2402490
Flaie
Posté le 04-12-2021 à 06:32:50  profilanswer
 

J04 done, maintenant c'est anniversaire de la petite à préparer.

Message cité 1 fois
Message édité par Flaie le 04-12-2021 à 06:33:24
mood
Publicité
Posté le 04-12-2021 à 06:32:50  profilanswer
 

n°2402492
pataluc
Posté le 04-12-2021 à 09:54:29  profilanswer
 

Flaie a écrit :

J04 done, maintenant c'est anniversaire de la petite à préparer.


 
idem, done. premier jour ou faut commencer à réfléchir ne serait-ce que pour lire l'input ^^
 
hâte de lire ta solution en kotlin.
 

Spoiler :

https://i.imgur.com/GE4zHNv.png

n°2402493
R3g
fonctionnaire certifié ITIL
Posté le 04-12-2021 à 10:06:14  profilanswer
 

pataluc a écrit :


 
idem, done. premier jour ou faut commencer à réfléchir ne serait-ce que pour lire l'input ^^
 
hâte de lire ta solution en kotlin.
 



Pourquoi list(map(list, zip(*rows)) et pas list(zip(*rows)) ?


---------------
Au royaume des sourds, les borgnes sont sourds.
n°2402494
Flaie
Posté le 04-12-2021 à 10:20:13  profilanswer
 

pataluc a écrit :

 

idem, done. premier jour ou faut commencer à réfléchir ne serait-ce que pour lire l'input ^^

 

hâte de lire ta solution en kotlin.

 



Heureusement la lecture par groupes (\n\n separated) ça reviens souvent donc j'ai déjà tout ça de codé dans un inputGroups :D

 


Spoiler :


J'ai crée aussi un type alias Board et étendu avec deux méthodes pour faire la somme des nombres non appelés et si la grille gagne ou non.
la suite de nombres est chargée une seule fois (lignes du fichier, prends la premiere, scanne tous les entiers) et les boards aussi (prends les groupes, skip le premier (liste de nombres appelés, pour chaque groupe split lines et scan les entiers)).

 

https://rehost.diberie.com/Picture/Get/f/54913

Message cité 1 fois
Message édité par Flaie le 04-12-2021 à 10:24:04
n°2402495
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2021 à 10:25:11  profilanswer
 

Je pense que la meilleur chanson de joel de l’année est sortie: https://youtu.be/sxfxy-3dGz0

R3g a écrit :


Pourquoi list(map(list, zip(*rows)) et pas list(zip(*rows)) ?


zip sort des tuples il me semble, donc si tu veux pouvoir les altérer en place il faut convertir.


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2402496
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2021 à 10:39:14  profilanswer
 

pataluc a écrit :


 
idem, done. premier jour ou faut commencer à réfléchir ne serait-ce que pour lire l'input ^^
 
hâte de lire ta solution en kotlin.
 



 

Flaie a écrit :


Heureusement la lecture par groupes (\n\n separated) ça reviens souvent donc j'ai déjà tout ça de codé dans un inputGroups :D
 
 

Spoiler :


J'ai crée aussi un type alias Board et étendu avec deux méthodes pour faire la somme des nombres non appelés et si la grille gagne ou non.
la suite de nombres est chargée une seule fois (lignes du fichier, prends la premiere, scanne tous les entiers) et les boards aussi (prends les groupes, skip le premier (liste de nombres appelés, pour chaque groupe split lines et scan les entiers)).
 
https://rehost.diberie.com/Picture/Get/f/54913



Il y a un piège dans le problème? Parce que si c'est un bingo j'aurais utilisé 3 listes (ou 2 listes et une map): une liste pour mapper les nombres aux positions, une liste de compteurs pour les lignes, et une liste de compteurs pour les colonnes.
 
Quand t'as un nombre qui sort, tu le pop de la liste (ou map), tu incrémentes les compteurs pour la ligne & la colonne, et si un des deux est 5 ton board est bon... non?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2402497
Flaie
Posté le 04-12-2021 à 10:42:22  profilanswer
 

tu dois déterminer quelle grille est gagnante et retourner la somme des nombres de la grille qui n'ont pas été tirés multiplié par le le dernier nombre sorti qui a fait gagner la grille.
 
je connaissais pas les règles du bingo avant ce matin :D
 
la l'input n'est pas grand genre 100 grilles, du coup jai préféré tout rescan à chaque fois et pas m'emmerder avec des mutable list dans tous les coins, un des aspects qui me gonfle dans Kotlin d'ailleurs

Message cité 1 fois
Message édité par Flaie le 04-12-2021 à 10:43:45
n°2402498
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2021 à 10:57:40  profilanswer
 

Flaie a écrit :

tu dois déterminer quelle grille est gagnante et retourner la somme des nombres de la grille qui n'ont pas été tirés multiplié par le le dernier nombre sorti qui a fait gagner la grille.

 

je connaissais pas les règles du bingo avant ce matin :D

 

la l'input n'est pas grand genre 100 grilles, du coup jai préféré tout rescan à chaque fois et pas m'emmerder avec des mutable list dans tous les coins, un des aspects qui me gonfle dans Kotlin d'ailleurs


Je parlais plus pour les grilles individuelles, au lieu d'avoir un tableau 2D (qui semble être ce que vous avez fait tous les deux): IIRC un bingo au sens US c'est une grille de 5x5 avec des chiffres entre 1 et 99 (? pas trop sûr de la limite haute ?) dedans, généralement la cellule centrale (3, 3) est un "free bingo" (mais pas toujours).

 

Donc imaginons que t'aies disons

27 44 38 97 62
48 01 13 94 74
90 39 22 40 15
12 17 67 57 84
28 86 50 46 08


tu peux représenter ton board comme

 

board = [None, Some((1, 1)), None, None, None, None, None, None, Some((4, 4)), None, None, None, Some((0, 3)), Some((2, 1)), ...]
cols = [0, 0, 0, 0, 0]
rows = [0, 0, 0, 0, 0]

 

et si tu sors "12", tu swap(board[12], None), et si t'as récupéré Some((x, y)) tu cols[x] += 1; rows[y] += 1.

 

Pour savoir si une ligne ou colonne est résolue tu regardes son compte, pour la somme des nombres pas tirés tu peux simplement passer sur ton board et sommer les index des emplacements non vides.

 

Si tu veux te simplifier la vie (ou que les sparse arrays sont pas bien supportés par ton langage) tu peux utiliser une hashmap (number: (x, y)) à la place d'un array pour board.

Message cité 2 fois
Message édité par masklinn le 04-12-2021 à 10:58:38

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2402499
flo850
moi je
Posté le 04-12-2021 à 10:58:02  profilanswer
 

raa , j'ai un bug dans le 2/  :cry:

 

EDIT trouvé : le splice décalait mes index

 


Spoiler :

https://i.imgur.com/aJtoOh0.png

 


Message édité par flo850 le 04-12-2021 à 11:48:58

---------------

n°2402500
Flaie
Posté le 04-12-2021 à 11:20:09  profilanswer
 

masklinn a écrit :


Je parlais plus pour les grilles individuelles, au lieu d'avoir un tableau 2D (qui semble être ce que vous avez fait tous les deux): IIRC un bingo au sens US c'est une grille de 5x5 avec des chiffres entre 1 et 99 (? pas trop sûr de la limite haute ?) dedans, généralement la cellule centrale (3, 3) est un "free bingo" (mais pas toujours).
 
Donc imaginons que t'aies disons  

27 44 38 97 62
48 01 13 94 74
90 39 22 40 15
12 17 67 57 84
28 86 50 46 08


tu peux représenter ton board comme
 
board = [None, Some((1, 1)), None, None, None, None, None, None, Some((4, 4)), None, None, None, Some((0, 3)), Some((2, 1)), ...]
cols = [0, 0, 0, 0, 0]
rows = [0, 0, 0, 0, 0]
 
et si tu sors "12", tu swap(board[12], None), et si t'as récupéré Some((x, y)) tu cols[x] += 1; rows[y] += 1.
 
Pour savoir si une ligne ou colonne est résolue tu regardes son compte, pour la somme des nombres pas tirés tu peux simplement passer sur ton board et sommer les index des emplacements non vides.
 
Si tu veux te simplifier la vie (ou que les sparse arrays sont pas bien supportés par ton langage) tu peux utiliser une hashmap (number: (x, y)) à la place d'un array pour board.


Merci pour les règles je savais pas du tout.
 
La solution hashmap valeur : coordonnés utilise ça assez souvent oui, la pour cet exemple c'était assez facile avec list 2d mais c'est une bonne solution.
 
Peut être qu'on devra itérer sur ce jeu au fur et à mesure du mois, comme l'an dernier avec le jeu des crabes si je me souviens bien y'avait eu un deuxième exo dessus ?

n°2402501
nucl3arfl0
Better Call Saul
Posté le 04-12-2021 à 11:20:10  profilanswer
 

On peut prendre l'AoC en cours de route ?

n°2402502
Flaie
Posté le 04-12-2021 à 11:20:49  profilanswer
 

nucl3arfl0 a écrit :

On peut prendre l'AoC en cours de route ?


oui :jap:

n°2402503
Flaie
Posté le 04-12-2021 à 11:24:52  profilanswer
 
n°2402504
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2021 à 11:38:14  profilanswer
 

Flaie a écrit :

La solution hashmap valeur : coordonnés utilise ça assez souvent oui, la pour cet exemple c'était assez facile avec list 2d mais c'est une bonne solution.


Après ça reste optimisable, genre si ce sont des grilles 5x5 en fait t'as juste besoin d'un u8/i8 par cellule: 3 bits pour x, pareil pour y, 1 bit pour le flag (full/empty), et il te reste 1 bit de secours au cas où.

 

Et tu peux faire du SoA pour aller encore plus loin mais il faut un langage adapté (ici au niveau des manipulations sous-octet) sinon c'est pas bien drôle. D'ailleurs ce matin sous ma douche je me disais que du SoA pour le day 3 ça aurait été pas mal adapté (en tout cas à la recherche de fréquence, ptet moins glorieux pour le filtrage).


Message édité par masklinn le 04-12-2021 à 11:39:37

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2402505
Flaie
Posté le 04-12-2021 à 11:40:41  profilanswer
 

chaque année y'a un gars qui fait une solution en C qui fait les 25j le plus vite possible genre 1ms par jour, mais je ne l'ai pas vu cette année sur reddit

n°2402506
Flaie
Posté le 04-12-2021 à 11:42:16  profilanswer
 

Tu entends quoi par SoA ?

n°2402507
nucl3arfl0
Better Call Saul
Posté le 04-12-2021 à 11:43:27  profilanswer
 


Ok je ferai en mode touriste vu que ça fait un moment que j'ai pas fait d'algo

n°2402508
Flaie
Posté le 04-12-2021 à 11:45:42  profilanswer
 

nucl3arfl0 a écrit :


Ok je ferai en mode touriste vu que ça fait un moment que j'ai pas fait d'algo


Comme déjà dis les premiers jours sont les plus simple, ça monte vite en complexité :)

n°2402509
flo850
moi je
Posté le 04-12-2021 à 11:47:38  profilanswer
 

masklinn a écrit :


Je parlais plus pour les grilles individuelles, au lieu d'avoir un tableau 2D (qui semble être ce que vous avez fait tous les deux): IIRC un bingo au sens US c'est une grille de 5x5 avec des chiffres entre 1 et 99 (? pas trop sûr de la limite haute ?) dedans, généralement la cellule centrale (3, 3) est un "free bingo" (mais pas toujours).

 

Donc imaginons que t'aies disons

27 44 38 97 62
48 01 13 94 74
90 39 22 40 15
12 17 67 57 84
28 86 50 46 08


tu peux représenter ton board comme

 

board = [None, Some((1, 1)), None, None, None, None, None, None, Some((4, 4)), None, None, None, Some((0, 3)), Some((2, 1)), ...]
cols = [0, 0, 0, 0, 0]
rows = [0, 0, 0, 0, 0]

 

et si tu sors "12", tu swap(board[12], None), et si t'as récupéré Some((x, y)) tu cols[x] += 1; rows[y] += 1.

 

Pour savoir si une ligne ou colonne est résolue tu regardes son compte, pour la somme des nombres pas tirés tu peux simplement passer sur ton board et sommer les index des emplacements non vides.

Si tu veux te simplifier la vie (ou que les sparse arrays sont pas bien supportés par ton langage) tu peux utiliser une hashmap (number: (x, y)) à la place d'un array pour board
.


Si je comprends bien, c'est ce que j'ai fais.
Ainsi, pas de parcours de matrice pour jouer

Message cité 1 fois
Message édité par flo850 le 04-12-2021 à 11:50:42

---------------

n°2402510
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2021 à 11:47:53  profilanswer
 

Flaie a écrit :

Tu entends quoi par SoA ?


Structure of Array, une représentation par colonnes quoi: au lieu d'avoir un array de champs, t'as un array par champ.
 
Donc en day3 au lieu d'avoir un grand array de petits arrays de bits, t'aurais 1 array par colonnes avec tous les bits pour cette colonne, donc ton analyse de fréquence par colonnes c'est une itération triviale.


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2402511
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2021 à 11:50:54  profilanswer
 

Flaie a écrit :

Comme déjà dis les premiers jours sont les plus simple, ça monte vite en complexité :)


Un autre truc fréquent qui limite un peu la capacité à prendre en route c'est que souvent à partir de la 2e semaine les jours commencent à être liés au moins conceptuellement.
 
Mais tu peux toujours "prendre en route" en commençant au début :D

flo850 a écrit :

Si je comprends bine, c'est ce que j'ai fais.


Ça semble ouais [:romf]
 
Une des rares fois où je vois les sparse arrays du JS utilisés à bon escient :D


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2402512
Flaie
Posté le 04-12-2021 à 11:55:03  profilanswer
 

masklinn a écrit :


Structure of Array, une représentation par colonnes quoi: au lieu d'avoir un array de champs, t'as un array par champ.
 
Donc en day3 au lieu d'avoir un grand array de petits arrays de bits, t'aurais 1 array par colonnes avec tous les bits pour cette colonne, donc ton analyse de fréquence par colonnes c'est une itération triviale.


Merci, je ne connaissais pas cette acronyme :jap:

n°2402513
nucl3arfl0
Better Call Saul
Posté le 04-12-2021 à 11:56:51  profilanswer
 

masklinn a écrit :


Un autre truc fréquent qui limite un peu la capacité à prendre en route c'est que souvent à partir de la 2e semaine les jours commencent à être liés au moins conceptuellement.

 

Mais tu peux toujours "prendre en route" en commençant au début :D


Ah oui oui, prendre en route de l'événement mais commencer par le début évidemment.

n°2402514
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 04-12-2021 à 12:03:58  profilanswer
 

Flaie a écrit :


Comme déjà dis les premiers jours sont les plus simple, ça monte vite en complexité :)


Mon collègue a regardé les différents exercices de l'année dernière, il était choqué par la facilité :o

n°2402515
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 04-12-2021 à 12:09:45  profilanswer
 

Bon en tout cas je crois que je vais lacher l'affaire pour utiliser les ranges en C++, c'est une purge ça casse de tous les côtés sans raison apparente, et évidemment impossible de diagnostiquer quoi que ce soit c'est toujours des messages d'erreur complètement dégénérés...

 

Aujourd'hui j'avais bon espoir de pouvoir faire un truc élégant en utilisant des vues "colonnes" et "rangées" sur une array. Le résultat est une soupe infamme, je posterai plus tard.

n°2402516
Flaie
Posté le 04-12-2021 à 12:12:33  profilanswer
 

hephaestos a écrit :


Mon collègue a regardé les différents exercices de l'année dernière, il était choqué par la facilité :o


Ben il a l'air très fort.
 
j'ai plusieurs problèmes qui m'ont fait transpirer l'an dernier, genre le jour 20 ou j'ai mis 8h, dont 2 rien que pour la première partie, c'est pas compliqué le jour la j'ai pa du bosser du tout :D
 
le j19 aussi j'ai mis 1h
 
et ces temps c'est pour une solution gros degueulasse, pas un truc joli à coloriser sur carbon sh

Message cité 2 fois
Message édité par Flaie le 04-12-2021 à 12:14:58
n°2402517
Flaie
Posté le 04-12-2021 à 12:17:04  profilanswer
 

hephaestos a écrit :


Aujourd'hui j'avais bon espoir de pouvoir faire un truc élégant en utilisant des vues "colonnes" et "rangées" sur une array. Le résultat est une soupe infamme, je posterai plus tard.


:love:

n°2402518
gfive
Posté le 04-12-2021 à 12:24:26  profilanswer
 

Spoiler :


package fr.ela.aoc2021;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
 
public class D04 extends AoC {
    @Override
    public void run() {
        Game test = new Game(list(getTestInputPath()));
        Board testWinner = test.getFirstWinner();
        System.out.println("Test Score part 1 : "+testWinner.score());
        Board lastTestWinner = test.getLastWinner();
        System.out.println("Test Score part 2 : "+lastTestWinner.score());
 
        Game real = new Game(list(getInputPath()));
        Board realWinner = real.getFirstWinner();
        System.out.println("Real Score part 1 : "+realWinner.score());
        Board lastWinner = real.getLastWinner();
        System.out.println("Real Score part 2 : "+lastWinner.score());
    }
 
    private static class Game {
        final LinkedList<Integer> numbers;
        final List<Board> boards;
        final LinkedList<Board> winnerBoards = new LinkedList<>();
 
        public Game(List<String> list) {
            numbers = Arrays.stream(list.get(0).split("," )).map(Integer::parseInt).collect(Collectors.toCollection(LinkedList::new));
            boards = new LinkedList<>();
            for (int i = 2; i < list.size(); i += 5) {
                boards.add(new Board(list.subList(i, i + 5)));
                i++;
            }
        }
 
        public void play(int number) {
            Map<Boolean, List<Board>> map = boards.stream().collect(Collectors.groupingBy(b -> b.mark(number)));
            var wins = map.get(Boolean.TRUE);
            if (wins != null) {
                winnerBoards.addAll(wins);
                boards.removeAll(wins);
            }
        }
 
        public Board getFirstWinner() {
            int number = -1;
            while (winnerBoards.isEmpty() && !numbers.isEmpty()) {
                number = numbers.removeFirst();
                play(number);
            }
            if (winnerBoards.size() > 1) {
                throw new RuntimeException(winnerBoards.size()+" boards win!" );
            } else {
                return winnerBoards.get(0);
            }
        }
 
        public Board getLastWinner() {
            while (! numbers.isEmpty()) {
                play(numbers.removeFirst());
            }
            return winnerBoards.getLast();
        }
 
    }
 
    private record Position(int row, int col) {
    }
 
    private static class Board {
        private final Map<Integer, Position> positions;
        private final int[] colsSum, rowsSum;
        private int score;
 
        public Board(List<String> lines) {
            int size = 5;
            positions = new HashMap<>();
            rowsSum = new int[size];
            colsSum = new int[size];
 
            for (int row = 0; row < size; row++) {
                String line = lines.get(row);
                for (int col = 0; col < size; col++) {
                    int value = Integer.parseInt(line.substring(3*col, 3*(col+1)-1).trim());
                    positions.put(value,new Position(row, col));
                    rowsSum[row] += value;
                    colsSum[col] += value;
                }
            }
        }
 
        int score() {
            return score;
        }
 
        public boolean mark(int number) {
            Position pos = positions.get(number);
            if (pos == null) {
                return false;
            }
            colsSum[pos.col] -= number;
            rowsSum[pos.row] -= number;
            boolean win = (colsSum[pos.col] == 0 || rowsSum[pos.row] == 0);
            if (win) {
                score = Arrays.stream(colsSum).sum() * number;
            }
            return win;
        }
 
 
    }
 
}
 


---------------
Tous les sud africains sont ségrégationistes, à part Ted. (P. Desproges)
n°2402519
skeye
Posté le 04-12-2021 à 13:36:29  profilanswer
 

Bon, en vite fait probablement pas optimal :o  
Commencé ce matin dans la bagnole en attendant que ma fille termine son "cours" d'éveil musical et torché à l'instant. :D
 
J'ai même fait l'effort de créer un compte github pour l'occasion :D
 
https://github.com/mrossard/AOC2021 [...] 4/day4.php


---------------
Can't buy what I want because it's free -
n°2402520
flo850
moi je
Posté le 04-12-2021 à 13:36:43  profilanswer
 

C'est le téléthon au fait, n'oubliez pas de vous payer un bout de karma


---------------

n°2402521
Devil'sTig​er
Posté le 04-12-2021 à 14:07:25  profilanswer
 

Le rust qui va bien:
 
https://pastebin.com/kQ6Muia9
 
EDIT: la lecture du fichier est immonde, le reste ca va :D

Message cité 2 fois
Message édité par Devil'sTiger le 04-12-2021 à 14:07:55
n°2402522
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 04-12-2021 à 14:12:47  profilanswer
 


 
https://pastebin.com/bAPS8V9d
 
Dernier problème que je n'arrive pas à résoudre, si des experts sauraient m'aider... incapable de faire compiler/marcher un truc du genre :
 

Code :
  1. auto row_columns = ::ranges::views::concat(rows(board[0]), columns(board[0])) | to<vector<vector<int>>>;


 
Je peux lire les colonnes et les rangées séquentiellement, mais concaténer les deux ça semble verboten. Sauf bien sûr si je les matérialise séparément d'abords, mais bon...
 

Code :
  1. // Ça j'ai le droit...
  2.     auto r =  rows(boards[0]) | to<vector<vector<int>>>;
  3.     auto c = columns(boards[0]) | to<vector<vector<int>>>;
  4.     auto rc = ::ranges::views::concat(r,c) | to<vector<vector<int>>>;

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  24418  24419  24420  ..  27169  27170  27171  27172  27173  27174

Aller à :
Ajouter une réponse
 

Sujets relatifs
Plus de sujets relatifs à : [blabla@olympe] Le topic du modo, dieu de la fibre et du monde


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