Chữ, số, ký hiệu, dấu cách, lặp lại


36

Có 97 ký tự ASCII mà mọi người gặp phải một cách thường xuyên. Họ thuộc bốn loại:

  1. Thư (tổng cộng 52)

    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    
  2. Số hoặc Chữ số (tổng cộng 10)

    0123456789
    
  3. Biểu tượng & dấu câu (tổng cộng 32)

    !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
    
  4. Khoảng trắng (tổng cộng 3)

    Không gian , tab \tvà dòng mới \n. (Chúng tôi sẽ coi các biến thể dòng mới như \r\nlà một nhân vật.)

Để đơn giản, chúng tôi sẽ gọi các loại này lần lượt là L, N, S và W.

Chọn bất kỳ trong số 24 hoán vị của các chữ cái LNSWbạn muốn và lặp lại nó vô thời hạn để tạo thành một mẫu lập trình cho chính bạn.

Ví dụ: bạn có thể chọn hoán vị NLWS, vì vậy mẫu lập trình của bạn sẽ là:

NLWSNLWSNLWSNLWSNLWS...

Bạn cần viết chương trình hoặc chức năng dựa trên mẫu này, trong đó:

  1. Mỗi Lđược thay thế bằng bất kỳ chữ cái ( ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz).

  2. Mỗi Nđược thay thế bằng bất kỳ số nào ( 0123456789).

  3. Mỗi Sđược thay thế bằng bất kỳ ký hiệu ( !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~).

  4. Mỗi Wđược thay thế bằng bất kỳ ký tự khoảng trắng ( \t\n).

Về cơ bản, mã của bạn phải theo mẫu

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

như tiêu đề câu hỏi gợi ý, ngoại trừ bạn có thể chọn một thứ tự khác nhau trong bốn loại nhân vật, nếu muốn.

Lưu ý rằng:

  • Thay thế cho một thể loại có thể là các nhân vật khác nhau. ví dụ, 9a ^8B\t~7c\n]hợp lệ phù hợp với mẫu NLWSNLWSNLWS( \t\nsẽ là ký tự theo nghĩa đen của chúng).

  • Không có giới hạn độ dài mã. ví dụ 1A +2B -1A +2B1A 1tất cả phù hợp với các mẫu NLWSNLWSNLWS....

Những gì mã tuân thủ mẫu của bạn phải làm là lấy một ký tự ASCII không được cấp phép và xuất một số từ 0 đến 4 dựa trên danh mục mà nó là thành viên trong phân loại ở trên. Nghĩa là, đầu ra 1nếu đầu vào là một chữ cái, 2nếu là một số, 3nếu là một ký hiệu và 4nếu khoảng trắng. Đầu ra 0nếu đầu vào không có cái nào trong số này ( ký tự điều khiển ).

Đối với đầu vào, bạn có thể thay vào đó bao gồm một số từ 0 đến 127, bao gồm mã của ký tự ASCII đầu vào.

Các cặp đầu vào (dưới dạng mã char) và đầu ra mà mã của bạn phải có chính xác như sau:

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

Đầu vào 11, 12 và 13 tương ứng với các ký tự đôi khi được coi là khoảng trắng, do đó đầu ra của chúng có thể 0hoặc 4theo ý muốn của bạn.

Mã ngắn nhất tính bằng byte thắng.


5
Cookies cho câu trả lời đầu tiên trong một ngôn ngữ 2d.
Sở thích của Calvin

2
Vì vậy, chỉ cần sử dụng BF và sử dụng chữ SSSS
Christopher

2
Điều này về cơ bản đã loại trừ tất cả các ngôn ngữ lập trình thông thường 🙄 Ngoài ra, phải làm gì với các ngôn ngữ sử dụng trang mã riêng của mình, ví dụ Jelly?
kennytm

1
Các nhân vật khác không được phép.
Sở thích của Calvin

2
Unary sẽ thắng!
Christopher

Câu trả lời:


38

Haskell 300 byte

Mã này không có dòng mới. Hàm m1lấy đầu vào là a Charvà trả về câu trả lời là 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 "

Tôi không thể cưỡng lại một thách thức mà ai đó tuyên bố là không thể đối với các ngôn ngữ "thông thường".

Bạn có thể tranh luận về việc liệu Haskell có đếm hay không, nhưng phần lớn các từ khóa và mã định danh là nhiều ký tự và không thể được sử dụng. Tuy nhiên, định nghĩa hàm cấp cao, danh sách, chuỗi ký tự, so sánh chặt chẽ, khớp mẫu và phân nhánh với bộ bảo vệ hoạt động, miễn là các chữ cái xuất hiện ngay trước chữ số và nếu các ký hiệu cũng xuất hiện ngay trước các chữ cái chúng ta có ký tự thoát \t\r. Thật không may, các hoán vị hoạt động cho lập trình chung không cho phép chữ số, vì vậy tôi không thể lấy số theo bất kỳ cách hữu ích nào.

