Ben dans certains cas, si ton fichier est pas fermĂ©, tu as des erreurs Ă lâouverture (jâen ai au boulot avec des streamwriter en powershell qui ont une erreur de fichier verrouillĂ© et donc non modifiable).
Comme je me suis posĂ© la mĂȘme question que toi sans osĂ© demander
Voilà le résultat de ma recherche Google
https://www.geeksforgeeks.org/what-does-the-if-__name__-__main__-do/
@Ewi du coup tu mets ça dans tous tes fichiers quasiment pour pouvoir les tester individuellement ? Câest une norme ?
Edit : pour que le lien apparaisse correctement
ha ok merci pour lâinfo
@djktk : oui je sais bien, câest pour ca que je ferme toujours mes fichiers, ou pour eviter de la garder ouvert plus longtemps que necessaire câetait pour embetter @ewi
Uniquement dans les fichiers susceptibles dâĂȘtre lancĂ© a la main.
Pour les tests individuels, en gĂ©nĂ©ral, jâai un script dĂ©diĂ©.
Je viens de terminer le jour 2. Jâai encore des progrĂšs Ă faire avec les opĂ©rateurs logiques mais câest pas mal Je crois que je mâembĂȘte plus quâautre chose Ă utiliser la librairie Pandas pour lire les fichiers mais bon, câest un apprentissage aussi!
As tu poussĂ© le bouchon jusquâa utiliser les series et regex ?
un truc comme ca?
df[df['pwd'].str.match(r'df['lettre']{df['mini'],df['maxi']}')== True]
?
Roh putain non, câest puissant ça! Mais comme je disais je dĂ©couvre le monde du python. Dâailleurs si les exercices deviennent plus corsĂ©s ce serait mĂȘme marrant de les faire Ă 2 ou 3 si des gens sont assez patients pour ça
jour2_1
```python
def jour2_1 ():
f = open("Jour2_1.txt","r")
goodPass = 0
for line in f:
min = int(line.split(':')[0].split(" ")[0].split('-')[0])
max = int(line.split(':')[0].split(" ")[0].split('-')[1])
letter = line.split(':')[0].split(" ")[1]
pwd = line.split(':')[1].split(" ")[1]
count = 0
for l in pwd:
if l==letter:
count = count + 1
if count >= min and count <= max:
goodPass = goodPass+1
print ("yay")
print(f'min = {min} max = {max} letter : {letter} pwd = {pwd}')
f.close()
print ( f'GoodPass = {goodPass}')
Jour 2_2
```python
def jour2_2 ():
f = open("Jour2_1.txt","r")
goodPass = 0
for line in f:
pos1 = int(line.split(':')[0].split(" ")[0].split('-')[0])
pos2 = int(line.split(':')[0].split(" ")[0].split('-')[1])
letter = line.split(':')[0].split(" ")[1]
pwd = line.split(':')[1].split(" ")[1]
count = 0
index = 1
for l in pwd:
if (index == pos1 or index == pos2 ) and l==letter:
count = count + 1
index = index + 1
if count == 1:
goodPass = goodPass+1
print ("yay")
print(f'pos1 = {pos1} pos2 = {pos2} letter : {letter} pwd = {pwd}')
f.close()
print ( f'GoodPass = {goodPass}')```
PremiĂšre fois que je fais du Python, câest rigolo.
Ca sert Ă quoi la lib « re » ? Câest pour les poilus des regex ?
Jâai pas trouvĂ© le moyen de rĂ©cupĂ©rer la source depuis lâurl des input, câest con il faut ĂȘtre loggĂ©
Dans ton cas, ca sert Ă rien
Oui, câest la librairie pour utiliser les expressions reguliĂšres sous python. Regarde ma solution, tu verras que câest plus pratique pour extraire des donnĂ©es qui respectent un formalisme qui se represente sous forme dâexpression rĂ©guliĂšre.
Comment vous faites, sur le forum, pour avoir la flÚche qui déroule le texte caché ?
(Day2 done, je poste quand je saurai Ă©crire un message ;))
Utilise la balise [ details=« ma solution en Python » ] [ \ details ].
Ce qui est entre les deux passent sous la fleche.
Merci.
Day 2 part 1
if (preg_match_all('/(?P<min>\d+)-(?P<max>\d+) (?P<letter>\w): (?P<password>\w+)/', $line, $matches))
{
$nbfound = preg_match_all('/'.$matches['letter'][0].'/', $matches['password'][0]);
if ($nbfound >= (int) $matches['min'][0] && $nbfound <= (int) $matches['max'][0])
{
$valide++;
}
}
Day 2 part 2
if (preg_match_all('/(?P<firstPos>\d+)-(?P<secondPos>\d+) (?P<letter>\w): (?P<password>\w+)/', $line, $matches))
{
$firstPos = (int)$matches['firstPos'][0]-1;
$secondPos = (int)$matches['secondPos'][0]-1;
$letter = $matches['letter'][0];
if (
isset($matches['password'][0][$firstPos], $matches['password'][0][$secondPos]) &&
(
($matches['password'][0][$firstPos] === $letter && $matches['password'][0][$secondPos] !== $letter) ||
($matches['password'][0][$firstPos] !== $letter && $matches['password'][0][$secondPos] === $letter)
)
)
{
$valide++;
}
}
(jâai supprimĂ© les passages pour recup les inputs et la sortie ecran)
pas encore codé, mais on arrive sur le type de challenge ou la difficulté majeure tient dans la compréhension du problÚme plus que dans le code !
ca va je trouve. je vais le faire avec mes Ă©tudiants de ce matin
En lisant lâĂ©noncĂ© je me suis dit « rah ça se corse il va falloir slalomer entre les sapins » et en fait pas du tout on compte juste les sapins quâon se prend dans la poire.
Solution Python
import time
from functools import reduce
tic = time.perf_counter()
def trees(lines, s):
bottom = len(lines)
width = len(lines[0])
t = 0
x = 0
y = 0
while y + s[1] < bottom:
x = (x + s[0]) % width
y += s[1]
if lines[y][x] == '#':
t += 1
return t
with open("input.txt", 'r') as f:
forest = [x.strip() for x in f.readlines() if x.strip()]
slopes = [(1, 1), (3, 1), (5, 1), (7, 1), (1, 2)]
l_trees = [trees(forest, s) for s in slopes]
for i in range(0, len(slopes)):
print(f"{l_trees[i]} trees for slope {slopes[i]}")
print(f"{reduce(lambda x, y: x*y, l_trees)} multiplied trees")
toc = time.perf_counter()
print(f"Done in {toc - tic:0.4f}s")
Day 3 Part 1 en PHP
$nbTrees = 0;
$nbLines = count($inputs)-1;
$lineLenght = strlen($inputs[0])-2; //il me compte le \n donc -2
$lineCursor=0;
$columnCursor=0;
while ($lineCursor !== $nbLines)
{
$columnCursor = ($columnCursor+3) > $lineLenght ? (($columnCursor+3) % $lineLenght)-1 : ($columnCursor+3);
if ($inputs[++$lineCursor][$columnCursor] === '#')
{
$nbTrees++;
}
}
Day 3 part 2 en PHP
Jâai factorisĂ© le code et appelĂ© la fonction pour chaque « slope », câest toutâŠ
private function factorDay3(array $inputs, int $right, int $down)
{
$nbTrees = 0;
$nbLines = count($inputs)-1;
$lineLenght = strlen($inputs[0])-2; //il me compte le \n donc -2
$lineCursor=0;
$columnCursor=0;
while ($lineCursor < $nbLines)
{
$columnCursor = ($columnCursor+$right) > $lineLenght ? (($columnCursor+$right) % $lineLenght)-1 : ($columnCursor+$right);
$lineCursor = $down + $lineCursor;
if ($inputs[$lineCursor][$columnCursor] === '#')
{
$nbTrees++;
}
}
return $nbTrees;
}
En bonus, le git dâun collĂšgue que le fait en swift :
version Ă©tudiants
Résumé
# import
# variable globale
# fonction
def day3_2(data, slope):
cpt=1
for i in slope:
cpt*=day3_1(data,i[0],i[1])
return cpt
def day3_1(data,right,down):
cpt=0
i=0
j=0
while i < len(data):
if data[i][j] == '#':
cpt += 1
j+=right
if j >= len(data[i]):
j -= len(data[i])
i += down
return cpt
# main
if __name__ == '__main__':
fichier = open('input.txt', 'r')
linesDeMonFichier = fichier.readlines()
data = []
for i in linesDeMonFichier:
data = data + [list(i)[0:len(i)-1]]
tree = day3_2(data,[[1,1],[3,1],[5,1],[7,1],[1,2]])
print(tree)
Si ta case [0][0] est un arbre, tu le comptes au dĂ©marrage, pas sĂ»r que ça soit bon (pour moi on compte si Ă lâarrivĂ© du dĂ©placement on trouve un arbre, pas au dĂ©marrage mais câest pas hyper clair je te lâaccorde).
A oui, bien vu. Je verrai une version optimisé ce soir de toute façon