หลายโปรแกรม Quinecatenate!


22

งานของคุณคือการให้สามภาษาที่แตกต่างกัน A, B, C และเขียนสองโปรแกรมที่แตกต่างกัน P และ Q เช่นนั้น:

P เป็นควินในภาษา A แต่ไม่ใช่ควินินใน B หรือ C;

Q เป็นควินในภาษา B แต่ไม่ใช่ควินินใน A หรือ C; และ

Q เรียงต่อกันหลังจาก P (ไม่มีตัวละครใหม่เพิ่มในระหว่าง) เป็น quine ในภาษา C แต่ไม่ใน B หรือ A

นี่คือ codegolf ซึ่งคะแนนของคุณคือความยาวของควินินสุดท้ายที่ต่อกัน อีกครั้งปฏิบัติตามกฎของquines ที่เหมาะสม - ไม่อ่านซอร์สโค้ดของคุณไม่มีโปรแกรมที่ว่างเปล่า ฯลฯ


2
กฎความคิดเห็น?
Addison Crump

นั่นคือสิ่งที่ฉันไม่เคยคิดมาก่อน ฉันอยากให้พวกเขาเลื่อนเพราะคุณต้องกังวลเกี่ยวกับการพิมพ์ที่ออกมาและต้องแน่ใจว่าภาษา C มีไวยากรณ์ความคิดเห็นหรือสิ่งเดียวกัน แต่ฉันยืดหยุ่น
Faraz Masroor

"ไม่ใช่ควินิน" หมายความว่า "ทำอะไร" หรือ "อย่างน้อยก็วิ่ง"
LegionMammal978

1
เมื่อใส่ลงในคอมไพเลอร์มันจะไม่ส่งออกซอร์สโค้ดของมัน มันสามารถรันหรือโยนข้อผิดพลาดหรือไม่คอมไพล์หรือเอาท์พุทอย่างอื่นหรืออะไรก็ได้ แต่ตราบใดที่มันไม่ได้เอาท์ซอร์สโค้ดของมัน
Faraz Masroor

คำตอบ:


11

ฟิชชัน + CJam + GolfScript, 38 36 ไบต์

ฟิชชัน 6 ไบต์

'!+OR"

นี้เป็นหนึ่งในมาร์ตินBüttnerของ quines ลองออนไลน์!

CJam, 30 ไบต์

' {"''"@*" "+YX#<
\"0$~"N}0$~

ไบต์สุดท้ายคือ linefeed ลองออนไลน์!

GolfScript ขนาด 36 ไบต์

'!+OR"' {"''"@*" "+YX#<
\"0$~"N}0$~

ไบต์สุดท้ายคือ linefeed ลองออนไลน์!

การตรวจสอบ

$ wc -c P Q
 6 P
30 Q
36 total
$ cat P Q > P+Q
$ 
$ Fission P 2>&- | diff -qs - P
Files - and P are identical
$ cjam P 2>&- | diff -qs - P
Files - and P differ
$ golfscript P 2>&- | diff -qs - P
Files - and P differ
$ 
$ cjam Q 2>&- | diff -qs - Q
Files - and Q are identical
$ golfscript Q 2>&- | diff -qs - Q
Files - and Q differ
$ Fission Q 2>&- | diff -qs - Q
Files - and Q differ
$ 
$ golfscript P+Q 2>&- | diff -qs - P+Q
Files - and P+Q are identical
$ Fission P+Q 2>&- | diff -qs - P+Q
Files - and P+Q differ
$ cjam P+Q 2>&- | diff -qs - P+Q
Files - and P+Q differ

มันทำงานอย่างไร

การแยก

  • R วางไข่ของอะตอมที่เคลื่อนที่ไปทางขวาล้อมรอบที่ขอบ

  • "สลับโหมดการพิมพ์ ทุกอย่างจนถึงถัดไป"จะถูกพิมพ์

  • '! ตั้งค่าอะตอมให้เป็นจุดรหัสของ '!'

  • +"เพิ่มมวลอะตอมของการตั้งค่าให้จุดรหัสของ

  • O พิมพ์อักขระที่มีรหัสจุดคือมวลของอะตอมและทำลายอะตอม

CJam

