Litera, liczba, symbol, spacja, powtórzenie

36

Istnieje 97 znaków ASCII, z którymi ludzie spotykają się regularnie. Można je podzielić na cztery kategorie:

  1. Listy (łącznie 52)

    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    
  2. Liczby lub cyfry (łącznie 10)

    0123456789
    
  3. Symbole i znaki interpunkcyjne (łącznie 32)

    !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
    
  4. Biała spacja (3 ogółem)

    Spacja , tabulator \ti nowa linia \n. (Traktujemy warianty nowego wiersza jak \r\njeden znak).

Dla zwięzłości nazwiemy te kategorie odpowiednio L, N, S i W.

Wybierz dowolną z 24 kombinacji dowolnych liter LNSWi powtórz ją w nieskończoność, aby stworzyć szablon programowania dla siebie.

Na przykład możesz wybrać permutację NLWS, więc twoim szablonem programowania byłoby:

NLWSNLWSNLWSNLWSNLWS...

Musisz napisać program lub funkcję na podstawie tego szablonu, gdzie:

  1. Każda Ljest zastępowana dowolną literą ( ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz).

  2. Każda Njest zastępowana dowolną liczbą ( 0123456789).

  3. Każdy Sjest zastępowany dowolnym symbolem ( !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~).

  4. Każdy Wjest zastępowany dowolnym znakiem spacji ( \t\n).

Zasadniczo kod musi być zgodny ze wzorem

<letter><number><symbol><whitespace><letter><number><symbol><whitespace>...

jak sugeruje tytuł pytania, z tym wyjątkiem, że w razie potrzeby możesz wybrać inną kolejność czterech kategorii znaków.

Uwaga:

  • Zamienniki dla kategorii mogą być różnymi postaciami. np. 9a ^8B\t~7c\n]poprawnie odpowiada szablonowi NLWSNLWSNLWS( \ti \nbędzie to ich dosłowne znaki).

  • Nie ma ograniczeń długości kodu. przykład 1A +2B -i 1A +2Bi 1A i 1wszystkie są zgodne z szablonem NLWSNLWSNLWS....

Kod zgodny z szablonem musi pobrać jeden nierozszerzony znak ASCII i wypisać liczbę od 0 do 4 w zależności od kategorii, do której należy w powyższej kategoryzacji. To znaczy, 1jeśli dane wejściowe są literą, 2liczbą, 3symbolem i 4białą spacją. Wyprowadza, 0jeśli wejście nie jest żadnym z nich (znak kontrolny ).

W celu wprowadzenia można alternatywnie przyjąć liczbę od 0 do 127 włącznie, która reprezentuje kod wejściowego znaku ASCII.

Pary wejściowe (jako kod char) i wyjściowe, które musi posiadać Twój kod, są dokładnie następujące:

in out
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 4
10 4
11 0 or 4
12 0 or 4
13 0 or 4
14 0
15 0
16 0
17 0
18 0
19 0
20 0
21 0
22 0
23 0
24 0
25 0
26 0
27 0
28 0
29 0
30 0
31 0
32 4
33 3
34 3
35 3
36 3
37 3
38 3
39 3
40 3
41 3
42 3
43 3
44 3
45 3
46 3
47 3
48 2
49 2
50 2
51 2
52 2
53 2
54 2
55 2
56 2
57 2
58 3
59 3
60 3
61 3
62 3
63 3
64 3
65 1
66 1
67 1
68 1
69 1
70 1
71 1
72 1
73 1
74 1
75 1
76 1
77 1
78 1
79 1
80 1
81 1
82 1
83 1
84 1
85 1
86 1
87 1
88 1
89 1
90 1
91 3
92 3
93 3
94 3
95 3
96 3
97 1
98 1
99 1
100 1
101 1
102 1
103 1
104 1
105 1
106 1
107 1
108 1
109 1
110 1
111 1
112 1
113 1
114 1
115 1
116 1
117 1
118 1
119 1
120 1
121 1
122 1
123 3
124 3
125 3
126 3
127 0

Wejścia 11, 12 i 13 odpowiadają znakom, które czasami są uważane za białe znaki, więc ich wyniki mogą być 0lub, 4jak chcesz.

