Wiele programów Quinecatenate!

22

Twoim zadaniem jest podanie trzech różnych języków A, B, C i napisanie dwóch różnych programów P i Q, takich jak:

P jest literą w języku A, ale nie literą w B ani C;

Q jest literą w języku B, ale nie literą w A ani C; i

Q skonkatenowane po P (bez żadnych nowych znaków pomiędzy nimi) to quine w języku C, ale nie w B ani A.

To jest codegolf, gdzie twój wynik to długość ostatecznego, połączonego quine. Ponownie przestrzegaj zasad prawidłowych quinesów - bez czytania kodu źródłowego, bez pustych programów itp.

Faraz Masroor
źródło
2
Zasady dotyczące komentarzy?
Addison Crump,
To coś, o czym wcześniej nie myślałem. Jestem skłonny pozwolić im się przesuwać, ponieważ wtedy musisz się martwić o wydrukowanie ORAZ muszę upewnić się, że język C ma taką samą składnię komentarzy lub coś, ale jestem elastyczny.
Faraz Masroor,
Czy „nie quine” oznacza „robić cokolwiek” lub „przynajmniej biegać”?
LegionMammal978
1
Po umieszczeniu w kompilatorze nie wyświetla kodu źródłowego. Może uruchomić lub zgłosić błąd albo nie skompilować lub wyprowadzić czegoś innego lub niczego, ale dopóki nie wyśle ​​kodu źródłowego.
Faraz Masroor,
Quine inspiracja dla każdego zainteresowanego: „Wydrukuj wszystkie programy w <języku> i tylko te, które nie drukują się same”.
ETHprodukcje

Odpowiedzi:

11

Rozszczepienie + CJam + GolfScript, 38 36 bajtów

Rozszczepienie , 6 bajtów

'!+OR"

Jest to jeden z quinesów Martina Büttnera . Wypróbuj online!

CJam, 30 bajtów

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

Ostatni bajt to kanał. Wypróbuj online!

GolfScript, 36 bajtów

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

Ostatni bajt to kanał. Wypróbuj online!

Weryfikacja

$ 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

Jak to działa

Rozszczepienie

  • R spawnuje atom, który porusza się w prawo, owijając się wokół krawędzi.

  • "przełącza tryb drukowania. Wszystko do następnego "jest drukowane.

  • '! ustawia atom na punkt kodowy „!”.

  • +zwiększa masę atomu, ustawiając ją na punkt kodowy ".

  • O wypisuje znak, którego punktem kodowym jest masa atomu i niszczy 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
źródło
Znalazłem innego Dennisa!
Faraz Masroor,
8

Samodomodyfikujący Brainfuck + GolfScript + CJam, 29 27 bajtów

Samomodyfikujący Brainfuck , 12 bajtów

 {<[<]>[.>]}

Zwróć uwagę na wiodące miejsce. Wypróbuj online!

GolfScript, 15 bajtów

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

Ostatni bajt to kanał. Wypróbuj online! .

CJam, 27 bajtów

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

Zwróć uwagę na wiodące miejsce. Ostatni bajt to kanał. Wypróbuj online!

Weryfikacja

$ 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

Jak to działa

Samomodyfikujący Brainfuck

SMBF zaczyna się od kodu źródłowego po lewej stronie wskaźnika danych.

<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
źródło
5

Tcl, CJam, GolfScript, 60 + 26 = 86 112 bajtów

Nie grał dobrze w golfa.

Tcl , 60 bajtów

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

Na podstawie quinu na tej stronie . Ma końcowy znak nowej linii.

CJam, 26 bajtów

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

Ma końcowy znak nowej linii.

GolfScript, 86 bajtów

{puts} [{join} {{} \{ \}\]} {{puts} [{join} {{} \{ \}\]} }]
{"' '@`+n@0"L~;"0$~"N}0$~
jimmy23013
źródło
Jak to działa? Nigdy nie słyszałem o tcl
Faraz Masroor
@FarazMasroor Ciągi w Tcl mogą być otoczone nawiasami klamrowymi, a nazwy poleceń są również ciągami. A rzeczy w nawiasach klamrowych są uważane za bloki w GolfScript, które można wydrukować tak, jak są. CJam jest podobny do GolfScript, ale na tyle inny, że quine w jednym języku nie działa w drugim. Przy tym wyborze języków są to po prostu normalne quinesy z dodatkowym kodem do wydrukowania we właściwym formacie, który nie jest jeszcze golfem.
jimmy23013,
3

ShapeScript + CJam + GolfScript, 96 95 62 bajtów

ShapeScript , 16 bajtów

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

Jest to standardowa quine ShapeScript . Wypróbuj online!

CJam, 46 bajtów

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

Ostatni bajt to kanał. Wypróbuj online!

GolfScript, 62 bajty

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

Ostatni bajt to kanał. Wypróbuj online na Web GolfScript .

Weryfikacja

$ 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

Jak to działa

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
źródło
2
Znalazłem się jako dziki Dennis!
Faraz Masroor,