Pseudo-quine polyglot ตัวนับการตรวจจับภาษา


11

Quines สนุก Polyglots ก็สนุกเช่นกัน Polyglot Quines มีอยู่ แต่เราสามารถยกระดับให้สูงขึ้นได้

เขียนไฟล์ที่มีโปรแกรมที่ถูกต้องสำหรับภาษาα, βและγ เมื่อไฟล์ถูกเรียกใช้งาน (อาจเป็นหลังจากรวบรวมไฟล์) เป็นภาษาαหรือβโปรแกรมเอาต์พุตของโปรแกรมจะอยู่ในรูปแบบเดียวกับการส่งที่ถูกต้องในการประกวดครั้งนี้ หากไฟล์ของคุณถูกเรียกใช้งานเป็นโปรแกรมภาษาไฟล์นั้นจะถูกส่งออกไปเป็นตัวเลข ค่าของตัวเลขนี้คือสายการประมวลผลก่อนหน้าของโปรแกรมที่ตีความว่าเป็นเลขฐานสอง

คำอธิบายนี้อาจเป็นเรื่องยากที่จะเข้าใจดังนั้นนี่คือตัวอย่าง ให้Α, ΒและΓเป็นฟังก์ชั่นที่ดำเนินการอินพุตเป็นภาษาα, βหรือγ resp โปรแกรมและส่งคืนผลลัพธ์ของโปรแกรมเหล่านี้ ให้xเป็นข้อเสนอที่ถูกต้องในการประกวดนี้ จากนั้นการแสดงออกต่อไปนี้ที่เราดำเนินการxผ่านβภาษาα, β, α, α, βและγในคำสั่งนี้จะบังเกิด 41, 41 ตั้งแต่10 = 101001 2

Γ (Β (Α (Α (Β (Α (Β ( x )))))))

คุณไม่อาจสันนิษฐานได้ว่าการประหารชีวิตที่สุดท้ายในสายโซ่นั้นเป็นการดำเนินการในภาษาβ สำหรับกรณีที่การส่งต้นฉบับของคุณถูกดำเนินการโดยตรงเป็นโปรแกรมภาษามันจะพิมพ์ 0

โปรแกรมของคุณจะทำงานอย่างถูกต้องสำหรับการรวบรวมสูงสุดสิบหกครั้งในห่วงโซ่ นั่นคือจำนวนสูงสุดที่โปรแกรมของคุณอาจพิมพ์ออกมาในตอนท้ายคือ 2 15 - 1 แน่นอนว่าโปรแกรมของคุณได้รับอนุญาตให้รองรับกลุ่มการรวบรวมที่ยาวขึ้น

นี่คือการประกวดความนิยมเพื่อสนับสนุนการแก้ปัญหาที่สร้างสรรค์ การส่งที่มีคะแนนโหวตสูงสุดจะชนะ


สามภาษาสามารถเท่าเทียมกันได้หรือไม่ (แม้ว่าจะลดลงอย่างมาก)
Zgarb

6
@Zgarb ฉันชอบที่จะเห็นวิธีการแก้ปัญหาที่บาง (หรือทั้งหมด) ของภาษามีค่าเท่ากัน มาดูกันว่าคุณจัดการแยกแยะภาษาที่เท่ากันได้อย่างไร
FUZxxl

1
...ฉันเห็น. : DI อ่านความท้าทายอย่างเร่งรีบเกินไป
Zgarb

@Zgarb แล้วภาษาเดียวกันมีความแตกต่างกันอย่างไร magic += Number(System.env.lang_version[-1])
John Dvorak

1
+1 สำหรับการใช้ตัวอักษรกรีกแทนการเบื่อa,b,cหรือ1,2,3=)
ข้อบกพร่อง

คำตอบ:


13

Python 2, Python 3,> <> (ปลา)

#;n0
import sys
x='\\\'\nn#;n0import sysx=v=int(1/2*2)sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])n'
v=int(1/2*2)
sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])

คำอธิบายหลาม

ล่าม Python 2 และ Python 3 ทำงานคล้ายกันยกเว้นv=int(1/2*2)ตัวแปรที่ได้รับค่าที่แตกต่างกัน ( 0และ1) เนื่องจาก Python 2 ใช้การแบ่งทศนิยมและ Python 3 ใช้การแบ่งจำนวนเต็ม

ในการรันทุกครั้งพวกเขาจะเพิ่มนิพจน์+0*2หรือ+1*2 บรรทัดแรก (หลังจาก#;n) และลงในxสตริง (หลังจากคำสั่งสุดท้ายที่เขียน) ล่าม> <> ใช้การเพิ่มครั้งแรกและ Pythons ใช้อันที่สองเพื่อสร้างการค้นหาที่ถูกต้อง

รหัสหลังจากB(A(B(B(x)))):

#;n+1*2+0*2+1*2+1*20
import sys
x='\\\'\nn#;n0import sysx=v=int(1/2*2)sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])+1*2+0*2+1*2+1*2n'
v=int(1/2*2)
sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])

> <> คำอธิบาย (ปลา)

เมื่อคุณเรียกใช้ตัวแปล> <> ตัวชี้รหัสจะกระเด้งกลับมาจากการ#ล้อมรอบบรรทัดแรกและเริ่มจากปลายบรรทัดแรกและส่วนหัวของทิศตะวันตกเริ่มกดตัวเลขลงบนสแต็ก หากผู้ประกอบการมา ( +หรือ*) มันจะปรากฏองค์ประกอบสองอันดับแรกจากสแต็กและผลักผลลัพธ์กลับมา ด้วยวิธีนี้เราจะจบลงด้วยการเป็นตัวแทน base2 ของการทำงานก่อนหน้า ( 13ในตัวอย่างก่อนหน้า) นี้เป็นจำนวนที่ต้องการดังนั้นเราจึงเอาท์พุทด้วยและยุติด้วยn;


นี่เป็นสิ่งที่ดีงาม
FUZxxl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.