Najkrótszy kod w bajtach wygrywa.

Hobby Calvina
źródło
5
Pliki cookie do pierwszej odpowiedzi w języku 2D.
Calvin's Hobbies
2
Więc po prostu użyj BF i liter SSSS
Christopher
2
Zasadniczo wykluczyło to wszystkie konwencjonalne języki programowania 🙄 Co też zrobić z językami korzystającymi z własnej strony kodowej, np. Jelly?
kennytm
1
Inne postacie są niedozwolone.
Calvin's Hobbies
2
Unary wygra!
Christopher

Odpowiedzi:

38

Haskell 300 bajtów

Ten kod nie powinien mieć końca nowej linii. Funkcja m1przyjmuje dane wejściowe jako a Chari zwraca odpowiedź jako Char.

f1 (l1 :n1 :p1 :y1 :l2 :n2 :p2 :y2 :r3 )x1 |y1 >p1 =b1 (x1 )y2 (f1 (r3 )x1 )y1 (n1 )n2 |p2 <p1 =b1 (x1 )y1 (n1 )p2 (f1 (p2 :y2 :r3 )x1 )l2 |p2 >p1 =b1 (x1 )p1 (l2 )l1 (n2 )n1
;b1 (x1 )s1 (r1 )b1 (r2 )r3 |x1 <s1 =r1 |x1 >b1 =r2 |s1 <b1 =r3
;m1 =f1 "d0 \t4 \r0 ~d3 {d1 `d3 [d1 @d3 :d2 /d3 !d4 \n0 ?d0 "

Nie mogłem się oprzeć wyzwaniu, które, jak twierdził ktoś, było niemożliwe w przypadku „konwencjonalnych” języków.

Możesz kwestionować, czy Haskell się liczy, ale większość słów kluczowych i identyfikatorów składa się z wielu znaków i nie można ich użyć. Jednak definicje funkcji najwyższego poziomu, listy, literały łańcuchowe, ścisłe porównania, dopasowywanie wzorców i rozgałęzianie ze strażnikami działają, o ile litery występują tuż przed cyframi, a jeśli symbole pojawiają się także przed literami, mamy znaki specjalne, takie jak \ti \r. Niestety permutacje, które działają przy programowaniu ogólnym, nie pozwalają na literały liczbowe, więc nie mogłem uzyskać liczb w żaden użyteczny sposób.

Jak to działa:

  • Przedziały klas znaków są kodowane w ciągu ostatniego wiersza, przy czym znaki graniczne znajdują się w większości miejsc symboli, a wyniki w większości miejsc cyfr, chociaż niektóre na końcach są wypełnione.
  • Główną funkcją jest m1.
  • x1 jest analizowaną postacią.
  • Ta f1funkcja dzieli łańcuch z dopasowaniem do wzorca listy i ma trzy gałęzie: gdy granice są symbolami większymi niż spacja, gdy granice są poprzedzane znakami sterującymi mniejszymi niż spacja oraz do obsługi ostatecznego porównania z samą spacją. Nazwy elementów listy są mnemoniczne dla pierwszej gałęzi: Letter, Number, sPace, sYmbol, Remainder.
  • Te b1uchwyty funkcyjne rozgałęziające do dwóch znaków granicznych s1 < b1na raz.

Wypróbuj online

Ørjan Johansen
źródło
1
Witamy na stronie! Domyślam się, że będzie to krótsze niż w przypadku większości niekonwencjonalnych języków, które faktycznie mogą osiągnąć wymagany wynik.
Jonathan Allan
Gret odpowiedź! Próbowałem użyć Haskell, ale po krótkim czasie
poddałem się
14

Siatkówka , 113 bajtów

Litera, liczba, spacja, symbol, powtórz

T1 `a0 @a0 `b1	:D0
+T1 `d9 `a2
+T1 `a9	\n9 `a4
+T1 `l9 @L9 `a1
+T1 `d9 @p9 `d3
\b4
$n3
\b3
$n2
\b2
$n1
\b1
$n0
\n

Wypróbuj online!

Przetestuj to na sobie!

Retina wydaje się być dobrym narzędziem do tego zadania: możemy elastycznie używać wszystkich typów znaków w konfiguracji scenicznej i mamy pewne predefiniowane klasy postaci, które mogą być przydatne.

