Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#601 Le 27/06/2010, à 04:34

samυncle

Re : /* Topic des codeurs couche-tard [1] */

.

\o/ hdp

Dernière modification par samuncle (Le 27/06/2010, à 04:35)


Hello world

Hors ligne

#602 Le 27/06/2010, à 06:23

grim7reaper

Re : /* Topic des codeurs couche-tard [1] */

Bon, finalement j'ai du revoir ma gestion des opérateurs '[' et ']' mais ça fonctionne maintenant (même le code de la division cool).

Alors, comme promis il tient en 42 lignes (et pas plus de 80 caractères par ligne big_smile). Bon du coup je n'ai pas pu commenter la table des symboles hmm (enfin bon, go wikipédia quoi tongue).
Interpréteur testé et approuvé avec les codes du "Hello World!", de l'addition, de la multiplication, de la division, de la recherche du min entre 2 entiers et de la mise en majuscule.

#!/usr/bin/perl -w
use strict;      # Auteur : grim7reaper && Licence : WTFPL

my $t = 30000;   # Taille de la memoire (en octet).
my @mem = (0)x$t;# Memoire.
my $code = "";   # Code source.
my $dp = 0;      # Data Pointer.
my $ip = 0;      # Instruction Pointer.
my %l2r = ();    # Couples (position du [, position du ] correspondant).
my @left = ();   # Liste des positions des crochets ouvrants.
my %symbols =    # Tables des symboles (http://fr.wikipedia.org/wiki/Brainfuck).
(
    ">" => sub{ $dp++; die "Segmentation Fault\n"  if $dp > $t; },
    "<" => sub{ $dp--; die "Segmentation Fault\n"  if $dp < 0;  },
    "+" => sub{ $mem[$dp]++; $mem[$dp] = 0   if $mem[$dp] > 255; },
    "-" => sub{ $mem[$dp]--; $mem[$dp] = 255 if $mem[$dp] < 0;   },
    "." => sub{ print chr($mem[$dp]);    },
    "," => sub{ $mem[$dp] = ord(getc()); },
    "[" => sub{ $ip = $l2r{$ip - 1} + 1 if $mem[$dp] == 0;   },
    "]" => sub{ my %r2l = reverse %l2r; $ip = $r2l{$ip - 1}; }
);

open (SRC, $ARGV[0]) || die "Can't open $ARGV[0] : $!"; # Ouverture du source.
while (<SRC>) { chomp($code .= $_); }  # Concatenation du code en une ligne.
$code =~ s/[^\+\-\.\[\],<>]//g;        # Suppression des caracteres invalides.