Làm thế nào nó hoạt động:

  • Các khoảng của các lớp ký tự được mã hóa trong chuỗi trên dòng cuối cùng, với các ký tự ranh giới ở hầu hết các vị trí ký hiệu và kết quả ở hầu hết các vị trí chữ số, mặc dù một số ở cuối là đệm.
  • Chức năng chính là m1.
  • x1 là nhân vật đang được phân tích.
  • Các f1chức năng phá vỡ chuỗi với kết hợp danh sách mẫu, và có ba nhánh: khi ranh giới là biểu tượng lớn hơn không gian, cho ký tự điều khiển khi ranh giới được thoát nhỏ hơn so với không gian, và để xử lý sự so sánh cuối cùng để không gian riêng của mình. Tên của các mảnh danh sách được ghi nhớ cho nhánh đầu tiên: Letter, Number, sPace, sYmbol, Remainder.
  • Các b1xử lý chức năng phân nhánh cho hai nhân vật ranh giới s1 < b1tại một thời điểm.

Dùng thử trực tuyến


1
Chào mừng đến với trang web! Tôi đoán là điều này sẽ ngắn hơn hầu hết các ngôn ngữ không thông thường thực sự có thể đạt được kết quả cần thiết.
Jonathan Allan

Gret trả lời! Tôi đã thử sử dụng Haskell nhưng đã bỏ cuộc sau một thời gian ngắn ...
Laikoni

14

Võng mạc , 113 byte

Chữ, số, không gian, ký hiệu, lặp lại

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

Hãy thử trực tuyến!

Tự kiểm tra nó!

Retina có vẻ như là một công cụ tuyệt vời cho công việc này: chúng ta có thể sử dụng linh hoạt tất cả các loại ký tự trong cấu hình giai đoạn và chúng ta có một số lớp ký tự được xác định trước có thể hữu ích.

Tôi nghĩ vấn đề này có thể được giải quyết bằng các giai đoạn Thay thế hoặc Chuyển ngữ; Tôi đã chọn Chuyển ngữ vì chúng linh hoạt hơn và chúng có các lớp nhân vật hữu ích nhất. Về mô hình của nguồn, tôi buộc phải đặt các ký hiệu ngay trước các chữ cái để sử dụng \ncho dòng mới (tôi thực sự có một giải pháp ngắn hơn bằng cách sử dụng thực tế hơn cho các dòng mới, nhưng các ký tự không phải mã ascii bị cấm).

Giải trình

Các giai đoạn đầu tiên là phiên âm. Chúng tôi sử dụng +1làm tùy chọn để duy trì mô hình nhưng chúng sẽ không ảnh hưởng đến kết quả của sân khấu. Cú pháp là T`from`toánh xạ từng ký tự của fromnhân vật vào cùng một vị trí trong to. Nếu tongắn hơn from, ký tự cuối cùng của nó được lặp lại nhiều như cần thiết. Nếu fromcó các ký tự lặp lại, chỉ có sự xuất hiện đầu tiên của mỗi cái được xem xét. Một số chữ cái tương ứng với các lớp ký tự, ví dụ như dtương đương với 0123456789.

T1 `a0 @a0 `b   :D0

Với điều này, chúng tôi ánh xạ một số ký tự sang các ký tự khác cùng lớp để "tạo khoảng trống" cho các phiên âm sau. ( a-> b, 0-> 1, space-> tab, @-> ;). Trận chung kết :D0chỉ là một nụ cười: D0

+T1 `d9 `a2

Chúng tôi bắt đầu bằng các chữ số, dlà lớp ký tự 0-9, ở đây chúng tôi đang chuyển đổi 0-> a, 1-9-> 2, space-> 2: phiên âm cho 0spacesai, nhưng những ký tự đó đã bị loại bỏ bởi phiên âm trước đó.

+T1 `a9 \n9 `a4

Khoảng trắng, biến đổi a-> a, ( 9, tab, \n, space) -> 4. 9đã được gỡ bỏ trong giai đoạn trước.

+T1 `l9 @L9 `a1

Các chữ cái, ở đây chúng tôi sử dụng hai lớp ký tự khác nhau (vì thiếu một chữ hoàn chỉnh hơn): lcho các chữ cái viết thường và Lcho các chữ cái viết hoa. Tất cả đều được ánh xạ tới 1, cùng với một số nhân vật khác đã được xử lý trong các giai đoạn trước

+T1 `d9 @p9 `d3

Biểu tượng. Vì mọi lớp khác đã được biến thành một chữ số, ở đây chúng tôi ánh xạ tất cả các chữ số thành chính chúng với d-> d, và sau đó tất cả các ký tự có thể in thành 3với p-> 3. Chữ số cũng nằm trong số các ký tự có thể in được, nhưng phiên âm đầu tiên sẽ thắng.

