CJam , 6 байт (повна програма) / 7 байт (блок коду)
q),^W=
Спробуйте в Інтернеті!
Це повна програма CJam, яка зчитує вхідний рядок зі стандартного вводу та друкує пропущену букву на стандартний вихід. CJam насправді не має "методів", і саме це вимагає завдання, але найближчим моментом, можливо, буде виконуваний блок коду, як це:
{),^W=}
Спробуйте в Інтернеті!
Цей блок коду, коли він оцінюється, приймає вхід як рядок (тобто масив символів) на стеку, і повертає відсутній символ також у стеку.
Пояснення: У повній програмі q
зчитується рядок введення і розміщується в стеку. )
потім вискакує останній символ вхідного рядка, і оператор діапазону ,
перетворює його на масив, що містить усі символи з кодовими точками під ним (включаючи всі літери перед ним в алфавіті). Так, наприклад, якщо введення було cdfgh
, то після ),
стека міститиметься рядки cdfg
(тобто вхід з останньою літерою, вилученою) і ...abcdefg
, де ...
стоїть купа символів з кодами ASCII внизу a
(тобто всі символи нижче видаленого останнього вводу лист).
Оператор симетричного набору різниць ^
потім об'єднує ці рядки в єдиний рядок, який містить саме ті символи, які відображаються в одній з рядків, але не в обох. Він зберігає порядок, в якому символи відображаються в рядках, тому для прикладу введення cdfg
результат після ),^
буде ...abe
, де ...
знову стоїть купа символів з кодами ASCII нижче a
. Нарешті, W=
просто витягується останній символ цього рядка, який є саме відсутнім символом, e
який ми хотіли знайти (і відкидає решту). Коли програма закінчується, інтерпретатор CJam неявно виводить вміст стеку.
Бонус: GolfScript , 6 байт (повна програма)
),^-1>
Спробуйте в Інтернеті!
Виявляється, майже такий же код працює і в GolfScript. Ми зберігаємо один байт у повній версії програми через неявне введення GolfScript, але втрачаємо один байт, оскільки, на відміну від CJam W
, GolfScript не має зручної однобуквеної змінної, ініціалізованої до -1.
Крім того, у CJam є окремі цілі та символьні типи (а рядки - це просто масиви, що містять символи), тоді як GolfScript має лише один цілий тип (і має спеціальний тип рядка, який поводиться дещо інакше від звичайних масивів). Результатом всього цього є те, що якщо ми хочемо, щоб інтерпретатор GolfScript надрукував фактично пропущену букву замість її кодового номера ASCII, нам потрібно повернути односимвольну рядок замість просто самого символу. На щастя, внесення змін тут просто вимагає заміни оператора індексації оператором =
масиву / рядка зліва оператора усікання >
.
Звичайно, завдяки імпліцитному вводу / виводу GolfScript, наведений вище код також може бути використаний як фрагмент, який читає рядок зі стека та повертає односимвольну рядок, що містить пропущену літеру. Або, скоріше, будь-який фрагмент, який приймає одну аркуш на стеку як аргумент і повертає свій результат у вигляді рядка для друку на стеку, також є повноцінною програмою GolfScript.