'       e# Push a space character.
{       e# Push the following code block:
  "''"  e# Push that string.
  @*    e# Separate its characters by spaces.
  " "+  e# Append one more space.
  YX#   e# Raise 2 to the first power. Pushes 2.
  <     e# Discard all but the first two characters of the string, i.e., "' ".
  \     e# Swap the string "' " with the code block in execution.
  "0$~" e# Push that string.
  N     e# Push a linefeed.
}       e#
0$~     e# Push a copy of the code block and execute it.

GolfScript

'!+OR"' # Push that string.
{       # Push the following code block:
  "''"  # Push that string.
  @*    # Join its characters, separating them by the first string.
  " "+  # Append a space.
  YX    # Undefined token. Does nothing.
  #<    # Comment.
  \     # Swap the string with the code block in execution.
  "0$~" # Push that string.
  N     # Undefined token. Does nothing.
}       #
0$~     # Push a copy of the code block and execute it.

พบเดนนิสคนอื่น!
Faraz Masroor

8

Self-ปรับเปลี่ยน brainfuck + + GolfScript CJam, 29 27 ไบต์

Brainfuck แก้ไขตัวเอง 12 ไบต์

 {<[<]>[.>]}

สังเกตพื้นที่ชั้นนำ ลองออนไลน์!

GolfScript ขนาด 15 ไบต์

{So"0$~"N]}0$~

ไบต์สุดท้ายคือ linefeed ลองออนไลน์! .

CJam, 27 ไบต์

 {<[<]>[.>]}{So"0$~"N]}0$~

สังเกตพื้นที่ชั้นนำ ไบต์สุดท้ายคือ linefeed ลองออนไลน์!

การตรวจสอบ

$ wc -c P Q
12 P
15 Q
27 total
$ cat P Q > P+Q
$ 
$ timeout 10 smbf P | diff -sq - P
Files - and P are identical
$ golfscript P | diff -sq - P
Files - and P differ
$ cjam P | diff -sq - P
Files - and P differ
$ 
$ golfscript Q | diff -sq - Q
Files - and Q are identical
$ cjam Q | diff -sq - Q
Files - and Q differ
$ timeout 10 smbf Q | diff -sq - Q
Terminated
$ 
$ cjam P+Q | diff -sq - P+Q
Files - and P+Q are identical
$ golfscript P+Q | diff -sq - P+Q
Files - and P+Q differ
$ timeout 10 smbf P+Q | diff -sq - P+Q
Terminated

มันทำงานอย่างไร

Brainfuck แก้ไขตัวเอง

SMBF เริ่มต้นด้วยซอร์สโค้ดทางด้านซ้ายของตัวชี้ข้อมูล

<space>        (ignored)
{              (ignored)
<              Move the data pointer left.
[<]            Move the data pointer left to the next null byte.
>              Move the data pointer right.
[.>]           Print and move the data pointer right until null byte.
}              (ignored)

GolfScript

{            # Push the following code block:
  So         # Undefined token. Does nothing.
  "0$~"      # Push that string.
  N          # Undefined token. Does nothing.
  ]          # Wrap the stack in a array. Does not affect output.
}            #
0$~          # Push a copy of the code block and execute it.


### CJam

{<[<]>[.>]} e# Push that code block.
{           e# Push the following code block:
  So        e# Print a space. Since it is printed explicitly,
            e# it will appear at the beginning of the output.
  "0$~"     e# Push that string.
  N         e# Push a linefeed.
  ]         e# Wrap the stack in a array. Does not affect output.
            e# This makes the program an infinite, empty  loop
            e# in SMBF; it would be a quine otherwise.
}           e#
0$~         e# Push a copy of the code block and execute it.

5

Tcl, CJam, GolfScript, 60 + 26 = 86 112ไบต์

เล่นกอล์ฟไม่ค่อยดี

Tcl , 60 ไบต์

{puts} [{join} {{} \{ \}\]} {{puts} [{join} {{} \{ \}\]} }]

อ้างอิงจากควินินในหน้านี้ มีการขึ้นบรรทัดใหม่

CJam, 26 ไบต์

{"' '@`+n@0"L~;"0$~"N}0$~

มีการขึ้นบรรทัดใหม่

GolfScript, 86 ไบต์