my @code = split(//, $code);              # Decoupage du code en symboles
for(my $i = 0; $i < length($code); $i++)  # Analyse symbole par symbole
{
    push(@left, $i) if $code[$i] eq '[';  # Si c'est crochet ouvrant on empile.
    if($code[$i] eq ']')                  # Si c'est crochet fermant on depile.
    {
        die "Unmatched ]\n" unless @left; # reste des ] && pile vide = pas bon.
        $l2r{pop @left} = $i;             # Creation des couple pour les sauts.
    }
} die "Unmatched [\n" if @left;      # code termine && pile pas vide = pas bon.

while($ip < @code)          # Boucle d'interpretation du code
{ 
    my $c = $code[$ip++];   # Lecture de l'instruction.
    $symbols{$c}->();       # Decodage et execution de l'instruction.
}

L'interpreteur gère les commentaires dans le sources, le code multiligne, les erreurs d'accès mémoire et la validité syntaxique (correspondance '[' et ']').
Le Perl c'est beau, le Perl c'est bon (mangez-en), le Perl c'est la vie big_smile.

Bon, l'accumulation de fatigue me fait dire des conneries alors je vais aller me pieuter z_z.

BN World !

Edit : clarification et optimisation du code.

Dernière modification par grim7reaper (Le 27/06/2010, à 14:57)

Hors ligne

#603 Le 27/06/2010, à 09:13

gnuuat

Re : /* Topic des codeurs couche-tard [1] */

Segfault, c'est pas un signal système plutôt ?


Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#604 Le 27/06/2010, à 09:42

Compteur du TdCCT

Re : /* Topic des codeurs couche-tard [1] */

Scores totaux, depuis le début :

1) 621    samuncle
2) 550    nesthib
3) 545    Pylade
4) 498+5  grim7reaper ** bonus +5 pour avoir répondu à ce post : ./viewtopic.php?pid=3486252#p3486252 **
5) 416    mathieuI
6) 279    cm-t
7) 243    helly
8) 173    gnuuat
9) 121    ǤƦƯƝƬ
10) 119    tshirtman
11) 93    petifrancais
12) 91    \\Ouranos//
13) 42    pierguiard
14) 37    ilagas
14) 37    Lagierl
16) 33    Kanor
17) 30    keny
18) 25    GentooUser
19) 19    Le Rouge
20) 18    Ph3nix_
21) 14    kouskous
22) 13    xapantu
23) 12    stratoboy
23) 12    sailing
25) 11    edge_one
26) 10    CROWD
26) 10    Toineo
26) 10    NutMotion
29) 8    Mornagest
30) 7    Vista
31) 6    Zeibux
31) 6    Р'tite G☢gole :mad:
33) 5    timsy
34) 4    danychou56
34) 4    Neros
34) 4    Biaise
37) 3    gulp
38) 1    ceric
38) 1    pfriedK
38) 1    geenux

chart?chs=675x280&cht=p3&chco=d80020,d88000,ffd840,20d820,2080ff,101080,a020d8&chf=bg,s,fbf9f4&chl=00h%20-%2000h59|01h%20-%2001h59|02h%20-%2002h59|03h%20-%2003h59|04h%20-%2004h59|08h%20-%2008h59|09h%20-%2009h59|10h%20-%2010h59|11h%20-%2011h59|12h%20-%2012h59|13h%20-%2013h59|14h%20-%2014h59|16h%20-%2016h59|17h%20-%2017h59|18h%20-%2018h59|19h%20-%2019h59|20h%20-%2020h59|21h%20-%2021h59|22h%20-%2022h59|23h%20-%2023h59&chd=t:1,3,8,1,2,1,2,3,2,2,4,3,3,1,2,4,7,2,6,3&chp=1.6&chtt=R%C3%A9partition%20des%20posts&chts=606060,16chart?chs=675x250&cht=bvs&chxt=x,y&chds=0,10&chxr=1,0,10&chf=b0,lg,0,803000,0,ffc080,1|bg,s,fbf9f4&chxl=0:|05h|06h|07h|08h|09h|10h|11h|12h|13h|14h|15h|16h|17h|18h|19h|20h|21h|22h|23h|00h|01h|02h|03h|04h&chxp=0,0.7,4.9,9.1,13.2,17.3,21.5,25.6,29.8,33.9,38,42.2,46.3,50.5,54.6,58.8,62.9,67,71.2,75.3,79.4,83.6,87.7,91.8,96&chd=t:0,0,0,1,2,3,2,2,4,3,0,3,1,2,4,7,2,6,3,1,3,8,1,2&chm=N,803000,0,-1,12&chtt=|Nombre%20de%20posts%20par%20heure&chts=606060,16


Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#605 Le 27/06/2010, à 09:42

Compteur du TdCCT

Re : /* Topic des codeurs couche-tard [1] */

Scores totaux, depuis le début :

1) 260    Pylade
2) 226    samuncle
3) 223    nesthib
4) 220+5  grim7reaper ** bonus +5 pour avoir répondu à ce post : ./viewtopic.php?pid=3486252#p3486252 **
5) 181    mathieuI
6) 110    helly
7) 96    cm-t
8) 76    gnuuat
9) 56    \\Ouranos//
10) 44    tshirtman
11) 30    Lagierl
12) 23    petifrancais
13) 20    keny
14) 19    Kanor
15) 17    pierguiard
16) 15    ǤƦƯƝƬ
17) 11    edge_one
18) 10    NutMotion
19) 8    xapantu
20) 7    Vista
21) 5    sailing
21) 5    timsy
23) 4    Toineo
24) 3    gulp
24) 3    Р'tite G☢gole :mad:
26) 2    kouskous
26) 2    Mornagest

Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#606 Le 27/06/2010, à 10:22

