Huruf, Angka, Simbol, Spasi, Ulangi


36

Ada 97 karakter ASCII yang ditemui orang secara teratur. Mereka terbagi dalam empat kategori:

  1. Surat (52 total)

    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    
  2. Angka atau Digit (10 total)

    0123456789
    
  3. Simbol & Tanda Baca (32 total)

    !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
    
  4. Spasi (3 total)

    Spasi , tab \t, dan baris baru \n. (Kami akan memperlakukan varian baris baru seperti \r\nsebagai satu karakter.)

Untuk keringkasan, kami akan memanggil kategori ini masing-masing L, N, S, dan W.

Pilih salah satu dari 24 permutasi dari huruf yang LNSWAnda inginkan dan ulangi tanpa batas waktu untuk membentuk templat pemrograman untuk Anda sendiri.

Misalnya, Anda dapat memilih permutasi NLWS, jadi templat pemrograman Anda adalah:

NLWSNLWSNLWSNLWSNLWS...

Anda perlu menulis program atau fungsi berdasarkan templat ini, di mana:

  1. Setiap Ldiganti dengan huruf apa pun ( ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz).

  2. Setiap Ndiganti dengan nomor berapa pun ( 0123456789).

  3. Setiap Sdiganti dengan simbol apa pun ( !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~).

  4. Setiap Wdiganti dengan karakter spasi putih ( \t\n).

Pada dasarnya, kode Anda harus mengikuti pola

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

seperti yang disarankan judul pertanyaan, kecuali Anda dapat memilih urutan berbeda dari empat kategori karakter, jika diinginkan.

Perhatikan bahwa:

  • Penggantian untuk suatu kategori dapat berupa karakter yang berbeda. misalnya 9a ^8B\t~7c\n]sesuai dengan templat NLWSNLWSNLWS( \tdan \nakan menjadi karakter literal mereka).

  • Tidak ada batasan panjang kode. mis 1A +2B -dan 1A +2Bdan 1A dan 1semua sesuai dengan templat NLWSNLWSNLWS....

Apa yang harus dilakukan oleh kode yang sesuai dengan templat Anda adalah menggunakan satu karakter ASCII tanpa ekstensi dan mengeluarkan angka dari 0 hingga 4 berdasarkan kategori apa yang menjadi anggotanya dalam kategorisasi di atas. Yaitu, output 1jika input adalah huruf, 2jika angka, 3jika simbol, dan 4jika spasi. Keluaran 0jika inputnya tidak ada ( karakter kontrol ).

Untuk input, Anda dapat juga memasukkan angka 0 hingga 127 inklusif yang mewakili kode karakter ASCII input.

Input (sebagai kode char) dan pasangan output kode Anda harus tepat adalah sebagai berikut:

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

Input 11, 12, dan 13 sesuai dengan karakter yang kadang - kadang dianggap sebagai ruang kosong, sehingga outputnya mungkin 0atau 4sesuai keinginan Anda.

Kode terpendek dalam byte menang.


5
Cookie untuk jawaban pertama dalam bahasa 2d.
Calvin Hobbies

2
Jadi gunakan saja BF dan gunakan huruf SSSS
Christopher

2
Ini pada dasarnya mengecualikan semua bahasa pemrograman konvensional 🙄 Juga, apa yang harus dilakukan dengan bahasa yang menggunakan halaman kode sendiri misalnya Jelly?
kennytm

1
Karakter lain tidak diperbolehkan.
Calvin Hobbies

2
Unary akan menang!
Christopher

Jawaban:


38

Haskell 300 byte

Kode ini seharusnya tidak memiliki baris baru. Fungsi m1mengambil input sebagai a Chardan mengembalikan jawaban sebagai 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 "

Saya tidak bisa menolak tantangan yang seseorang nyatakan tidak mungkin untuk bahasa "konvensional".

Anda dapat membantah apakah Haskell penting, tetapi sebagian besar kata kunci dan pengidentifikasi adalah beberapa karakter dan tidak dapat digunakan. Namun, definisi fungsi tingkat atas, daftar, string literal, perbandingan ketat, pencocokan pola dan percabangan dengan penjaga berfungsi, selama huruf datang tepat sebelum angka, dan jika simbol juga muncul sebelum huruf kita memiliki karakter seperti \tdan \r. Sayangnya permutasi yang berfungsi untuk pemrograman umum tidak memungkinkan literal angka, jadi saya tidak bisa mendapatkan angka dengan cara yang bermanfaat.

