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

 

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

 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  23677  23678  23679  ..  27003  27004  27005  27006  27007  27008
Auteur Sujet :

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

n°2370438
Hermes le ​Messager
Breton Quiétiste
Posté le 06-12-2020 à 16:01:59  profilanswer
 

Reprise du message précédent :

neo0 a écrit :


Au moins j'aurai comblé mes lacunes(et je continue à apprendre) mais c'est frustrant de pas pouvoir développer quotidiennement..  


 
Si un jour tu ne continues pas à apprendre, tu pourras nous le faire savoir stp.


---------------
Expert en expertises
mood
Publicité
Posté le 06-12-2020 à 16:01:59  profilanswer
 

n°2370439
Profil sup​primé
Posté le 06-12-2020 à 16:02:59  answer
 

Vous dites ?
Von Neuman !
Obsolète ?

n°2370441
Kenshineuh
Posté le 06-12-2020 à 17:00:08  profilanswer
 

J'ai fini la partie 1 de l'AoC 6 en 5 minutes, mais la 2 m'a pris un temps fou et j'ai un code bien dégueu. :/

n°2370442
Profil sup​primé
Posté le 06-12-2020 à 17:01:53  answer
 

Qui joue à loran ?
 
Je fini le jeu avec 1 vie en une fois.

n°2370443
el muchach​o
Comfortably Numb
Posté le 06-12-2020 à 17:05:29  profilanswer
 

Kenshineuh a écrit :

J'ai fini la partie 1 de l'AoC 6 en 5 minutes, mais la 2 m'a pris un temps fou et j'ai un code bien dégueu. :/


Bizarre, parce que la partie 2 n'est pas plus compliquée que la 1, souvent même plus facile.

 

Pour moi par ex, il n'y a qu'une ligne de différence entre les 2 parties.

Code :
  1. import itertools
  2. from collections import Counter
  3.  
  4. lines = open("puzzle6.txt","r" ).readlines()
  5.  
  6. print("-----------Part 1-----------" )
  7. groups, group  = [], []
  8. # had to add 2 empty lines at the end of the txt file else the count is off by 1
  9. for line in lines:
  10.    if line in ['\n', '\r\n']:
  11.        groups.append(group)
  12.        group = []
  13.    else:
  14.        group.append(line.strip())
  15.  
  16. def count_group(group):
  17.    words = [list(word) for word in group]
  18.    letters = list(itertools.chain(*words))
  19.    c = Counter(letters)
  20.    return sum([len(c.items())])
  21.  
  22. print(sum([count_group(g) for g in groups]))
  23.  
  24. print("-----------Part 2-----------" )
  25.  
  26. def count2_group(group):
  27.    l = len(group)
  28.    words = [list(word) for word in group]
  29.    letters = list(itertools.chain(*words))
  30.    count = Counter(letters)
  31.    s = sum([x == l for x in count.values()])
  32.    return s
  33.  
  34. print(sum([count2_group(g) for g in groups]))


Vous noterez que le début est buggé et ça m'a fait perdre un temps précieux. J'ai été obligé de rajouter 2 lignes vides à la fin du fichier txt pour que les dernières lignes soient prises en compte.
Et je fais des trucs inutiles comme des listes de listes que je suis obligé d'aplatir ensuite. Bref, c'est bourrin.

 

edit: pour corriger le bug, il suffit de rajouter le dernier groupe à groups en ligne 15.

Message cité 1 fois
Message édité par el muchacho le 06-12-2020 à 17:37:15

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2370444
flo850
moi je
Posté le 06-12-2020 à 17:05:55  profilanswer
 

Kenshineuh a écrit :

J'ai fini la partie 1 de l'AoC 6 en 5 minutes, mais la 2 m'a pris un temps fou et j'ai un code bien dégueu. :/

 

