Python: ฉันหวังว่าฉันเป็น PHP [ปิด]


8

มีเรื่องราวเก่าแก่เกี่ยวกับช่างหินที่ไม่เคยพอใจกับสิ่งที่เขาเป็น เขาหวังว่าเขาจะกลายเป็นดวงอาทิตย์ได้และเขาก็เป็นเช่นนั้น ถูกบล็อกโดยเมฆเขาต้องการที่จะ - และกลายเป็น - เมฆ เมื่อลมพัดเขาต้องการให้ตัวเองเป็นลม หยุดด้วยภูเขาเขาต้องการเป็นภูเขาและกลายเป็นหนึ่ง อย่างไรก็ตามในไม่ช้าเขาก็ถูกแฮ็คโดยช่างหินและประสงค์จะเป็นช่างหิน

ในทำนองเดียวกันงานของคุณคือการเขียนโปรแกรมที่ไม่เคยพอใจกับภาษาที่ใช้อยู่โปรแกรมของคุณต้องส่งออกชุดการแทนที่ regex เพื่อเปลี่ยนเป็นภาษาอื่น และอื่น ๆ

กฎระเบียบ

  1. เขียนโปรแกรมในภาษาที่คุณเลือก
  2. โปรแกรมควรส่งออกชุดอย่างน้อยสองส่วน ส่วนคือข้อความจำนวนมากคั่นด้วยเครื่องหมายอัฒภาค อย่างไรก็ตามหากมีเครื่องหมายอัฒภาคอยู่ใน regex การแยกมันออกจะทำให้ไวยากรณ์ไม่ถูกต้อง แต่จะไม่แยกเซกเมนต์ ดูตัวอย่าง
  3. ส่วนแรกเป็นรูปแบบการค้นหา regex และส่วนที่สองคือรูปแบบการทดแทน รูปแบบที่สามเป็นรูปแบบ "ค้นหา" อีกรูปแบบและรูปแบบที่สี่คือรูปแบบ "แทนที่" เป็นต้น
  4. ใช้รูปแบบ regex กับโปรแกรม แทนที่รูปแบบในส่วนแรกด้วยหนึ่งในสอง; แทนที่รูปแบบที่สามด้วยรูปแบบในสี่และอื่น ๆ
  5. ผลลัพธ์ควรเป็นโปรแกรมในภาษาอื่นซึ่งตัวเองปฏิบัติตามกฎ 2 ถึง 4
  6. ภาษาที่ใช้จะต้องสร้างวัฏจักรที่ไม่สิ้นสุดซ้ำ
    • ตัวอย่างเช่น Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python -> ...
  7. คะแนนของคุณคือระยะเวลาของรอบ ความสัมพันธ์จะถูกทำลายโดยความยาวรหัสเริ่มต้นที่สั้นที่สุด
    • ในตัวอย่างข้างต้นคะแนนคือสาม
  8. ในการวนซ้ำแต่ละรอบจะไม่มีการใช้ภาษามากกว่าหนึ่งครั้ง
  9. สำหรับกฎ 5 และ 7 ภาษาที่เข้ากันได้ (C และ C ++) และรุ่นที่แตกต่างกันของภาษาเดียวกัน (Python 2 และ Python 3) ถือว่าเป็นภาษาเดียวกัน
  10. โปรแกรมเองไม่จำเป็นต้องทำซ้ำ
    • ในตัวอย่างข้างต้นโปรแกรมแรกและโปรแกรมที่สี่อาจแตกต่างกัน
  11. regex ทุกรุ่นสามารถใช้ได้ แต่ต้องใช้โปรแกรมเดียวกันทุกโปรแกรม
  12. เอาต์พุตทั้งหมดสำหรับแต่ละโปรแกรมต้องไม่เกิน 100 ตัวอักษร
  13. แต่ละเอาต์พุตต้องมีคำแนะนำในการเปลี่ยนโปรแกรมจริง นั่นคือไม่มีโปรแกรมสองโปรแกรมติดต่อกันในรอบอาจจะเหมือนกัน

