CJam , 6 byte (programma completo) / 7 byte (blocco di codice)
q),^W=
Provalo online!
Questo è un programma CJam completo che legge la stringa di input dall'input standard e stampa la lettera mancante sull'output standard. CJam in realtà non ha "metodi", che è ciò che la sfida richiede, ma la cosa più vicina sarebbe probabilmente un blocco di codice eseguibile, come questo:
{),^W=}
Provalo online!
Questo blocco di codice, quando valutato, accetta l'input come stringa (ovvero una matrice di caratteri) nello stack e restituisce il carattere mancante anche nello stack.
Spiegazione: Nel programma completo, q
legge la stringa di input e la mette nello stack. )
quindi elimina l'ultimo carattere della stringa di input e l'operatore di intervallo ,
lo trasforma in un array contenente tutti i caratteri con punti di codice al di sotto di esso (incluse tutte le lettere prima dell'alfabeto). Quindi, per esempio, se l'input fosse cdfgh
, allora dopo ),
lo stack conterrebbe le stringhe cdfg
(cioè l'input con l'ultima lettera rimossa) e ...abcdefg
, dove ...
sta per un gruppo di caratteri con codici ASCII sotto a
(cioè tutti i caratteri sotto l'ultimo input rimosso lettera).
L'operatore di differenza di set simmetrico ^
quindi combina queste stringhe in un'unica stringa che contiene esattamente quei caratteri che compaiono in una delle stringhe, ma non in entrambe. Conserva l'ordine in cui i caratteri compaiono nelle stringhe, quindi per l'input di esempio cdfg
, il risultato dopo ),^
sarà ...abe
, dove di ...
nuovo sta per un gruppo di caratteri con i codici ASCII sotto a
. Infine, W=
estrae solo l'ultimo carattere di questa stringa, che è esattamente il carattere mancante e
che volevamo trovare (e scarta il resto). Al termine del programma, l'interprete CJam stampa implicitamente il contenuto dello stack.
Bonus: GolfScript , 6 byte (programma completo)
),^-1>
Provalo online!
Si scopre che quasi lo stesso codice funziona anche in GolfScript. Salviamo un byte nella versione completa del programma a causa dell'input implicito di GolfScript, ma perdiamo un byte perché, a differenza di CJam W
, GolfScript non ha una comoda variabile a lettera singola inizializzata su -1.
Inoltre, CJam ha tipi interi e di caratteri separati (e le stringhe sono solo array contenenti caratteri), mentre GolfScript ha solo un tipo intero (e ha un tipo di stringa speciale che si comporta in modo leggermente diverso dagli array normali). Il risultato di tutto ciò è che, se vogliamo che l'interprete GolfScript stampi la lettera mancante effettiva anziché il suo numero di codice ASCII, dobbiamo restituire una stringa a carattere singolo anziché solo il carattere stesso. Fortunatamente, apportare questa modifica qui richiede solo la sostituzione dell'operatore di indicizzazione =
con l'operatore di troncamento sinistro array / stringa >
.
Naturalmente, grazie all'I / O implicito di GolfScript, il codice sopra può essere utilizzato anche come frammento che legge una stringa dallo stack e restituisce una stringa di un carattere contenente la lettera mancante. O, piuttosto, qualsiasi frammento che accetta una singola stringa nello stack come argomento e restituisce il suo output come stringa stampabile nello stack, è anche un programma GolfScript completo.