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, но теряем один байт, потому что, в отличие от CJamW
, в GolfScript нет удобной однобуквенной переменной, инициализированной -1.
Кроме того, CJam имеет отдельные целочисленные и символьные типы (а строки - это просто массивы, содержащие символы), тогда как GolfScript имеет только один целочисленный тип (и имеет специальный строковый тип, который ведет себя несколько иначе, чем обычные массивы). Результатом всего этого является то, что, если мы хотим, чтобы интерпретатор GolfScript распечатывал фактическую пропущенную букву вместо ее кодового номера ASCII, нам нужно возвращать односимвольную строку вместо только самого символа. К счастью, внесение этого изменения просто требует замены оператора индексации на оператор =
усечения массива / строки слева >
.
Конечно, благодаря неявному вводу-выводу GolfScript, приведенный выше код также можно использовать как фрагмент, который читает строку из стека и возвращает односимвольную строку, содержащую пропущенную букву. Или, скорее, любой фрагмент, который принимает одну строку в стеке в качестве аргумента и возвращает свой вывод в виде строки для печати в стеке, также является полной программой на языке GolfScript.