Bagaimana itu bekerja:

  • Interval kelas karakter dikodekan dalam string pada baris terakhir, dengan karakter batas di sebagian besar tempat simbol dan hasil di sebagian besar tempat digit, meskipun beberapa di ujungnya adalah padding.
  • Fungsi utamanya adalah m1.
  • x1 adalah karakter yang dianalisis.
  • The f1fungsi memecah string dengan pencocokan daftar pola, dan memiliki tiga cabang: ketika batas-batas adalah simbol lebih besar dari ruang, untuk karakter kontrol ketika batas-batas yang lolos lebih kecil dari ruang, dan untuk menangani perbandingan akhir untuk ruang itu sendiri. Nama-nama potongan daftar mnemonik untuk cabang pertama: Letter, Number, sPace, sYmbol, Remainder.
  • The b1menangani fungsi bercabang dua karakter batas s1 < b1pada suatu waktu.

Cobalah online


1
Selamat datang di situs ini! Dugaan saya adalah ini akan lebih pendek daripada kebanyakan bahasa non-konvensional yang benar-benar dapat mencapai hasil yang diperlukan.
Jonathan Allan

Gret jawaban! Saya mencoba menggunakan Haskell tetapi menyerah setelah beberapa saat ...
Laikoni

14

Retina , 113 byte

Huruf, Angka, Spasi, Simbol, Ulangi

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

Cobalah online!

Uji sendiri!

Retina sepertinya alat yang bagus untuk pekerjaan ini: kita dapat menggunakan semua jenis karakter secara fleksibel dalam konfigurasi panggung, dan kami memiliki beberapa kelas karakter yang telah ditentukan yang dapat berguna.

Saya pikir masalah ini dapat diselesaikan dengan tahap Penggantian atau tahap Transliterasi; Saya telah memilih Transliterasi karena lebih fleksibel dan memiliki kelas karakter yang paling berguna. Mengenai pola sumbernya, saya dipaksa untuk meletakkan simbol sebelum huruf untuk digunakan \nuntuk baris baru (saya sebenarnya memiliki solusi yang lebih pendek menggunakan ¶ yang lebih praktis untuk baris baru, tetapi karakter non-ascii dilarang).

Penjelasan

Tahap pertama adalah transliterasi. Kami menggunakan +dan 1sebagai opsi untuk menjaga pola berjalan tetapi mereka tidak akan mempengaruhi hasil panggung. Sintaksnya adalah T`from`tountuk memetakan setiap karakter fromke karakter di posisi yang sama di to. Jika tolebih pendek dari itu from, karakter terakhirnya diulang sebanyak yang diperlukan. Jika frommemiliki karakter yang berulang, hanya kemunculan pertama dari masing-masing karakter yang dipertimbangkan. Beberapa huruf sesuai dengan kelas karakter, misalnya dsetara dengan 0123456789.

T1 `a0 @a0 `b   :D0

Dengan ini kami memetakan beberapa karakter ke karakter lain dari kelas yang sama untuk "membuat beberapa ruang" untuk transliterasi berikut. ( a-> b, 0-> 1, space-> tab, @-> ;). Final :D0hanya tersenyum: D0

+T1 `d9 `a2

Kita mulai dengan digit, dadalah kelas karakter 0-9, di sini kita mentransformasikan 0-> a, 1-9-> 2, space-> 2: transliterasi untuk 0dan spacesalah, tetapi karakter tersebut telah dihilangkan oleh transliterasi sebelumnya.

+T1 `a9 \n9 `a4

Spasi, mengubah a-> a, ( 9, tab, \n, space) -> 4. 9sudah dihapus pada tahap sebelumnya.

+T1 `l9 @L9 `a1

Surat, di sini kita menggunakan dua kelas karakter yang berbeda (karena tidak ada yang lebih lengkap): luntuk huruf kecil dan Lhuruf besar. Mereka semua dipetakan ke 1, bersama dengan beberapa karakter lain yang telah ditangani pada tahap sebelumnya

+T1 `d9 @p9 `d3