Myślę, że ten problem można rozwiązać za pomocą etapów wymiany lub transliteracji; Wybrałem Transliteracje, ponieważ są one bardziej elastyczne i mają najbardziej przydatne klasy postaci. Jeśli chodzi o wzorzec źródła, musiałem umieścić symbole tuż przed literami, aby użyć ich \ndla nowych linii (faktycznie miałem krótsze rozwiązanie, używając bardziej praktycznych ¶ dla nowych linii, ale znaki inne niż ascii są zbanowane).

Wyjaśnienie

Pierwsze etapy to transliteracje. Używamy +i 1jako opcji, aby utrzymać wzorzec, ale nie wpłyną one na wynik etapu. Składnia polega T`from`tona zamapowaniu każdego znaku fromna znak w tej samej pozycji w to. Jeśli tojest krótszy niż from, jego końcowy charakter powtarza się tyle, ile potrzeba. Jeśli fromma powtarzające się znaki, brane jest pod uwagę tylko pierwsze wystąpienie każdego z nich. Niektóre litery odpowiadają klasom znaków, np. dJest równoważne 0123456789.

T1 `a0 @a0 `b   :D0

Dzięki temu mapujemy niektóre znaki na inne znaki z tej samej klasy, aby „zrobić miejsce” na następujące transliteracje. ( a-> b, 0-> 1, space-> tab, @-> ;). Finał :D0to tylko buźka: D0

+T1 `d9 `a2

Zaczynamy od cyfr, dto klasa znaków 0-9, tutaj przekształcamy 0-> a, 1-9-> 2, space-> 2: transliteracje dla 0i spacesą niepoprawne, ale znaki te zostały wyeliminowane przez poprzednią transliterację.

+T1 `a9 \n9 `a4

Białe znaki, przekształcać a-> a( 9, tab, \n, space) -> 4. 9został już usunięty w poprzednim etapie.

+T1 `l9 @L9 `a1

Litery, tutaj używamy dwóch różnych klas znaków (z powodu braku bardziej kompletnej): ldla małych liter i Ldla wielkich liter. Wszystkie zostają zmapowane 1wraz z innymi postaciami, które zostały omówione w poprzednich etapach

+T1 `d9 @p9 `d3

Symbolika. Ponieważ każda inna klasa została przekształcona w cyfrze, tu odwzorować wszystkie cyfry do siebie z d-> d, a następnie do wszystkich znaków drukowanych 3z p-> 3. Cyfry również należą do drukowalnych znaków, ale pierwsza transliteracja wygrywa.

Teraz musimy przypisać 0do kontrolowania znaków, ale nie znalazłem żadnego prawidłowego sposobu na jawne zaadresowanie tej klasy. Zamiast tego przekonwertujemy każdą cyfrę na jednoargumentową: znaki kontrolne nie są cyframi, więc są traktowane jako pusty ciąg znaków, który jest równy 0jedności. Niestety, jednoargumentowe polecenie konwersji w siatkówce to $*dwa symbole znajdujące się blisko siebie, dlatego zamiast tego dokonamy konwersji „ręcznie” za pomocą podstawień.

\b4
$n3
\b3
$n2
\b2
$n1
\b1
$n0

Naszą jedyną cyfrą jest $nwzór zastępczy dla nowych linii. \bdopasowuje „granicę”, w której słowo alfanumeryczne zaczyna się lub kończy: w naszym przypadku będzie to zawsze pasować przed dowolną liczbą. Zasadniczo zastępujemy każdy numer nnowym znakiem plus n-1.

\n

Na koniec zliczamy liczbę nowych linii i uzyskujemy pożądany wynik.

Lew
źródło
11

Kardynał 2240 2224 bajtów

Używany szablon LSNW

a%1
a:1 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a+1 a+1 a+1 a+1 a.1 x.1 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a.0 a>0 a+1 a+1 a+1 a+1 a.1 x>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a+1 a+1 a+1 a.0 x>1 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a+1 a+1 a.0 x>1 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a>0 a+1 a+1 a+1 a.0 x>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a+1 a.0 x>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a+1 a+1 a+1 a.0 x>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a>1 a+1 a.0 x>1 a>1 a>1 a>1 a>1 a>1 a>1 a+1 a+1 a+1 a.0
a>1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a>1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^1 a>1 a-1 J^1 a-1 J^1 a-1 J^1 a-1 J^0 a.0