tshirtman

Re : /* Topic des codeurs couche-tard [1] */

mouais, j'ai pus faire tomber le mien à 32 lignes d'un autre coté ^^. j'ai donc la place de commenter tous ls symboles, si j'ai pas la flemme tongue

#!/usr/bin/env python
# author: tshirtman, licence: WTFPL
from sys import stdin, stdout, argv
from exceptions import BaseException

code = open(argv[1]).read()[:-1]
s = []; b = {}
for i,j in enumerate(code):
    if j == '[': s.append(i);
    if j == ']':
        try:
            b[s.pop()] = i 
        except:
            raise BaseException('unmatched ]')
if len(s) > 0:
    raise BaseException('unmatched [')
pc = 0; p = 0; t = [0] * 1000

while pc != len(code):
    i = code[pc]
    if i == '>': p += 1
    elif i == '<': p -= 1
    elif i == '+': t[p] += 1; t[p] %= 256 
    elif i == '-': t[p] -= 1; t[p] %= 256 
    elif i == '.': stdout.write(chr(t[p]))
    elif i == ',': stdin.read(size=1)
    elif i == '[':
        if t[p] == 0: pc = b[pc]
    elif i == ']': pc = filter(lambda i: b[i] == pc, b.keys())[0]-1
    else: raise BaseException('unknown command', i, ' pos ', pc) 
    pc += 1
stdout.flush()

Hors ligne

#607 Le 27/06/2010, à 10:23

Pylades

Re : /* Topic des codeurs couche-tard [1] */

gnuuat a écrit :

Segfault, c'est pas un signal système plutôt ?

Segfault, c’est ce qui est affiché (avec le C, en tous cas) lorsque ton programme se fait tuer par un SIGSEGV (11). Ce signal est délivré, pour ce que j’en sais, lorsque qu’un usage illicite est fait de la mémoire (par exemple quand tu essaies d’écrire avec un NULL).

Sinon, oh oui, le perl c’est bon. smile
(En tous cas ça a l’air.)

Mais avec le compteur et USF en python, je vais essayer d’abord d’apprendre python un peu utile. D’ailleurs (ceci est un message à l’attention du n@nyl@nd), j’ai rendu le compteur indépendant du fichier qu’il utilise (même s’il subsiste un léger bug, le remarquerez-vous ?), et maintenant je vais essayer de lui faire gérer les temps UTC, mais j’aurai peut-être besoin de plus de précisions.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#608 Le 27/06/2010, à 10:28

nany

Re : /* Topic des codeurs couche-tard [1] */

Bonjour chez vous.

Pylade a écrit :
le n@nyl@nd a écrit :

Ouskeu gé parlé d’espaces insécables ?
Oops, j’ai failli oublier : GMTXXX

Justement, quand tu t’es mis à parler en transparent.
[…]

Ah oui, là !
Ben, justement, c’est pour parler le langage du compteur donc il vaut mieux éviter les insécables.

En ligne

#609 Le 27/06/2010, à 10:42

Pylades

Re : /* Topic des codeurs couche-tard [1] */

Mais ça vient d’où le délire qui consisterait à dire que le compteur n’aime pas les espaces insécable ?
Si c’est la mésaventure d’helly, c’est parfaitement normal : elle avait mis une espace insécable dans le code, et forcément, là ça a causé des problèmes.
Mais sinon, ne vous privez pas, le compteur aime ça. big_smile


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#610 Le 27/06/2010, à 10:46

tshirtman

Re : /* Topic des codeurs couche-tard [1] */

arf mon implémentation python a un problème, la lecture d'un caractère à la getch n'existe pas en python, la solution la plus propre semble être ça…  http://code.activestate.com/recipes/134892/ hmm