ตัวอย่าง

Python -> Ruby -> Python -> ...

print "uts;Z;rint;uts;Z(?=;Z);rint"

ขาออก:

uts;Z;rint;uts;Z(?=;Z);rint

กลุ่มคือ:

FIND     ;    REPLACE
uts      ;    Z
rint     ;    uts
Z(?=;Z   ;    rint   (breaking the first segment in two would result in invalid syntax)

การใช้การแทนที่ regex ตามลำดับทำให้เรา:

print "Z;Z;rint;Z;Z(?=;Z);rint"      # replace each "uts" with "Z"
puts "Z;Z;uts;Z;Z(?=;Z);uts"         # replace each "rint" with "uts"
puts "rint;Z;uts;rint;Z(?=;Z);uts"   # replace each "Z" followed by ";Z" with "rint"

การเรียกใช้บรรทัดสุดท้ายทำให้เรามีคำแนะนำในการเปลี่ยนกลับเป็นรหัสหลาม


หากคุณกำลังใช้ขนาดรหัสเป็นตัวแบ่งเน็คไทเราจำเป็นต้องมีขีด จำกัด 100 อักขระหรือไม่
Martin Ender

@ MartinBüttnerใช่; ทำไมจะไม่ล่ะ?
Ypnypn

แน่นอน แต่มันเป็นตัวละครที่ยาวกว่า\;;)
Martin Ender

C ++ ไม่จำเป็นต้องเข้ากันได้กับ C.
golfer9338

8
ฉันคิดว่าคุณอาจต้องการให้โปรแกรมทั้งหมดในรอบนั้นแตกต่างกัน หากฉันผิดโปรดระบุอย่างนั้นและฉันขอสิทธิ์ในการแก้ปัญหาที่ชัดเจน
Peter Taylor

คำตอบ:


6

2 ภาษา: Python, Ruby; 33 29 ไบต์

นี่เป็นอีกวิธีหนึ่งในการทำ Python และ Ruby นั่นเป็นวิธีที่สั้นกว่าความท้าทายเล็กน้อย:

Python:   print'^;puts"^.*?\\42#\\73"#'
prints:   ^;puts"^.*?\42#\73"#

Ruby:     puts"^.*?\42#\73"#print'^;puts"^.*?\\42#\\73"#'
prints:   ^.*?"#;

มันไม่ควรจะเกินไปยากที่จะเพิ่ม PHP เข้าผสม


1

2 ภาษา: Python 2 และ Befunge-93, 77 ไบต์

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

u=u">>>>>:#,_@;Z;print;>>>>>:#,_@;Z(?=;Z);print;<v;Y;u;<v;Y(?=;Y);u"
print u

โปรแกรม Python นี้ให้ผลลัพธ์:

>>>>>:#,_@;Z;print;>>>>>:#,_@;Z(?=;Z);print;<v;Y;u;<v;Y(?=;Y);u

ซึ่งให้ผลแทนเหล่านี้:

FIND         REPLACE
>>>>>:#,_@   Z
print        >>>>>:#,_@
Z(?=;Z)      print
<v           Y
u            <v
Y(?=;Y)      u

ซึ่งเปลี่ยนโปรแกรมเป็นโปรแกรม Befunge นี้:

<v=<v"print;Z;>>>>>:#,_@;print;Z(?=;Z);>>>>>:#,_@;u;Y;<v;u;Y(?=;Y);<v"
>>>>>:#,_@ <v

บางทีฉันจะดูว่าฉันสามารถทำให้มันเป็นหนึ่งบรรทัด ตรงไปตรงมาฉันประหลาดใจเล็กน้อยที่ Befunge ทำงานให้กับปัญหาแบบนี้ได้เลย

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

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