เขียน Semiquine


10

สมมติว่าคุณมี 2 ภาษาและA Bสตริงsเป็นเซมินอินAและBถ้าเป็นไปตามเงื่อนไขต่อไปนี้:

  1. sAเป็นควินในภาษา
  2. sเป็นหลายภาษาในและAB
  3. ผลลัพธ์ของการทำงานsเป็นBโปรแกรมเป็นสตริงที่แตกต่างกันซึ่งเป็นควินในs'B

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

กฏสำหรับ Quines

ยอมรับ Quines จริงเท่านั้น นั่นคือคุณต้องพิมพ์คำต่อคำทั้งหมดเพื่อ STDOUT โดยไม่ต้อง :

  • อ่านซอร์สโค้ดของคุณโดยตรงหรือโดยอ้อม
  • อาศัยสภาพแวดล้อม REPL ซึ่งเพียงแค่ประเมินและพิมพ์นิพจน์ทุกครั้งที่คุณป้อน
  • อาศัยคุณสมบัติภาษาที่เพิ่งพิมพ์ออกมาในบางกรณี
  • ใช้ข้อความแสดงข้อผิดพลาดหรือ STDERR เพื่อเขียนทั้งหมดหรือบางส่วนของควิน (คุณสามารถเขียนสิ่งต่าง ๆ ไปยัง STDERR หรือสร้างข้อผิดพลาด / เตือนไม่ร้ายแรงตราบใดที่ STDOUT เป็นควินินที่ถูกต้องและข้อความแสดงข้อผิดพลาดไม่ได้เป็นส่วนหนึ่งของมัน)

