CJam , 6 bajtów (pełny program) / 7 bajtów (blok kodu)
q),^W=
Wypróbuj online!
Jest to pełny program CJam, który odczytuje ciąg wejściowy ze standardowego wejścia i drukuje brakującą literę na standardowe wyjście. CJam tak naprawdę nie ma „metod”, o które prosi wyzwanie, ale najbliższą rzeczą byłby prawdopodobnie blok kodu wykonywalnego, taki jak ten:
{),^W=}
Wypróbuj online!
Ten blok kodu, gdy jest oceniany, przyjmuje dane wejściowe jako ciąg (tj. Tablicę znaków) na stosie i zwraca brakujący znak również na stosie.
Objaśnienie: W pełnym programie q
odczytuje łańcuch wejściowy i umieszcza go na stosie. )
następnie wyskakuje ostatni znak ciągu wejściowego, a operator zakresu ,
zamienia go w tablicę zawierającą wszystkie znaki ze znakami kodu poniżej (w tym wszystkie litery przed nim w alfabecie). Tak więc, na przykład, jeśli dane wejściowe były cdfgh
, wtedy ),
stos zawierałby ciągi znaków cdfg
(tj. Dane wejściowe z usuniętą ostatnią literą), a ...abcdefg
gdzie ...
oznacza grupę znaków z kodami ASCII poniżej a
(tj. Wszystkie znaki poniżej usuniętej ostatniej litery list).
Operator symetrycznej różnicy zestawów ^
łączy następnie te ciągi w jeden ciąg, który zawiera dokładnie te znaki, które pojawiają się w jednym z ciągów, ale nie w obu. Zachowuje kolejność, w jakiej znaki pojawiają się w łańcuchach, więc dla przykładowego wejścia cdfg
wynik ),^
będzie następujący ...abe
, gdzie ...
znowu oznacza kilka znaków z kodami ASCII poniżej a
. Wreszcie, W=
po prostu wyodrębnia ostatni znak tego ciągu, który jest dokładnie brakującym znakiem e
, który chcieliśmy znaleźć (i odrzuca resztę). Po zakończeniu programu interpreter CJam domyślnie drukuje zawartość stosu.
Bonus: GolfScript , 6 bajtów (pełny program)
),^-1>
Wypróbuj online!
Okazuje się, że prawie ten sam kod działa również w GolfScript. Zapisujemy jeden bajt w pełnej wersji programu ze względu na niejawne dane wejściowe GolfScript, ale tracimy jeden bajt, ponieważ w przeciwieństwie do CJam W
, GolfScript nie ma poręcznej zmiennej jednoliterowej zainicjowanej na -1.
Ponadto CJam ma oddzielne typy liczb całkowitych i znaków (a łańcuchy są tylko tablicami zawierającymi znaki), podczas gdy GolfScript ma tylko jeden typ liczb całkowitych (i ma specjalny typ łańcucha, który zachowuje się nieco inaczej niż normalne tablice). Wynikiem tego wszystkiego jest to, że jeśli chcemy, aby interpreter GolfScript wydrukował brakującą literę zamiast numeru kodu ASCII, musimy zwrócić łańcuch jednoznakowy zamiast samego znaku. Na szczęście dokonanie tej zmiany wymaga jedynie zastąpienia operatora indeksowania operatorem =
obcięcia tablicy / łańcucha >
.
Oczywiście, dzięki niejawnym operacjom we / wy GolfScript, powyższy kod może być również użyty jako fragment kodu, który odczytuje łańcuch ze stosu i zwraca łańcuch jednoznakowy zawierający brakującą literę. Lub raczej każdy fragment kodu, który przyjmuje pojedynczy ciąg znaków na stosie jako argument i zwraca swój wynik jako ciąg znaków do wydrukowania na stosie, jest również pełnym programem GolfScript.