Ora è il momento di mostrare le tue capacità di scrivere codice errato. Sto provando un nuovo tipo di puzzle di programmazione, molto simile, credo, al contestato C. La differenza principale è che questo non è altrettanto nefasto: è solo un bel divertimento pulito. L'obiettivo del puzzle è racchiudere quanti più bug possibile in un programma. Il vincitore di questo concorso è colui che scrive il programma con il maggior numero di bug per personaggio.
Per evitare un'enorme serie di commenti che richiedono chiarimenti, dovrei definire in questo momento ciò che considero essere bug qualificanti.
Innanzitutto, un bug non è un errore . Se si tratta di un problema che può essere rilevato dall'interprete come errore (ad es. Delimitatori non corrispondenti, sintassi mal formata, accesso a una proprietà di un oggetto null, ecc.) O se impedisce al programma di eseguire o continuare, non lo è un insetto. Altrimenti, è possibile digitare quattro caratteri e l'interprete potrebbe elencare otto errori di sintassi e si potrebbe richiedere un rapporto carattere-bug di 2.
In secondo luogo, il bug non deve essere ovviamente sbagliato e un bug non è un uovo di Pasqua . Questo è certamente un criterio soggettivo, ma ritengo essenziale questo tipo di contest. Ciò significa che non è possibile avere un codice condizionale che manipola specificamente il codice in modi ovvi. (Leggi: usa un linguaggio turing pit, perché nessuno saprà la differenza).
Terzo, il bug deve essere plausibile . Questo è soggettivo, come quello sopra, ma il bug deve sembrare che potrebbe essere stato scritto da una persona poco meticolosa o forse ignorante, o da qualcuno che ha appena fatto un errore. Ciò include, ad esempio, errori o sintassi off-by-one che sono validi e sembrano corretti ma causano comportamenti indesiderati (diciamo, usando parentesi quadre anziché parentesi).
Il bug può causare qualsiasi tipo di comportamento indesiderato al programma, incluso, ma certamente non limitato a, output indesiderato per alcuni casi eccezionali, avere un comportamento diverso in base a qualcosa che non sembra correlato (ad esempio, l'output viene visualizzato in modo diverso a seconda che il tempo corrente finisca con un numero pari o dispari di secondi), perdite di memoria, perdita di dati e così via.
Esempio di problema:
Crea un programma che mostri tutti i caratteri ASCII in ordine crescente del loro valore numerico.
Esempio di risposta:
Brainf ***, 5 caratteri, 1 bug, 0,2 rapporto bug-char
+[+.]
Bug: non visualizza il carattere ASCII per 1. Potrebbe essere corretto cambiando in .+[.+]
.
Ok, penso che dovresti averlo ottenuto per lo più ormai, ecco il tuo puzzle:
Decodifica un Caesar Cipher e ordina le parole in ordine alfabetico
Un codice caesar viene creato prendendo una serie di lettere e spostandole n in lettere dell'alfabeto. Se arriva fino all'inizio o alla fine dell'alfabeto, A viene dopo Z e Z viene prima di A. Ad esempio:
Mannequin
Nboofrvjo //Shifted over 1 or -25
Wkxxoaesx //Shifted over 10 -16
Ftggxjnbg //Shifted over -7 or 19
Ti verranno dati due input (puoi ottenere input ma è più conveniente per te, entro limiti ragionevoli). Il primo input sono le parole e il secondo input è il valore su cui viene spostato. Il tuo compito è quello di produrre le parole decodificate, e quindi le parole decodificate dopo che sono state ordinate alfabeticamente.
Esempio (senza offesa per i cattivi ragazzi, è solo un esempio):
Primo input: gtdx wjbfwiji. ljy Gfi hfssty
Secondo input: 5
Prima uscita: ragazzi premiati. ottenere Bad non può
Seconda uscita: i cattivi ragazzi non possono essere ricompensati.
In bocca al lupo!