99 est un langage de programmation que j'ai inventé plus tôt cette semaine pour mon défi Écrivez un interprète pour 99 . (Inventé mais jamais nécessaire à mettre en œuvre grâce à une demi-douzaine d'entre vous.;)) La spécification de langue complète fait partie de ce défi, donc je ne prends pas la peine de tout republier ici.
En 99, vous pouvez imprimer des caractères ASCII individuels sur stdout, mais en raison des contraintes de la langue, il n'est pas toujours clair comment imprimer un caractère particulier de manière aussi concise que possible.
Pour chacun des 128 caractères ASCII, écrivez un programme 99 qui ne prend aucune entrée et génère ce seul caractère. Vous pouvez coder une ou toutes ces réponses à la main, ou vous pouvez écrire un autre programme (dans n'importe quelle langue que vous aimez) pour les générer pour vous.
La somme des caractères de chacun de vos 128 99 programmes est votre score. Le score le plus bas l'emporte. Les sauts de ligne comptent comme un seul caractère.
Souvenez-vous qu'en 99 , seules les variables de taille paire comme 9999
les caractères ASCII de sortie (les variables de taille impaire produisent des entiers). Leur valeur est divisée par 9, puis prise en mod 128, les valeurs n'ont donc pas besoin d'être dans une certaine plage pour correspondre aux caractères ASCII. Par exemple, les valeurs internes 297, 1449 et -855 correspondent toutes au caractère !
car lorsqu'elles sont divisées par 9 et prises en mod 128, elles deviennent toutes 33, ce qui est le code de caractère pour !
.
Si vous avez besoin d'un interprète pour 99 , je suggère la réponse Python de Mac .
Je sais que j'ai dit que mon prochain défi serait plus interactif, mais je travaille toujours sur le truc pour celui-ci.
la source
Une variété de techniques, 42109
Pour les nombres, au lieu de calculer le grand caractère ASCII, je viens de calculer la valeur du nombre. Vous avez seulement dit de pouvoir sortir le personnage, donc cela devrait toujours fonctionner.EDIT: a changé les chiffres pour utiliser les caractères ASCII, alors ne tenez pas compte de cela. J'ai laissé le code numérique d'origine dans le code Java, mais je l'ai commenté au cas où quelqu'un voudrait l'utiliser.
Certains d'entre eux, je l'ai fait à la main, la plupart j'ai juste écrit un programme à taper.
Celles-ci sont composées de 1 à 4 lignes chacune, elles sont donc assez conviviales pour simplement copier et coller dans un programme. Il convient de noter qu'ils ne fonctionnent pas successivement car mon code généré ne préserve pas les états des variables.
La technique la plus couramment utilisée ici était la même que l'approche orlp:
Ma version diffère en utilisant des cas personnalisés et en composant une grande partie des calculs sur une seule ligne. Les cas personnalisés sont juste où le personnage peut être représenté avec juste un tas de 9 et aucun math ou mon code de génération n'a pu être raccourci.
Programmes
J'ai mis la sortie sur Pastebin pour ceux d'entre vous qui n'ont pas envie d'exécuter le programme:
http://pastebin.com/Cs6WZUfb
Code Java que j'ai utilisé:
la source
999
à la fin doivent donc être corrigés.99 999\n99
(pour réaffecter999
à99
afin qu'il s'imprime en tant que personnage).Soustraction répétée, 65280
Une solution triviale à comparer. Continuez à soustraire 9 de 99, puis sortez. Exemple pour le caractère ASCII 10:
Il y a 128 programmes. Le premier programme comporte deux caractères (99), chacun après 8 caractères (99 99 9 \ n) de plus que le précédent.
Programme Python générant des programmes séparés par des lignes vides, et calculant le score:
la source