นอกจากนี้ซอร์สโค้ดของคุณจะต้องไม่ประกอบด้วยตัวอักษรล้วนๆ (ไม่ว่าจะเป็นตัวอักษรสตริง, ตัวอักษรตัวเลข ฯลฯ ) และ / หรือ NOP ตัวอย่างเช่น`12เป็นรูปหลายเหลี่ยมใน Jelly และ Pyth แต่ใน Jelly มันเป็น NOP และตัวอักษรตัวเลขดังนั้นจึงไม่ถูกต้อง

เอาต์พุตที่ไม่สามารถยับยั้งได้ (เช่นประกาศลิขสิทธิ์ข้อความเริ่มต้น / ปิดเครื่องหรือฟีดบรรทัดต่อท้าย) อาจถูกละเว้นในเอาต์พุตเพื่อประโยชน์ของ quine

กฎระเบียบสำหรับ Polyglots

สองภาษาที่ใช้จะต้องแตกต่างกันอย่างชัดเจน โดยเฉพาะอย่างยิ่ง:

  • พวกเขาจะต้องไม่ใช้ภาษาเดียวกันรุ่นต่าง ๆ (เช่น Python 2 กับ Python 3)
  • พวกเขาจะต้องไม่เป็นภาษาถิ่นที่แตกต่างกันของภาษาเดียวกัน (เช่น Pascal vs. Delphi)
  • ภาษาหนึ่งอาจไม่ใช่ชุดย่อยของอีกภาษาหนึ่ง (เช่น C กับ C ++ 1 )
  • ภาษาหนึ่งอาจไม่ใช่อนุพันธ์ที่น่ารำคาญของอีกภาษาหนึ่ง (เช่น Matlab vs. Octave 2 , brainfuck และ boolfuck vs TinyBF กับ ShadyAsFuck เทียบกับอนุพันธ์ของ brainfuck อื่น ๆ ที่น่าสนใจเล็กน้อย)

กฎเบ็ดเตล็ด

  • คุณไม่สามารถรับอินพุตจาก STDIN (หรือแหล่งอื่น ๆ ) หากภาษาที่คุณเลือกต้องป้อนข้อมูลดังนั้นอินพุตจะต้องว่างเปล่า (สตริงว่าง, ไพพ์จาก/dev/nullฯลฯ ) หรือเอาต์พุตของโปรแกรมต้องไม่ขึ้นอยู่กับอินพุต
  • สำหรับความท้าทายนี้คุณต้องเขียนโปรแกรมทั้งหมด ไม่อนุญาตให้ใช้รหัสเพิ่มเติมเพื่อเรียกใช้โซลูชัน (เช่นการกำหนดและเรียกฟังก์ชัน lambda ที่กำหนดไว้ในโซลูชัน)

1: ใช่ฉันรู้ว่า C ไม่ใช่ส่วนย่อยของ C ++ มันใกล้พอที่จะได้รับการพิจารณาให้เป็นหนึ่งเดียวเพื่อจุดประสงค์ในการพูดได้หลายภาษาดังนั้นฉันจึงนับมันสำหรับความท้าทายนี้

2: เช่นเดียวกับจุดที่ 1 ข้างต้นถึงแม้ว่า Octave จะไม่สามารถใช้งานร่วมกับ Matlab ได้ 100% แต่ทว่ามันถูกออกแบบมาให้เข้ากันได้และอยู่ใกล้พอที่จะอนุญาตให้พูดได้หลายภาษาของ Matlab / Octave


อนุญาตให้คัดลอกบล็อกของ ESMin ได้หรือไม่
lirtosiast

@ThomasKwa ฉันไม่คุ้นเคยกับ ESMin ดังนั้นคุณช่วยให้ฉันสรุปได้อย่างรวดเร็วหรือไม่?
Mego

มีคำสั่งให้เริ่มบล็อกการคัดลอกซึ่งจะทำให้ซอร์สโค้ดของทุกสิ่งผ่านไปได้ ฉันคิดว่าภาษา JS กอล์ฟอื่น ๆ อาจมีหนึ่งภาษาด้วย
lirtosiast

@ThomasKwa ที่จะไม่ได้รับอนุญาตภายใต้กฎข้อแรกในกฎ quine (ไม่อ่านซอร์สโค้ดไม่ว่าโดยตรงหรือโดยอ้อม)
Mego

1
@ Downgoat ตราบใดที่มันไม่ผิดกฎอื่น ๆ อย่างแน่นอน เหยียดหยามนิสัยใจคอเป็นชนิดของเป้าหมายของเว็บไซต์นี้ :)
ชำเลืองไปที่

คำตอบ:


6

GolfScript + Fissionขนาด19 18 ไบต์

{".~
'!+OR"
2<}.~

จำเป็นต้องป้อนบรรทัดต่อท้าย

นี่คือควินจริงใน GolfScript ลองออนไลน์!

ในฟิชชันมันพิมพ์

'!+OR"

ซึ่งเป็นควินจริงในการแบ่งเซลล์ ลองออนไลน์!

คำอธิบาย

ใน GolfScript ทุกรูปแบบ

{...}.~

เป็นควินตราบใดที่...ปล่อยสตริง".~"ไว้บนสแต็ก .ซ้ำบล็อกดังกล่าวว่ามีสำเนาที่ได้รับการตีพิมพ์ในตอนท้ายและ~รันมันเพื่อให้เราสามารถใช้เนื้อหาในการพิมพ์.~ตัวเอง ในกรณีนี้บล็อกดันสตริง

".~
'!+OR"

2<แล้วตัดทอนไปยังตัวละครสองตัวครั้งแรกกับ

โปรแกรมฟิชชันใช้งานได้จริงเหมือนกับquine เองเนื่องจากโปรแกรมบรรทัดแรกและบรรทัดที่สามถูกละเว้นทั้งหมด


6

Ruby + (JavaScript หรือ Python 3), 76 ไบต์

นี่เป็นความท้าทายอีกประการหนึ่งที่สามารถแก้ไขได้โดยใช้ภาษาที่ฉันโปรดปรานใหม่ชุดย่อยเกือบทั่วไปของ Ruby, JavaScript, และ Python 3; และเนื่องจากเรายังไม่มีคำตอบในภาษา exoteric และหลายคนชอบดูวิธีแก้ปัญหาที่ไม่ใช่ภาษากอล์ฟฉันคิดว่าฉันมีส่วนร่วม ยิ่งไปกว่านั้นคำตอบเดียวกันนี้แก้ไขความท้าทายได้หลายวิธีพร้อมกัน

ที่นี่s:

s="'";d='"';n='print("s="+d+s+d+";d="+s+d+s+";n="+s+n+s+";eval(n)")';eval(n)

นี่คือควินินในทับทิม มันไม่ได้เป็น quine ใน JavaScript หรือ Python 3; หากคุณรันในภาษาใดภาษาหนึ่งเอาต์พุตของมันs'จะมีบรรทัดใหม่ต่อท้ายและทำให้แตกต่างกัน:

s = ""; d = ' " '; n =' พิมพ์ (" s = "+ D + S + D +"; d = "+ S + D + s"; n = "+ S + n + S +" ; EVAL (n) ") '; EVAL (n)

อย่างไรก็ตามs'เป็นโพลิกอนควินินใน JavaScript และ Python 3! (ตามปกติสำหรับฉันฉันใช้การใช้ Rhino ของ JavaScript ทั้งเพื่อความสะดวก (ในขณะที่มันทำงานจากบรรทัดคำสั่งมากกว่าต้องการเบราว์เซอร์) และเนื่องจากมีไลบรารีมาตรฐานแปลก ๆ ที่printเขียนไปยังเอาต์พุตมาตรฐาน) ทั้งสองภาษาสร้างขึ้นs'จากการรันโปรแกรมใดโปรแกรมหนึ่ง

เป็นโบนัสโปรแกรมนี้ยังแก้ปัญหาในสิ่งที่ตรงกันข้าม หากคุณตัดสินใจที่จะรันs'ใน Ruby มันจะพิมพ์โปรแกรมต้นฉบับsอีกครั้ง เช่นs'นี้เป็นคำตอบที่ถูกต้อง (แต่อีกต่อไปเล็กน้อยที่ 77 ไบต์)

เมื่อมาถึงจุดนี้ฉันเกือบจะเริ่มคิดว่า "ความแตกต่างว่าผลลัพธ์จะจบลงด้วยการขึ้นบรรทัดใหม่เพียงพอที่จะนับสองโปรแกรมที่แตกต่างกัน" ควรได้รับการพิจารณาว่าเป็นช่องโหว่มาตรฐานเนื่องจากนี่เป็นภาษาชุดที่สอง (นอกเหนือจาก GolfScript / CJam ที่รู้จักกันดี) ซึ่งเป็นไปได้ที่จะดึงเคล็ดลับออก


2

Vitsy (เซฟโหมด) และ Y, 9 ไบต์, ไม่ใช่การเข้ารหัส

' Ugrd3*Z

ใน Vitsy นี่คือ quine ใน Y พิมพ์นี้Ugrd3*Z'; เมื่อเรียกใช้งานนี้จะพิมพ์Ugrd3*Z'ซึ่งเป็นควินใน Y. Y โพสต์คำถามอย่างไรก็ตาม

Vitsy เห็นอะไร:

 ' Ugrd3*Z
 '         Heyyyy a string! Let's do this!
  ........ Capturing a string! Oh, not done? Hm, let's go back to the start.
 '         There we go.
           (space) ...
   U       (no op)
    g      use count, disabled in safe mode
     r     reverse stack
      d3*  push a '
         Z print it all!

สิ่งที่ Y เห็น:

' Ugrd3*Z
'         Push a space.
  U       Wrap around and capture.
   g      Print that. (Nothing else is printed.)

1
โปรดทราบว่าวิธีนี้ใช้ได้เฉพาะในเซฟโหมดหรือค่อนข้างมีผลข้างเคียงที่ไม่ได้ตั้งใจบางอย่างในโหมดไม่ปลอดภัย
Addison Crump

1

CJam + GolfScript 9 ไบต์

"0$p"
0$p

นี่คือควินินใน CJam ใน GolfScript มันจะแสดงผลลัพธ์ด้วยบรรทัดใหม่ที่ต่อท้ายซึ่งเป็นสิ่งที่สำคัญใน GolfScript

ฉันไม่แน่ใจว่า CJam ควรได้รับการพิจารณาว่าเป็นเรื่องไม่สำคัญของ GolfScript หรือไม่ แต่ฉันคิดว่าพวกเขาแตกต่างกันและอย่างน้อยก็ไม่สำคัญ

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