Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Discussions


Index du Forum » Discussions » Basic Casio Golf
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Basic Casio Golf

Posté le 11/05/2021 00:03

Ce topic est motivé par une courte discussion survenue sur la shout à propos d'un plus ou moins Basic. Le code, bien que simple, était bien marrant à optimiser. Je propose de commencer une « activité » de golf Basic Casio, où l'objectif est d'écrire une solution à un problème en utilisant le moins d'octets possible.

Plus ou moins [23 octets] [11/05/2021]
Auteur : Lephénixnoir

Plus ou moins solo, avec nombre tiré au sort parmis 100 choix.
Int ᴇ2Ran# →R
Do
?→G
R<G◢
LpWhile R-G

Dark Storm [24 octets] [10/05/2021]
Dark Storm [24 octets] [10/05/2021]

Int 100Ran# →R
Do
?→G
R<G◢
LpWhile G≠R


Pendu [228 octets] [10/05/2021]
Auteur : KikooDX

Pendu deux joueurs complet.
8 essais avant de perdre.
Empêcher la triche softlock-tier.
PENDU.g3m
?→Str 1
"-"→Str 5
StrSrc(Str 1,Str 5)⇒÷
""→Str 2
StrLen(Str 1)→L
For 1→A To L
Str 2+Str 5→Str 2
Next
8→T
Do
ClrText
Locate 1,6,T
Locate 1,7,Str 2
?→Str 9
StrSrc(Str 9,Str 5)+(1≠StrLen(Str 9)⇒÷
StrSrc(Str 1,Str 9
Not Ans⇒Dsz T
If Ans
Then For 1→A To L
StrMid(Str 1,A,1→Str 3
StrSrc(Str 3,Str 9)⇒StrLeft(Str 2,A-1)+Str 3+StrRight(Str 2,L-A→Str 2
Next
IfEnd
LpWhile TStrSrc(Str 2,Str 5


Test de primalité [26 octets] [11/05/2021]
Auteur : Lephénixnoir

?→N
N Rmdr Seq(X,X,2,N-1,1
Min(List Ans


Liste des diviseurs [24 octets] [11/05/2021]
Auteur : Lephénixnoir

?→A
For 1→B To A
A Rmdr B=0⇒B◢
Next

FlamingKite [29 octets]
FlamingKite [29 octets]
?→A
For 1→B To A
Frac (A÷B)=0⇒B◢
Next
""


Tours de Hanoï [16 + 57 = 73 octets] [11/05/2021]
Auteur : Lephénixnoir

Chaque déplacement est indiqué par deux ◢ :d'abord la colonne où saisir un disque, et ensuite la colonne où lâcher ce disque.
Programme principal
?→N
1→A
3→B
Prog "H"

Programme "H"
Dsz N
6-A-B→B
N⇒Prog "H"
N⇒6-A-B→B
A◢
B◢
6-A-B→A
N⇒Prog "H"
6-A-B→A
Isz N


Un sujet à proposer ?
Proposez un programme de moins de 256 octets (sous forme de fichier .g*m), et une description de son comportement ou objectif. Le sujet sera simplifié avant d'être ajouté au topic.


Lephenixnoir Hors ligne Administrateur Points: 24228 Défis: 170 Message

Citer : Posté le 11/05/2021 09:04 | #


J'ai du mal à penser que le programme de Darks marche étant donné qu'il ne spécifie jamais la valeur de R !

Ton décompte n'est pas tout à fait exact d'ailleurs. Sur ma Graph 35+E II un programme vide commence à 34 octets, et avec le code je suis à 58 octets, donc ça fait 24 (en comptant un →R après le Ran#). J'obtiens le même résultat en comptant manuellement.

Du reste, je gagne un octet en utilisant ᴇ2 au lieu de 100 (23 octets).

Int ᴇ2Ran# →R
Do
?→G
R<G◢
LpWhile R-G

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 11/05/2021 09:22 | #


Merci, j'avais oublié →R lors de la recopie du code de DS et ne m'en étais pas rendu compte >_< J'ai aussi raté le comptage, je suis vraiment pas dégourdi.

Je vais mettre à jour le topic avec ta solution
Je mettrai probablement l'historique dans un spoiler.
ouais ouais
Lephenixnoir Hors ligne Administrateur Points: 24228 Défis: 170 Message

Citer : Posté le 11/05/2021 09:24 | #


Comment est-ce que le comptage se passe si on a plusieurs sous-programmes ? (Est-ce que c'est autorisé déjà ?)

Ajouté le 11/05/2021 à 09:33 :
Test de primalité (26 octets)

?→N
N Rmdr Seq(X,X,2,N-1,1
Min(List Ans

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 11/05/2021 09:35 | #


Cela te convient-il d'ajouter 32 octets au score par sous-programme supplémentaire ? Ou une autre valeur, j'écoute là-dessus. Je n'ai pas pensé aux sous-programmes.
ouais ouais
FlamingKite Hors ligne Membre Points: 516 Défis: 9 Message

Citer : Posté le 11/05/2021 09:50 | #


Liste de diviseurs d'un entier (60 octets)

?→A
For 1→B To A
Frac (A÷B)=0⇒B◢
Next
""


Les 2 guillemets de fin ne rajoutent rien au poids du programme, et ça évite de doubler le dernier diviseur (A lui même) xD.
Tester jusqu'à √A suffirait, mais ça rajoute 4 octets, donc là on gagne 4 octets et on a la liste complète des diviseurs.

Ca pourrait s'optimiser encore plus ?
Lephenixnoir Hors ligne Administrateur Points: 24228 Défis: 170 Message

Citer : Posté le 11/05/2021 10:00 | #


Honnêtement je serais tenté de ne compter que le poids du code sans la partie fixe ; surtout que Prog prend 5 octets plus la longueur du nom du programme, donc même sans malus particulier ce sera rarement rentable. En gros c'est toujours plus simple d'insérer le code du sous-programme, sauf dans le cas que j'ai en tête, où le programme est récursif. Du coup je vois pas trop d'abus possible.

(Edit : Il y a le cas où on appelle le code plusieurs fois, mais ça me parait legit aussi.)

Le programme de FK fait 29 octets d'ailleurs.

Pour info FK, il y a deux détails à prendre en compte pour trouver la taille du programme : d'abord il y a une taille fixe quand tu commences et que le programme est vide, et ensuite PRGM affiche que les mutiples de 4. Du coup, pour trouver la taille d'un programme, il faut rajouter entre 1 et 4 caractères et regarder quand PRGM passe au multiple de 4 suivant. Chez moi avec un seul caractère je passe de 60 à 64 donc ton programme fait 63 octets. Ensuite tu fais pareil avec un programme vide, chez moi il fait 34 octets ; donc ton code fait 29.

Et sinon voilà une version de 27. x3

?→A
For 1→B To A
A Rmdr B=0⇒B◢
Next
""

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
FlamingKite Hors ligne Membre Points: 516 Défis: 9 Message

Citer : Posté le 11/05/2021 10:07 | #


Ah d'accord merci pour les explications sur le poids du programme, je m'étais pas foulé, j'avais simplement pris le poids affiché

Sinon, merci pour Rmdr, je ne connaissais pas
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 11/05/2021 10:13 | #


Niveau technique je ne trouve pas les sous-programmes sans poids très cohérents, mais ça créera des solutions intéressantes alors OK, ils sont autorisés

Je vais ajouter vos codes, Lephé je me permet de retirer les deux guillemets et le saut à la ligne ─ ça fait trois octets en moins, et le dernier nombre affiché n'est pas faux bien que redondant.
ouais ouais
Lephenixnoir Hors ligne Administrateur Points: 24228 Défis: 170 Message

Citer : Posté le 11/05/2021 10:29 | #


Ok, merci ! Voilà pour le programme que j'avais en tête du coup.

Tours de Hanoï (16 + 51 = 67 octets)

Chaque déplacement est indiqué par deux ◢ :d'abord la colonne où saisir un disque, et ensuite la colonne où lâcher ce disque.

?→N
1→A
3→B
Prog "H"

# Programme "H"
6-A-B→B
Dsz N
Prog "H"
A◢
6-A-B→B◢
6-A-B→A
N⇒Prog "H"
6-A-B→A
Isz N


Ajouté le 11/05/2021 à 16:24 :
J'ai trouvé une astuce pour réduire le programme ci-dessus donc je l'ai mis à jour.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Merrilimaont Hors ligne Membre Points: 1 Défis: 0 Message

Citer : Posté le 25/11/2022 10:00 | #


je ne suis pas d'accord avec tout le monde, il y a beaucoup d'erreurs que vous avez
Redcmd Hors ligne Membre Points: 380 Défis: 7 Message

Citer : Posté le 08/12/2022 21:56 | #


Snake.
Size: 195 bytes


3 -> Q~Y
{7, 21 -> Dim Mat A
Mat A -> Mat B
Do
    If X = Q(Y = R :Then
        RanInt#(1, 7 -> R
        RanInt#(1, 21 -> Q
    Else
        Mat A[W, V
        0 -> Mat A[W, V
        Locate V, W, " "
        Mat B[W, V -> W
        Ans -> V
    IfEnd
    Locate Q, R, 8
    GetKey => 2MOD(GetKey, 4 -> U
    X
    Y -> T
    U < 3 => Y + U - 1 -> Y
    U > 3 => X + U - 5 -> X
    Locate X, Y, 0
    X -> Mat A[T, Ans
    Y -> Mat B[T, Ans
LpWhile 0 = Mat A[Y, X


LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 87 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd