J'ai plussé sur la confision engendrée.
Est-ce que mon SMS est sécurisé si il est géré par l'application signal, pff ?
A vouloir faire trop transparent
"Transparent" est ambiguë ici comme toujours. Transparent genre tu vois bien ce qui se passe dedans (sens dans l'expression "nous sommes transparents quant à la provenance de notre marchandise") ou transparent genre invisible (souvent le sens dans l'expression "ce sera transparent pour l'utilisateur".
J'avais la même compréhension. Pour moi, il n'y a pas de boucle de rétroaction lié à son utilisation.
La phase d'entraînement est faîte (c'est GPT3.5) et la phase d'éducation (coût de bâton sur les doigts si tu es pas poli) est faîte par les Kényans, j'imagine avec un cahiers des charges des bonnes manières États-uniennes. Donc pas par mr/mm tout le monde.
Bien souvent, le "reader view" = "mode lecture" de Firefox suffit à faire apparaître le texte dans son intégralité est en bonus de se débarrasser des popup cookie.
Moui bon on va pas pinailler mais je suis pas trop d'accord avec le terme outil.
Le journal au sens imprimerie sur papier et distribution est un outil. Mais un journal est un media de communication. Il a une influence.
De même le réseau internet est un outil mais un réseau social est un média de communication. Il a une influence.
L'influence peut être politique (inciter à penser ceci ou cela) ou économique (inciter à acheter ceci ou cela).
Un outil, n'importe qui peut s'en servir. Un media, il est contrôlé par quelqu'un.
Et c'est pas parce que ta voisine Micheline peut poster librement une photo de son chat sur tiktok que cela en fait un outil. Car la photo, tiktok décide de te la montrer ou pas ainsi que n'importe quel autre contenu.
Maintenant, si TikTok c'est de la merde comme certains le disent, pourquoi y a-t-il autant de monde qui y va ?
Pourquoi le macdo ? Pourquoi le quinzième xmen ? Pourquoi TPMP ? Pourquoi la kronenbourg ? Pourquoi la voiture ? Pourquoi la cigarette ? Pourquoi la poubelle ordures ménagères ? Pourquoi windows ? Pourquoi …
Réponse: parce que la médiocrité ne tue pas - enfin pas sur le coup.
Ceux qui vont me faire défendre le nucléaire ne sont pas les pros (la plupart sont ridicules à oublier les inconvénients, oui) mais les anti (encore plus caricaturaux que les pros, et généralement moins tu as d'arguments plus tu es caricatural).
Ah, ça m'a fait la même chose pour le mariage pour tous. J'étais hyper neutre au début, ni pour ni contre, car pas concerné de près ou de loin. Mais quand j'ai vu ceux qui étaient pour et leurs arguments et leur haine. Je me suis dis: ok, je suis pour en fait.
Texte également rédigé à l'aide de ChatGPT (et corrigé par mes soins)
Oh mazette, après l'écriture inclusive, il va falloir aussi dire ce qui est écrit par un·e intelligen·ce humain·e et ce qui est écrit par un·e intelligen·ce artificiel·le. Help!
Posté par steph1978 .
En réponse au message Avent du Code, jour 23.
Évalué à 4.
Dernière modification le 23 décembre 2022 à 18:15.
Pas si difficile aujourd'hui mais j'ai butté sur à peut prêt toutes les instructions
- ah si un elf peut bouger partout alors il ne bouge pas ?!
- ah les directions changent a chaque tour ?!
- mais qu'est ce qu'il se passe au bord ?
- ah la grille est infinie ?!
Ce dernier point m'a contraint à changer ma conception : d'une matrice à un set. Moins sympa pour débuguer mais nécessaire quand on ne connaît pas les limites du jeu. Finalement un code plus simple car pas de gestion de dépassement, et utilisation des fonctions de set (appartenance, union, différences) et des list comprehension un peu partout. Et accessoirement beaucoup plus rapide : 1025 round en 8s pour le tout.
python, 60 loc
importsysE=set()# elvesfory,linenumerate(sys.stdin.read().splitlines()):forx,cinenumerate(l):ifc=='#':E.add((y,x))defcan(y,x):can1=(y-1,x-1)notinEcan2=(y-1,x)notinEcan3=(y-1,x+1)notinEcan4=(y,x+1)notinEcan5=(y+1,x+1)notinEcan6=(y+1,x)notinEcan7=(y+1,x-1)notinEcan8=(y,x-1)notinEreturn[can1,can2,can3,can4,can5,can6,can7,can8]defcanN(y,x,can1,can2,can3,can4,can5,can6,can7,can8):ifcan1andcan2andcan3:return(y-1,x)defcanS(y,x,can1,can2,can3,can4,can5,can6,can7,can8):ifcan5andcan6andcan7:return(y+1,x)defcanW(y,x,can1,can2,can3,can4,can5,can6,can7,can8):ifcan7andcan8andcan1:return(y,x-1)defcanE(y,x,can1,can2,can3,can4,can5,can6,can7,can8):ifcan3andcan4andcan5:return(y,x+1)fromcollectionsimportdequedirs=deque([canN,canS,canW,canE])forrinrange(int(sys.argv[1])):P=dict()foreinE:# each elve(y,x)=emoves=[d(y,x,*can(y,x))fordindirs]ifall(misnotNoneforminmoves):continueifall(misNoneforminmoves):continuep=next(filter(lambdam:misnotNone,moves))ifpnotinP:# can moveP[p]=(y,x)else:# occupied, invalidate moveP[p]=Nonemoved={vfork,vinP.items()ifvisnotNone}newpos={kfork,vinP.items()ifvisnotNone}ifr+1==10:minx=min(xfor(x,_)inE)maxx=max(xfor(x,_)inE)miny=min(yfor(_,y)inE)maxy=max(yfor(_,y)inE)print((maxx-minx+1)*(maxy-miny+1)-len(E))iflen(newpos)==0:print(f"no move after {r+1}")breakE=(E-moved)|newposdirs.rotate(-1)
Posté par steph1978 .
En réponse au message Avent du Code, jour 21.
Évalué à 3.
Dernière modification le 21 décembre 2022 à 21:15.
On voulait me faire faire un AST et évaluer le bazar. Bah je voulais pas.
Du coup j'ai fait une boucle infinie jusqu'à tout évaluer.
Ça m'a permis de faire la partie 1 en quelques minutes.
Bon je l'ai un peu payé sur la partie 2, j'ai dû bidouiller. La vizu m'a permis de voir qu'il n'y a pas de lien entre les deux branches partant de root. Donc pas de réutilisation d'un résultat dans les deux sous arbres. Donc l'inconnu n'est impliqué que dans une seule équation. J'ai donc hardcodé a valeur du sous arbre de droite dans la racine du sous arbre de gauche, là où se situe "humn".
Je dirai qu'il n'y a pas de règle car cela dépend de l'input.
Le code que j'ai pour la partie deux donne la bonne réponse en gardand le top 1000, ne marche pas à 700. Mais sur un autre input que j'ai testé, il a fallu monter à 2000.
J'utilise AWK pour construire un fichier openscad.
C'est un fichier texte qui décrit les formes à dessiner. exemple ici : translate([17.05,9.05,3.05]) cube([0.9,0.9,0.9]); Je laisse un petit espace entre chaque cube pour que ça ne fasse pas une grosse masse.
Habituellement, je m'en sers pour faire des modèles pour de l'impression 3D.
Je faisais un blocage avec le modeleur clicodrome, type Freecad. Openscad m'a sauvé :)
La partie 1 étant un échauffement, parlons partie 2. Il faut "remplir" toutes les aspérités d'une boule constituée de petits cubes de 1x1x1 et dont la surface est irrégulière. Et compté les surfaces exposées au liquide.
vizu
La visualisation m'a bien aidé :
On peut voir les creux qui doivent se remplir.
code partie 2
J'ai rempli par itération (while True) en m'arrêtant quand plus rien de nouveau ne se remplissait.
Ensuite, pour chaque cube, on compte combien de face sont en contact avec de l'eau (6 voisins, 2 par dimension x, y, z).
importsysS=set()# cubesforlinsys.stdin.read().splitlines():S.add(tuple(map(int,l.split(','))))A=23L=set()# waterforxinrange(-2,A+1):foryinrange(-2,A+1):L.add((x,y,-2))more=Truewhilemore:c=0forxinrange(-2,A+1):foryinrange(-2,A+1):forzinrange(-2,A+1):if(x,y,z)notinSand(x,y,z)notinL:# water can only expand in airfor(i,j,k)in[(0,0,1),(0,0,-1),(0,1,0),(0,-1,0),(1,0,0),(-1,0,0)]:if(x+i,y+j,z+k)inL:# if neighbour is waterL.add((x,y,z))# water expandc+=1more=(c>0)N=0for(x,y,z)inS:for(i,j,k)in[(0,0,1),(0,0,-1),(0,1,0),(0,-1,0),(1,0,0),(-1,0,0)]:if(x+i,y+j,z+k)inL:N+=1print(N)
Un parcours de graph avec la complication que l'état du graph change pendant le parcours.
J'ai procédé en brute force et n'ai pas trouvé vraiment de moyen de couper des branches, si ce n'est marquer dès le départ les vannes à 0 comme étant déjà ouverte. Ça marchait bien jusqu'à 20 de profondeur mais passé ça, ça ramait trop (je timeout à 10 min). J'ai donc ajouté du cache et bim, 0.37s et 91MB de cache.
Cependant cette solution ne passe pas à l'échelle pour le parcours à 2 qui multiplie les branches.
J'ai ouïe dire des solutions où on pré-calcul des distances ou des scores mais je crois que je vais en rester là, j'ai déjà un retard de deux jours. J'ai atteint ma limite.
part 1
importsysimportrepat=re.compile('Valve ([A-Z]{2}) has flow rate=([0-9]+); tunnels? leads? to valves? ([ ,A-Z]+)')P=dict()fori,linenumerate(sys.stdin.read().splitlines()):g=pat.search(l)p=int(g[2])P[g[1]]=(i,p,g[3].split(", "))STEPS=int(sys.argv[1])ALLO=0for_,(i,p,_)inP.items():ifp==0:ALLO=ALLO|(1<<i)cache={}defstep(pos="AA",left=STEPS,opens=ALLO):ifleft<=0:return0key=(pos,left,opens)r=cache.get(key,-1)ifr>=0:returnr(i,p,nh)=P[pos]is_open=opens&(1<<i)a=0ifnotis_open:# also means 0 - worth opening valve ?left-=1# cost to openopens=opens|(1<<i)a=p*(left+30-STEPS)+max(step(n,left-1,opens)forninnh)b=max(step(n,left-1,opens)forninnh)r=max(a,b)cache[key]=rreturnrprint(step())
À priori on a le même algo. Peut être ma fonction d'union d'intervalles moins efficace. Faudrait que je profile. Mais là j'ai deux jours de retard alors je vais passer :)
# A vouloir faire trop transparent
Posté par steph1978 . En réponse au journal Suppression de la gestion des SMS par Signal. Évalué à 5.
J'ai plussé sur la confision engendrée.
Est-ce que mon SMS est sécurisé si il est géré par l'application signal, pff ?
"Transparent" est ambiguë ici comme toujours. Transparent genre tu vois bien ce qui se passe dedans (sens dans l'expression "nous sommes transparents quant à la provenance de notre marchandise") ou transparent genre invisible (souvent le sens dans l'expression "ce sera transparent pour l'utilisateur".
[^] # Re: Mitigé
Posté par steph1978 . En réponse au journal Suppression de la gestion des SMS par Signal. Évalué à 3.
Elle est de base dans Android ^
[^] # Re: Ça ne vous gêne pas ?
Posté par steph1978 . En réponse au journal Mon avis sur chatGPT. Évalué à 2.
J'avais la même compréhension. Pour moi, il n'y a pas de boucle de rétroaction lié à son utilisation.
La phase d'entraînement est faîte (c'est GPT3.5) et la phase d'éducation (coût de bâton sur les doigts si tu es pas poli) est faîte par les Kényans, j'imagine avec un cahiers des charges des bonnes manières États-uniennes. Donc pas par mr/mm tout le monde.
[^] # Re: Le tour de magie
Posté par steph1978 . En réponse au journal Paywall or not paywall… c'mon and meet Bypass Paywalls Clean !. Évalué à 5.
Bien souvent, le "reader view" = "mode lecture" de Firefox suffit à faire apparaître le texte dans son intégralité est en bonus de se débarrasser des popup cookie.
[^] # Re: deux poids deux mesures
Posté par steph1978 . En réponse au lien TikTok, la drogue des ados devenue ennemi public numéro un - letemps.ch. Évalué à 5.
Moui bon on va pas pinailler mais je suis pas trop d'accord avec le terme outil.
Le journal au sens imprimerie sur papier et distribution est un outil. Mais un journal est un media de communication. Il a une influence.
De même le réseau internet est un outil mais un réseau social est un média de communication. Il a une influence.
L'influence peut être politique (inciter à penser ceci ou cela) ou économique (inciter à acheter ceci ou cela).
Un outil, n'importe qui peut s'en servir. Un media, il est contrôlé par quelqu'un.
Et c'est pas parce que ta voisine Micheline peut poster librement une photo de son chat sur tiktok que cela en fait un outil. Car la photo, tiktok décide de te la montrer ou pas ainsi que n'importe quel autre contenu.
[^] # Re: deux poids deux mesures
Posté par steph1978 . En réponse au lien TikTok, la drogue des ados devenue ennemi public numéro un - letemps.ch. Évalué à 4.
Pourquoi le macdo ? Pourquoi le quinzième xmen ? Pourquoi TPMP ? Pourquoi la kronenbourg ? Pourquoi la voiture ? Pourquoi la cigarette ? Pourquoi la poubelle ordures ménagères ? Pourquoi windows ? Pourquoi …
Réponse: parce que la médiocrité ne tue pas - enfin pas sur le coup.
[^] # Re: Cette « critique », c’est un déluge de tous les faux arguments anti-nucléaires déjà débunkés
Posté par steph1978 . En réponse au lien Une critique poussée de la BD "Le monde sans fin" de Blain et Jancovici (nucléaire mais pas que). Évalué à 2.
Arf, oui, bien vu : "ceux qui étaient contre".
[^] # Re: Cette « critique », c’est un déluge de tous les faux arguments anti-nucléaires déjà débunkés
Posté par steph1978 . En réponse au lien Une critique poussée de la BD "Le monde sans fin" de Blain et Jancovici (nucléaire mais pas que). Évalué à 3.
Ah, ça m'a fait la même chose pour le mariage pour tous. J'étais hyper neutre au début, ni pour ni contre, car pas concerné de près ou de loin. Mais quand j'ai vu ceux qui étaient pour et leurs arguments et leur haine. Je me suis dis: ok, je suis pour en fait.
[^] # Re: Et prochainement…
Posté par steph1978 . En réponse au journal analyse de données avec Duckdb. Évalué à 2.
Du moment que tu peaufines l'art ascii, tout est possible :)
# petit chaperon rouge
Posté par steph1978 . En réponse au journal Lazy Ghost Hunters. Évalué à 2. Dernière modification le 04 janvier 2023 à 15:22.
Ma fille a eu celui-ci pour Noël.
L'idée est venu parce qu'elle jouait à un jeu très ressemblant à celui-là dans GCompris (ancre foireux, CTRL+F "Embouteillage").
J'ai adoré ce moment où elle m'a dit "tu fais pas!", traduction: "laisse moi faire!" parce qu'elle avait pigé le truc.
Ça me donne envie de contribuer des exercices gcp en s'inspirant de smart games.
[^] # Re: Oubli :)
Posté par steph1978 . En réponse au journal imagemagick, GraphicsMagick, vips, chatgpt. Évalué à 7.
Oh mazette, après l'écriture inclusive, il va falloir aussi dire ce qui est écrit par un·e intelligen·ce humain·e et ce qui est écrit par un·e intelligen·ce artificiel·le. Help!
Ce commentaire a été écrit par mes gros doigts.
[^] # Re: Shellcheck: pour amélioration
Posté par steph1978 . En réponse au journal choose, pour des scripts shells interactifs. Évalué à 2.
Et une petite vidéo démo en asciinema dans le README, ça claquerait !
[^] # Re: un bout de AWK
Posté par steph1978 . En réponse au message Avent du Code, jour 10. Évalué à 3.
Pour la partie deux, aucun intérêt à bufferiser avant d'afficher :
awk, 14 loc
[^] # Re: ready, set, python
Posté par steph1978 . En réponse au message Avent du Code, jour 23. Évalué à 5.
En image
J'arrive pas à comprendre en partant de l'input et de règles pourquoi ça se propage pas uniformément mais privilégie la direction en bas à droite.
# vizu
Posté par steph1978 . En réponse au message Avent du Code, jour 12. Évalué à 5.
après la version ascii, la version png, voici la version 3D. ma préférée.
# ready, set, python
Posté par steph1978 . En réponse au message Avent du Code, jour 23. Évalué à 4. Dernière modification le 23 décembre 2022 à 18:15.
Pas si difficile aujourd'hui mais j'ai butté sur à peut prêt toutes les instructions
- ah si un elf peut bouger partout alors il ne bouge pas ?!
- ah les directions changent a chaque tour ?!
- mais qu'est ce qu'il se passe au bord ?
- ah la grille est infinie ?!
Ce dernier point m'a contraint à changer ma conception : d'une matrice à un set. Moins sympa pour débuguer mais nécessaire quand on ne connaît pas les limites du jeu. Finalement un code plus simple car pas de gestion de dépassement, et utilisation des fonctions de set (appartenance, union, différences) et des list comprehension un peu partout. Et accessoirement beaucoup plus rapide : 1025 round en 8s pour le tout.
python, 60 loc
[^] # Re: Mode triche on
Posté par steph1978 . En réponse au message Avent du Code, jour 22. Évalué à 5.
C'est de l'openscad. Évoqué jour 18.
# papier, ciseaux, colle
Posté par steph1978 . En réponse au message Avent du Code, jour 22. Évalué à 5.
# python rebelle
Posté par steph1978 . En réponse au message Avent du Code, jour 21. Évalué à 3. Dernière modification le 21 décembre 2022 à 21:15.
On voulait me faire faire un AST et évaluer le bazar. Bah je voulais pas.
Du coup j'ai fait une boucle infinie jusqu'à tout évaluer.
Ça m'a permis de faire la partie 1 en quelques minutes.
Bon je l'ai un peu payé sur la partie 2, j'ai dû bidouiller. La vizu m'a permis de voir qu'il n'y a pas de lien entre les deux branches partant de root. Donc pas de réutilisation d'un résultat dans les deux sous arbres. Donc l'inconnu n'est impliqué que dans une seule équation. J'ai donc hardcodé a valeur du sous arbre de droite dans la racine du sous arbre de gauche, là où se situe "humn".
Chaque partie s'évalue en 0.30s et 10Mo de RAM.
part 1
part 2
[^] # Re: Erreur bete
Posté par steph1978 . En réponse au message Avent du Code, jour 19. Évalué à 2.
Je dirai qu'il n'y a pas de règle car cela dépend de l'input.
Le code que j'ai pour la partie deux donne la bonne réponse en gardand le top 1000, ne marche pas à 700. Mais sur un autre input que j'ai testé, il a fallu monter à 2000.
[^] # Re: python tranquille
Posté par steph1978 . En réponse au message Avent du Code, jour 18. Évalué à 4.
J'utilise AWK pour construire un fichier openscad.
C'est un fichier texte qui décrit les formes à dessiner. exemple ici :
translate([17.05,9.05,3.05]) cube([0.9,0.9,0.9]);
Je laisse un petit espace entre chaque cube pour que ça ne fasse pas une grosse masse.Habituellement, je m'en sers pour faire des modèles pour de l'impression 3D.
Je faisais un blocage avec le modeleur clicodrome, type Freecad. Openscad m'a sauvé :)
# python tranquille
Posté par steph1978 . En réponse au message Avent du Code, jour 18. Évalué à 4.
Relativement facile ce jour
La partie 1 étant un échauffement, parlons partie 2. Il faut "remplir" toutes les aspérités d'une boule constituée de petits cubes de 1x1x1 et dont la surface est irrégulière. Et compté les surfaces exposées au liquide.
vizu
La visualisation m'a bien aidé :
On peut voir les creux qui doivent se remplir.
code partie 2
J'ai rempli par itération (
while True
) en m'arrêtant quand plus rien de nouveau ne se remplissait.Ensuite, pour chaque cube, on compte combien de face sont en contact avec de l'eau (6 voisins, 2 par dimension x, y, z).
Exécution en 0.11s et 11MB RAM.
# python caché
Posté par steph1978 . En réponse au message Avent du Code jour 16. Évalué à 2.
Un parcours de graph avec la complication que l'état du graph change pendant le parcours.
J'ai procédé en brute force et n'ai pas trouvé vraiment de moyen de couper des branches, si ce n'est marquer dès le départ les vannes à 0 comme étant déjà ouverte. Ça marchait bien jusqu'à 20 de profondeur mais passé ça, ça ramait trop (je timeout à 10 min). J'ai donc ajouté du cache et bim, 0.37s et 91MB de cache.
Cependant cette solution ne passe pas à l'échelle pour le parcours à 2 qui multiplie les branches.
J'ai ouïe dire des solutions où on pré-calcul des distances ou des scores mais je crois que je vais en rester là, j'ai déjà un retard de deux jours. J'ai atteint ma limite.
part 1
[^] # Re: python, on a RAMé
Posté par steph1978 . En réponse au message Avent du Code jour 15. Évalué à 2.
À priori on a le même algo. Peut être ma fonction d'union d'intervalles moins efficace. Faudrait que je profile. Mais là j'ai deux jours de retard alors je vais passer :)
[^] # Re: Unions d'intervalles
Posté par steph1978 . En réponse au message Avent du Code jour 15. Évalué à 3.
Plus précisément ce sont des carrés tournés de 45°. Je sais pas si ça simplifie…