Буква, число, символ, пробел, повтор

36

Есть 97 символов ASCII, с которыми люди сталкиваются на регулярной основе. Они делятся на четыре категории:

  1. Письма (всего 52)

    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    
  2. Числа или цифры (всего 10)

    0123456789
    
  3. Символы и пунктуация (всего 32)

    !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
    
  4. Пробелы (всего 3)

    Пробел , табуляция \tи новая строка \n. (Мы будем рассматривать варианты новой строки \r\nкак один символ.)

Для краткости мы будем называть эти категории L, N, S и W соответственно.

Выберите любую из 24 комбинаций букв, которые LNSWвы хотите, и повторяйте это до бесконечности, чтобы сформировать шаблон программирования для себя.

Например, вы можете выбрать перестановку NLWS, поэтому ваш шаблон программирования будет:

NLWSNLWSNLWSNLWSNLWS...

Вам нужно написать программу или функцию на основе этого шаблона, где:

  1. Каждый Lзаменяется на любую букву ( ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz).

  2. Каждый Nзаменяется на любое число ( 0123456789).

  3. Каждый Sзаменяется любым символом ( !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~).

  4. Каждый Wзаменяется любым символом пробела ( \t\n).

По сути, ваш код должен следовать шаблону

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

как следует из названия вопроса, за исключением того, что вы можете выбрать другой порядок четырех категорий символов, если это необходимо.

Обратите внимание, что:

  • Заменами для категории могут быть разные персонажи. например, 9a ^8B\t~7c\n]корректно соответствует шаблону NLWSNLWSNLWS( \tи \nбудет их буквальными символами).

  • Нет ограничений по длине кода. например, 1A +2B -и 1A +2Bи 1A и 1все соответствуют шаблону NLWSNLWSNLWS....

Код, соответствующий шаблону, должен сделать один нерасширенный символ ASCII и вывести число от 0 до 4 в зависимости от того, к какой категории он относится, в приведенной выше классификации. То есть вывод, 1если ввод является буквой, 2если число, 3если символ, и 4если пробел. Выведите, 0если на входе нет ни одного из них ( управляющий символ ).

Для ввода вы можете альтернативно принять число от 0 до 127 включительно, которое представляет код входного символа ASCII.

Ваши пары ввода (как код символа) и выхода должны иметь следующие параметры:

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

Входы 11, 12 и 13 соответствуют символам, которые иногда считаются пробелами, поэтому их выходы могут быть 0или 4по вашему желанию.

Самый короткий код в байтах побеждает.

Кальвин Хобби
источник
5
Печенье к первому ответу на 2d языке.
Увлечения
2
Так что просто используйте BF и используйте буквы SSSS
Кристофер
2
Это в основном исключает все обычные языки программирования 🙄 Кроме того, что делать с языками, которые используют собственную кодовую страницу, например, Jelly?
Kennytm
1
Другие персонажи не допускаются.
Увлечения Кэлвина
2
Унарный победит!
Кристофер

Ответы:

38

Haskell 300 байт

В этом коде не должно быть завершающего символа новой строки. Функция m1принимает входные данные как a Charи возвращает ответ как a 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 "

Я не мог устоять перед вызовом, который, по мнению кого-то, был невозможен для «обычных» языков.

Вы можете оспаривать, имеет ли значение Haskell, но большинство ключевых слов и идентификаторов состоят из нескольких символов и не могут использоваться. Тем не менее, определения функций верхнего уровня, списки, строковые литералы, строгие сравнения, сопоставление с образцом и ветвление с защитными элементами работают до тех пор, пока буквы идут непосредственно перед цифрами, а если символы также идут непосредственно перед буквами, у нас есть экранирующие символы, такие как \tи \r. К сожалению, перестановки, которые работают для общего программирования, не допускают числовые литералы, поэтому я не мог получить числа любым полезным способом.

Как это работает:

  • Интервалы классов символов закодированы в строке в последней строке, с граничными символами в большинстве позиций символов и результатами в большинстве позиций цифр, хотя некоторые на концах заполнены.
  • Основная функция есть m1.
  • x1 это персонаж, который анализируется.
  • f1Функция разбивает строку соответствия списка шаблонов, и имеет три ветви: когда границы являются символы больше пространства, когда границы экранируются управляющими символами меньше пространства, а также для обработки окончательного сравнения с самим пространством. Имена частей списка являются мнемоническими для первой ветви: буква, номер, sPace, sYmbol, Remainder.
  • В b1функции ручка разветвления для двух граничных знаков s1 < b1в то время.

Попробуйте онлайн

Орджан Йохансен
источник
1
Добро пожаловать на сайт! Я предполагаю, что это будет короче, чем у большинства нетрадиционных языков, которые могут реально достичь требуемого результата.
Джонатан Аллан
Грет ответ! Я пытался использовать Haskell, но через некоторое время
сдался
14

Сетчатка , 113 байт

Буква, число, пробел, символ, повтор

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

Попробуйте онлайн!

Проверьте это на себе!

Retina кажется хорошим инструментом для этой работы: мы можем гибко использовать все типы символов в конфигурации этапа, и у нас есть несколько предопределенных классов символов, которые могут быть полезны.

Я думаю, что эту проблему можно решить с помощью этапов замены или этапов транслитерации; Я выбрал Транслитерацию, потому что они более гибкие и имеют самые полезные классы персонажей. Что касается шаблона источника, я был вынужден поместить символы прямо перед буквами, чтобы использовать их \nдля новых строк (на самом деле у меня было более короткое решение, использующее более практичный символ ¶ для новых строк, но символы, отличные от ascii, запрещены).