{puts} [{join} {{} \{ \}\]} {{puts} [{join} {{} \{ \}\]} }]
{"' '@`+n@0"L~;"0$~"N}0$~

มันทำงานอย่างไร ฉันไม่เคยได้ยินเรื่องของ tcl
Faraz Masroor

@FarazMasroor Strings ใน Tcl สามารถล้อมรอบด้วยวงเล็บปีกกาและชื่อคำสั่งยังเป็นสตริง และสิ่งที่อยู่ในเครื่องหมายปีกกาจะถือเป็นบล็อกใน GolfScript ซึ่งสามารถพิมพ์ได้ตามที่เป็นอยู่ CJam นั้นคล้ายกับ GolfScript แต่แตกต่างกันมากพอที่จะสร้างควินินในภาษาหนึ่งซึ่งไม่สามารถใช้งานได้ในอีกภาษาหนึ่ง ด้วยตัวเลือกภาษาเหล่านี้นี่เป็นเพียงการทดสอบปกติที่มีรหัสพิเศษบางอย่างเพื่อส่งออกในรูปแบบที่ถูกต้องซึ่งยังไม่ได้เล่นกอล์ฟ
jimmy23013

3

ShapeScript + CJam + GolfScript, 96 95 62 ไบต์

ShapeScript , 16 ไบต์

'"%r"@%"0?!"'0?!

นี่คือมาตรฐาน ShapeScript ควิน ลองออนไลน์!

CJam, 46 ไบต์

];{"'\"%r\"@%\"0?!\"'0?!];"SS#~(>
\"0$~"N}0$~

ไบต์สุดท้ายคือ linefeed ลองออนไลน์!

GolfScript, 62 ไบต์

'"%r"@%"0?!"'0?!];{"'\"%r\"@%\"0?!\"'0?!];"SS#~(>
\"0$~"N}0$~

ไบต์สุดท้ายคือ linefeed ลองมันออนไลน์บนเว็บ GolfScript

การตรวจสอบ

$ wc -c P Q
16 P
46 Q
62 total
$ cat P Q > P+Q
$ 
$ shapescript P 2>&- | diff -qs - P
Files - and P are identical
$ cjam P 2>&- | diff -qs - P
Files - and P differ
$ golfscript P 2>&- | diff -qs - P
Files - and P differ
$ 
$ cjam Q 2>&- | diff -qs - Q
Files - and Q are identical
$ golfscript Q 2>&- | diff -qs - Q
Files - and Q differ
$ shapescript Q 2>&- | diff -qs - Q
Files - and Q differ
$ 
$ golfscript P+Q 2>&- | diff -qs - P+Q
Files - and P+Q are identical
$ shapescript P+Q 2>&- | diff -qs - P+Q
Files - and P+Q differ
$ cjam P+Q 2>&- | diff -qs - P+Q
Files - and P+Q differ

มันทำงานอย่างไร

ShapeScript

'       Push a string that, when evaluated, does the following.
  "%r"  Push this formatting string. %r gets replaced by a string
        representation of the corresponding argument.
  @     Swap the string that is being evaluated on top of the stack.
  %     Apply formatting to the string on top of the stack.
  "0?!" Push that string.
'
0?!     Push a copy of the previous string and evaluate it.

CJam

];      e# Clear the stack. Stack is already clear. Does nothing.
{       e# Push the following code block:

  "'\"%r\"@%\"0?!\"'0?!];"

  SS#   e# Find the index of " " in " ". Pushes 0.
  ~(    e# Apply logical NOT and decrement. Pushes -2.
  >     e# Discard all but the two rightmost characters from the string,
        e# i.e., reduce it to "];".
  \     e# Swap the string "];" with the code block in execution.
  "0$~" e# Push that string.
  N     e# Push a linefeed.
}       e#
0$~     e# Push a copy of the code block and execute it.

GolfScript

'"%r"@%"0?!"'

0?!     # Find the index of the number 0 in the string and apply logical NOT.
];      # Clear the stack.
{       # Push the following code block:

  "'\"%r\"@%\"0?!\"'0?!];"

  SS    # Undefined token. Does nothing.
  #~(>  # Comment.
  \     # Swap the string with the code block in execution.
  "0$~" # Push that string.
  N     # Undefined token. Does nothing.
}       #
0$~     # Push a copy of the code block and execute it.

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