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

 

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

 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  24415  24416  24417  ..  27169  27170  27171  27172  27173  27174
Auteur Sujet :

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

n°2402359
koskoz
They see me trollin they hatin
Posté le 03-12-2021 à 10:03:53  profilanswer
 

Reprise du message précédent :

ratibus a écrit :

Bon les javaistes, ces discussions de PR sont interminables :o
 
Ca fait 15h qu'on a fini en PHP avec skeye  :whistle:


 
 [:hish:1]  
 

ratibus a écrit :


Bon sinon Libé ils ont tué le game sur LR : https://mobile.twitter.com/libe/sta [...] 5406440455  :D


 
J'ai déjà vu l'image d'origine mais je n'ai pas la ref [:sadnoir]
 

ratibus a écrit :


Tu serais pas architecte ? :o


 
 [:lucypres]  
 

Dion a écrit :

Dernier comm. Google :

Citation :

Votre commande est en cours d'acheminement Nov 28, 2021, 8:01 AM
Commande effectuée  nov. 19  
Commande expédiée    nov. 28  
Livraison    déc. 01–02


 
Dernier statut DHL :

Citation :


Announced
Shipment not yet received or processed    Nov 28 5:32 AM


 
Je sens que mon Stadia va être un peu en retard [:dawa]


 
J'ai commandé le Pixel 6 le 27/10. Il n'est toujours pas expédié [:wark0]


---------------
Twitter
mood
Publicité
Posté le 03-12-2021 à 10:03:53  profilanswer
 

n°2402360
boblenain2​00
Posté le 03-12-2021 à 10:15:02  profilanswer
 

hephaestos a écrit :

Comment vous exprimez, en programmation fonctionnelle:

Code :
  1. list L;
  2. while(L.size>1) {
  3.   L = L | filter(f)
  4. }



Je suis pas su d'avoir compris l'algo. C'est quoi le pipe ? f ?

n°2402361
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 03-12-2021 à 10:17:11  profilanswer
 

boblenain200 a écrit :


Je suis pas su d'avoir compris l'algo. C'est quoi le pipe ? f ?

 

f c'est le filtre:

 
Code :
  1. list L;
  2. while(L.size>1) {
  3.   L = filter(L, f)
  4. }
 

Je veux re-filtrer un nombre de fois arbitraire la liste courante. Je me demande si c'est un concept courant.


Message édité par hephaestos le 03-12-2021 à 10:19:05
n°2402362
boblenain2​00
Posté le 03-12-2021 à 10:22:25  profilanswer
 

Pas si facile effectivement

 
Code :
  1. let rec filter(L,F) = if break_cond then L else filter(F(L),F)
 

?


Message édité par boblenain200 le 03-12-2021 à 10:27:34
n°2402363
Anonymouse
Posté le 03-12-2021 à 10:23:11  profilanswer
 


 

koskoz a écrit :


 
J'ai déjà vu l'image d'origine mais je n'ai pas la ref [:sadnoir]
 


https://fr.wikipedia.org/wiki/American_Gothic_(Wood)

n°2402364
masklinn
í dag viðrar vel til loftárása
Posté le 03-12-2021 à 10:29:42  profilanswer
 

hephaestos a écrit :

Comment vous exprimez, en programmation fonctionnelle:

Code :
  1. list L;
  2. while(L.size>1) {
  3.   L = L | filter(f)
  4. }



Code :
  1. head . dropWhile ((> 1) . length) . iterate . filter


Truc du style? J’ai pas pu tester j’ai pas de ghc sur ma machine de travail.
 
Le iterate est naturellement la partie importante,c’est l’abstraction fondamentale sur ta boucle.
 
edit: ya encore plus simple en fait: until ((== 1) . length) . filter qui fait la terminaison et ne renvoie que la dernière itération mais je connaissais pas until.  

boblenain200 a écrit :


Je suis pas su d'avoir compris l'algo. C'est quoi le pipe ? f ?


A | fn(f) ~ fn(f, A)

Message cité 1 fois
Message édité par masklinn le 03-12-2021 à 10:40:33

