Rechercher
 
 

Résultats par :
 


Rechercher Recherche avancée

Connexion

Récupérer mon mot de passe

Chatbox externe


Derniers sujets
» [JEU] Mon voisin du dessous
Mar 10 Oct 2017 - 19:42 par Wistaro

» Lancement du TI-Concours 2017 !
Sam 20 Mai 2017 - 0:27 par Paulo1026

» Chaînes Youtube des membres
Ven 19 Mai 2017 - 22:41 par Wistaro

» cacul du taux d'intêret
Ven 24 Mar 2017 - 21:50 par m@thieu41

» [Projet] Un mario by tout82
Dim 29 Jan 2017 - 14:09 par Wistaro

» Cherche documentation assembleur TI82stat
Mer 25 Jan 2017 - 12:29 par Ti64CLi++

» Probleme Ti-82 Stats fr
Jeu 12 Jan 2017 - 13:56 par Ti64CLi++

» ROM 82 stats.fr
Jeu 15 Déc 2016 - 10:24 par Ti64CLi++

» flappy bird
Jeu 15 Déc 2016 - 10:23 par Ti64CLi++

Partenaires
TI-Planet Espace-TI : Forum

Faire un don à Tout-82...
Où va cet argent ?
Membres donateurs:- Persalteas (10€)
- Wistaro (5€)
- jo2geek (22€)

Les posteurs les plus actifs du mois


BrainFuck

Voir le sujet précédent Voir le sujet suivant Aller en bas

BrainFuck

Message par Samos le Ven 7 Mar 2014 - 16:59

