INTERCAL เป็นภาษาที่ยอดเยี่ยม แต่ไม่ใช่เรื่องง่ายที่จะเข้าใจรหัสของผู้อื่น โดยเฉพาะอย่างยิ่งในกรณีที่พวกเขาใช้คำสั่ง COME FROM
นิยามการท้าทาย
- เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ซอร์สโค้ดของโปรแกรม INTERCAL เป็นสตรีมข้อความ / ข้อมูล หากคุณเขียนฟังก์ชั่นขอแนะนำให้คุณให้โปรแกรมเรียกฟังก์ชั่นด้วย แต่จะไม่นับรวมคะแนนของคุณ
- ฟังก์ชั่นเอาท์พุทจะเป็นข้อความ / ข้อมูลสตรีมของการกระโดดที่โปรแกรมทำขึ้น เอาต์พุตไม่จำเป็นต้องพิมพ์ แต่จำเป็นต้องเป็นข้อความเดียวไม่ใช่อาร์เรย์ของสตริง (ตัวอย่าง)
->
บรรทัดของการส่งออกแต่ละคนจะประกอบด้วยคำสั่งซึ่งจะมาจากไหนและจำนวนบรรทัดของมาจากคำสั่งแยกจากกันโดย ตัวอย่าง:(310) DO .4 <- .3 -> 55
คุณสามารถตัดซอร์สโค้ดของบรรทัดเหล่านี้ได้ แต่ไม่จำเป็น
- กรณีทดสอบจะประกอบด้วยป้ายกำกับที่ไม่ได้คำนวณเท่านั้น(เช่นป้ายกำกับเลขจำนวนเต็ม)
- ผลลัพธ์จะต้องเรียงตามคำสั่งรหัสแหล่งที่มาของคำสั่งซึ่งจะมาจากไม่ใช่ฉลากของพวกเขาหรือคำสั่งของคำสั่ง COME FROM หรือป้ายกำกับของพวกเขา
- เป็นไปได้สำหรับหลาย ๆ คำสั่งที่จะมาจากเลเบลเดียวกัน ในกรณีเช่นนี้จะต้องเรียงลำดับหมายเลขโทรศัพท์ COME FROM และคั่นด้วยเครื่องหมายจุลภาค
- มันเป็นไปได้สำหรับคำสั่งที่จะมาจากตัวเอง
- คำสั่ง COME FROM อาจถูกนำหน้าด้วยคำสั่ง NOT ในกรณีเช่นนี้หมายเลขบรรทัดต้องอยู่ในวงเล็บเหลี่ยม
- คำมาจากสามารถปรากฏในความคิดเห็นและจะต้องละเว้น คุณไม่จำเป็นต้องแยกวิเคราะห์ไฟล์ทั้งหมด: หากพวกเขาตามด้วยเลเบล (ตัวเลขในวงเล็บ) จากนั้นคุณสามารถสันนิษฐานได้ว่ามันเป็นข้อความจริง
เกณฑ์การให้คะแนน
ผู้เข้าประกวดจะได้คะแนนตามความยาวของตัวละครของโปรแกรมหรือฟังก์ชั่น
กรณีทดสอบ
กรณีทดสอบเหล่านี้ทั้งหมดมาจากcalvinmetcalf / INTERCAL Github repo แม้ว่าแอปพลิเคชั่นที่มีประโยชน์จะยอมรับการป้อนข้อมูลใด ๆ อย่างปลอดภัย แต่สำหรับวัตถุประสงค์ของการท้าทายนี้คุณต้องมีเพียงบัญชีสำหรับกรณีทดสอบทั้งห้านี้
(10) PLEASE DON'T GIVE UP -> 87
(33) DON'T GIVE UP -> 92
(15) DO (13) NEXT -> 26
(16) DO .12 <- .1 -> 6
(23) DO (21) NEXT -> 3
(7202) DO RETRIEVE .203+,202 -> 75
(4202) DO ,202SUB.201.202#7 <- ,201SUB.201.202#7 -> 108
(6202) DO ,201SUB.201.202#7 <- ,202SUB.201.202#7 -> 117
(4203) DO READ OUT ,201SUB.201.202#7 -> 133
(4302) DO .302 <- .2 -> 181
(5410) DO ,400SUB#124 <- #4 $ #17 -> 293
(3410) PLEASE (4410) NEXT -> 288
(5402) DO (412) NEXT -> 328
(4412) PLEASE (3412) NEXT -> 334
(3423) DO FORGET #2 -> 375
(4404) DO RETRIEVE .311+.312 -> 411
(5404) PLEASE DO (414) NEXT -> 430
(4434) DO FORGET #1 -> 441
(3454) DO (103) NEXT -> 451
(5502) DO .512 <- .312 -> 520
(8503) PLEASE RETRIEVE .311+.312 -> 621
(7503) DO (302) NEXT -> 515
(3622) DO (302) NEXT -> 514
(603) PLEASE FORGET #2 -> 622
(10) DO NOTHING -> 5, 11
(20) PLEASE (100) NEXT -> 6
(30) PLEASE (200) NEXT -> 12
(103) DO (104) NEXT -> 27
(104) DO (105) NEXT -> 19
(1) DO (2) NEXT -> 36
(2) DO (105) NEXT -> 194
(202) DO NOT .2 <- #2 AGAIN -> [196]
(203) DO (204) NEXT -> 167
(204) DO (205) NEXT -> 159
(8201) DO NOTHING -> 165, 271
(8202) PLEASE NOTE Fork threads, one dormant, one alive -> 53, 58
(8211) DO COME FROM (8211) -> 60
(8216) DO NOTHING -> 71
(8215) DO NOTHING -> 68
(8217) DO COME FROM (8217) AGAIN -> 118
(8299) DO COME FROM (8299) AGAIN -> 141
(8274) DO (8273) NEXT ONCE -> 158
(8259) PLEASE DO NOTHING -> 166
(8276) DO COME FROM (8276) AGAIN -> 199
(8278) PLEASE DO COME FROM (8278) AGAIN -> 237
2
มันทำให้ฉันงุนงงว่าไม่มีใครสร้างคอตต้อนอายอาย :-)
—
mınxomaτ
INTERCAL is a wonderful language
downvoted สำหรับภาษาที่ไม่เหมาะสม
คุณแน่ใจหรือว่าต้องการให้คะแนนตามความยาวตัวอักษร? ความท้าทายมักจะทำคะแนนโดยความยาวไบต์ที่นี่
—
ทำให้เสียชีวิต
@ ทำให้ฉันคิดถึงมันทั้งสองทาง ข้อได้เปรียบทั่วไปของการให้คะแนนตัวละครเช่นการเข้ารหัสจำนวนมากเป็นตัวละครยูนิโค้ดอาจจะไม่เป็นประโยชน์ แต่ฉันคิดว่าถ้าใครบางคนสามารถใช้ประโยชน์จากการให้คะแนนฉันจะสนใจเพื่อดูว่าพวกเขาสามารถทำอะไรได้บ้าง
—
อยากรู้อยากเห็น dannii
เราสามารถสมมติได้ว่าฉลากอยู่ที่จุดเริ่มต้นของบรรทัดหรือไม่? เช่นนั้น
—
orlp
^(\d+)
คว้าฉลาก?