Beberapa program Quinecatenate!

22

Tugas Anda adalah memberikan tiga bahasa yang berbeda A, B, C, dan menulis dua program P dan Q yang berbeda sehingga:

P adalah quine dalam bahasa A, tetapi bukan quine dalam B atau C;

Q adalah quine dalam bahasa B, tetapi bukan quine dalam A atau C; dan

Q digabungkan setelah P (tanpa karakter baru ditambahkan di antaranya) adalah quine dalam bahasa C, tetapi tidak dalam B atau A.

Ini adalah codegolf, di mana skor Anda adalah panjang dari quine akhir, bersatu. Sekali lagi, patuhi aturan quine yang tepat - tidak membaca kode sumber Anda, tidak ada program kosong dll.

Masara Faraz
sumber
2
Peraturan tentang komentar?
Addison Crump
Itu sesuatu yang tidak saya pikirkan sebelumnya. Saya cenderung membiarkan mereka meluncur karena Anda harus khawatir tentang mencetaknya DAN harus memastikan bahasa C memiliki sintaks komentar yang sama atau sesuatu tetapi saya fleksibel.
Faraz Masroor
Apakah "bukan quine" berarti "melakukan apa saja" atau "setidaknya lari"?
LegionMammal978
1
Ketika dimasukkan ke dalam kompiler, ia tidak menampilkan kode sumbernya. Itu dapat menjalankan atau melempar kesalahan atau tidak mengkompilasi atau mengeluarkan sesuatu yang lain atau tidak sama sekali, tetapi selama itu tidak menampilkan kode sumbernya.
Faraz Masroor
Inspirasi tantangan quine, untuk siapa pun yang tertarik: "Cetak semua program dalam <bahasa>, dan hanya itu, yang tidak dicetak sendiri."
ETHproduksi

Jawaban:

11

Fission + CJam + GolfScript, 38 36 byte

Fission , 6 byte

'!+OR"

Ini adalah salah satu dari kueri Fisi Martin Büttner . Cobalah online!

CJam, 30 byte

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

Byte terakhir adalah linefeed. Cobalah online!

GolfScript, 36 byte

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

Byte terakhir adalah linefeed. Cobalah online!

Verifikasi

$ 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

Bagaimana itu bekerja

Pembelahan

  • R memunculkan atom yang bergerak ke kanan, membungkus di tepi.

  • "matikan mode pencetakan. Semuanya hingga yang berikutnya "dicetak.

  • '! set atom ke titik kode '!'

  • +menambah massa atom, mengaturnya ke titik kode ".

  • O mencetak karakter yang titik kode-nya adalah massa atom dan menghancurkan atom.

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.
Dennis
sumber
Menemukan Dennis yang lain!
Faraz Masroor
8

Brainfuck + GolfScript + CJam yang dimodifikasi sendiri, 29 27 byte

Brainfuck yang memodifikasi sendiri , 12 byte

 {<[<]>[.>]}

Perhatikan ruang terdepan. Cobalah online!

GolfScript, 15 byte

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

Byte terakhir adalah linefeed. Cobalah online! .

CJam, 27 byte

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

Perhatikan ruang terdepan. Byte terakhir adalah linefeed. Cobalah online!

Verifikasi

$ 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

Bagaimana itu bekerja

Brainfuck yang memodifikasi sendiri

SMBF dimulai dengan kode sumbernya di sebelah kiri penunjuk data.

<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.
Dennis
sumber
5

Tcl, CJam, GolfScript, 60 + 26 = 86 112 byte

Tidak bermain golf dengan baik.

Tcl , 60 byte

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

Berdasarkan quine di halaman ini . Ini memiliki baris baru.

CJam, 26 byte

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

Ini memiliki baris baru.

GolfScript, 86 byte

{puts} [{join} {{} \{ \}\]} {{puts} [{join} {{} \{ \}\]} }]
{"' '@`+n@0"L~;"0$~"N}0$~
jimmy23013
sumber
Bagaimana cara kerjanya? Saya belum pernah mendengar tentang tcl
Faraz Masroor
@FarazMasroor Strings di Tcl dapat dikelilingi oleh kawat gigi, dan nama perintah juga string. Dan hal-hal dalam kurung dianggap blok dalam GolfScript, yang dapat dicetak apa adanya. CJam mirip dengan GolfScript tetapi cukup berbeda untuk membuat quine dalam satu bahasa tidak berfungsi di yang lain. Dengan pilihan bahasa ini, ini hanyalah quine normal dengan beberapa kode tambahan untuk ditampilkan dalam format yang tepat, yang belum di-golf.
jimmy23013
3

ShapeScript + CJam + GolfScript, 96 95 62 byte

ShapeScript , 16 byte

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

Ini adalah quine ShapeScript standar . Cobalah online!

CJam, 46 byte

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

Byte terakhir adalah linefeed. Cobalah online!

GolfScript, 62 byte

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

Byte terakhir adalah linefeed. Cobalah online di Web GolfScript .

Verifikasi

$ 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

Bagaimana itu bekerja

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.
Dennis
sumber
2
Saya menemukan diri saya Dennis liar!
Faraz Masroor