объяснение

Первыми этапами являются транслитерации. Мы используем +и 1как параметры, чтобы сохранить паттерн, но он не повлияет на результат этапа. Синтаксис состоит в том, T`from`toчтобы сопоставить каждый символ fromс символом в той же позиции в to. Если toоно короче from, его конечный символ повторяется столько раз, сколько необходимо. Если fromесть повторяющиеся символы, считается только первое вхождение каждого из них. Некоторые буквы соответствуют классам символов, например d, эквивалентны 0123456789.

T1 `a0 @a0 `b   :D0

При этом мы сопоставляем некоторые символы с другими персонажами того же класса, чтобы «освободить место» для последующих транслитераций. ( a-> b, 0-> 1, space-> tab, @-> ;). Финал :D0просто смайлик: D0

+T1 `d9 `a2

Мы начинаем с цифр, dэто класс символов 0-9, здесь мы преобразовываем 0-> a, 1-9-> 2, space-> 2: транслитерации для 0и spaceнеправильны, но эти символы были удалены предыдущей транслитерацией.

+T1 `a9 \n9 `a4

Пробелы, преобразование a-> a( 9, tab, \n, space) -> 4. 9был уже удален на предыдущем этапе.

+T1 `l9 @L9 `a1

Буквы, здесь мы используем два разных класса символов (из-за отсутствия более полного): lдля строчных и Lзаглавных букв. Все они отображаются 1вместе с некоторыми другими персонажами, с которыми сталкивались на предыдущих этапах.

+T1 `d9 @p9 `d3

Символы. Поскольку все остальные классы превратились в цифры, здесь мы сопоставляем все цифры сами с собой d-> d, а затем все печатные символы - 3с p-> 3. Цифры также есть среди печатных символов, но выигрывает первая транслитерация.

Теперь нам нужно назначить 0управляющие символы, но я не нашел подходящего способа явного обращения к этому классу. Вместо этого мы преобразуем каждую цифру в унарную: управляющие символы не являются цифрами, поэтому они рассматриваются как пустая строка, равная 0унарной. К сожалению, команда унарного преобразования в сетчатке - $*это два символа рядом друг с другом, поэтому мы вместо этого будем преобразовывать «вручную», используя подстановки.

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

Наша унарная цифра - $nэто образец замены для новых строк. \bсоответствует «границе», где буквенно-цифровое слово начинается или заканчивается: в нашем случае это всегда будет соответствовать любому числу. Мы в основном заменяем каждый номер nна новую строку плюс n-1.

\n

В итоге подсчитываем количество новых строк и получаем желаемый результат.

Лео
источник
11

Кардинал 2240 2224 байта

Шаблон используется 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

В коде есть завершающий символ новой строки.

Как это работает:

В этом коде много символов, которые не используются.
% освобождает указатель во всех направлениях. 3 из них просто попадают в конец строки и умирают.
Последний указатель получает вход в:
Этот вход затем сравнивается с каждым значением от 0 до 127.

Отпечатки:
0 для 0-8
4 для 9-12
0 для 13-31
4 для 32
3 для 33-47
2 для 48-57
3 для 58-64
1 для 65-90
3 для 91-96
1 для 97-122
3 для 123-126
0 для 127

Используемые операции:
J = Пропустить следующую операцию, если она не равна нулю
^ = Изменить направление на вверх
> = Изменить направление влево
- = Уменьшение
+ = Приращение
: = Взять ввод
% = Создать указатели при запуске программы
x = Удалить указатель
0 = Установить активный значение указателя на 0

Попробуйте онлайн

fənɛtɪk
источник
7

Perl 5 , 293 байта

Код 291 байт + 2 для -0p.

Мне сообщили, что флаги командной строки являются бесплатными, но я добавил их здесь для наглядности, поскольку ссылка TIO не включает -0, для облегчения тестирования.

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

Попробуйте онлайн!

Это особенно сложная задача, которую нужно решить практически на любом языке, поэтому я очень рад, что смог (наконец-то, в течение некоторого времени возиться и выключаться), заставить это работать в Perl. Надеюсь, дополнительные пробелы до и после номера не проблема.

Выбор порядка следования было особенно сложно, но forunately s///и y///может принять любой другой символ в качестве разделителя , так что можно использовать буквы, пробел, номер, символ, который позволяет s 0...0...0;и y 0...0...0;.

Первое, что требовалось для appraoch, - это заменить _на !так, чтобы \wон только совпадал [0-9a-zA-Z], а затем заменить все пробельные символы ( \s) на \t, все цифры на \rи все оставшиеся символы слова ( \w) \nна для последующего простого сопоставления. Затем с помощью y///оператора все оставшиеся символы преобразуются в символы слова !в, _а все другие символы (между 9и a) сдвигаются на 9 позиций вниз, превращая их в буквы или цифры. Они затем заменить через \wс 3и другие, ранее сделанные замены заменены их пронумерованных значений.

Дом Гастингс
источник
1

Пробел , 1332 байта

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

Порядок 1234/ LNSW(буква, цифра, символ, пробел).

Попробуйте онлайн (введите как целое число, представляющее юникод символа).

Объяснение:

Пробелы - это основанный на стеке язык, в котором все символы, кроме пробелов, табуляции и новых строк, игнорируются. Вот та же программа без YO!( 333 байта ):

[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]

Буквы S(пробел), T(табуляция) и N(новая строка) добавляются только как подсветка.
[..._some_action]добавлено только в качестве объяснения.

Попробуйте онлайн.

Программа в псевдокоде:

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)
Кевин Круйссен
источник