เพราะเราไม่สามารถเล่นกอล์ฟที่เป็นภาษาลึกลับได้มากพอใช่ไหม?
/// - เครื่องหมายทับ - เป็นภาษาเล็ก ๆ น้อย ๆ ที่สนุกสนานตามs///
ฟังก์ชั่นการแทนที่ regex ของชื่อเสียงของ Perl มันมีเพียงสองตัวละครพิเศษเฉือน/
และเครื่องหมายทับขวา\
เท่านั้น คุณสามารถค้นหาบทความฉบับเต็มได้ที่วิกิ esolangsแต่ฉันจะทำซ้ำคำอธิบายของภาษาด้านล่างรวมถึงตัวอย่างบางส่วน
ในระยะสั้นมันทำงานโดยระบุ/pattern/repl/rest
ในโปรแกรมและทำการทดแทนได้หลายครั้งเท่าที่จะทำได้ ไม่มีอักขระพิเศษยกเว้น/
และ\
: /
แบ่งเขตรูปแบบและการแทนที่ในโปรแกรมในขณะที่\
ให้คุณแทรกตัวอักษร/
หรือ\
อักขระลงในรหัสของคุณ ยวดเหล่านี้ไม่ใช่การแสดงออกปกติเพียงทดแทนสตริงธรรมดา
ความท้าทายของคุณคือการผลิตล่ามสำหรับ /// ภาษาไม่ว่าจะเป็นโปรแกรมที่อ่าน STDIN หรือฟังก์ชั่นที่รับอาร์กิวเมนต์สตริงในตัวละครน้อยที่สุด
คุณสามารถใช้ภาษาใดก็ได้ยกเว้น /// ตัวเอง คุณไม่สามารถใช้ไลบรารีใด ๆ ที่ตีความ ///; อย่างไรก็ตามคุณสามารถใช้ไลบรารี regex, regex หรือไลบรารีที่จับคู่สตริง
การกระทำ
มีสี่รัฐมีการพิมพ์ , รูปแบบ , ทดแทนและเปลี่ยนตัว ในทุกรัฐยกเว้นการทดแทน :
- หากโปรแกรมว่างเปล่าการทำงานจะหยุดทำงาน
- มิฉะนั้นถ้าตัวละครตัวแรกคือ
\
ทำอะไรกับตัวละครต่อไป (ถ้ามี) และลบทั้งสองจากโปรแกรม - มิฉะนั้นถ้าอักขระตัวแรกคือ
/
ให้ลบออกและเปลี่ยนเป็นสถานะถัดไป - อื่นทำอะไรกับตัวละครตัวแรกและลบออกจากโปรแกรม
- ทำซ้ำ
วงจรรัฐผ่านการพิมพ์ , รูปแบบ , ทดแทนและทดแทนในการสั่งซื้อ
- ในโหมดการพิมพ์ 'ทำอะไร' หมายถึงเอาท์พุทตัวละคร
- ในโหมดรูปแบบ 'ทำบางสิ่งบางอย่าง' หมายถึงการเพิ่มตัวละครในรูปแบบปัจจุบัน
- ในโหมดการแทนที่ 'ทำบางสิ่ง' หมายถึงการเพิ่มตัวละครในการเปลี่ยนปัจจุบัน
ในโหมดการทดแทนคุณทำตามกฎชุดอื่น แทนที่สิ่งที่เกิดขึ้นครั้งแรกของรูปแบบปัจจุบันซ้ำด้วยการเปลี่ยนปัจจุบันในโปรแกรมจนกระทั่งไม่สามารถแทนที่ได้อีก ถึงจุดนี้ให้ล้างรูปแบบและการเปลี่ยนและกลับไปที่โหมดการพิมพ์
ในโปรแกรม/foo/foobar/foo foo foo
ต่อไปนี้จะเกิดขึ้น:
/foo/foobar/foo foo foo
foo foo foo
foobar foo foo
foobarbar foo foo
foobarbarbar foo foo
...
สิ่งนี้จะวนซ้ำตลอดไปและไม่ออกจากโหมดการแทนที่ หากรูปแบบว่างเปล่าการเกิดขึ้นครั้งแรกของสตริงว่าง - ที่จุดเริ่มต้นของโปรแกรม - จะจับคู่เสมอดังนั้นโหมดการแทนที่จึงวนซ้ำตลอดไปไม่หยุดนิ่ง
ตัวอย่าง
no
ผลลัพธ์: no
.
/ world! world!/Hello,/ world! world! world!
ผลลัพธ์: Hello, world!
.
/foo/Hello, world!//B\/\\R/foo/B/\R
ผลลัพธ์: Hello, world!
.
a/ab/bbaa/abb
ผลลัพธ์: a
. โปรแกรมไม่หยุด
//
เอาท์พุท: ไม่มี
///
เอาท์พุท: ไม่มี โปรแกรมไม่หยุด
/\\/good/\/
ผลลัพธ์: good
.
นอกจากนี้ยังมีปัญหาในวิกิที่คุณสามารถลอง
\
ตัวละครหนีจากตัวละครที่ตามมารวมถึง/
ซึ่งสามารถใช้งานได้ตามปกติในภายหลัง ขณะนี้ไม่ได้ดูชอบมากทำให้นี้ /// ทัวริงสมบูรณ์
///
IDE ของฉันที่ฉันทำ!
/-/World//--/Hello//--W/--, w/---!
จะไม่รักอะไร (ลองลบเครื่องหมายขีดคั่นจากท้ายสุด)