moi c'est pour le jour 5 que ça m'a fait ça (j'ai tout fini de rattraper ce matin)
ceci dit la première etoile du jour 6 est plus proche du oneliner que du programme :D


Message édité par flo850 le 06-12-2020 à 17:07:22

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

n°2370446
Kenshineuh
Posté le 06-12-2020 à 17:30:31  profilanswer
 

Bah du coup, j'pense que mon code est dégueu de base.

 


Part 1

Code :
  1. let count = 0;
  2. inputs.forEach((group) => {
  3.    const uniqueAnswers = new Set();
  4.    group.forEach((answers) => {
  5.        [...answers].forEach((letter) => uniqueAnswers.add(letter));
  6.    });
  7.    count += uniqueAnswers.size;
  8. });
  9.  
  10. console.log(count);
 


Part 2

Code :
  1. function findCommonElement(setA, setB) {
  2.    const common = new Set();
  3.    setB.forEach((element) => {
  4.        if (setA.has(element)) {
  5.            common.add(element);
  6.        }
  7.    });
  8.  
  9.    return common;
  10. }
  11.  
  12. let count = 0;
  13. inputs.forEach((group) => {
  14.    if (group.length === 1) {
  15.        count += group[0].length;
  16.    } else {
  17.        let uniqueAnswers = new Set();
  18.        group.forEach((answers, index) => {
  19.            if (index === 0) {
  20.                [...answers].forEach((letter) => uniqueAnswers.add(letter));
  21.            } else {
  22.                uniqueAnswers = findCommonElement(
  23.                    uniqueAnswers,
  24.                    new Set([...answers])
  25.                );
  26.            }
  27.        });
  28.        count += uniqueAnswers.size;
  29.    }
  30. });
  31.  
  32. console.log(count);
  

Edit : Du coup j'ai matté la solution des autres et ouais, y'a beaucoup plus opti. :o


Message édité par Kenshineuh le 06-12-2020 à 17:44:47
n°2370447
flo850
moi je
Posté le 06-12-2020 à 17:41:33  profilanswer
 

spoiler pour ceux qui ne l'ont pas encore fait

 
Code :
  1. Array.prototype.uniq = function() {
  2.  return this.filter((v, i) => this.indexOf(v) === i)
  3. }
  4. console.log('one star', inputs
  5.   .split("\n\n" )
  6.  .map(g => g.split("\n" ).join(''))
  7.  .map(l =>l.split('').uniq())
  8.  .reduce((a,v)=>a+v.length, 0)
  9.  )
  10.  
  11.  
  12.  
  13. // et le 2
  14. let nbByGroups = inputs
  15.  .map(group=>{
  16.    let responses = group.split("\n" )
  17.    let nbGroups = responses.length
  18.    let t = responses.join('').split('')
  19.    t.sort();
  20.    let letter ='';
  21.    let nbByLetter = 0;
  22.    let nbAllYes = 0;
  23.    for(let i=0; i < t.length; i ++){
  24.      if(t[i] === letter){
  25.        nbByLetter ++;
  26.      } else {
  27.        if(nbByLetter === nbGroups){
  28.          nbAllYes ++
  29.        }
  30.        letter=t[i]
  31.        nbByLetter = 1;
  32.      }
  33.    }
  34.    if(nbByLetter === nbGroups){
  35.      nbAllYes ++
  36.    }
  37.    return nbAllYes
  38.  })
  39.  
  40.  console.log('two stars',nbByGroups.reduce((a,v)=>a+v, 0))
 

edit : pas de spoiler finalement


Message édité par flo850 le 06-12-2020 à 17:49:42

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

n°2370448
Flaie
Posté le 06-12-2020 à 17:43:28  profilanswer
 

En kotlin avec quelques extensions custom

Spoiler :

https://rehost.diberie.com/Uploads/0/20201206-180217-ec03cf80-5e68-4f4f-9e27-c5c8eb934558.0.res.jpg


Message édité par Flaie le 06-12-2020 à 18:09:51
n°2370449
masklinn
í dag viðrar vel til loftárása
Posté le 06-12-2020 à 17:43:31  profilanswer
 

el muchacho a écrit :


Bizarre, parce que la partie 2 n'est pas plus compliquée que la 1, souvent même plus facile.

 

Pour moi par ex, il n'y a qu'une ligne de différence entre les 2 parties.

Code :
  1. import itertools
  2. from collections import Counter
  3.  
  4. lines = open("puzzle6.txt","r" ).readlines()
  5.  
  6. print("-----------Part 1-----------" )
  7. groups, group  = [], []
  8. # had to add 2 empty lines at the end of the txt file else the count is off by 1
  9. for line in lines:
  10.    if line in ['\n', '\r\n']:
  11.        groups.append(group)
  12.        group = []
  13.    else:
  14.        group.append(line.strip())
  15.  
  16. def count_group(group):
  17.    words = [list(word) for word in group]
  18.    letters = list(itertools.chain(*words))
  19.    c = Counter(letters)
  20.    return sum([len(c.items())])
  21.  
  22. print(sum([count_group(g) for g in groups]))
  23.  
  24. print("-----------Part 2-----------" )
  25.  
  26. def count2_group(group):
  27.    l = len(group)
  28.    words = [list(word) for word in group]
  29.    letters = list(itertools.chain(*words))
  30.    count = Counter(letters)
  31.    s = sum([x == l for x in count.values()])
  32.    return s
  33.  
  34. print(sum([count2_group(g) for g in groups]))


Vous noterez que le début est buggé et ça m'a fait perdre un temps précieux.
Et je fais des trucs inutiles comme des listes de listes que je suis obligé d'aplatir ensuite. Bref, c'est bourrin.


Code :
  1. lines = open("puzzle6.txt","r" ).readlines()


Pas besoin du readlines() vu que tu ne fais qu'itérer (une fois) sur les lignes, c'est ce que fait itérer sur le fichier directement.

 

& notes un piège (pas gênant ici mais peut poser problème quand tu distributes du code Python): on pourrait s'attendre à ce que `open` en mode texte utilise toujours UTF-8 par défaut, mais ça utilise locale.getpreferredencoding(False) qui peut être n'importe quelle merde quelconque (c'est l'encodage défini par LC_CTYPE), donc potentiellement absolument pas ce que tu veux. Je recommande très fortement de toujours passer un encodage explicite quand tu ouvres un fichier en mode texte.

Code :
  1. [list(word) for word in group]


listifier une chaîne est souvent pas utile, les chaînes étant des itérables sur chars.

Code :
  1. list(itertools.chain(*words))


itertools.chain.from_iterable, mais

Code :
  1. words = [list(word) for word in group]
  2.    letters = list(itertools.chain(*words))


Code :
  1. letters = ''.join(group)


ou bien

Code :
  1. letters = [letter for word in group for letter in word]


Code :
  1. sum([len(c.items())])


AKA len(c.items()) AKA len(c) :D

Code :
  1. c = Counter(letters)
  2.    return sum([len(c.items())])


Le Counter a pas vraiment d'utilité ici, un set aurait suffit.

Code :
  1. s = sum([x == l for x in count.values()])


La liste est pas nécessaire (sum marche sur des itérables), et pour le coup je suis pas fan de traiter les booléens comme des entiers, j'aurais plus utilisé

Code :
  1. s = sum(1 for x in count.values() if x == l)

Message cité 1 fois
Message édité par masklinn le 06-12-2020 à 17:44:34

---------------
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?
mood
Publicité
Posté le 06-12-2020 à 17:43:31  profilanswer
 

n°2370450
flo850
moi je
Posté le 06-12-2020 à 17:47:09  profilanswer
 

c'est propre flaie.

 

pour le 2/ je ne suis pas parti comme il faut, et après j'ai tapé dessus jusqu'a ce que ça rentre

 


edit : charset est builtin ou c'est une extension ?

Message cité 1 fois
Message édité par flo850 le 06-12-2020 à 17:48:39

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

n°2370451
masklinn
í dag viðrar vel til loftárása
Posté le 06-12-2020 à 17:49:57  profilanswer
 

Hermes le Messager a écrit :

Juste comme ça, il y en a combien parmi vous qui envisagent de passer ou de repasser sur Mac (depuis M1) quand les modèles HDG (genre 16" ou future 14" ) en seront équipés ?


J'ai limite envie de prendre un MBA, mais la connectivité limitée est un gros point noir :/


---------------
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°2370452
Profil sup​primé
Posté le 06-12-2020 à 17:53:36  answer
 

Break.
 
Documenter le code un minimum est parfois une nécessité.
Pourquoi forcer le type de fichier serait il préférable à la définition de la valeur pointée ?

n°2370453
Kenshineuh
Posté le 06-12-2020 à 18:00:27  profilanswer
 

Hermes le Messager a écrit :

Juste comme ça, il y en a combien parmi vous qui envisagent de passer ou de repasser sur Mac (depuis M1) quand les modèles HDG (genre 16" ou future 14" ) en seront équipés ?


 
 
Quand mes logiciels seront dispo + pouvoir brancher deux écrans. :o

n°2370455
ratibus
Posté le 06-12-2020 à 18:02:56  profilanswer
 

Bon j'ai fait tous les AoC cette aprem en PHP (parce que bon, il faut quand même que les vrais langages soient représentés :o).
 
J'ai mesuré le temps à partir du jour 4 (le chrono démarre au début de la lecture de l'énoncé) :
Jour 4 : 13 minutes + 15 minutes
Jour 5 : 14 minutes + 4 minutes
Jour 6 : 11 minutes + 6 minutes
 