bon, je vais prendre ma douche et essayer de faire du code utile après…

sinon il me semble que le compteur gère déjà les temps UTC… mais c'est peut être buggé… vu la fréquence à laquelle cette fonction sert… et vue l'emmerdement à comprendre du bousin (utc, pas le compteur).

Hors ligne

#611 Le 27/06/2010, à 10:55

nany

Re : /* Topic des codeurs couche-tard [1] */

@Pylade : tu as modifié le code du compteur ? Parce que je vois ça :

            if 'GMT' in str(post):
                try:
                    utc = int(str(post).split('GMT')[-1].split(' ')[0].split('<')[0])
                except:
                    print entry.name,'-> no good GMT!'

Donc je préfère mettre une espace ordinaire.

En ligne

#612 Le 27/06/2010, à 11:07

Pylades

Re : /* Topic des codeurs couche-tard [1] */

Oui. Les seuls caractères pouvant suivre une déclaration de la forme GMT±X sont l’espace ordinaire le chevron ouvrant. Mais il y peut y avoir une espace insécable ailleurs dans la phrase, ou alors je n’ai pas bien compris… Mais c’est vrai que cette ligne est un peu bancale, je vais voir si je peux l’améliorer.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#613 Le 27/06/2010, à 11:23

Pylades

Re : /* Topic des codeurs couche-tard [1] */

Bug corrigé (pas celui du GMT, celui que j’avais introduit et qui est présent depuis deux jours). cool

Je vais voir le GMT.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#614 Le 27/06/2010, à 11:27

helly

Re : /* Topic des codeurs couche-tard [1] */

bon, je vais prendre ma douche et essayer de faire du code utile après…

tman va pas faire plop, il va faire plouf !
Le traître mad


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#615 Le 27/06/2010, à 11:47

tshirtman

Re : /* Topic des codeurs couche-tard [1] */

non non, je suis hydrophile…

mais pfff ste galaire de faire un shampoing, à chaque fois je me dis que je vais en faire plus souvent pour que ce soit moins galère, et une semaine après même topo >_<

Hors ligne

#616 Le 27/06/2010, à 12:31

Pylades

Re : /* Topic des codeurs couche-tard [1] */

Tiens, les pythoneux, comment vous faites pour ne récupérer que les caractères numérique au début de la chaîne ?

Exemple :

>>> '123b4rag tf 42!'.super_method()
'123'

“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#617 Le 27/06/2010, à 12:45

xapantu

Re : /* Topic des codeurs couche-tard [1] */

>>> '123b4rag tf 42!'[0:3]
'123'

edit : et comme d'habitude, j'ai rien compris, désolé Pylade hmm

Dernière modification par xapantu (Le 27/06/2010, à 12:46)

Hors ligne

#618 Le 27/06/2010, à 12:55

xapantu

Re : /* Topic des codeurs couche-tard [1] */

>>>impor re
>>> re.search('^[1-9]+', '123b4rag tf 42!').group(0)
'123'

Là, c'est bon cool

Hors ligne

#620 Le 27/06/2010, à 13:15

gnuuat

Re : /* Topic des codeurs couche-tard [1] */

tshirtman a écrit :

non non, je suis hydrophile…

mais pfff ste galaire de faire un shampoing, à chaque fois je me dis que je vais en faire plus souvent pour que ce soit moins galère, et une semaine après même topo >_<

Suis-je le seul à savoir de quoi tu parles (plop vs plouf) ?


Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#621 Le 27/06/2010, à 13:33

grim7reaper

Re : /* Topic des codeurs couche-tard [1] */

Hello World !

gnuuat a écrit :

Segfault, c'est pas un signal système plutôt ?

Si, mais là c'est un clin d'œil au C entre autres. J'envoie ce signal quand il tape en dehors de sa zone mémoire.

tshirtman a écrit :

mouais, j'ai pus faire tomber le mien à 32 lignes d'un autre coté ^^. j'ai donc la place de commenter tous ls symboles, si j'ai pas la flemme tongue