Bây giờ chúng ta cần gán 0để kiểm soát các ký tự, nhưng tôi không tìm thấy cách nào hợp lệ để giải quyết rõ ràng lớp đó. Thay vào đó, chúng tôi sẽ chuyển đổi từng chữ số thành unary: ký tự điều khiển không phải là chữ số và vì vậy chúng được coi là chuỗi rỗng, bằng 0với unary. Thật không may, lệnh chuyển đổi đơn nguyên trong võng mạc là $*hai biểu tượng gần nhau, vì vậy chúng ta sẽ chuyển đổi "thủ công" bằng cách sử dụng thay thế.

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

Chữ số đơn của chúng tôi là $n, một mẫu thay thế cho dòng mới. \bkhớp với một "ranh giới", trong đó một từ chữ và số bắt đầu hoặc kết thúc: trong trường hợp của chúng tôi, từ này sẽ luôn khớp trước bất kỳ số nào. Chúng tôi về cơ bản thay thế mỗi số nbằng một dòng mới cộng n-1.

\n

Cuối cùng, chúng tôi đếm số lượng dòng mới và nhận được kết quả mong muốn.


11

Hồng y 2240 2224 byte

Mẫu được sử dụng 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

Mã này có một dòng mới.

Làm thế nào nó hoạt động:

Mã này có rất nhiều ký tự không được sử dụng.
% giải phóng một con trỏ theo mọi hướng. 3 trong số họ chỉ đánh vào cuối dòng và chết.
Con trỏ cuối cùng nhận một đầu vào tại:
Đầu vào này sau đó được so sánh với từng giá trị từ 0 đến 127.

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

Các thao tác được sử dụng:
J = Bỏ qua thao tác tiếp theo nếu khác không
^ = Thay đổi hướng lên
> = Thay đổi hướng sang trái
- = Giảm
+ = Tăng
: = Lấy đầu vào
% = Tạo con trỏ khi bắt đầu chương trình
x = Xóa con trỏ
0 = Đặt kích hoạt giá trị của con trỏ đến 0

Dùng thử trực tuyến


7

Perl 5 , 293 byte

Mã byte byte + 2 cho -0p.

Tôi đã được thông báo rằng các cờ dòng lệnh là miễn phí, nhưng tôi đã thêm chúng ở đây để hiển thị, vì liên kết TIO không bao gồm -0, để kiểm tra dễ dàng hơn.

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

Hãy thử trực tuyến!

Đây là một thách thức đặc biệt khó khăn để giải quyết bằng hầu hết mọi ngôn ngữ, vì vậy tôi rất vui vì tôi đã có thể (cuối cùng, có rất nhiều sự mày mò và tắt trong một thời gian khá lâu) để hoạt động này ở Perl. Hy vọng khoảng trắng bổ sung trước và sau số không phải là vấn đề.

Việc chọn thứ tự trình tự đặc biệt khó khăn, nhưng may mắn thay s///y///có thể chấp nhận bất kỳ ký tự nào khác làm dấu phân cách để có thể sử dụng chữ cái, dấu cách, số, ký hiệu, cho phép s 0...0...0;y 0...0...0;.

Điều đầu tiên cần thiết cho thẩm định là thay thế _bằng !để \wchỉ khớp [0-9a-zA-Z], sau đó thay thế tất cả khoảng trắng ( \s) bằng \t, tất cả các chữ số bằng \rvà tất cả các ký tự từ còn lại ( \w) \nđể dễ khớp sau này. Sau đó, sử dụng các y///nhà điều hành, tất cả những biểu tượng còn lại được chuyển đổi thành ký tự chữ !để _và tất cả các ký tự khác (giữa 9a) đều được chuyển xuống 9 nơi, biến chúng thành chữ hoặc số. Những sau đó được thay thế qua \wvới 3và người khác, thực hiện trước đó thay thế được thay thế bằng giá trị số của họ.


1

Khoảng trắng , 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! 

Thứ tự là 1234/ LNSW(chữ cái, chữ số, ký hiệu, khoảng trắng).

Hãy thử trực tuyến (nhập dưới dạng số nguyên biểu thị unicode của một ký tự).

Giải trình:

Khoảng trắng là ngôn ngữ dựa trên ngăn xếp trong đó mọi ký tự ngoại trừ khoảng trắng, tab và dòng mới đều bị bỏ qua. Đây là chương trình tương tự không có YO!( 333 byte ):

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

Chữ cái S(dấu cách), T(tab) và N(dòng mới) được thêm vào dưới dạng chỉ tô sáng.
[..._some_action]chỉ thêm vào giải thích.

Hãy thử trực tuyến.

Chương trình bằng mã giả:

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.