Kod ma końcowy znak nowej linii.

Jak to działa:

Ten kod ma wiele znaków, które nie są używane.
% zwalnia wskaźnik we wszystkich kierunkach. 3 z nich właśnie uderzyło w koniec linii i zginęło.
Ostatni wskaźnik przyjmuje dane wejściowe w: Dane te
są następnie porównywane z każdą wartością od 0 do 127.

Wydruki:
0 dla 0-8
4 dla 9-12
0 dla 13-31
4 dla 32
3 dla 33-47
2 dla 48-57
3 dla 58-64
1 dla 65-90
3 dla 91-96
1 dla 97-122
3 dla 123-126
0 dla 127

Zastosowane operacje:
J = Pomiń następną operację, jeśli niezerowa
^ = Zmień kierunek w górę
> = Zmień kierunek w lewo
- = Zmniejszenie
+ = Przyrost
: = Wprowadź dane wejściowe
% = Utwórz wskaźniki na początku programu
x = Usuń wskaźnik
0 = Ustaw jako aktywny wartość wskaźnika na 0

Wypróbuj online

Fəˈnɛtɪk
źródło
7

Perl 5 , 293 bajtów

291 bajtów kod + 2 dla -0p.

Powiedziano mi, że flagi wiersza poleceń są bezpłatne, ale dodałem je tutaj, aby były widoczne, ponieważ łącze TIO nie zawiera -0, dla łatwiejszego testowania.

y 0-a 1"a 1#a 1$a 1%a 1&a 1'a 1(a 1)a 1*a 1+a 1,a 1.a 1/a 1_a 1{a 1|a 1}a 1~a 0!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 1!a 0;s 0\s
0\t
0;s 0\d
0\r
0;s 0\w
0\n
0;y 1!a 9-a 1_a 0-Z 1;s 0\w
0\u 3\u 0;s 1\S
1\u 0\u 1;s 0\t
0\u 4\u 0;s 0\r
0\u 2\u 0;s 0\n
0\u 1\u 0

Wypróbuj online!

Jest to szczególnie trudne wyzwanie do rozwiązania w prawie każdym języku, więc jestem bardzo szczęśliwy, że udało mi się (w końcu wiele majsterkowania włączać i wyłączać przez dłuższy czas), aby działało w Perlu. Mamy nadzieję, że dodatkowe białe znaki przed i po numerze nie stanowią problemu.

Wybór kolejności sekwencji był szczególnie trudny, ale na szczęście s///i y///można zaakceptować dowolny inny znak jako separator, więc można było użyć litery, spacji, liczby, symbolu, co pozwala na s 0...0...0;i y 0...0...0;.

Pierwszą rzeczą wymaganą do oszacowania było zastąpienie _go !tak, \waby pasowało tylko [0-9a-zA-Z], a następnie zastąpienie wszystkich białych znaków ( \s) \t, wszystkimi cyframi \ri wszystkimi pozostałymi znakami słów ( \w) \ndla łatwego dopasowania później. Następnie za pomocą y///operatora wszystkie pozostałe symbole są konwertowane na znaki słowne !na, _a wszystkie inne znaki (między 9i a) są przesuwane w dół o 9 miejsc, zamieniając je w litery lub cyfry. Są one następnie zastępowane za \wpomocą przez, 3a inne, wcześniej wykonane podstawienia są zastępowane ich numerowanymi wartościami.

Dom Hastings
źródło
1

Biała spacja , 1332 bajty

Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0! Y0!
Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0!
Y0!
Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0!
Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0!
Y0!
Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! Y0!
Y0!
Y0!
Y0!
Y0! Y0! Y0! Y0! Y0!
Y0! Y0! Y0! Y0!
Y0! Y0!
Y0! Y0! 

Zamówienie to 1234/ LNSW(litera, cyfra, symbol, spacja).

Wypróbuj online (wprowadź jako liczbę całkowitą reprezentującą kod Unicode znaku).

