ตัวอักษร, ตัวเลข, สัญลักษณ์, ช่องว่าง, ทำซ้ำ


35

มีอักขระ ASCII 97 ตัวที่ผู้คนพบเป็นประจำ พวกเขาแบ่งออกเป็นสี่ประเภท:

  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 และทั้งหมดเป็นไปตามแม่แบบ1NLWSNLWSNLWS...

สิ่งที่รหัสที่สอดคล้องกับเทมเพลตของคุณต้องทำคือใช้อักขระ 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
งานอดิเรกของ Calvin

2
ดังนั้นเพียงแค่ใช้ BF และใช้ตัวอักษร SSSS
Christopher

2
สิ่งนี้จะไม่รวมภาษาการเขียนโปรแกรมทั่วไปทั้งหมด🙄นอกจากนี้จะทำอย่างไรกับภาษาที่ใช้หน้ารหัสของตัวเองเช่นเจลลี่?
kennytm

1
ไม่อนุญาตให้ใช้อักขระอื่น
งานอดิเรกของ Calvin

2
เอกจะชนะ!
คริสโตเฟอร์

คำตอบ:


38

Haskell 300 ไบต์

รหัสนี้ไม่ควรขึ้นบรรทัดใหม่ ฟังก์ชั่นm1จะเข้าเป็นและส่งกลับคำตอบเป็นที่CharChar

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, ส่วนที่เหลือ
  • b1ฟังก์ชั่นจับแยกทางสำหรับตัวละครทั้งสองเขตแดนs1 < b1ในเวลา

ลองออนไลน์


1
ยินดีต้อนรับสู่เว็บไซต์! ฉันเดาว่านี่จะสั้นกว่าภาษาที่ไม่ใช่แบบทั่วไปส่วนใหญ่ที่สามารถบรรลุผลลัพธ์ที่ต้องการได้จริง
Jonathan Allan

คำตอบที่ยอดเยี่ยม! ฉันลองใช้ Haskell แต่ยอมแพ้หลังจากนั้นไม่นาน ...
Laikoni

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สำหรับการขึ้นบรรทัดใหม่ (จริง ๆ แล้วฉันมีวิธีแก้ปัญหาที่สั้นกว่าโดยใช้ new ที่เป็นประโยชน์มากขึ้นสำหรับการขึ้นบรรทัดใหม่

คำอธิบาย

ขั้นตอนแรกคือการถอดเสียง เราใช้+และ1เป็นตัวเลือกเพื่อให้รูปแบบดำเนินต่อไป แต่จะไม่มีผลต่อผลลัพธ์ของระยะ ไวยากรณ์T`from`toเพื่อแมลักษณะนิสัยของแต่ละตัวละครในตำแหน่งเดียวกันในfrom toหากtoสั้นกว่าfromนั้นตัวละครสุดท้ายของมันจะถูกทำซ้ำได้มากเท่าที่ต้องการ หากfromมีอักขระซ้ำกันจะมีการพิจารณาการเกิดขึ้นครั้งแรกของแต่ละรายการเท่านั้น ตัวอักษรบางส่วนตรงกับตัวละครคลาสเช่นเทียบเท่ากับd0123456789

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ในเอก น่าเสียดายที่คำสั่ง unary conversion ในเรติน่าคือ$*ซึ่งเป็นสองสัญลักษณ์ที่อยู่ใกล้กันดังนั้นเราจะทำการแปลง "ด้วยตนเอง" โดยใช้การแทนที่

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

เลขหลักเดียวของเราคือ$nซึ่งเป็นรูปแบบการแทนที่สำหรับบรรทัดใหม่ \bตรงกับ "ขอบเขต" ซึ่งคำที่เป็นตัวอักษรและตัวเลขเริ่มต้นหรือสิ้นสุด: ในกรณีของเราสิ่งนี้จะจับคู่เสมอก่อนที่จะมีหมายเลขใด ๆ เรามีพื้นแทนที่แต่ละหมายเลขมีบวกขึ้นบรรทัดใหม่nn-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

ลองออนไลน์


7

Perl 5 , 293 ไบต์

291 รหัสไบต์ + -0p2

ฉันได้รับคำแนะนำว่าการตั้งค่าสถานะบรรทัดคำสั่งนั้นฟรี แต่ฉันได้เพิ่มพวกเขาไว้ที่นี่เพื่อให้สามารถมองเห็นได้เนื่องจากลิงค์ 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

ลองออนไลน์!

นี่เป็นความท้าทายที่ยากมากโดยเฉพาะในการแก้ปัญหาในเกือบทุกภาษาดังนั้นฉันค่อนข้างมีความสุขที่ฉันสามารถทำได้ หวังว่าช่องว่างเพิ่มเติมก่อนและหลังหมายเลขไม่ใช่ปัญหา

เลือกสั่งซื้อลำดับเป็นเรื่องยุ่งยากโดยเฉพาะอย่างยิ่ง แต่ forunately s///และy///สามารถยอมรับตัวละครอื่นใดตามที่คั่นดังนั้นมันจึงเป็นไปได้ที่จะใช้ตัวอักษร, พื้นที่, จำนวน, สัญลักษณ์ซึ่งช่วยให้การและs 0...0...0;y 0...0...0;

สิ่งแรกที่จำเป็นสำหรับการประเมินผลคือการแทนที่_ด้วย!เพื่อที่\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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.