---------------
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°2402365
mechkurt
Posté le 03-12-2021 à 10:36:10  profilanswer
 

koskoz a écrit :


 
J'ai déjà vu l'image d'origine mais je n'ai pas la ref [:sadnoir]
 


https://www.google.com/search?q=ame [...] d&tbm=isch
 [:benou_grilled]


Message édité par mechkurt le 03-12-2021 à 10:36:36

---------------
D3
n°2402366
beel1
Posté le 03-12-2021 à 10:42:29  profilanswer
 

R3g a écrit :


fait aussi. Mais j'ai dû me résoudre à coder, la part 2 dans LibreOffice ça devenait galère


Spoiler :

avec les filtres ça se fait bien (vu que j'avais une colonne par bit), mais heureusement que j'ai eu bon du 1er coup pasque sinon j'aurais pas eu le courage de tout reprendre pour chercher l'erreur :D

n°2402367
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 03-12-2021 à 10:49:54  profilanswer
 

masklinn a écrit :


Code :
  1. head . dropWhile ((> 1) . length) . iterate . filter


Truc du style? J’ai pas pu tester j’ai pas de ghc sur ma machine de travail.
 
Le iterate est naturellement la partie importante,c’est l’abstraction fondamentale sur ta boucle.
 
edit: ya encore plus simple en fait: until ((== 1) . length) . filter qui fait la terminaison et ne renvoie que la dernière itération mais je connaissais pas until.  


 

masklinn a écrit :


A | fn(f) ~ fn(f, A)


 
Ok :jap:
 
J'ai rien trouvé qui ressemble à ça dans https://ericniebler.github.io/range-v3/

n°2402368
koskoz
They see me trollin they hatin
Posté le 03-12-2021 à 10:58:08  profilanswer
 

Vous avez un site/soft facile de prise en main pour modéliser rapidement une pièce avec ses différents éléments : portes, fenêtres, mobilier, etc. ?


---------------
Twitter
mood
Publicité
Posté le 03-12-2021 à 10:58:08  profilanswer
 

n°2402369
flo850
moi je
Posté le 03-12-2021 à 11:03:26  profilanswer
 

j'ai l'habitude de sketchup, donc ca va assez vite pour la pièce. Par contre c'est un peu plus chiant pour les meubles ( en general je fait juste un pavé à la bonne taille)


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

n°2402370
Hermes le ​Messager
Breton Quiétiste
Posté le 03-12-2021 à 11:15:43  profilanswer
 

koskoz a écrit :

Vous avez un site/soft facile de prise en main pour modéliser rapidement une pièce avec ses différents éléments : portes, fenêtres, mobilier, etc. ?


 
http://www.sweethome3d.com


---------------
Expert en expertises
n°2402371
masklinn
í dag viðrar vel til loftárása
Posté le 03-12-2021 à 11:16:34  profilanswer
 

hephaestos a écrit :

Ok :jap:
 
J'ai rien trouvé qui ressemble à ça dans https://ericniebler.github.io/range-v3/


Je suis pas surpris ce sont des HoF assez avancées, et qui ont fondamentalement rien à voire avec les streams / ranges (enfin iterate si: ça en produit un, donc il faut chercher dans les sources pas les adaptateurs).  
 
Je pensais qu’il y avait iterate dans la stdlib rust mais je le retrouve pas, juste std::iter::successors (qui est similaire mais sort un itérateur terminable, donc c’est un superset de iterate).
 
edit: il est dans itertools, j’ai du confondre: https://docs.rs/itertools/latest/it [...] erate.html


Message édité par masklinn le 03-12-2021 à 11:21:39

---------------
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°2402372
Devil'sTig​er
Posté le 03-12-2021 à 11:35:36  profilanswer
 

Bon ca y est j'en ai déja marre de l'aoc :D La partie 2 lo, beaucoup trop de texte :D

n°2402373
gfive
Posté le 03-12-2021 à 11:37:05  profilanswer
 

J4en chie aussi.
 
Pour la partie 2, mon code marche en debug mais pas sans debug [:tinostar]


---------------
Tous les sud africains sont ségrégationistes, à part Ted. (P. Desproges)
n°2402374
masklinn
í dag viðrar vel til loftárása
Posté le 03-12-2021 à 11:38:41  profilanswer
 

gfive a écrit :

J4en chie aussi.
 
Pour la partie 2, mon code marche en debug mais pas sans debug [:tinostar]



 
Tu fais l’AoC en C(++)?


---------------
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°2402375
ixemul
Nan mais sans blague ! ⚡
Posté le 03-12-2021 à 11:43:24  profilanswer
 

gfive a écrit :

J4en chie aussi.
 
Pour la partie 2, mon code marche en debug mais pas sans debug [:tinostar]


 
J'ai géré à base de string bêtes mais ça marche... 0 optim, 0 brain, le but était d'aller au plus vite à resoudre dans ma leader board :D
 

Spoiler :


        public string Solve2ndPart()
        {
            var input = Utils.ReadInput("InputDay03.txt" );
            var diagnostic = input.Split(Environment.NewLine);
 
            var oxygenGeneratorRating = 0;
            var co2ScrubberRating = 0;
 
            var diagWindow = diagnostic;
            var pos = 0;
            while (diagWindow.Length > 1)
            {
                diagWindow = GetSubDiag(diagWindow, pos++, true, true);
            }            
            oxygenGeneratorRating = Convert.ToInt32(diagWindow[0], 2);
 
            diagWindow = diagnostic;
            pos = 0;
            while (diagWindow.Length > 1)
            {
                diagWindow = GetSubDiag(diagWindow, pos++, false, false);
            }
            co2ScrubberRating = Convert.ToInt32(diagWindow[0], 2);
 
            var result = oxygenGeneratorRating * co2ScrubberRating;
            return $"{typeof(Day03).Name}:2ndPart Part:{result}";
        }
 
        private string[] GetSubDiag(string[] diagWindow, int diagPos, bool oneOnEquals, bool getActiveBits)
        {
            var result0 = new List<string>();
            var result1 = new List<string>();
 
            diagWindow.ToList().ForEach(diag =>
            {
                if (diag[diagPos] == '1')
                    result1.Add(diag);
                else
                    result0.Add(diag);
            });
 
 
            if (result1.Count == result0.Count)
               return oneOnEquals ? result1.ToArray() : result0.ToArray();
 
 
            if (getActiveBits)
                return result1.Count > result0.Count ? result1.ToArray() : result0.ToArray();
            else
                return result1.Count > result0.Count ? result0.ToArray() : result1.ToArray();
 
 
        }


 
Et un petit truc bien porky pour la 1stPart :
 

Code :
  1. var epsylonRate = gamaRate.Replace("0", "i" ).Replace("1", "0" ).Replace("i", "1" );
  2.             int gama = Convert.ToInt32(gamaRate, 2);
  3.             int epsylon = Convert.ToInt32(epsylonRate, 2);


 
 [:cerveau goret]


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
n°2402376
Devil'sTig​er
Posté le 03-12-2021 à 11:49:07  profilanswer
 

ixemul a écrit :


Et un petit truc bien porky pour la 1stPart :
 

Code :
  1. var epsylonRate = gamaRate.Replace("0", "i" ).Replace("1", "0" ).Replace("i", "1" );
  2.             int gama = Convert.ToInt32(gamaRate, 2);
  3.             int epsylon = Convert.ToInt32(epsylonRate, 2);


 
 [:cerveau goret]


J'ai pas encore fini la part 2, mais ma facon de faire la part 1  [:delarue5]  
 

Code :
  1. // Fucking ugly... Convert vec of u32 to "binary string" then to an isize (kind of u32) then to u64... Meh.
  2. let gamma_rate: u64 = isize::from_str_radix(&result.iter().fold(0, |acc, elem| acc * 10 + elem).to_string(), 2).unwrap_or(0) as u64;
  3. let epsilon_rate: u64 = isize::from_str_radix(&result.iter().fold(0, |acc, elem| acc * 10 + if elem == &0 { 1 } else { 0 }).to_string(), 2).unwrap_or(0) as u64;


 
Ca passe  [:julm3]

Message cité 2 fois
Message édité par Devil'sTiger le 03-12-2021 à 11:49:22
n°2402377
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 03-12-2021 à 11:49:10  profilanswer
 

Devil'sTiger a écrit :

Bon ca y est j'en ai déja marre de l'aoc :D La partie 2 lo, beaucoup trop de texte :D


 
Un peu pareil :D  
Et pour la partie 1 en C++ dur de faire un truc élégant car std::bitset est différent  [:takezebest] et ne propose pas d'itérateurs, donc faut souvent passer par de la string :/  
 

Spoiler :


#include <algorithm>
#include <array>
#include <bitset>
#include <iostream>
#include <iterator>
#include <numeric>
#include <string>
#include <vector>
using namespace std;
 
int main() {
    constexpr const size_t width = 12;
 
    vector<string> numbers;
    std::copy(
        std::istream_iterator<string>(std::cin),  
        std::istream_iterator<string>(),  
        std::back_inserter(numbers)
    );
 
    array<int, width> histogram = accumulate(begin(numbers), end(numbers), array<int, width>{},  
        [](auto histo, const auto& bits) {  
            for (auto i = 0; i < bits.size(); i++) { histo[i] += (bits[i] == '1') ? 1 : 0; }
            return histo;
        }
    );
 
    string gamma(width, '0');
    transform(begin(histogram), end(histogram), begin(gamma),  
        [&](auto i) { return (i < numbers.size()/2) ? '0' : '1'; }
    );
     
    int g = bitset<width>(gamma).to_ulong();
    int e = bitset<width>(gamma).flip().to_ulong();
 
    cout << g * e << endl;
}


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°2402378
ixemul
Nan mais sans blague ! ⚡
Posté le 03-12-2021 à 11:54:23  profilanswer
 

Devil'sTiger a écrit :


J'ai pas encore fini la part 2, mais ma facon de faire la part 1  [:delarue5]  
 

Code :
  1. // Fucking ugly... Convert vec of u32 to "binary string" then to an isize (kind of u32) then to u64... Meh.
  2. let gamma_rate: u64 = isize::from_str_radix(&result.iter().fold(0, |acc, elem| acc * 10 + elem).to_string(), 2).unwrap_or(0) as u64;
  3. let epsilon_rate: u64 = isize::from_str_radix(&result.iter().fold(0, |acc, elem| acc * 10 + if elem == &0 { 1 } else { 0 }).to_string(), 2).unwrap_or(0) as u64;


 
Ca passe  [:julm3]


 
classe  [:clooney44]  


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
n°2402379
masklinn
í dag viðrar vel til loftárása
Posté le 03-12-2021 à 11:56:29  profilanswer
 

Devil'sTiger a écrit :


J'ai pas encore fini la part 2, mais ma facon de faire la part 1  [:delarue5]  
 
// Fucking ugly... Convert vec of u32 to "binary string" then to an isize (kind of u32) then to u64... Meh.


isize c’est i64 pas u32 (techniquement c’est une valeur signée de la même taille que usize, qui correspond à la taille de pointeur de la machine).
 
Et pourquoi tu fais pas juste des shifts?
 
Et je comprend pas non plus pourquoi tu parses en isize avant de caster en u64.

Message cité 1 fois
Message édité par masklinn le 03-12-2021 à 12:01: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°2402380
Devil'sTig​er
Posté le 03-12-2021 à 12:01:04  profilanswer
 

masklinn a écrit :


isize c’est i64 pas u32 (techniquement c’est une valeur signée de la même taille que usize, qui correspond à la taille de pointeur de la machine).
 
Et pourquoi tu fais pas juste des shifts?


Parce que je sais po faire :D Je fais des webservices avec Rust moi monsieur, les conversions et les trucs binaires, tres peu pour moi :D
 
En gros je bouffe surtout du serde et des strings/u64 plus qu'autre chose :D et tres rarement des conversions. Celle la je suis allé la chercher loin :D
 
 
Bon sinon je vois ce qu'il faut faire pour la partie 2, mais la flemme me gagne c'est relou :D

n°2402381
DDT
Few understand
Posté le 03-12-2021 à 12:01:33  profilanswer
 

koskoz a écrit :

Vous avez un site/soft facile de prise en main pour modéliser rapidement une pièce avec ses différents éléments : portes, fenêtres, mobilier, etc. ?


https://floorplanner.com


---------------
click clack clunka thunk
n°2402382
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 03-12-2021 à 12:02:42  profilanswer
 

J'ai fait ce que j'ai pu pour la partie 2, mais je vois pas spécialement de façon de simplifier...
 

Spoiler :


auto ox = lines;
for (int i = 0; ox.size() > 1; ++i) {
    auto n = count_if(ox, [i](const auto &l) { return l[i] == '1'; });
    bool more_ones = n >= ox.size() - n;
    ox = ox | filter([i, more_ones](const std::string &l) {
        return more_ones ? l[i] == '1' : l[i] == '0';
    });
}
 
auto co2 = lines;
for (int i = 0; co2.size() > 1; ++i) {
    auto n = count_if(co2, [i](const auto &l) { return l[i] == '1'; });
    bool more_ones = n >= co2.size() - n;
    co2 = co2 | filter([i, more_ones](const std::string &l) {
        return more_ones ? l[i] == '0' : l[i] == '1';
    });
}
 
std::cout << stoi(ox[0], nullptr, 2) * stoi(co2[0], nullptr, 2) << std::endl;

n°2402383
masklinn
í dag viðrar vel til loftárása
Posté le 03-12-2021 à 12:06:35  profilanswer
 

Devil'sTiger a écrit :


Parce que je sais po faire :D Je fais des webservices avec Rust moi monsieur, les conversions et les trucs binaires, tres peu pour moi :D


Code :
  1. input.fold(0, |acc, &e| acc << 1 | e)


Tu peux aussi utiliser “+ e” pour être plus clair mais dans ce cas il faut “(acc << 1) + e”, parce-que sinon la précédence te pose des problèmes.

Message cité 1 fois
Message édité par masklinn le 03-12-2021 à 12:07:07

---------------
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°2402384
masklinn
í dag viðrar vel til loftárása
Posté le 03-12-2021 à 12:11:52  profilanswer
 

Devil'sTiger a écrit :


Parce que je sais po faire :D Je fais des webservices avec Rust moi monsieur, les conversions et les trucs binaires, tres peu pour moi :D
 
En gros je bouffe surtout du serde et des strings/u64 plus qu'autre chose :D et tres rarement des conversions. Celle la je suis allé la chercher loin :D
 
 
Bon sinon je vois ce qu'il faut faire pour la partie 2, mais la flemme me gagne c'est relou :D


Et

Code :
  1. if elem == &0 { 1 } else { 0 }


C’est elem ^ 1 [:dawa]


Message édité par masklinn le 03-12-2021 à 12:12:27

---------------
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°2402385
Devil'sTig​er
Posté le 03-12-2021 à 12:12:49  profilanswer
 

masklinn a écrit :


Code :
  1. input.fold(0, |acc, &e| acc << 1 | e)


Tu peux aussi utiliser “+ e” pour être plus clair mais dans ce cas il faut “(acc << 1) + e”, parce-que sinon la précédence te pose des problèmes.


Bon a savoir  :jap:  
 
Cela dit, ce code est tellement beau que cela me parait bien trop propre comme alternative  [:julm3]

n°2402386
ratibus
Posté le 03-12-2021 à 12:18:02  profilanswer
 

Flaie a écrit :

J03 done, total time: 7min, 19min.
Y'a moyen d'aller plus vite en étant moins la tête dans le cul sur la partie 1, comme hier.
 
Mon code est sale, maintenant viens la partie préférée où je peux le rendre joli :D


7 et 31 minutes : https://github.com/ratibus/adventof [...] 021/day_03
 
J'ai merdé la lecture d'une ligne de log dans la partie 2 qui me faisait penser que j'avais pas bon alors que si :D J'aurais pu gratter 10 minutes, pas beaucoup +.

n°2402387
Kenshineuh
Posté le 03-12-2021 à 12:22:48  profilanswer
 

J'ai fini le jour 3 aussi, j'en ai chier en JS. Je pense que j'ai codé n'importe comment. :D

n°2402388
Flaie
Posté le 03-12-2021 à 12:27:47  profilanswer
 

Ma solution en Kotlin un peu plus propre:
 

Spoiler :

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

n°2402389
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 03-12-2021 à 12:37:05  profilanswer
 

https://twitter.com/FLAHAULT/status/1466724443296874498  ha oui quand-même :o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°2402390
Dion
Acceuil
Posté le 03-12-2021 à 12:40:31  profilanswer
 

Dion a écrit :

Dernier comm. Google :

Citation :

Votre commande est en cours d'acheminement Nov 28, 2021, 8:01 AM
Commande effectuée  nov. 19  
Commande expédiée    nov. 28  
Livraison    déc. 01–02


 
Dernier statut DHL :

Citation :


Announced
Shipment not yet received or processed    Nov 28 5:32 AM


 
Je sens que mon Stadia va être un peu en retard [:dawa]


En // j'ai chronopost qui va me livrer un paquet aujourd'hui que j'ai déjà reçu mardi [:dawa]
Ils ont même une photo de ma signature sur le paquet... Que faire ?  [:cerveau paysan]


---------------
It is not called show art
n°2402391
Kenshineuh
Posté le 03-12-2021 à 12:42:51  profilanswer
 

ratibus a écrit :


7 et 31 minutes : https://github.com/ratibus/adventof [...] 021/day_03

 

J'ai merdé la lecture d'une ligne de log dans la partie 2 qui me faisait penser que j'avais pas bon alors que si :D J'aurais pu gratter 10 minutes, pas beaucoup +.

 

La mienne en JS. J'ai mis un peu plus de 25 minutes pour les deux. Y'a surement mieux à faire, je verrais ce soir pour optimiser.
Edit: Et je viens de voir mes noms de méthode qu'il faut changer aussi. [:ddr555]
Mais c'est l'heure de manger. :o

 
Spoiler :


https://img.super-h.fr/images/54be05cec2182154d43f752586444a1d.md.png


Message édité par Kenshineuh le 03-12-2021 à 14:05:06
n°2402392
ratibus
Posté le 03-12-2021 à 12:59:31  profilanswer
 

Ydalb a écrit :

Punaise, j'en ai bavé pour le jour 3, j'aime pas manipuler les bits :o
 
J'attends de voir les solutions des autres PHP pour me faire du mal [:tinostar]


J'ai pas considéré que c'était des bits, ça marche aussi :D
J'ai pas vu de trick évident en utilisant des bitmasks & co qui m'auraient fait gagner du temps.
Du coup la partie 2 ça donne ça : https://github.com/ratibus/adventof [...] lve_02.php
C'est factorisable et je pense que je pourrais simplifier les 2 gros if tout moches :D


Message édité par ratibus le 03-12-2021 à 13:00:27
n°2402393
Devil'sTig​er
Posté le 03-12-2021 à 13:07:58  profilanswer
 

Bon ca passe mais c'est tres laid, alors pour que ce soit plus perf j'ai foutu des [inline(always)] partout, parce que quand ton algo est degeu, demande au compilo de te trouver une solution qui coute pas cher et qui refactor pas le code [:sharliecheen:3]
 

Spoiler :


#[inline(always)]
fn count_column(input: &Vec<Vec<u64>>, column_number: usize) -> (usize, usize) {
    let number_of_zeros: usize = input.iter().filter(|c| c.get(column_number) == Some(&0)).count();
    (number_of_zeros, input.len() - number_of_zeros)
}
 
#[inline(always)]
fn to_keep(input: &Vec<Vec<u64>>, position: usize, mut max: usize, keep_zeros: bool) -> Vec<Vec<u64>> {
    input.iter().filter(|c| match c.get(position) {
        Some(value) => if max > 0 && ((keep_zeros && value == &0) || (!keep_zeros && value == &1)) {
            max -= 1;
            true
        } else {
            false
        },
        None => false
    }).map(|c| c.clone()).collect()
}
 
fn aoc_03_part2(input: &Vec<Vec<u64>> ) -> (u64, u64) {
    // Oxygen bullshit
    let mut result: Vec<Vec<u64>> = input.clone();
    // To make sure we never read something not existing...
    let min_column_size: usize = input.iter().map(|row| row.len()).min().unwrap_or(0);
    for i in 0..min_column_size {
        let zero_and_ones: (usize, usize) = count_column(&result, i);
        if zero_and_ones.0 > zero_and_ones.1 {
            result = to_keep(&result, i, zero_and_ones.0, true);
        } else {
            result = to_keep(&result, i, zero_and_ones.1, false);
        }
 
        if result.len() <= 1 {
            break;
        }
    }
    let oxygen_rate: u64 = result.get(0).unwrap_or(&vec![0]).iter().fold(0, |acc, &e| acc << 1 | e);
 
    // CO2 bullshit
    let mut result: Vec<Vec<u64>> = input.clone();
    // To make sure we never read something not existing...
    for i in 0..min_column_size {
        let zero_and_ones: (usize, usize) = count_column(&result, i);
        if zero_and_ones.0 <= zero_and_ones.1 {
            result = to_keep(&result, i, zero_and_ones.0, true);
        } else {
            result = to_keep(&result, i, zero_and_ones.1, false);
        }
 
        if result.len() <= 1 {
            break;
        }
    }
    let co2_scrubber: u64 = result.get(0).unwrap_or(&vec![0]).iter().fold(0, |acc, &e| acc << 1 | e);
 
    (oxygen_rate, co2_scrubber)
}
 
fn aoc_03_part1(input: &Vec<Vec<u64>> ) -> (u64, u64) {
    // To make sure we never read something not existing...
    let min_column_size: usize = input.iter().map(|row| row.len()).min().unwrap_or(0);
    let mut number_of_zeros: usize;
    let mut result: Vec<u64> = Vec::with_capacity(min_column_size);
 
    for i in 0..min_column_size {
        number_of_zeros = count_column(input, i).0;
        // If number of zero is above half of the vector...
        result.push(if 2 * number_of_zeros > input.len() { 0 } else { 1 });
    }
 
    let gamma_rate: u64 = result.iter().fold(0, |acc, &e| acc << 1 | e);
    let epsilon_rate: u64 = result.iter().map(|c| c ^ 1).fold(0, |acc, e| acc << 1 | e);
 
    (gamma_rate, epsilon_rate)
}
 
fn main() {
    // Get the data
    let s: Vec<Vec<u64>> = include_str!("../input.txt" ).lines().filter_map(|s| {
        Some(s.chars().filter_map(|c| c.to_digit(10)).map(|c| c as u64).collect::<Vec<u64>>())
    }).collect::<Vec<Vec<u64>>>();
    // Part 1
    let result = aoc_03_part1(&s);
    println!("Gamma {} Epsilon {} Result {}", result.0, result.1, result.0 * result.1);
    // Part 2
    let result = aoc_03_part2(&s);
    println!("Oxygen {} CO2 {} Result {}", result.0, result.1, result.0 * result.1);
}

Message cité 1 fois
Message édité par Devil'sTiger le 03-12-2021 à 13:09:09
n°2402394
Kenshineuh
Posté le 03-12-2021 à 13:22:29  profilanswer
 

Voulez pas mettre des pastebin ou des screen plutot que du code pourrie comme ça ? :o

n°2402395
skeye
Posté le 03-12-2021 à 13:25:01  profilanswer
 

Je me suis fait avoir un moment sur la partie 2 à cause d'une optimisation light que j'avais fait sur la 1 (puis oubliée. Ca m'apprendra à pas faire les 2 parties dans la foulée). :o

 

[edit] pastebin, ok. :o

 

...mais c'est bien on commence à faire du récursif. :o

Message cité 1 fois
Message édité par skeye le 03-12-2021 à 13:27:47

---------------
Can't buy what I want because it's free -
n°2402396
masklinn
í dag viðrar vel til loftárása
Posté le 03-12-2021 à 13:32:39  profilanswer
 

Devil'sTiger a écrit :

Bon ca passe mais c'est tres laid, alors pour que ce soit plus perf j'ai foutu des [inline(always)] partout, parce que quand ton algo est degeu, demande au compilo de te trouver une solution qui coute pas cher et qui refactor pas le code [:sharliecheen:3]


Si j’en crois godbolt le seul truc que le compilo a pas trop envie d’inliner c’est to_keep :D
 
Accessoirement on voit les gens qui utilisent pas clippy, parce-qu’il se serait clairement plaint de tes `&Vec<_>`, et du `map(clone)` fait à la main (il y a un adaptateur `Iterator::cloned`).

Message cité 2 fois
Message édité par masklinn le 03-12-2021 à 13:35:23

---------------
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°2402397
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 03-12-2021 à 13:40:50  profilanswer
 

hephaestos a écrit :

J'ai fait ce que j'ai pu pour la partie 2, mais je vois pas spécialement de façon de simplifier...
 

Spoiler :


auto ox = lines;
for (int i = 0; ox.size() > 1; ++i) {
    auto n = count_if(ox, [i](const auto &l) { return l[i] == '1'; });
    bool more_ones = n >= ox.size() - n;
    ox = ox | filter([i, more_ones](const std::string &l) {
        return more_ones ? l[i] == '1' : l[i] == '0';
    });
}
 
auto co2 = lines;
for (int i = 0; co2.size() > 1; ++i) {
    auto n = count_if(co2, [i](const auto &l) { return l[i] == '1'; });
    bool more_ones = n >= co2.size() - n;
    co2 = co2 | filter([i, more_ones](const std::string &l) {
        return more_ones ? l[i] == '0' : l[i] == '1';
    });
}
 
std::cout << stoi(ox[0], nullptr, 2) * stoi(co2[0], nullptr, 2) << std::endl;



 
Tu peux ptet factoriser un peu  

Spoiler :


    auto myfilter = [](auto numbers, bool keepMajority) {
        for (int i = 0; numbers.size() > 1; ++i) {
            auto n = r::count_if(numbers, [i](const auto &l) { return l[i] == '1'; });
            const bool more_ones = n >= numbers.size() - n;
            const bool keep_ones = (keepMajority && more_ones) || (!keepMajority && !more_ones);            
            auto criteria = [&i, keep_ones](const std::string &l) {
                return l[i] == (keep_ones ? '1' : '0');
            };
            numbers = numbers | rv::filter(criteria) | r::to<vector<std::string>>;
        }
        return numbers;
    };
 
    auto ox  = myfilter(numbers, true);
    auto co2 = myfilter(numbers, false);


mais c'est pas ouf comme gain non plus.


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°2402398
Devil'sTig​er
Posté le 03-12-2021 à 13:43:48  profilanswer
 

Kenshineuh a écrit :

Voulez pas mettre des pastebin ou des screen plutot que du code pourrie comme ça ? :o


Le chef d'oeuvre s'apprécie mieux sur un Odyssey G9  [:julm3]  
 

masklinn a écrit :


Si j’en crois godbolt le seul truc que le compilo a pas trop envie d’inliner c’est to_keep :D
 
Accessoirement on voit les gens qui utilisent pas clippy, parce-qu’il se serait clairement plaint de tes `&Vec<_>`, et du `map(clone)` fait à la main (il y a un adaptateur `Iterator::cloned`).


 
Mais c'est que j'ai des choses a apprendre  [:wark0] Je vais regarder ca  :love:  
 

n°2402399
flo850
moi je
Posté le 03-12-2021 à 13:50:11  profilanswer
 

Devil'sTiger a écrit :


Le chef d'oeuvre s'apprécie mieux sur un Odyssey G9  [:julm3]  
 


en mode vertical :o


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

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  24415  24416  24417  ..  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)