Compilare l'inglese per il tuo capo


16

Il tuo capo ha recentemente appreso di questo interessante linguaggio di programmazione chiamato inglese . Ha avuto questa idea "rivoluzionaria", vuole codificare con te per raddoppiare i tassi di produzione! Dal momento che non è un esperto di tecnologia, vuole che tu scriva un compilatore per farlo in modo che anche lui possa programmare!

Ora, sei un programmatore pigro e malvagio e ovviamente non scriverai un programma per compilare questo linguaggio ridicolmente complesso. Invece, ti assicurerai che ci sia sempre un errore nel codice del tuo capo, in modo che non arrivi mai alla compilazione effettiva e sia bloccato a correggere errori grammaticali invece di scrivere codice.

La sfida è scrivere un programma che può essere eseguito dal terminale e accetta un percorso di file come argomento. Il programma deve:

  1. modificare l'input del file introducendo un refuso.
  2. Fai finta di fallire la compilazione a causa dell'incontro con il refuso che hai introdotto.
  3. L'esecuzione del programma su copie dello stesso file non dovrebbe introdurre lo stesso errore di battitura due volte di seguito.

Per illustrare la sfida, eseguendo il programma su questo file:

Take an array as input.
Sort the array.
Output the array.

dovrebbe produrre qualcosa sulla falsariga di

Error on line 1:
'Take an arqay as input.'
         ^
arqay is not a valid identifier.

e il file che hai detto al programma di compilare dovrebbe ora apparire come:

Take an arqay as input.
Sort the array.
Output the array.

Ecco alcuni dettagli sulle specifiche del programma:

Il tuo programma è autorizzato ad assumere che lo scambio di qualsiasi personaggio nel programma che il tuo capo immette per un diverso personaggio casuale causerà un errore grammaticale. Il tuo programma non dovrebbe usare caratteri non alfabetici per creare errori nel codice dei tuoi capi. Il tuo capo non userebbe mai un numero o un simbolo e scoprirà che qualcosa è in corso. Il tuo programma dovrebbe solo introdurre errori nelle parole del programma del tuo capo. Non modificare gli spazi nelle frasi o la punteggiatura. Il tuo programma non dovrebbe alterare il caso del programma che il tuo capo tenta di compilare, il che significa che errori come arQaynon sono validi. Questo impedisce errori come takeinvece di Takeaccadere o Arrayinvece di array. Il programma dovrebbe generare l'errore indicando innanzitutto a quale riga si trova l'errore:

Error on line <insert line number here>:

Dovrebbe quindi stampare la riga con l'errore all'interno dei 'simboli. Nella riga successiva dovrebbe posizionare un ^simbolo sotto la parola con l'errore, e infine dovrebbe avere del testo che descrive l'errore (questa parte dipende da te, puoi dire quello che vuoi lì purché descriva un errore).

Si può presumere che il file di input esista e che non sia vuoto. Puoi anche presumere che il file di input non abbia errori grammaticali prima di aggiungerne uno.

bonus:

-60 byte se gli errori introdotti dal codice non sono completamente casuali, ma basati su errori di battitura come in questa domanda.

-60 byte per almeno 5 diversi messaggi di errore, alternati casualmente.

-60 byte se il tuo programma ha una probabilità su 1 o meno di inviare un messaggio demotivazionale al tuo capo.

EDIT: il conteggio dei byte dei messaggi non conta per il tuo punteggio. (Grazie a Martin Büttner per questa buona idea)

Questo è code-golf, vince il conteggio dei byte più corto. Per favore, non golfare il contenuto del messaggio di errore, il tuo capo non sarà contento se non riesce a capire i messaggi di errore e ti chiederà di risolverli per lui.


Devo occuparmi di righe che non contengono lettere?
Οuroso

È possibile creare un errore di battitura solo in caratteri alfabetici e si può presumere che il file di input sia un file non vuoto valido esistente.
Rodolphito,

7
Non sono un fan di lasciare a noi i messaggi di errore. Anche se "non golfiamo il messaggio di errore", potrebbero comunque fare la differenza di una manciata di byte, probabilmente anche di due dozzine se stiamo andando per il secondo bonus. Questo può essere abbastanza. Penso che per una gara di golf equa dovresti specificare 5 messaggi di errore e un messaggio demotivazionale, oppure farci sottrarre la lunghezza della loro stringa dal conteggio dei byte.
Martin Ender,

Grazie per il suggerimento, avevo pensato di avere messaggi predefiniti, ma volevo dare un po 'più di libertà a questo. Sottrarre i conteggi dei byte di messaggi dal punteggio è un'ottima idea.
rodolphito,

Risposte:


3

TI-BASIC, 77 - 34 (testo dell'errore) = 43

Nel caso in cui voglia fare il suo lavoro sulla calcolatrice TI-83/84;)

Come standard per le funzioni, la stringa del file dovrebbe essere presente in Ansmodo che possa restituire e visualizzare l'output.

Ans->Str1:If 1=inString(Ans,"A
Then:"B
Else:"A
End:Disp "ERROR ON LINE 1","'"+Ans+sub(Str1,2,-1+length(Str1))+"'"," ^ INVALID

Si noti che molti token sono un byte.


Dove posso eseguire questo codice?
rodolphito,

Calcolatore TI-83/84 o un emulatore per uno.
Timtech,

inString, Ans, sub, Else, Then, End, Disp , Str1... non sono quelle tutto 1 byte per la calcolatrice?
Ismael Miguel,

4
CHE COSA????????????????? È come dire che 8 bit non sono 1 byte !!!!!!!!! Se presento un codice nell'assembly, usando il modulo binario, conteranno anche i byte come 1 macro di 5+ byte? È chiaramente stupido! (scusate le parole forti, ma è davvero stupido!) Questo non rappresenta il vostro codice. Voglio dire, Ansnon è lo stesso del byte rappresentato da Ans. Uno è quello A*n*sche produce qualsiasi risultato desiderato dalla calcolatrice, l'altro restituisce il valore dell'ultima espressione aritmetica. Tenendo conto di ciò, penso che non accettare il conteggio REALE renda questa una rappresentazione errata del codice.
Ismael Miguel,

5
Non sembra modificare casualmente il file, sembra che mostri sempre un cambiamento nella riga 1 e cambia la prima lettera in B se è A, o in A se no.
Rodolphito,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.