[Concours] À La Limite Du Raisonnable #4
Posté le 15/10/2021 15:13
Salut à tous programmeurs fous, et bienvenue dans la 4ème édition du concours
À La Limite Du Raisonnable !
Les règles sont simples : vous devez programmer un jeu de votre choix avant Dimanche soir (17 Octobre) à 23h59, en respectant les règles suivantes. Les programmes seront notés semi-informellement sur 10 avec les critères du CPC (voir les
règles du CPC #27).
Les caractères 0...9, +, -, × et ÷ sont interdits.
Bien sûr, vous aurez besoin de nombres et d'arithmétique... mais vous devrez les faire autrement.
Vous ne pouvez utiliser qu'une liste au plus, et aucune matrice.
Toutes les variables exotiques, Str, fn, et autres méthodes de stockages sont autorisées.
Goto/Lbl sont interdits, sauf si vous n'utilisez que ça.
Vous pouvez prendre la pilule bleue et écrire un programme qui ne contient aucun Goto/Lbl. Ou vous pouvez prendre la pilule rouge et n'utiliser que ça, auquel cas seuls Goto, Lbl, Isz et Prog sont autorisés pour les tests et sauts (Return, Dsz, ⇒ sont interdits en particulier, en plus évidemment de tous les If, For, While, Do, etc). En cas de doute demandez-moi si une instruction est autorisée. 1 point bonus si vous prenez la deuxième option.
Soit écran texte uniquement (avec au moins un ASCII art) soit écran graphique uniquement (avec au moins une Picture).
La qualité du pixel art ou de la Picture n'importe pas pour le respect de la règle, mais il y a des points de graphismes... x3
Le meilleur programme remportera une
batterie portable CASIO grâce au soutien de
CASIO Éducation !
À vos calculatrices !!
Citer : Posté le 15/10/2021 22:52 | #
J'ai fini de faire un + ou -, catégorie pillule rouge
J'essaie de poster ça demain.
Suivant le temps que je me libère, je tenterais soit un truc pour le concours de rentrée, soit un programme ALLDR
Citer : Posté le 16/10/2021 07:42 | #
Incroyable, j'ai déjà mal au crane ! Je vais prendre la pillule rouge et ressasser tous mes choix de vie. Bon courage les gens
Je vais pas mentir, je l'ai fait expressément pour toi. Je pense que c'est vraiment galère sans génération automatique (je vais peut-être essayer ça lol), donc j'espérais calmer ta fervente défense du goto comme dans une certaine édition d'un grand titre pâtissier.
Sinon j'ai pas vraiment compris d'où sort le 10^(20) de Lephé ?
Ton programme de boucle s'appelle récursivement 10 fois, et tu as environ 20 niveaux d'appels récursifs autorisés (24 je crois mais je prends un peu de marge). Avec ça tu peux créer jusqu'à 10²⁰ appels au programme principal en utilisant un Prog différent quand tu es à profondeur 20.
Sauf shenanigans qui m'échappent, il est très facile de prouver que tous les programmes terminent puisque Isz et Prog ne permettent pas de revenir en arrière dans le code ; si tu inlines tous les appels de sous-programmes ton programme devient linéaire et termine donc toujours. Pas Turing-complet du coup, mais "suffisant".
J'ai fini de faire un + ou -, catégorie pillule rouge
Bien joué ! Un peu plus long que celui-là je parie ?
Citer : Posté le 16/10/2021 08:39 | #
Je sais pas trop ce que tu veux dire par là, car actuellement la variante du plus ou moins pillule c'est violent est composé de trois programmes récursifs entre eux.
Mais quoi qu'il arrive, tu peux pas descendre de plus de 10 niveaux, que tu change de progamme ou non.
Une solution serait de dupliquer le code dans les programmes pour simuler plus de niveaux, mais à part ça je vois pas.
Citer : Posté le 16/10/2021 08:51 | #
Tu as raison, tu as droit à 11 niveaux y compris le niveau initial. Donc 10¹⁰ tours maximum, ce qui suffit aussi
Ajouté le 16/10/2021 à 10:55 :
Bon j'ai pas pu m'empêcher d'essayer donc je vais voir pour coder un petit jeu tout bête avec la pilule violette (et un autre caractère utile interdit, pour le trip).
Citer : Posté le 16/10/2021 20:06 | # | Fichier joint
J'osais pas en faire un vrai programme, parce que je me respecte, contrairement à certains producteurs de jeux un peu cons à cliquer
Bref, ci-joint ALLRD. Cette première version est pilule rouge, classique.
Citer : Posté le 16/10/2021 20:06 | # | Fichier joint
La seconde version est pilule violette façon LSD :
Puisqu'à la question « Les caractères interdits le sont seulement dans le code ou bien il est également interdit de les afficher ? » Lephe a répondu qu'il était autorisé de les afficher, j'en ai déduit qu'ils étaient seulement interdits dans le code. C'est pourquoi le second programme s'appelle ALLDR2, le 2 n'étant pas dans le code
Edit : ah oui, ce sont des plus ou moins
Citer : Posté le 17/10/2021 12:11 | #
Merci pour les soumissions ! J'ai oublié de le préciser mais je testerai tout très rapidement (probablement d'ici demain soir) donc les résultats seront là tout de suite
Ajouté le 17/10/2021 à 16:07 :
Du coup j'ai réalisé ce que mentionnais précédemment en termes de comment faire un jeu avec la pilule violette : Metro Siberia ALLDR.
C'est pas si gros que ça en termes de code en fait, à peine 500 octets (et la Picture).
La question c'est comment programmer avec seulement Isz et Prog comme structures de contrôle (plus Exit pour quitter). Essentiellement je fais une initialisation dans METRO.SI et toute la magie se passe dans METROS.A. Ce programme est appelé initialement au "niveau 8" et il s'appelle récursivement 4 fois au niveau inférieur jusqu'à toucher le niveau 1, auquel cas il appelle METROS.B. Ici ça nous donne entre 50'000 et 1 million d'appels à METROS.B. Bien sûr il faut une liste pour servir de pile sinon la récursion ne marche pas ; j'utilise la liste 1.
METROS.B implémente une "étape" de jeu ; ici c'est assez facile parce que le jeu n'a qu'un écran, mais s'il y en avait plusieurs il devrait gérer les transitions. La contrainte c'est qu'il n'y a pas de boucles, donc si on veut une boucle il faut faire un seul tour dans METROS.B et ensuite attendre le prochain appel pour faire le tour suivant.
Citer : Posté le 17/10/2021 19:09 | # | Fichier joint
Bonsoir !
J'abandonne, parce que j'ai, euh, légèrement raté le concours x3.
L'origine du problème provient du fait que j'ai commencé à programmer le jeu directement sans me soucier des contraintes sur les chiffres et les opérations, en me disant que je pouvais convertir une addition en Sum {a, b}, rajouter un (-) pour soustraire, utiliser la fraction pour diviser, diviser avec un inverse pour multiplier, etc. Au niveau des chiffres, je comptais avoir une Liste prédéfinie contenant les variables principales parce que y'a rien d'illégal à ça
C'était une erreur. J'aurais dû coder directement le moteur avec les contraintes, parce que je me suis retrouvé à 18h30 avec la nécessité de remplacer une cinquantaine de valeurs et de changer toutes les opérations
Si j'avais eu plus de temps, je l'aurais fait, mais étant donné que je ma deadline personnelle se situait vers 19h30, et que j'ai mis 10 minutes pour convertir une dizaine de lignes de code, je me retrouve dans l'obligation d'abandonner.
À part ça, j'ai pris beaucoup de plaisir à développer un petit jeu, certes pas original, mais qui m'a permis de réviser la trigonométrie
C'est un petit jeu de tanks/worms ≤comme on en trouve beaucoup sur le site. On se déplace avec les flèches, la première pression sur [SHIFT] permet de choisir son angle de tir, puis en maintenant à nouveau [SHIFT] on contrôle la puissance de feu. On peut jouer seul face à robot totalement stupide ou bien à deux
J'ai mis les sources en pièce jointe, bonne chance aux autres participants
En vrai j'avais envie de faire un worms depuis quelques semaines–
Citer : Posté le 18/10/2021 00:29 | #
Je participe avec Paper Fall
Je ne suis pas entièrement satisfait du jeu vu que j'ai manqué de temps (j'ai mis du temps à me fixer sur une idée et je n'ai commencé à coder que le dimanche après midi). La physique de la feuille et le level design pourraient être améliorés. Et comme j'ai opéré comme Masséna (coder le jeu normalement puis remplacer tous les chiffres et opérations à la fin), le jeu a beaucoup perdu en fluidité avec les techniques que j'ai utilisé pour générer des nombres et faire des additions (a+b = ln((e^a)(e^b))), que j'aurais pu mieux optimiser (j'ai aussi découvert à la fin que BG-Pict ne pouvait pas prendre de variable en argument, mais que RclPict si).
Je suis quand même content d'avoir pu rendre quelque chose
Citer : Posté le 18/10/2021 06:31 | #
Merci ! Avec tout ça, les participations sont closes. Désolé que tu n'aies pas réussi à aller au bout Masséna, et merci Alexot. Je testerai ça très vite, avec un peu de chance ce soir, les résultats seront annoncés dans la foulée
Puisqu'on est encore là, je propose de faire un tour des tricks utilisés pour esquiver les caractères limités !
Personnellement pour les chiffres, j'ai trouvé que le plus simple était de la trigo :
Et pour les opérations :
Citer : Posté le 18/10/2021 09:22 | #
Niveau trick pour la pilule rouge, un moyen simple de faire des sauts conditionnels est d'utiliser la valeur -1 fois le test qu'on cherche.
StrLen("This is hard")→B
?→C
A(C≠B→R
Isz R
Goto A
"B est égal à C"
Goto E
Lbl A
"B n'est pas égal à C"
Lbl E
Citer : Posté le 18/10/2021 21:58 | #
Oh le génie KikooDX il utilise . pour faire 0 parce qu'en Basic à la fois la partie entière et la partie décimale sont optionnelles xD
Citer : Posté le 18/10/2021 22:06 | # | Fichier joint
Une vidéo pour l'article de résultats. C'est propre y'a pas à dire !
Citer : Posté le 18/10/2021 22:13 | # | Fichier joint
Ça c'est une vidéo de ma participation symbolique.
Citer : Posté le 18/10/2021 22:24 | # | Fichier joint
Voici KABOOM !
Citer : Posté le 19/10/2021 06:38 | # | Fichier joint
Et voilà le dernier, comme ça vous avez toute la collection en avance