Mais je fais du code beaucoup beaucoup + verbeux que vous :D (copier/coller direct sans édition#noShame)
 
Jour 4 fin de seconde partie :

Code :
  1. <?php
  2.  
  3. $inputFile = __DIR__.'/input.txt';
  4.  
  5. $passports = getRawPassports($inputFile);
  6.  
  7. debug($passports);
  8.  
  9. $nbValidPassports = 0;
  10. foreach ($passports as $passport) {
  11.    $rawFields = explode(' ', $passport);
  12.  
  13.    $fields = [];
  14.    foreach ($rawFields as $rawField) {
  15.        list($key, $value) = explode(':', $rawField);
  16.        $fields[$key] = $value;
  17.    }
  18.  
  19.    $isValid = isPassportValid($fields);
  20.  
  21.    if ($isValid) {
  22.        $nbValidPassports++;
  23.    }
  24. }
  25.  
  26. var_dump($nbValidPassports);
  27.  
  28. function isPassportValid($fields) {
  29.    unset($fields['cid']);
  30.    ksort($fields);
  31.  
  32.    $listFields = implode(array_keys($fields));
  33.  
  34.    if ($listFields !== 'byrecleyrhclhgtiyrpid') {
  35.        return false;
  36.    }
  37.  
  38.    /**
  39.     * byr (Birth Year) - four digits; at least 1920 and at most 2002.
  40.     * iyr (Issue Year) - four digits; at least 2010 and at most 2020.
  41.     * eyr (Expiration Year) - four digits; at least 2020 and at most 2030.
  42.     * hgt (Height) - a number followed by either cm or in:
  43.     *   If cm, the number must be at least 150 and at most 193.
  44.     *   If in, the number must be at least 59 and at most 76.
  45.     * hcl (Hair Color) - a # followed by exactly six characters 0-9 or a-f.
  46.     * ecl (Eye Color) - exactly one of: amb blu brn gry grn hzl oth.
  47.     * pid (Passport ID) - a nine-digit number, including leading zeroes.
  48.     */
  49.  
  50.    if ($fields['byr'] < 1920 || $fields['byr'] > 2002) {
  51.        return false;
  52.    }
  53.    if ($fields['iyr'] < 2010 || $fields['iyr'] > 2020) {
  54.        return false;
  55.    }
  56.    if ($fields['eyr'] < 2020 || $fields['eyr'] > 2030) {
  57.        return false;
  58.    }
  59.    $heightUnit = substr($fields['hgt'], -2);
  60.    if ($heightUnit !== 'cm' && $heightUnit !== 'in') {
  61.        return false;
  62.    }
  63.    $height = substr($fields['hgt'], 0, strlen($fields['hgt'])-2);
  64.    if ($heightUnit === 'cm' && ($height < 150 || $height > 193)) {
  65.        return false;
  66.    }
  67.    if ($heightUnit === 'in' && ($height < 59 || $height > 76)) {
  68.        return false;
  69.    }
  70.    if (!preg_match('/^#[0-9a-f]{6}$/', $fields['hcl'])) {
  71.        return false;
  72.    }
  73.    if (!in_array($fields['ecl'], ['amb', 'blu', 'brn', 'gry', 'grn', 'hzl', 'oth'], true)) {
  74.        return false;
  75.    }
  76.    if (!preg_match('/^\d{9}$/', $fields['pid'])) {
  77.        return false;
  78.    }
  79.  
  80.    return true;
  81. }
  82.  
  83. function getRawPassports($inputFile) {
  84.  
  85.    $passports = [];
  86.  
  87.    $passport = '';
  88.    foreach (file($inputFile, FILE_IGNORE_NEW_LINES) as $line) {
  89.        if (strlen($line) == 0) {
  90.            $passports[] = trim($passport);
  91.            $passport = '';
  92.            continue;
  93.        }
  94.  
  95.        $passport .= ' '.$line;
  96.    }
  97.    $passports[] = trim($passport);
  98.  
  99.    return $passports;
  100. }
  101.  
  102.  
  103. function debug($v) {
  104.    print_r($v);
  105. }


 
Jour 5 fin de seconde partie :

Code :
  1. <?php
  2.  
  3. $inputFile = __DIR__.'/input.txt';
  4.  
  5. $boardingPasses = getBoardingPasses($inputFile);
  6.  
  7. $seats = [];
  8. foreach ($boardingPasses as $boardingPass) {
  9.    $seats[$boardingPass['seat']] = $boardingPass['seat'];
  10. }
  11. asort($seats);
  12.  
  13. for ($i = 12; $i < 858; $i++) {
  14.    if (!isset($seats[$i])) {
  15.        printf("Seat %d available\n", $i);
  16.    }
  17. }
  18.  
  19.  
  20. function getBoardingPasses($inputFile) {
  21.  
  22.    $boardingPasses = [];
  23.  
  24.    foreach (file($inputFile, FILE_IGNORE_NEW_LINES) as $line) {
  25.        $line = trim($line);
  26.  
  27.        $rowStr = substr($line, 0, 7);
  28.        $rowBin = strtr($rowStr, ['B' => 1, 'F' => 0]);
  29.        $row = bindec($rowBin);
  30.  
  31.        $columnStr = substr($line, -3);
  32.        $columnBin = strtr($columnStr, ['R' => 1, 'L' => 0]);
  33.        $column = bindec($columnBin);
  34.  
  35.        $boardingPasses[] = [
  36.            'boarding_pass' => $line,
  37.            'row' => $row,
  38.            'column' => $column,
  39.            'seat' => 8 * $row + $column,
  40.        ];
  41.    }
  42.  
  43.    return $boardingPasses;
  44. }
  45.  
  46.  
  47. function debug($v) {
  48.    print_r($v);
  49. }


 
Jour 6 fin de seconde partie :

Code :
  1. <?php
  2.  
  3. // Solved in 6 minutes
  4. $inputFile = __DIR__ . '/input.txt';
  5.  
  6. $groupsAnswers = getGroupsAnswers($inputFile);
  7. debug($groupsAnswers);
  8.  
  9. $sumGroupsAnswers = 0;
  10. foreach ($groupsAnswers as $groupAnswers) {
  11.  
  12.    $singleAnswers = explode(' ', $groupAnswers);
  13.    $groupSize = count($singleAnswers);
  14.  
  15.    $nbAnswersByQuestion = [];
  16.    foreach ($singleAnswers as $singleAnswer) {
  17.        $answers = str_split($singleAnswer);
  18.        foreach ($answers as $answer) {
  19.            if (!isset($nbAnswersByQuestion[$answer])) {
  20.                $nbAnswersByQuestion[$answer] = 0;
  21.            }
  22.            $nbAnswersByQuestion[$answer]++;
  23.        }
  24.    }
  25.  
  26.    debug($groupSize);
  27.    debug($nbAnswersByQuestion);
  28.  
  29.    foreach ($nbAnswersByQuestion as $nbAnswers) {
  30.        if ($nbAnswers === $groupSize) {
  31.            $sumGroupsAnswers++;
  32.        }
  33.    }
  34. }
  35.  
  36. var_dump($sumGroupsAnswers);
  37.  
  38. function getGroupsAnswers($inputFile) {
  39.  
  40.    $groupsAnswers = [];
  41.  
  42.    $groupAnswers = '';
  43.    foreach (file($inputFile, FILE_IGNORE_NEW_LINES) as $line) {
  44.        if (strlen($line) == 0) {
  45.            $groupsAnswers[] = trim($groupAnswers);
  46.            $groupAnswers = '';
  47.            continue;
  48.        }
  49.  
  50.        $groupAnswers .= ' '.$line;
  51.    }
  52.    $groupsAnswers[] = trim($groupAnswers);
  53.    return $groupsAnswers;
  54. }
  55.  
  56. function debug($v) {
  57.    //print_r($v);
  58. }


 
Le nommage des variables dans le jour 6 laisse à désirer par contre  :whistle:

Message cité 2 fois
Message édité par ratibus le 06-12-2020 à 18:32:21
n°2370456
Flaie
Posté le 06-12-2020 à 18:09:31  profilanswer
 

flo850 a écrit :

c'est propre flaie.  
 
pour le 2/ je ne suis pas parti comme il faut, et après j'ai tapé dessus jusqu'a ce que ça rentre
 
 
edit : charset est builtin ou c'est une extension ?


Voila avec les extensions lines et charSet

Spoiler :

https://rehost.diberie.com/Uploads/0/20201206-180217-ec03cf80-5e68-4f4f-9e27-c5c8eb934558.0.res.jpg

n°2370457
Flaie
Posté le 06-12-2020 à 18:14:01  profilanswer
 

Hermes le Messager a écrit :

Juste comme ça, il y en a combien parmi vous qui envisagent de passer ou de repasser sur Mac (depuis M1) quand les modèles HDG (genre 16" ou future 14" ) en seront équipés ?


J'ai hésité, mais au final mon MBP de 2017 fait encore l'affaire, et avec la crise sanitaire je bosse chez moi et donc comme je ne fais plus de ReactNative actuellement j'ai plus besoin de dev pour iOS, et WSL2 suffit à ce dont j'ai besoin je bosse sur mon PC desktop qui dépote bien, grand écran etc, c'est plus agréable.
 
Mais c'est vrai qu'ils donnent envie, à voir pour les prochains peut-être

n°2370458
flo850
moi je
Posté le 06-12-2020 à 18:18:34  profilanswer
 

# nofilter (j'ai juste enlevé la chaine d'input)

 

Jour 1

Code :
  1. const inputs= 'grosse chaine '.split("\n" )
  2. .map(t =>parseInt(t,10))
  3. .filter(i => !!i)
  4. inputs.sort()
  5. const map = {}
  6. inputs
  7.  .forEach(i => map[i] = true)
  8.  
  9.  
  10. inputs.forEach(first=>{
  11.  let sum = 2020 - first
  12.  if(map[2020 -first ]){
  13.    console.log("1 star ", first, 2020 - first, first * (2020 - first))
  14.  }
  15.  
  16.  for(let counter = 0 ; counter < inputs.length && inputs[counter] < sum ; counter++){
  17.    if(map[2020 - first - inputs[counter]]){
  18.      console.log('2 stars', first, inputs[counter], 2020 - first - inputs[counter], (first*inputs[counter]*2020 - first - inputs[counter]))
  19.    }
  20.  }
  21. })


Jour 2

Code :
  1. const inputs= 'grosse chaine '.split("\n" ).filter(t=>!!t)
  2.  
  3. let valid = 0;
  4. for(let counter = 0; counter < inputs.length; counter ++){
  5.  const line = inputs[counter]
  6.  let [_,min, max, letter, pw ] = line.match(/^([0-9]+)-([0-9]+) ([a-z]): ([a-z]+)$/)
  7.  min = parseInt(min,10)
  8.  max = parseInt(max,10)
  9.  const nb = pw.split(letter).length - 1
  10.  if(nb >= min && nb <=max){
  11.    valid ++
  12.  }
  13. }
  14. console.log('1 star ', valid)
  15.  
  16. valid = 0;
  17. for(let counter = 0; counter < inputs.length; counter ++){
  18.  const line = inputs[counter]
  19.  let [_,min, max, letter, pw ] = line.match(/^([0-9]+)-([0-9]+) ([a-z]): ([a-z]+)$/)
  20.  min = parseInt(min,10) -1
  21.  max = parseInt(max,10) -1
  22.  const nb = pw.split(letter).length - 1
  23.  if((pw[min] === letter || pw[max] === letter) && pw[min] != pw[max]){
  24.    valid ++;
  25.  }
  26. }
  27. console.log('2 star ', valid)
 

Jour 3

Code :
  1. const inputs = 'grosse chaine '.split("\n" ).filter(t=>!!t)
  2.  
  3. var pattern = inputs.map(line=>{
  4.  return line.split('').map(c => c ==='#')
  5. })
  6. let x = 0, y= 0 , yMax = inputs.length
  7. let impacts = 0
  8. while(y < yMax){
  9.  if(pattern[y][x]){
  10.    impacts ++
  11.  }
  12.  x = (x+3) % pattern[y].length
  13.  y += 1
  14. }
  15.  
  16. console.log('1 star', impacts)
  17. impacts = [];
  18. [{dx:1,dy:1},{dx:3,dy:1},{dx:5, dy:1},{dx:7, dy:1},{dx:1,dy:2}].forEach(({dx,dy}, index) => {
  19.  let x = 0, y= 0 , yMax = inputs.length
  20.  impacts[index] = 0
  21.  while(y < yMax){
  22.    if(pattern[y][x]){
  23.      impacts[index] ++
  24.    }
  25.    x = (x+dx) % pattern[y].length
  26.    y += dy
  27.  }
  28. });
  29. console.log('2 star',impacts.reduce((p,c)=>p*c,1))
 

Jour 4 part 2 (j'ai pas séparé la 1)

Code :
  1. const inputs= 'grosse chaine ' .split("\n\n" )
  2.  .map(lines => lines.split("\n" ).join(' '))
  3.  
  4. const fields = {
  5.   byr: str =>{
  6.     return str.length === 4 && parseInt(str, 10) >= 1920 && parseInt(str, 10) <= 2002
  7.   },
  8.   iyr: str=>{
  9.    return str.length === 4 && parseInt(str, 10) >= 2010 && parseInt(str, 10) <= 2020
  10.   },
  11.   eyr: str=>{
  12.    return str.length === 4 && parseInt(str, 10) >= 2020 && parseInt(str, 10) <= 2030
  13.   },
  14.   hgt: str => {
  15.     if(str.length < 4){
  16.       return false
  17.     }
  18.     let unit = str.substr(str.length - 2, 2)
  19.     let nb = parseInt(str.substr(0, str.length - 2))
  20.     switch(unit){
  21.      case 'cm':
  22.        return nb >= 150 && nb <= 193
  23.       case 'in':
  24.         return nb >= 59 && nb <= 76
  25.        
  26.     }
  27.     return false
  28.   },
  29.   hcl: str=>{
  30.    return !!str.match(/^\#[0-9,a-f]{6}$/)
  31.   },
  32.   ecl: str =>{
  33.    return ['amb','blu','brn','gry','grn','hzl','oth'].indexOf(str) >= 0
  34.   },
  35.   pid: str=> {
  36.     return !!str.match(/^[0-9]{9}$/)
  37.   },
  38.  cid: false
  39. }
  40. let valid = 0;
  41. let checks = []
  42. let nbMandatory =  Object
  43. .keys(fields)
  44. .filter(f => fields[f])
  45. .length
  46. let ok = 0
  47.  
  48.  
  49. inputs.forEach(line=>{
  50.  
  51.  let tokens = line.split(' ')
  52.  tokens.sort()
  53.  let founds = tokens
  54.    .filter(token => {
  55.      const [field,val] = token.split(':');
  56.      if(!fields[field]){
  57.        return false
  58.      }
  59.      const res = fields[field](val)
  60.      if(res){
  61.        if(!checks[field]){
  62.          checks[field] = {}
  63.        }
  64.        if(!checks[field][val]){
  65.          checks[field][val] = 1
  66.        }
  67.        checks[field][val] ++
  68.      }
  69.      return res
  70.    })
  71.  
  72.  if(founds.length === nbMandatory){
  73.    ok ++    
  74.  
  75.  }
  76. })
  77.  
  78. Object.keys(checks).forEach(k=>{
  79.   checks[k] = Object.keys(checks[k])
  80.    checks[k].sort()
  81. })
  82. console.log('2star',ok)
 

Jour 5

Code :
  1. const inputs= 'grosse chaine '.split("\n" )
  2. .filter(t=>!!t)
  3.  
  4. const computeMap = (base, remainingDepth, letters)=>{
  5.  let subMap = []
  6.  if(!remainingDepth){
  7.    return [base]
  8.  }
  9.  letters.forEach(letter =>{
  10.    subMap = subMap.concat(computeMap(base+letter, remainingDepth - 1, letters))
  11.  
  12.  })
  13.  return subMap
  14. }
  15. let ROWS = 7, COLS = 3
  16.  
  17. let rows = computeMap('', ROWS, ['F','B'])
  18. let cols = computeMap('', COLS, ['L','R'])
  19. let max = 0;
  20. inputs.forEach(line=>{
  21.  let row = rows.indexOf(line.substr(0,ROWS))
  22.  let col = cols.indexOf(line.substr(ROWS,COLS))
  23.  let seatId = row * 8 + col
  24.  max = Math.max(max,  seatId )
  25.  console.log(line, rows.indexOf(line.substr(0,ROWS)) , cols.indexOf(line.substr(ROWS,COLS)))
  26. })
  27.  
  28.  
  29. console.log('one star  ', max)
  30. inputs.sort()
  31. let map = {}
  32. inputs.forEach(line=>{
  33.  let row = rows.indexOf(line.substr(0,ROWS))
  34.  let col = cols.indexOf(line.substr(ROWS,COLS))
  35.  let seatId = row * 8 + col
  36.  map[seatId] = line
  37. })
  38. ids = Object.keys(map)
  39. ids.sort((a,b)=>a-b)
  40. let prec = null
  41. ids.forEach(id => {
  42.  if(id-prec !=1 && prec !== null){
  43.    console.log('2star' , id -1)
  44.  }
  45.  prec = id
  46. })


Message édité par flo850 le 06-12-2020 à 18:18:59

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

n°2370459
ratibus
Posté le 06-12-2020 à 18:21:33  profilanswer
 

Vous démarrez le chrono avant ou après la lecture de l'énoncé ? :D


---------------
Mon blog
n°2370460
Flaie
Posté le 06-12-2020 à 18:24:31  profilanswer
 

ratibus a écrit :

Vous démarrez le chrono avant ou après la lecture de l'énoncé ? :D


Avant personnellement vu que je démarre à 6h du matin quand le challenge commence :whistle:


Message édité par Flaie le 06-12-2020 à 18:24:52
n°2370461
el muchach​o
Comfortably Numb
Posté le 06-12-2020 à 18:28:09  profilanswer
 

masklinn a écrit :


Code :
  1. lines = open("puzzle6.txt","r" ).readlines()


Pas besoin du readlines() vu que tu ne fais qu'itérer (une fois) sur les lignes, c'est ce que fait itérer sur le fichier directement.
 
& notes un piège (pas gênant ici mais peut poser problème quand tu distributes du code Python): on pourrait s'attendre à ce que `open` en mode texte utilise toujours UTF-8 par défaut, mais ça utilise locale.getpreferredencoding(False) qui peut être n'importe quelle merde quelconque (c'est l'encodage défini par LC_CTYPE), donc potentiellement absolument pas ce que tu veux. Je recommande très fortement de toujours passer un encodage explicite quand tu ouvres un fichier en mode texte.

Code :
  1. [list(word) for word in group]


listifier une chaîne est souvent pas utile, les chaînes étant des itérables sur chars.

Code :
  1. list(itertools.chain(*words))


itertools.chain.from_iterable, mais

Code :
  1. words = [list(word) for word in group]
  2.    letters = list(itertools.chain(*words))


Code :
  1. letters = ''.join(group)


ou bien

Code :
  1. letters = [letter for word in group for letter in word]


Code :
  1. sum([len(c.items())])


AKA len(c.items()) AKA len(c) :D

Code :
  1. c = Counter(letters)
  2.    return sum([len(c.items())])


Le Counter a pas vraiment d'utilité ici, un set aurait suffit.

Code :
  1. s = sum([x == l for x in count.values()])


La liste est pas nécessaire (sum marche sur des itérables), et pour le coup je suis pas fan de traiter les booléens comme des entiers, j'aurais plus utilisé

Code :
  1. s = sum(1 for x in count.values() if x == l)



 :jap: je vais étudier ça avec attention. Comme je le disais, ma maîtrise du Python est assez approximative, et j'ai vraiment besoin de m'améliorer.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2370462
ratibus
Posté le 06-12-2020 à 18:29:38  profilanswer
 

Flo > sur ton jour 4, tu peux arrêter ta validation de champs dès la première erreur, pas la peine de compter le nombre de champs valides.
Sur ton jour 5, c'est du binaire en fait (cf le titre du jour) :o
J'ai pas compris ta map récursive  :whistle: Je valide pas la PR :D

n°2370463
Flaie
Posté le 06-12-2020 à 18:31:23  profilanswer
 

Je poste mes 6 premiers jours du coup en spoiler toujours, si y'en a qui s'amusent encore [:flaie:5]

 
Spoiler :

https://rehost.diberie.com/Uploads/37/20201206-182236-ded7f718-aac0-4e97-b3c7-27a30c50ac81.37.res.jpg


Message édité par Flaie le 06-12-2020 à 18:31:40
n°2370464
flo850
moi je
Posté le 06-12-2020 à 18:34:00  profilanswer
 

pour le jour 4 c'est chiant d'arrêter un foreach, et j'ai eu la flemme de le réécrire en for( ;; )

 

pour le jour 5, j'ai fait de la merde (une grosse table de correspondance chemin -> nombre) au lieu de faire un petit log des familles , mais ça marche :o

 

tu n'as pas laissé d'espace autour du point lors de '.$ , je ne valide pas ta PR non plus :o


Message édité par flo850 le 06-12-2020 à 18:35:25

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

n°2370465
Kenshineuh
Posté le 06-12-2020 à 18:35:08  profilanswer
 
n°2370466
el muchach​o
Comfortably Numb
Posté le 06-12-2020 à 18:36:15  profilanswer
 

ratibus a écrit :

Vous démarrez le chrono avant ou après la lecture de l'énoncé ? :D


Avant bien sûr. Et ça inclut bien sûr le PC qui s'est déchargé pendant la nuit et qui s'éteint tout seul, et autres joyeusetés :D
Par contre je ne commence jamais à 6h, mais au réveil (ce matin c'était 7h45) et je code dans le lit, dans le noir, souvent avec une seule main, et encore la tête dans le cul :D

Message cité 1 fois
Message édité par el muchacho le 06-12-2020 à 18:38:37

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2370467
Flaie
Posté le 06-12-2020 à 18:42:41  profilanswer
 

el muchacho a écrit :


Avant bien sûr. Et ça inclut bien sûr le PC qui s'est déchargé pendant la nuit et qui s'éteint tout seul, et autres joyeusetés :D
Par contre je ne commence jamais à 6h, mais au réveil (ce matin c'était 7h45) et je code dans le lit, dans le noir, souvent avec une seule main, et encore la tête dans le cul :D


Coder avec une main sur la mÿthe c'est un concept :D

n°2370468
ratibus
Posté le 06-12-2020 à 18:44:22  profilanswer
 

J'ai fait le jour 1 à la calculatrice trivialement sur la partie 1 et avec libreoffice en brut force vu qu'on peut virer trivialement la grande majorité des valeurs du fichier fourni qui sont trop grandes :D


---------------
Mon blog
n°2370469
Profil sup​primé
Posté le 06-12-2020 à 18:45:36  answer
 

Flaie a écrit :


Coder avec une main sur la mÿthe c'est un concept :D


 
 
La c'est un concept +, c'est la tête dans le cul.
 
Ceux qui suivent ont du mal.

n°2370470
ratibus
Posté le 06-12-2020 à 18:54:54  profilanswer
 
n°2370471
Kenshineuh
Posté le 06-12-2020 à 19:08:19  profilanswer
 

ratibus a écrit :


Mes remarques :
 
Jour 3 :
https://github.com/Enishowk/AdventO [...] art1.js#L8 => modulo :o
https://github.com/Enishowk/AdventO [...] js#L19-L21 => modulo :o
 
Jour 4 :
https://github.com/Enishowk/AdventO [...] 1.js#L7-L8 : t'as de la chance qu'il n'y ait pas en valeur étrange des clés attendues :D
 
Jour 5 :
https://github.com/Enishowk/AdventO [...] js#L11-L25 : pas compris :(
 
Jour 6 :
https://github.com/Enishowk/AdventO [...] art2.js#L6 : en JS y a rien pour faire des intersections ?


 
Merci. :jap:
 
Jour 4, ouais il faut que j'ajoute l'ancre etc. :p
Jour 5, j'itère juste sur chaque lettres et je calcule le "half" comme énoncé :  
Start by considering the whole range, rows 0 through 127.
F means to take the lower half, keeping rows 0 through 63.
B means to take the upper half, keeping rows 32 through 63.
F means to take the lower half, keeping rows 32 through 47.
B means to take the upper half, keeping rows 40 through 47.
etc.  
Bref c'est clair dans ma tête. :o
 
Jour 6 : Surement, mais comme j'ai 0 mémoire, et que j'utilise absolument jamais les "Set()". :o

n°2370472
Hermes le ​Messager
Breton Quiétiste
Posté le 06-12-2020 à 19:08:55  profilanswer
 

Flaie a écrit :


Coder avec une main sur la mÿthe c'est un concept :D


 
On se branle bien à une main... Suivant ce que tu codes, ça peut peut-être passer.  [:bool_de_gom]

Message cité 1 fois
Message édité par Hermes le Messager le 06-12-2020 à 19:09:09

---------------
Expert en expertises
n°2370473
Flaie
Posté le 06-12-2020 à 19:12:06  profilanswer
 

Hermes le Messager a écrit :


 
On se branle bien à une main... Suivant ce que tu codes, ça peut peut-être passer.  [:bool_de_gom]


Pour un code de qualitay s'entends :o

n°2370474
Flaie
Posté le 06-12-2020 à 19:14:15  profilanswer
 

Y'en a qui ont déjà écrit et vendu des livres d'IT?  
Je m'interroge sur le juste pricing en ebook, pour des livres courts (< 200 pages), je vois des livres gratuits, à 5€ comme à 50€.

n°2370475
Plam
Bear Metal
Posté le 06-12-2020 à 19:14:47  profilanswer
 

Flaie a écrit :


Pour un code de qualitay s'entends :o

 

Si t'aime vraiment les défis et coder des trucs en dessous d'un OS (oui l'hyperviseur est en dessous :o ), sache qu'on recrute toujours chez nous :o

 

Et là c'est une autre paire de manche :D


Message édité par Plam le 06-12-2020 à 19:15:09

---------------
Spécialiste du bear metal
n°2370476
ratibus
Posté le 06-12-2020 à 19:21:53  profilanswer
 

Kenshineuh a écrit :


 
Merci. :jap:
 
Jour 4, ouais il faut que j'ajoute l'ancre etc. :p
Jour 5, j'itère juste sur chaque lettres et je calcule le "half" comme énoncé :  
Start by considering the whole range, rows 0 through 127.
F means to take the lower half, keeping rows 0 through 63.
B means to take the upper half, keeping rows 32 through 63.
F means to take the lower half, keeping rows 32 through 47.
B means to take the upper half, keeping rows 40 through 47.
etc.  
Bref c'est clair dans ma tête. :o
 
Jour 6 : Surement, mais comme j'ai 0 mémoire, et que j'utilise absolument jamais les "Set()". :o


Pour le jour 5 c'est du binaire en fait ;)
Tu remplaces B et R par 1 et F et L par 0, ça te donne directement le nombre :)

n°2370477
Kenshineuh
Posté le 06-12-2020 à 19:22:58  profilanswer
 

Ouais j'ai vu les soluces après. En fait je lis jamais les titres et quasi jamais l'énoncé.  
 
J'essaye de coder l'exemple et le résultats attendu en lisant de travers (comme sur Codingame) et souvent ça passe. :o
 
Mais je passe à côté de trucs. :D

n°2370478
Flaie
Posté le 06-12-2020 à 19:23:06  profilanswer
 

Le low level c'est quand même moins ma passion même si ça doit être extrêmement intéressant :D
Et puis j'aime bien mon poste actuel, et faut pouvoir s'aligner  [:atom1ck]  [:kastor94:1] :o

n°2370479
masklinn
í dag viðrar vel til loftárása
Posté le 06-12-2020 à 19:49:05  profilanswer
 

ratibus a écrit :

Jour 4 :
https://github.com/Enishowk/AdventO [...] 1.js#L7-L8 : t'as de la chance qu'il n'y ait pas en valeur étrange des clés attendues :D


En même temps il est une note assez commune que ton but c'est de résoudre ton énoncé :D T'as aucune obligation de résoudre le problème générique, ou de gérer tous les edge-case possibles.

Spoiler :

Mais ça peut aussi te piéger s'il y a justement des edge-cases un peu bizarres

Message cité 3 fois
Message édité par masklinn le 06-12-2020 à 19:50:32

---------------
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°2370480
Kenshineuh
Posté le 06-12-2020 à 19:51:40  profilanswer
 

masklinn a écrit :


En même temps il est une note assez commune que ton but c'est de résoudre ton énoncé :D T'as aucune obligation de résoudre le problème générique, ou de gérer tous les edge-case possibles.

Spoiler :

Mais ça peut aussi te piéger s'il y a justement des edge-cases un peu bizarres



 
C'est le cas sur Codingame. Tu passes leur tests et au moment de soumettre ton code, tu as plein de trucs qui cassent. :D

n°2370481
el muchach​o
Comfortably Numb
Posté le 06-12-2020 à 19:51:52  profilanswer
 
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  23677  23678  23679  ..  27003  27004  27005  27006  27007  27008

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)