Wyjaśnienie:

Białe znaki to język oparty na stosie, w którym każdy znak oprócz spacji, tabulatorów i nowych wierszy jest ignorowany. Oto ten sam program bez YO!( 333 bajtów ):

[S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_integer][T   T   T   _Retrieve][S N
S _Duplicate_input(9)][S N
S _Duplicate_input(10][S N
S _Duplicate_input(32)][S N
S _Duplicate_input(33-47)][S N
S _Duplicate_input(48-57)][S N
S _Duplicate_input(58-64)][S N
S _Duplicate_input(65-90)][S N
S _Duplicate_input(91-96)][S N
S _Duplicate_input(97-122)][S N
S _Duplicate_input(123-126)][S S S T    S S T   N
_Push_9][T  S S T   _Subtract][N
T   S S N
_If_0_Jump_to_Label_WHITESPACE][S S S T S T S N
_Push_10][T S S T   _Subtract][N
T   S S N
_If_0_Jump_to_Label_WHITESPACE][S S S T S S S S S N
_Push_32][T S S T   _Subtract][S N
S _Duplicate][N
T   S S N
_If_0_Jump_to_Label_WHITESPACE][N
T   T   S T N
_If_negative_Jump_to_Label_NONE][S S S T    T   S S S S N
_Push_48][T S S T   _Subtract][N
T   T   N
_If_negative_Jump_to_Label_SYMBOL][S S S T  T   T   S T S N
_Push_58][T S S T   _Subtract][N
T   T   S S N
_If_negative_Jump_to_Label_DIGIT][S S S T   S S S S S T N
_Push_65][T S S T   _Subtract][N
T   T   N
_If_negative_Jump_to_Label_SYMBOL][S S S T  S T T   S T T   N
_Push_91][T S S T   _Subtract][N
T   T   T   N
_If_negative_Jump_to_Label_LETTER][S S S T  T   S S S S T   N
_Push_97][T S S T   _Subtract][N
T   T   N
_If_negative_Jump_to_Label_SYMBOL][S S S T  T   T   T   S T T   N
_Push_123][T    S S T   _Subtract][N
T   T   T   N
_If_negative_Jump_to_Label_LETTER][S S S T  T   T   T   T   T   T   N
_Push_127][T    S S T   _Subtract][N
T   T   N
_If_negative_Jump_to_Label_SYMBOL][N
S N
S T N
_Jump_to_Label_NONE][N
S S S N
_Create_Label_WHITESPACE][S S S T   S S N
_Push_4][T  N
S T _Print_as_integer][N
N
N
_Exit][N
S S N
_Create_Label_SYMBOL][S S S T   T   N
_Push_3][T  N
S T _Print_as_integer][N
N
N
_Exit][N
S S S S N
_Create_Label_DIGIT][S S S T    S N
_Push_2][T  N
S T _Print_as_integer][N
N
N
_Exit][N
S S T   N
_Create_Label_LETTER][S S S T   N
_Push_1][T  N
S T _Print_as_integer][N
N
N
_Exit][N
S S S T N
_Create_Label_NONE][S S S N
_Push_0][T  N
S T _Print_as_integer]

Litery S(spacja), T(tab) i N(nowa linia) dodane tylko jako wyróżnienia.
[..._some_action]dodano tylko jako wyjaśnienie.

Wypróbuj online.

Program w pseudokodzie:

If the input is 9, 10 or 32: call function WHITESPACE()
Else-if the input is below 32: call function NONE()
Else-if the input is below 48: call function SYMBOL()
Else-if the input is below 58: call function DIGIT()
Else-if the input is below 65: call function SYMBOL()
Else-if the input is below 91: call function LETTER()
Else-if the input is below 97: call function SYMBOL()
Else-if the input is below 123: call function LETTER()
Else-if the input is below 127: call function SYMBOL()
Else (the input is 127 or higher): call function NONE()

WHITESPACE():
  Print 4
  Exit program
SYMBOL():
  Print 3
  Exit program
DIGIT():
  Print 2
  Exit program
LETTER():
  Print 1
  Exit program
NONE():
  Print 0
  (Implicit exit with error: Exit not defined)
Kevin Cruijssen
źródło