D'un autre côté, ton interpréteur plante sur tout les codes brainfuck que je lui donne ><.
Il ne gère quasiment rien (il plante s'il y a des commentaires, il plante si le code est multiligne, il plante sur l'opérateur ',' , il signale des '[' unmatched quand il n'y en a pas (bon ça, c'est dû au multiligne il me semble)). Je m'attendais à mieux sad
C'est bien de faire court, mais faire un truc qui fonctionne c'est mieux tongue.
Donc 32 ligne OK, mais tu est loin d'égaler la souplesse de mes 42 lignes cool.

Bon maintenant j'attends une version Python correcte, ou celle d'\\Ouranos// en Ruby smile.

Pylade a écrit :

Sinon, oh oui, le perl c’est bon. smile
(En tous cas ça a l’air.)

Bien sûr que le Perl c'est bon.
[mode=fan]
C'est un langage merveilleux (un descendant du C si l'on peut dire, donc c'est forcément bon).
[/mode]
Et puis, le Perl c'est le seul langage où tu peut faire du golf wink.

Edit : j'avais vraiment la tête dans le cul hier hmm. Je viens d'améiorer l'implémentation de l'operateur ','

"," => sub{ my $in = <STDIN>; $mem[$dp] = ord(substr($in, 0, 1)); },

devient

"," => sub{ $mem[$dp] = ord(getc()); },

Ce qui donne des comportements plus agréables pour les programmes comme la division, la multiplication ou la mise en majuscule smile.

Dernière modification par grim7reaper (Le 27/06/2010, à 13:52)

Hors ligne

#622 Le 27/06/2010, à 16:09

tshirtman

Re : /* Topic des codeurs couche-tard [1] */

gnuuat a écrit :
tshirtman a écrit :

non non, je suis hydrophile…

mais pfff ste galaire de faire un shampoing, à chaque fois je me dis que je vais en faire plus souvent pour que ce soit moins galère, et une semaine après même topo >_<

Suis-je le seul à savoir de quoi tu parles (plop vs plouf) ?

non je ne pense pas wink

@grim: la plupart des choses dont tu parles sont simples à ajouter, j'ai juste mieux à faire, je verrais si ça change tongue, ce qui m'embète le plus c'est le getch() j'aurais bien aimé n'utiliser que des choses incluses de base dans le langage… (et pas trop lourde, j'ai bien regardé pour utiliser curses, mais WTF si j'ai pas d'autres choix que ça…).

Hors ligne

#623 Le 27/06/2010, à 16:21

grim7reaper

Re : /* Topic des codeurs couche-tard [1] */

tshirtman a écrit :

@grim: la plupart des choses dont tu parles sont simples à ajouter, j'ai juste mieux à faire, je verrais si ça change tongue, ce qui m'embète le plus c'est le getch() j'aurais bien aimé n'utiliser que des choses incluses de base dans le langage… (et pas trop lourde, j'ai bien regardé pour utiliser curses, mais WTF si j'ai pas d'autres choix que ça…).

Oui c'est simple smile, je n'ai pas dis le contraire (ça se fait en une ou deux lignes).
Pour le getch(), Python n'a pas ça en standard O_o" ?
Ça craint un peu quand même pour un langage haut niveau…

Dernière modification par grim7reaper (Le 27/06/2010, à 17:14)

Hors ligne

#624 Le 27/06/2010, à 21:27

Pylades

Re : /* Topic des codeurs couche-tard [1] */

Hey !
Vous me conseillez quoi comme taille maximale des lignes pour les commentaires ?
72 ? 79 ? 80 ?


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#625 Le 27/06/2010, à 21:38

grim7reaper

Re : /* Topic des codeurs couche-tard [1] */

Moi j'utilise 80 comme pour le code.
Justification: aucune tongue (enfin si : le coup du 80 revient souvent, doit y avoir un truc historique derrière).

Dernière modification par grim7reaper (Le 27/06/2010, à 21:40)

Hors ligne