Çoklu program Quinecatenate!


22

Göreviniz A, B, C olmak üzere üç farklı dil vermek ve P ve Q olmak üzere iki farklı program yazmak:

P, A dilindeki bir krondur, ancak B ve C'deki bir kron değildir;

Q, B dilindeki bir krondur, ancak A ve C'deki bir kunda değildir; ve

P'den sonra birleştirilen Q (arasına herhangi bir yeni karakter eklenmeden) C dilinde A, ancak B de A da değil.

Bu, codegolf, puanınız finalin uzunluğunun olduğu, birleştirilmiş quine. Yine, uygun quine kurallarına uyun - kaynak kodunuzu okumak, boş programlar vs.


2
Yorumlarla ilgili kurallar?
Addison Crump

Bu daha önce düşünmediğim bir şeydi. Kaymalarına izin vermeye meyilliyim çünkü o zaman onu basmaktan endişelenmek zorundasınız. Ve C dilinin aynı sözdizimine veya başka birşeye sahip olduğundan emin olmak zorunda ama esnekim.
Faraz Masroor

"Bir kuyruk değil", "bir şey yap" veya "en azından koş" anlamına mı geliyor?
LegionMammal978

1
Bir derleyiciye yerleştirildiğinde kaynak kodunu çıkarmaz. Bir hata çalıştırabilir ya da atabilir ya da başka bir şey ya da hiçbir şey derleyemez ya da çıkaramaz, ancak kaynak kodunu çıkarmazsa.
Faraz Masroor

Quine, ilham alanlara
ETHProductions

Yanıtlar:


11

Fission + CJam + GolfScript, 38 36 bayt

Fisyon , 6 bayt

'!+OR"

Bu Martin Büttner'ın Fisyon sınavlarından biridir . Çevrimiçi deneyin!

CJam, 30 bayt

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

Son bayt bir satır beslemesidir. Çevrimiçi deneyin!

GolfScript, 36 bayt

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

Son bayt bir satır beslemesidir. Çevrimiçi deneyin!

Doğrulama

$ 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

Nasıl çalışır

fizyon

  • R sağa doğru hareket ederek bir kenarı saran bir atom ortaya çıkarır.

  • "geçiş modunu değiştirir. Bir sonrakine kadar her şey "yazdırılır.

  • '! atomun değerini '!' kod noktasına ayarlar.

  • +atom kütlesini artırarak kod noktasını ayarlar ".

  • O Kod noktası atomun kütlesi olan karakteri basar ve atomu yok eder.

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.

Başka bir Dennis buldum!
Faraz Masroor

8

Kendini değiştiren Brainfuck + GolfScript + CJam, 29 27 bayt

Kendini değiştiren Brainfuck , 12 bayt

 {<[<]>[.>]}

Baştaki boşluğa dikkat edin. Çevrimiçi deneyin!

GolfScript, 15 bayt

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

Son bayt bir satır beslemesidir. Çevrimiçi deneyin! .

CJam, 27 bayt

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

Baştaki boşluğa dikkat edin. Son bayt bir satır beslemesidir. Çevrimiçi deneyin!

Doğrulama

$ 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

Nasıl çalışır

Kendi kendini değiştiren Brainfuck

SMBF, veri işaretçisinin solundaki kaynak koduyla başlar.

<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 bayt

İyi golf oynamam.

Tcl , 60 bayt

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

Bu sayfadaki quine göre . Sonunda yeni bir hattı var.

CJam, 26 bayt

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

Sonunda yeni bir hattı var.

GolfScript, 86 bayt

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

Bu nasıl çalışıyor? Ben hiç duymadım tcl
Faraz Masroor

@FarazMasroor Tcl içindeki dizeler parantez içine alınabilir ve komut adları da dizelerdir. Ve parantez içindeki nesneler GolfScript'te olduğu gibi basılabilen bloklar olarak kabul edilir. CJam, GolfScript'e benzer, ancak bir dilde bir quine diğerinde işe yaramayacak kadar farklıdır. Bu dil seçenekleriyle, bunlar henüz formatlanmamış ve henüz golf oynamayan ekstra kodlu normal quines.
jimmy23013 23

3

ShapeScript + CJam + GolfScript, 96 95 62 bayt

ShapeScript , 16 bayt

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

Bu standart ShapeScript quine'dir . Çevrimiçi deneyin!

CJam, 46 bayt

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

Son bayt bir satır beslemesidir. Çevrimiçi deneyin!

GolfScript, 62 bayt

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

Son bayt bir satır beslemesidir. Çevrimiçi olarak Web GolfScript'te deneyin .

Doğrulama

$ 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

Nasıl çalışır

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
Kendimi vahşi bir Dennis buldum!
Faraz Masroor,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.