Votre patron a récemment entendu parler de ce langage de programmation intéressant appelé anglais . Il a eu cette idée "révolutionnaire", il veut coder avec vous pour doubler les cadences de production! Comme il n'est pas un connaisseur de la technologie, il veut que vous écriviez un compilateur pour qu'il puisse aussi coder!
Maintenant, vous êtes un mauvais programmeur paresseux et vous n'écrirez évidemment pas de programme pour compiler ce langage ridiculement complexe. Au lieu de cela, vous allez vous assurer qu'il y a toujours une erreur dans le code de votre patron, afin qu'il n'atteigne jamais la compilation réelle et qu'il soit bloqué en corrigeant les erreurs de grammaire au lieu de coder.
Le défi consiste à écrire un programme qui peut être exécuté à partir du terminal et accepte un chemin de fichier comme argument. Le programme doit:
- modifier l'entrée du fichier en introduisant une faute de frappe.
- Faites semblant d'échouer la compilation en raison de la faute de frappe que vous avez introduite.
- L'exécution du programme sur des copies du même fichier ne doit pas introduire la même faute de frappe deux fois de suite.
Pour illustrer le défi, exécuter votre programme sur ce fichier:
Take an array as input.
Sort the array.
Output the array.
devrait produire quelque chose le long des lignes de
Error on line 1:
'Take an arqay as input.'
^
arqay is not a valid identifier.
et le fichier que vous avez demandé au programme de compiler devrait maintenant ressembler à:
Take an arqay as input.
Sort the array.
Output the array.
Voici quelques détails supplémentaires sur les spécifications du programme:
Votre programme est autorisé à supposer que l'échange d'un caractère dans le programme que votre patron entre pour un autre caractère aléatoire entraînera une erreur de grammaire. Votre programme ne doit pas utiliser de caractères non alphabétiques pour créer des erreurs dans le code de votre patron. Votre patron n'utiliserait jamais un chiffre ou un symbole, et il découvrirait que quelque chose se prépare. Votre programme ne doit introduire que des erreurs dans les mots du programme de votre patron. Ne modifiez pas les espaces dans les phrases, ni la ponctuation. Votre programme ne doit pas modifier le cas du programme que votre patron essaie de compiler, ce qui signifie que des erreurs comme ne arQay
sont pas valides. Cela empêche les erreurs comme take
au lieu de se Take
produire, ou Array
au lieu de array
. Votre programme doit générer l'erreur en indiquant d'abord à quelle ligne l'erreur se trouve:
Error on line <insert line number here>:
Il devrait ensuite imprimer la ligne avec l'erreur à l'intérieur des '
symboles. Sur la ligne suivante, il devrait placer un ^
symbole sous le mot avec l'erreur, et enfin il devrait avoir un texte décrivant l'erreur (cette partie dépend de vous, vous pouvez y dire ce que vous voulez tant qu'elle décrit une erreur).
Vous pouvez supposer que le fichier d'entrée existe et qu'il n'est pas vide. Vous pouvez également supposer que le fichier d'entrée ne contient aucune erreur grammaticale avant d'en ajouter une.
Bonus:
-60 octets si les erreurs introduites par votre code ne sont pas complètement aléatoires, mais basées sur une faute de frappe comme dans cette question.
-60 octets pour au moins 5 messages d'erreur différents, en alternance aléatoire.
-60 octets si votre programme a 1 chance sur 100 ou moins d'envoyer un message démotivant à votre patron.
EDIT: Le nombre d'octets des messages ne compte pas dans votre score. (Merci à Martin Büttner pour cette bonne idée)
C'est le golf par code, le nombre d'octets le plus court gagne. Veuillez ne pas jouer au contenu du message d'erreur, votre patron ne sera pas content s'il ne comprend pas les messages d'erreur et vous demandera de les corriger pour lui.
Réponses:
TI-BASIC, 77-34 (texte d'erreur) = 43
Au cas où il voudrait faire sur sa calculatrice TI-83/84;)
En standard pour les fonctions, la chaîne de fichier doit être dans
Ans
afin qu'elle puisse retourner et afficher la sortie.Notez que de nombreux jetons sont d'un octet.
la source
inString
,Ans
,sub
,Else
,Then
,End
,Disp
,Str1
... ne sont pas ceux tout 1 octet pour la calculatrice?Ans
n'est pas le même que l'octet représenté parAns
. L'un est celuiA*n*s
qui produit le résultat souhaité par la calculatrice, l'autre renvoie la valeur de la dernière expression arithmétique. Compte tenu de cela, je pense que le fait de ne pas accepter le compte REAL en fait une mauvaise représentation du code.