Simbol. Karena setiap kelas lain telah berubah menjadi digit, di sini kami memetakan semua digit dengan d-> d, dan kemudian semua karakter yang dapat dicetak 3dengan p-> 3. Digit juga di antara karakter yang dapat dicetak, tetapi transliterasi pertama menang.

Sekarang kita perlu menetapkan 0karakter kontrol, tetapi saya tidak menemukan cara yang valid untuk secara eksplisit mengatasi kelas itu. Sebagai gantinya, kami akan mengonversi setiap digit menjadi unary: karakter kontrol bukan digit sehingga mereka dianggap sebagai string kosong, yang sama dengan 0unary. Sayangnya, perintah konversi unary di retina adalah $*, yang merupakan dua simbol yang saling berdekatan, jadi kami akan mengonversi "secara manual" menggunakan substitusi.

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

Digit unary kami adalah $n, yang merupakan pola penggantian untuk baris baru. \bcocok dengan "batas", di mana kata alfanumerik dimulai atau berakhir: dalam kasus kami ini akan selalu cocok dengan angka apa pun. Kami pada dasarnya mengganti setiap angka ndengan plus baris baru n-1.

\n

Pada akhirnya, kami menghitung jumlah baris baru dan mendapatkan hasil yang diinginkan.


11

Kardinal 2240 2224 byte

Template menggunakan 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

Kode ini memiliki baris baru tambahan.

Bagaimana itu bekerja:

Kode ini memiliki banyak karakter yang tidak digunakan.
% melepaskan pointer ke semua arah. 3 dari mereka baru saja mencapai ujung garis dan mati.
Pointer terakhir mengambil input di:
Input ini kemudian dibandingkan dengan setiap nilai dari 0 hingga 127.

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

Operasi yang digunakan:
J = Lewati operasi berikutnya jika bukan nol
^ = Ubah arah ke atas
> = Ubah arah ke kiri
- = Pengurangan
+ = Penambahan
: = Ambil input
% = Buat pointer di awal program
x = Hapus pointer
0 = Atur aktif nilai pointer ke 0

Cobalah online


7

Perl 5 , 293 byte

291 byte kode + 2 untuk -0p.

Saya telah diberi tahu bahwa flag-command-line gratis, tetapi saya telah menambahkannya di sini untuk visibilitas, karena tautan TIO tidak termasuk -0, untuk pengujian yang lebih mudah.

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

Cobalah online!

Ini adalah tantangan yang sangat sulit untuk dipecahkan dalam hampir semua bahasa, jadi saya cukup senang saya bisa (akhirnya, banyak bermain-main dan mematikan selama beberapa waktu) membuat ini bekerja di Perl. Semoga spasi putih tambahan sebelum dan sesudah nomor tidak menjadi masalah.

Memilih urutan urutan sangat rumit, tetapi untungnya s///dan y///dapat menerima karakter lain sebagai pembatas sehingga dimungkinkan untuk menggunakan huruf, spasi, angka, simbol, yang memungkinkan untuk s 0...0...0;dan y 0...0...0;.

Hal pertama yang diperlukan untuk appraoch adalah untuk mengganti _dengan !sehingga \whanya akan cocok [0-9a-zA-Z], lalu ganti semua spasi putih ( \s) dengan \t, semua digit dengan \rdan semua karakter kata yang tersisa ( \w) dengan \nuntuk pencocokan mudah nanti. Kemudian, menggunakan y///operator, semua simbol yang tersisa dikonversi ke karakter kata !ke _dan semua karakter lainnya (antara 9dan a) digeser ke bawah 9 tempat, mengubahnya menjadi huruf atau angka. Ini kemudian diganti melalui \wdengan 3dan yang lainnya, penggantian yang dibuat sebelumnya diganti dengan nilai-nilai bernomor mereka.


1

Spasi , 1332 byte

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

Urutan adalah 1234/ LNSW(huruf, angka, simbol, spasi putih).

Cobalah secara online (input sebagai integer yang mewakili unicode karakter).

Penjelasan:

Whitespace adalah bahasa berbasis tumpukan tempat setiap karakter kecuali spasi, tab, dan baris baru diabaikan. Berikut adalah program yang sama tanpa YO!( 333 bytes ):

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

Huruf S(spasi), T(tab), dan N(baris baru) ditambahkan hanya sebagai penyorotan.
[..._some_action]ditambahkan sebagai penjelasan saja.

Cobalah online.

Program dalam pseudo-code:

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.