Un de mes types de défis préférés sur ce site sont les défis à source restreinte . Ces défis imposent une restriction exploitable par ordinateur que les sources de réponses potentielles doivent passer. J'aime tellement ces défis que je travaille sur un langage de golf conçu pour gagner à ces défis depuis un certain temps maintenant. Maintenant, je veux vous lancer le défi. Votre tâche consiste à concevoir un langage pour résoudre une variété de tâches source restreintes. Vous aurez le temps de concevoir et de mettre en œuvre un langage, auquel cas les changements et les nouveaux ajouts seront non concurrents et toutes les soumissions se feront face à face dans un gantelet de défis de source restreinte .
Notation
Avant de publier le défi, je proposerai une liste de défis simples à résoudre et une liste des restrictions de source à suivre. Pour chaque correspondance de restrictions de défi et de source, votre langue peut gagner entre 0 et 2 points. (il y aura 10 défis et 10 restrictions conduisant à 100 combinaisons totales)
- 1 point s'il peut terminer la tâche avec la restriction en moins de 150 octets
- 2 points si la solution est la solution la plus courte de n'importe quelle langue en compétition (les deux langues marqueront 2 points en cas d'égalité)
- 0 point s'ils ne parviennent pas à créer un programme qui termine la tâche sous la restriction en moins de 150 octets.
Votre score sera la somme de tous les points gagnés dans chaque match possible. Le but est d'obtenir le meilleur score. D'autres personnes peuvent vous aider à trouver vos solutions à chaque défi et à améliorer votre score.
Je vais révéler 4 éléments de chaque liste au moment de la publication et 8 autres une semaine après la deuxième réponse. Vous ne serez autorisé à marquer 1 point (la soumission la plus courte ne compte pas) dans toute correspondance qui a révélé les deux parties avant la première semaine. De cette façon, vous pouvez avoir une idée de la façon dont votre langue se cumule pendant que vous travaillez dessus, mais vous ne pouvez pas concevoir votre langue simplement pour intégrer tous les défis et restrictions.
Je vais inclure un hachage des catégories prévues avec la question afin que vous puissiez être sûr que je ne les change pas au cours de la semaine au profit de toute fête. De plus, je ne dirai à personne les paramètres cachés avant la fin de la semaine et je ne participerai pas moi-même au défi.
Langues préexistantes
Ce défi est ouvert à toutes les langues préexistantes mais si vous n'êtes pas l'auteur de la langue, veuillez faire votre réponse sur un wiki communautaire afin que les autres membres de notre communauté puissent contribuer directement au score. Les drapeaux de ligne de commande ne doivent obéir à aucune restriction, mais chaque programme doit être exécuté avec les mêmes arguments de ligne de commande (c'est-à-dire que vous devez en choisir un et le respecter). Ceux-ci ne s'ajoutent pas à votre nombre d'octets.
Défis et restrictions
Des restrictions sont appliquées sur le codage ASCII de vos fichiers binaires, quelle que soit la page de codes que vous utilisez. Certains d'entre eux renvoient à une question existante sur le site dont ils héritent leurs exigences io pour les défis et les restrictions de source pour les restrictions. Vous pouvez ignorer tout ce qui peut "interdire les incorporations" ou remplacer les méta-consensus existants sur l'un des défis liés.
En guise d'avertissement: n'essayez pas de juger un avocat; Je sais que c'est une compétition mais parce qu'il y a essentiellement 100 défis de sous-défis différents et je ne peux tout simplement pas garantir que tous ne poseront aucun problème. Essayez juste de vous amuser.
Défis
Restrictions
Les octets sont dans l'ordre croissant (chaque octet est supérieur au dernier)
Le code source est un palindrome
Les autres critères ont un hachage sha512 de:
4de5eca33c6270798606cf1412820c4ce112d8b927ef02877f36795b2b15ffacca51ea598fa89b8d6bc9f4cde53810e0e7ade30e536e52e28f40a6a13841dfc5 -
la source
Réponses:
Largeur
L'interpréteur est toujours en cours de réalisation (j'ai encore plusieurs emplacements de commande inutilisés). Le dépôt, avec plus de documentation, peut être trouvé ici .
Dennis a ajouté Width à TIO il y a moins d'une minute: Essayez-le en ligne!
La largeur est un langage ésotérique basé sur la pile que j'ai développé récemment sur la base des idées que j'ai jetées pour la première fois dans cette question . Il est entièrement basé sur la largeur, plus ou moins, d'une lettre dans une police "régulière". Les seuls caractères qui font quoi que ce soit sont les lettres majuscules et minuscules. Tous les autres personnages sont ignorés. J'ai divisé les lettres en 10 catégories de largeur différentes, qui forment les 10 actions différentes possibles dans Largeur:
2
,5
et6
permettent d'accéder aux commandes, dont la plupart interagissent avec la pile. Plus d'informations peuvent être trouvées sur lainfo.txt
page du dépôt Github.Il s'agit du code Python de l'interpréteur. J'ai encore plusieurs commandes à ajouter, et je réfléchis à la façon de travailler avec la gestion des erreurs, mais sinon, elle devrait être complète. (Je vais également ajouter un drapeau à un moment donné pour permettre des tests avec une syntaxe plus abstraite, car sinon ce langage est une douleur géante à travailler)
la source