Comme je suis de passage, autant poster quelques programmes.
Voilà un interpréteur brainfuck (pour ceux qui ne connaissent pas le langage: http://fr.wikipedia.org/wiki/Brainfuck )
Vous avez une garantie de marche de 50%, c'est possible qu'en plus de la lenteur, il plante  Twisted Evil

J'ai ajouté des instructions: V pour afficher l'état de la mémoire.
Les espaces sont ignorés

Code:
:Input Str1
:{0→L1
:Ans→L2
:1→B
:For(A,1,length(Str1
:   sub(Str1,A,1
:   If Ans="+
:   Then
:         1+L1(B→L1(B
:   Else
:      If Ans="-
:      Then
:            L1(B)-1→L1(B
:      Else
:         If Ans=">
:         Then
:               B+1→B
:            If B>dim(L1
:               B→dim(L1
:         Else
:            If Ans="<
:            Then
:                  B-1→B
:            Else
:               If Ans=".
:               Then
:                     Pause L1(B
:               Else
:                  If Ans=",
:                  Then
:                        Input C
:                     C→L1(B
:                  Else
:                     If Ans="[
:                     Then
:                           A→L2(1+dim(L2
:                     Else
:                        If Ans="]
:                        Then
:                           If L1(B
:                              L2(dim(L2→A
:                        Else
:                           If Ans="V
:                           Then
:                                 Pause L1
:                           Else
:                              If Ans≠"
:                              Then
:                                    Disp "ERR: "+Ans+" IND:
:                                 Pause A
:                                 Menu("DELETE?","Y",0,"N",1
:                                 Lbl 0
:                                 " "+sub(Str1,1,A-1)+sub(Str1,A+1,length(Str1)-A→Str1
:                                 Lbl 1
:                                 Pause Str1
:                              End
:                           End
:                        End
:                     End
:                  End
:               End
:            End
:         End
:      End
:   End
:End

Samos
----------------------
----------------------

Messages : 17
Points Concours : 18
Productivité : 10
Date d'inscription : 16/06/2013
Calculatrice(s) :
  • TI-82 Stats.fr


Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: BrainFuck

Message par persalteas le Ven 7 Mar 2014 - 21:34

Gasp-euh  affraid 
je n'ai pas les skills pour tester, mais, ça me parait bien lourd...

__________________________________________________________________________
Bienvenue sur le nouveau Tout-82, Invité ! Viens discuter sur le chat... What a Face
Depuis que je me suis tatoué une calculatrice sur le bras, vous pouvez compter sur moi ! :P (Best joke ever x) )
avatar
persalteas
----------------------
----------------------

Messages : 482
Points Concours : 152
Productivité : 39
Date d'inscription : 06/12/2012
Localisation : Savoie, France
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur http://tout82.forumactif.org

Revenir en haut Aller en bas

Re: BrainFuck

Message par Linkakro le Ven 7 Mar 2014 - 23:37

Programmer en pur brainfuck est très difficile en soit... même pas de préprocesseur ni de routine.
Teste le avec le helloworld de wikipédia...

Cet interpréteur peut être allégé puisque les alternatives Else ne sont pas indispensables ici, mais cela nécessiterait alors de ne plus utiliser Ans pour le caractère.

ceci était faux:
Je propose le menu d'erreur suivant pour afficher en même temps.
Code:
:Lbl Z
:Menu("ERR: "+Ans+" IND:",A,Z,"DELETE",0,"CONTINUE",1
EDIT : Ceci était tentant mais faux car il faut des chaines de caractères d'où erreur sur le A.


Dernière édition par Linkakro le Sam 8 Mar 2014 - 2:02, édité 1 fois

__________________________________________________________________________
Vétéran du TI-Basic Zilog80. Ti82statfr sur Tout82 depuis 2009 et ti84pocketfr depuis noël 2012. Ti83plusfrUSB (été 2014, concours tiplanet suite du geek). Bidouille un peu d'assembleur Z80.
Incappable de gérer le temps et manque de tact, plutôt serviable.
Je prend les commandes de programme. Je suis motivé par les maths et la physique tant que ce n'est pas une simple copie d'antisèche.
Vous pouvez trouver une grande partie de mes données hébergées dans mon mediafire. Le ZIP et la liste sont périmées depuis longtemps.
coucou Invité What a Face
avatar
Linkakro
----------------------
----------------------

Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: BrainFuck

Message par m@thieu41 le Sam 8 Mar 2014 - 0:12

Argh rien qu'à voir ça j'aime pas ce langage Razz

Heu... on obtiens une erreur argument sur le A en faisant ça non? //Edit: En effet une erreur type donnée plutôt.


Dernière édition par m@thieu41 le Sam 8 Mar 2014 - 10:01, édité 1 fois

__________________________________________________________________________
ZSNAKE Mon premier (et unique) jeu en ASM:
Un Snake 2 joueurs (2caltos)
-> Je travaille sur une version plus stable du jeu, je poste dès que possible.
avatar
m@thieu41
----------------------
----------------------

Messages : 934
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: BrainFuck

Message par Linkakro le Sam 8 Mar 2014 - 1:58

Tu as raison il y a bien une erreur, mais de type de donnée. Il faut des chaînes de caractères. Dommage. Merci pour la bonne remarque.

__________________________________________________________________________
Vétéran du TI-Basic Zilog80. Ti82statfr sur Tout82 depuis 2009 et ti84pocketfr depuis noël 2012. Ti83plusfrUSB (été 2014, concours tiplanet suite du geek). Bidouille un peu d'assembleur Z80.
Incappable de gérer le temps et manque de tact, plutôt serviable.
Je prend les commandes de programme. Je suis motivé par les maths et la physique tant que ce n'est pas une simple copie d'antisèche.
Vous pouvez trouver une grande partie de mes données hébergées dans mon mediafire. Le ZIP et la liste sont périmées depuis longtemps.
coucou Invité What a Face
avatar
Linkakro
----------------------
----------------------

Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: BrainFuck

Message par Wistaro le Sam 8 Mar 2014 - 15:25

Je ne connais pas du tout ce langage, et après un rapide tour sur Wikipedia, sa m'a découragé...

__________________________________________________________________________
Clique ici pour retrouver tout mes programmes en TIbasic

Tu es curieux, Invité? Alors clique ici:


Coucou Invité !Ta dernière visite sur ce forum date de . Tu as posté un total de 78 message(s) sur Tout 82 et enfin, tu as 0 ans.
Si nous sommes le 0, je te souhaite un joyeux anniversaire ;-)

avatar
Wistaro
Passioné
Passioné

Messages : 910
Points Concours : 86
Productivité : 28
Date d'inscription : 16/06/2013
Localisation : Tarbes - DUT GEII
Calculatrice(s) :
  • TI-82
  • TI-82 Stats
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur http://www.youtube.com/user/Wistaro

Revenir en haut Aller en bas

Re: BrainFuck

Message par Samos le Sam 8 Mar 2014 - 22:17

Mais il ne faut pas!
C'est très simple comme langage, il n'y a que 8 instructions   Twisted Evil 
Bon ok, ça devient lourd à programmer, le programme le plus long que j'ai fait faisait une multiplication...
Le Hello World ne marchera pas car je n'affiche que des nombres.
Il faudrait que je crée une table de caractères puis pour les afficher, utiliser un sub(.

Samos
----------------------
----------------------

Messages : 17
Points Concours : 18
Productivité : 10
Date d'inscription : 16/06/2013
Calculatrice(s) :
  • TI-82 Stats.fr


Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: BrainFuck

Message par Linkakro le Lun 10 Mar 2014 - 20:11

L'absence de préprocesseur natif à ce langage me laisse perplexe mais je demeure intéressé.
J'ai écrit une lookuptable sans savoir comment y accéder plus tard. =D Utiliser l'interpréteur sans programme n'est pas gagné Twisted Evil
J'ai persévéré sans lookuptable et j'ai obtenu mes propres routines de copie et de produit.

Je commence à copier ce programme TI-Basic interpréteur pour tester mes routines de Brainfuck. Mais je découvre des défauts de conception. Je me décide donc à l'améliorer.

La taille de la table de données n'est pas affectée. Comme ça peut s'agrandir je peux l'admettre...
Le pointeur nul devrait être géré. Soit on interdira cela soit on insérera un terme.
Le pointeur excessif qui allonge la liste est intéressant. Retenons alors qu'il n'y a donc pas de wrapping (retour à l'autre extrémité).

L'instruction "[" doit réaliser un test à l'entrée dans la définition du langage mais tu ne l'as pas implémenté.
Je propose de corriger "[" avec une boucle dédiée à la recherche d'un "]" fermant ce "[" tout en tenant compte des boucles imbriquées. Je préfère cela à une exploitation de la boucle principale qui imposerait soit une alternative supplémentaire soit des conditions.
Enfin la table de pile de retour n'est jamais vidée, pas même lors d'une sortie de structure.
Par ailleurs j'envisage d'utiliser une variable pour conserver sa taille plutôt que de lire la fonction dim souvent.
Je propose de corriger "]" avec une condition pour vider la pile.

Si l'espace ajouté lors de la suppression de caractère non-sens sert à ne pas déplacer de code pour de la compatibilité avec les boucles, alors il faudra le placer au milieu en remplacement du caractère non-sens.
Si cet espace a un but d'éviter des chaines vides, alors c'est tout faux : les sous-chaînes sub() planteraient aussitôt qu'elles devraient être vides. Cela arriverait aux extrémités.
Il serait judicieux d'ajouter un caractère non-code tel qu'espace à chaque extrémité de la chaîne code juste après la saisie, et naturellement de remplacer les non-sens par espace lors de leur suppression. Ainsi les décalages de code et les chaines vides seront évités.
On peut modifier le pointeur initial si on ne veut pas lire le caractère ajouté en extrémité.

Par ailleurs les conventions du langage que j'ai lu stipulent que tout caractère non-sens est un commentaire, donc je négligerais bien cette fonctionnalité de remplacement des non-sens.

Je soulève à cette occasion une subtilité bien pratique du Brainfuck : si on enchaîne une quelconque boucle à une autre sans action entre les deux, la seconde n'est pas lue, donc on peut mettre n'importe quoi de commentaire à ce moment...

Dans cette première version sans alternative je retire la fonctionnalité de suppression des caractères non-sens.
Code:
:Input Str1
:{0→L1
:Ans→L2
 // :999→dim(L1
:1→B
:For(A,1,length(Str1
:   sub(Str1,A,1→Str2
:   If Str2="+
:      1+L1(B→L1(B
:   If Str2="-
:      L1(B)-1→L1(B
:   If Str2=">
:   Then
:      B+1→B
:      If B>dim(L1
:         B→dim(L1
:   End
:   If Str2="<
:   Then
:      B-1→B
:      If B<1
:      1→B
:   End
:   If Str2=".
:      Pause L1(B
:   If Str2=",
:   Then
:      Input C
:      C→L1(B
:   End
:   If Str2="[
:   Then
:      If L1(B
:      Then
:         A→L2(1+dim(L2
:      Else
:         1→C
:         While C
:            A+1→A
:            sub(Str1,A,1
:            C+(Ans="[")-(Ans="]")→C
:         End
:      End
:   End
:   If Str2="]
:   Then
:      If L1(B
:      Then
:         L2(dim(L2→A
:      Else
:         dim(L2)-1→dim(L2
:      End
:   End
:   If Str2="V
:      Pause L1
:End
Je n'ai pas le courage de revenir aux alternatives ou d'ajouter des conditions... Je montre juste les deux parties qui concerneront le remplacement des caractères non-sens.
Code:
Input Str1
" "+Str1+" "->Str1
Code:
:   If Str2≠" "  // et autres conditions, que ce ne soit pas du code notamment
:   Then
:      Disp "ERR: "+Str2+" IND:
:      Pause A
:      Menu("DELETE?","Y",0,"N",1
:      Lbl 0
:      sub(Str1,1,A-1)+" "+sub(Str1,A+1,length(Str1)-A→Str1
:      Lbl 1
:      Pause Str1
:   End
Et au final ma routine de produit de char marche et donc ce programme interpréteur aussi, youpi !

__________________________________________________________________________
Vétéran du TI-Basic Zilog80. Ti82statfr sur Tout82 depuis 2009 et ti84pocketfr depuis noël 2012. Ti83plusfrUSB (été 2014, concours tiplanet suite du geek). Bidouille un peu d'assembleur Z80.
Incappable de gérer le temps et manque de tact, plutôt serviable.
Je prend les commandes de programme. Je suis motivé par les maths et la physique tant que ce n'est pas une simple copie d'antisèche.
Vous pouvez trouver une grande partie de mes données hébergées dans mon mediafire. Le ZIP et la liste sont périmées depuis longtemps.
coucou Invité What a Face
avatar
Linkakro
----------------------
----------------------

Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: BrainFuck

Message par Samos le Mar 11 Mar 2014 - 21:55

J'ai fait de grosses erreurs, très grosses (et beaucoup d'omissions)  Embarassed 
Je me demandais d'ailleurs pourquoi il plantait sur deux boucles while imbriquées... (Qui n'étaient pas des boucles while dans mon programme)

Spoiler:
Une lookuptable pour le brainfuck?  Shocked Tu parles de ça?
Wikipedia a écrit:Brainfuck C
>​ ptr++;​
< ​ ptr--;​
+​ (*ptr)++;​
-​ (*ptr)--;​
.​ putchar(*ptr);​
,​ (*ptr) = getchar();​
[​ while(*ptr) {​
]​ }

Pour la suppression des caractères, j'avais pensé au cas ou la personne n'a pas appuyé sur la bonne touche et qu'elle ne s'en est pas rendue compte mais ça n'arrive pas souvent et ça se remarque, alors j'abandonne ce bout de code!

Est-ce que je peux reprendre ton code pour le mettre dans le premier post? (bien-sûr, je te citerai comme étant l'auteur)
J'ai modifié quelques caractères, même pas 10 octets, l'idée de wrapping me plaît beaucoup  cheers , la méthode de recherche de fin de boucle aussi!
Code:
:Input Str1
:{0→L1
:Ans→L2
:1→B
:For(A,1,length(Str1
:   sub(Str1,A,1→Str2
:   If Str2="+
:      1+L1(B→L1(B
:   If Str2="-
:      L1(B)-1→L1(B
:   If Str2=">
:   Then
:      1+B(1-(B=999→B
:      If B>dim(L1
:         B→dim(L1
:   End
:   If Str2="<
:   Then
:      B-1→B
:      If not(B
:      dim(L1→B
:   End
:   If Str2=".
:      Pause L1(B
:   If Str2=",
:   Then
:      Input C
:      C→L1(B
:   End
:   If Str2="[
:   Then
:      If L1(B
:      Then
:         A→L2(1+dim(L2
:      Else
:         1→C
:         While C
:            A+1→A
:            sub(Str1,A,1
:            C+(Ans="[")-(Ans="]→C
:         End
:      End
:   End
:   If Str2="]
:   Then
:      If L1(B
:      Then
:         L2(dim(L2→A
:      Else
:         dim(L2)-1→dim(L2
:      End
:   End
:   If Str2="V
:      Pause L1
:End

Samos
----------------------
----------------------

Messages : 17
Points Concours : 18
Productivité : 10
Date d'inscription : 16/06/2013
Calculatrice(s) :
  • TI-82 Stats.fr


Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: BrainFuck

Message par Linkakro le Mer 12 Mar 2014 - 0:38

LookUpTable est une table de données précalculées. Dans le cas concerné par mes précédents propos, il s'agissait donc de la table de multiplication. J'avais écrit un long code brainfuck pour affecter ces données à la mémoire. Puis je ne savais pas comment l'utiliser ensuite.

Je suis content de ces bonnes impressions.
Oui tu peux placer une version à jour dans le message initial. Garde sous la main (par exemple en spoiler) la première version.

J'ai repéré comme dernier changement les incréments du pointeur de données.
Tu poses donc un retour à 1 depuis 999, un retour à dim() depuis 1, et un allongement de la liste si on dépasse dim.
L'ensemble me paraît contradictoire : selon moi les seuils de retour s'il y en a devraient être les même dans les deux sens et être fixés.
Pour ce faire il faudrait affecter la taille à 999 lors d'un passage à zéro et aller à 999 plutôt que de revenir à dim().
D'autre part ces wrapping ne sont pas mentionnés dans les définitions que j'ai lu du langage. Je pense qu'imposer des limites est plus rigoureux que le wrapping.

__________________________________________________________________________
Vétéran du TI-Basic Zilog80. Ti82statfr sur Tout82 depuis 2009 et ti84pocketfr depuis noël 2012. Ti83plusfrUSB (été 2014, concours tiplanet suite du geek). Bidouille un peu d'assembleur Z80.
Incappable de gérer le temps et manque de tact, plutôt serviable.
Je prend les commandes de programme. Je suis motivé par les maths et la physique tant que ce n'est pas une simple copie d'antisèche.
Vous pouvez trouver une grande partie de mes données hébergées dans mon mediafire. Le ZIP et la liste sont périmées depuis longtemps.
coucou Invité What a Face
avatar
Linkakro
----------------------
----------------------

Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: BrainFuck

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum