元多语奎因


18

在使用PPCG时,我注意到奎因问题和多语种问题非常流行。同样,问题的元解决方案,即生成解决问题的程序的脚本,往往会得到社区的很多积极反馈。因此,我创造了这个挑战,实现了这三个想法。

然后,作为读者和爱好者,您的任务是创建一个尽可能短的脚本,该脚本可以在两种语言A和B中运行以为A和B生成奎因。当您的程序以语言A运行时,它应该生成一个程序使用语言B 而不是语言A的程序,反之亦然。语言A和B可以是同一语言的不同版本,但要记住,生成的Quines仅应在其中一种版本中起作用。

请记住,应该将标准漏洞视为封闭的,并且仅允许使用适当的奎因

祝你好运,最少的角色获胜!


1
喹基本上是元-元-元-元-元-元-等。程序:)
Esolanging Fruit

如果两种语言使用不同的字符编码,如何计算字节?您可能应该以字符而不是字节计分
Luis Mendo

1
如果我用语言A运行了奎因以生成语言B的奎因,那可以在A中运行吗?
corvus_192 '16

2
@LuisMendo当为具有不同编码的语言编写多语言时,我假设它们都接收相同的字节流(相同字符的不同编码)。
马丁·恩德

1
@Pavel我实际上在这里写了一个类似的挑战,但是由于重复而被关闭。
奥利弗·倪

Answers:


5

CJam 0.6.6 dev / GolfScript,15 14 12字节

"0$p"0$~a:n;

感谢@ jimmy23013打高尔夫球2个字节!

休息要更新。

验证

由于提交涉及大量空白,因此最好比较十六进制转储。

$ xxd -g 1 mpquine
0000000: 22 60 30 24 7e 22 30 24 7e 4e 4d 3a 6e 3b        "`0$~"0$~NM:n;
$
$ cjam mpquine | tee quine.gs | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e 0a                 "`0$~"`0$~.
$ golfscript quine.gs | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e 0a                 "`0$~"`0$~.
$ cjam quine.gs | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e                    "`0$~"`0$~
$
$ golfscript mpquine | tee quine.cjam | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e                    "`0$~"`0$~
$ cjam quine.cjam | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e                    "`0$~"`0$~
$ golfscript quine.cjam | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e 0a                 "`0$~"`0$~.

贾姆

CJam打印"`0$~"0$~和尾随换行符。在线尝试!

生成的程序"`0$~"0$~在GolfScript中使用尾随换行符打印(在线尝试!),而在CJam中不使用换行符打印(在线尝试!)。

间喹的工作原理

"`0$~"         e# Push that string on the stack.
      0$~      e# Push a copy and evaluate it:
               e#   `     Inspect the string, pushing "\"`0$~\"".
               e#    0$   Push a copy.
               e#      ~  Evaluate, pushing "`0$~".
               e# Both "\"`0$~\"" and "`0$~" are now on the stack.
         NM    e# Push "\n" and "".
           :n; e# Map print over the elements of "" (none) and pop the result.
               e# "\"`0$~\"", "`0$~", and "\n" are now on the stack, and the
               e# characters they represent will be printed implicitly.

奎纳如何工作

"`0$~"          # Push that string on the stack.
      0$~       # As in CJam.
         <LF>   # Does nothing.
                # "\"`0$~\"" and "`0$~" are now on the stack, and the characters
                # they represent will be printed implicitly, plus a linefeed.

与GolfScript不同,CJam默认情况下不打印尾随换行符,因此这不是CJam中的奎因。

高尔夫脚本

GolfScript打印"`0$~"0$~,没有尾随空白。在线尝试!

生成的程序打印时"`0$~"0$~不会在CJam中尾随空格(尝试在线!),但是GolfScript追加了换行符(尝试在线!)。

间喹的工作原理

"`0$~"0$~       # As in CJam.
         NM     # Unrecognized token. Does nothing.
           :n   # Store the top of the stack – "`0$~" – in the variable n. n holds
                # "\n" by default. When the program finishes, the interpreter
                # prints n implicitly, usually resulting in a trailing linefeed.
                # By redefining n, it will print "0$~" instead.
             ;  # Pop the string from the stack so it won't be printed twice.

奎纳如何工作

"`0$~"0$~      e# Works as in GolfScript.

与CJam不同,GolfScript会将换行符附加到堆栈的内容中,因此,这在GolfScript中不是一个问题。


从广义上来说,只是好奇,CJam和GolfScript有什么区别,为什么您的代码有效?
帕维尔

CJam受GolfScript的启发很大,并且大部分向后兼容。一个很大的不同是,默认情况下,GolfScript将换行符附加到输出中,而CJam则不这样做,这就是我在这里利用的。我将尽快添加详细说明。
丹尼斯

1
"0$p"0$~a:n;
jimmy23013 '16

@ jimmy23013很好,谢谢!我曾经玩过a:n,但是p没有想到使用过。
丹尼斯

8

CJam / Fission,22个字节

"'!+OR'")5-"{'_'~}_~";

在CJam中尝试。 在裂变中尝试。

在CJam中,这将打印标准的Fission quine

'!+OR"

尝试裂变奎因。

在Fission中,这将打印"标准CJam quine 的-less变体:

{'_'~}_~

试试CJam quine。

这也适用于22个字节(打印相同的quines):

"& *NQ!":)R"{'_'~}_~";

说明

在CJam中:

"'!+OR'"    e# Push this string.
)           e# Pull off the last character.
5-          e# Subtract 5, turning ' into ".
"{'_'~}_~"  e# Push this string.
;           e# And discard it again.

因此,在程序结束时,堆栈包含字符串"'!+OR"和字符",这两个字符串和字符都是隐式打印的。

在Fission中,程序流程从R右移原子开始。'"只是改变了原子质量,)5-因各种原因被忽略。然后,原子在处进入打印模式"并打印{'_'~}_~;销毁原子并终止程序。


4
表情符号+1{'_'~}
betseg

5
摧毁了我宁愿不在那发生的那个原子
路易斯·门多

6

Clojure / Common Lisp,274个字节

(defmacro t []"((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))")(if '()(print(let[s clojure.string/replace](.toUpperCase(s(s(s(s(s(t)"fn""lambda")"[s]""(s)")"(quote ""'")"e)""e")")))))""))))"))))(eval '(princ(t))))

添加一些空格以提高可读性

(defmacro t []"((fn [s] (print (list s (list (quote quote) s))))
     (quote (fn [s] (print (list s (list (quote quote) s))))))")
(if '()(print(let[s clojure.string/replace](.toUpperCase
    (s(s(s(s(s(t)"fn""lambda")"[s]""(s)")"(quote ""'")"e)""e")")))))""))))"))))
    (eval '(princ(t))))

基本上定义一个宏,该宏在Clojure中返回一个quine。Clojure需要以向量([])形式提供的宏定义参数,而Common Lisp(非常感谢)只是忽略了它。之后,我们通过评估在Common Lisp中和在Clojure中是否'()相等nil以及是否为假来区分两种语言true。然后,我们使用Clojure进行字符串操作,Common Lisp甚至不会尝试评估它在另一个if分支中的作用。另一方面,Clojure尝试在执行之前检查另一个分支是否至少正确,因此必须使用eval该分支才能在Clojure中正确,并在Common Lisp中输出正确的字符串。

注意:仅返回两个不同的字符串可能会更短,但与以不同语言输出不同字符串的多语言挑战没有什么不同。¯\ _(ツ)_ /¯

Clojure原始源代码运行:https : //ideone.com/SiQhPf

常见Lisp原始源代码运行:https : //ideone.com/huLcty

Clojure输出: ((LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))) '(LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))))

普通Lisp输出: ((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))

Clojure输出在Common Lisp中运行:https : //ideone.com/T1DF7H

反之亦然:https : //ideone.com/Fezayq


4

果冻 / GolfScript,18个16字节

0000000: 3a 6e 22 ff cc cc 22 7d 7f fe 22 3a 6e 60 ff 3b  :n"..."}..":n`.;

验证

使用确切的字节流测试所有涉及的程序只能在本地完成。

$ LANG=en_US # Latin-1. Jelly doesn't care about the exact encoding,
$            # as longs as it's not UTF-8.
$
$ xxd -g 1 mpquine
0000000: 3a 6e 22 ff cc cc 22 7d 7f fe 22 3a 6e 60 ff 3b  :n"..."}..":n`.;
$
$ jelly f mpquine | tee quine.gs | xxd -g 1
0000000: 22 3a 6e 60 22 3a 6e 60                          ":n`":n`
$ golfscript quine.gs | xxd -g 1
0000000: 22 3a 6e 60 22 3a 6e 60                          ":n`":n`
$ jelly f quine.gs 2> /dev/null | xxd -g 1
$
$ golfscript mpquine | tee quine.jelly | xxd -g 1
0000000: ff cc cc                                         ...
$ jelly f quine.jelly | xxd -g 1
0000000: ff cc cc                                         ...
$ golfscript quine.jelly | xxd -g 1
0000000: 0a

果冻

Jelly的代码页中,程序如下所示。

:n"”ṘṘ"}
“":n`”;

打印(在线尝试!

":n`":n`

这是GolfScript中的一个quine(在线尝试!),但是在Jelly中有一个解析器错误(在线尝试!)。

高尔夫脚本

在Latin-1中,程序如下所示,并且在}和之间带有不可打印的DEL字符þ

:n"ÿÌÌ"} þ":n`ÿ;

打印(在线尝试!

ÿÌÌ

或者,通过Jelly的代码页可视化,

”ṘṘ

这是Jelly 中的奎因(在线尝试),但仅在GolfScript中打印换行符(在线尝试!)。


1
好老了”ṘṘØV应该走了吧?
暴民埃里克(Erik the Outgolfer)'16

3

JavaScript / C 278字节

惊人的278个字节:

//\
console.log('int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}');/*
int main(){puts("A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));");}//*/

C quine:

int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}

JavaScript quine:

A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));


藜的圣洁母亲……
MD XF


1

Python / Retina,70 65 64 66字节

我使用了与以前的Python / Retina多语言语言相同的策略。

#
print"\nS`((.+))"*2+"\n\n"
#?
#_='_=%r;%_\n';_
#?;
#;print _%
#

在Python中尝试 | 试试视网膜

#是Python中的注释,因此仅在Python中打印Retina quine。在视网膜中,第一阶段(2行)不执行任何操作,因为#在输入中将找不到任何内容。下一阶段将用Python quine的基础取代任何内容。第三阶段将每个分号替换为#print _%片断。最后阶段删除所有#


视网膜中的Quine:


S`((.+))
S`((.+))


在Python中查询:

_='_=%r;print _%%_\n';print _%_

这个挑战中可以看到使用的奎因。Retina quine是Python中的错误,Python quine在Retina中没有输出。


您可以在回答中添加有关对喹啉酮工作原理的解释吗?
帕维尔

@Pavel添加了它。
mbomb007 '16

1

Python 3 / Python 2,62个字节

_='_=%r;print(_%%_['+'~'*-~int(-1/2)+'int(-1/2):])';print(_%_)

Python 2Python 3中尝试一下。

基于此处的Python quine 。这两个版本之间的区别在于它们的用途int(-1/2):在Python 2中,/是整数除法(四舍五入),结果为-1; 在Python 3中/是浮点除法(-0.5),它会int截断为0

我们_分三部分构建一个字符串。'_=%r;print(_%%_['并且'int(-1/2):])'总是一样的。有趣的部分是'~'*-~int(-1/2)

  • 在Python 2中,-~int(-1/2)is是0,并且不将波浪号添加到字符串中。
  • 在Python 3中,-~int(-1/2)is为1,并且波浪号已添加到字符串中。

因此,Python 2输出Python 3 quine

_='_=%r;print(_%%_[int(-1/2):])';print(_%_[int(-1/2):])

和Python 3输出Python 2 quine

_='_=%r;print(_%%_[~int(-1/2):])';print(_%_[~int(-1/2):])

在每个版本中,内部表达式的[ :]计算结果为0,这会使切片包含整个字符串,而在错误的语言中,表达式的计算结果为,这会使切片-1仅包含最后一个字符,因此将输出截断,因此它不是完整的quine。


1

Brain-FlakBrainfuck 4617 4009字节

((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()()())))()())[()()])))()()())[()()])))())[()])[()()()()])))))))))))))))))))))))))))))))))))))))))))()()())()())[()()()()])()()())[()()])()())[()()()()])()()()))()()())[()()])[()()()()])))))))))))))))))))()())))()()())[()()()()])()()()()())[()()]))()())[()()()])()())[()()])))()()())[()()])))())[()()])[()()()])))))))))))))))))))))))))))))))))))))))))))()()()())[()()()])()()()())[()()])[()()()]))()()()())[()()()])()()()())[()()])[()()()])()()()())[()()()])()()()())[()()])[()()()]))))))))))))))()()()())[()()()])()()()())[()()])[()()()]))()()()())[()()()])()()()())[()()])[()()()])))))))))))))))))))))))))))))()()()())[()()()])()()()())[()()])[()()()]))()()()())[()()()])()()()()()))))))[()()()])[()])()()))))()()){({}<>)<>}<>([]){({}[()]<(({}[()]<((((((()()()){}())){}{}){}())<>)>)<>){({}[()]<({}()())>){({}[()]<({}())>){({}[()]<({}((()()()){}()){})>){({}[()]<({}()())>){({}[()]<({}(((()()()){}()){}){}())>){(<{}({}()())>)}}}}}}{}([]<({}<{({}<>)<>}<>>)>){({}[()]<({}<>)<>>)}{}{({}[()]<(({}))>)}{}(((({})(((()()())){}{}){}())))<>>)}{}{<>({}<>)}{+++++++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++++++>>>+++>>>++++>>>+>>>+++++>>>++++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+>>>+>>>+>>>+>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>++>>>+++>>>++++>>>++>>>++>>>+>>>++>>>++>>>++>>>++++>>>++>>>+++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>++>>>+++++++>>>++++++++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>+++++++>>>++++++++>>>+>>>++>>>++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>++>>>+++++++>>>++++++++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++>>>+++++++>>>++++++++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>+>>>++>>>++>>>++++>>>++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>+++++++>>>++++++++>>>+>>>+++++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++++++>>>+++>>>++++>>>++++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++>>>++>>>++++++++>>>+++++++>>>++++++++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>++>>>+>>>++>>>++>>>++>>>++++>>>++>>>++++++++>>>+++++++>>>++++++++>>>+++>>>++++>>>++++>>>++>>>++++++++>>>+++++++>>>++++++++>>>+++>>>++++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++++++>>>+++>>>++++>>><<<[<<<]>>>[>++++++++++++++++++++++++++++++++++++++++.<[->.+.->+<<]>+.[-]>>]<[<<<]>>>[<++++++++++++++++++++++++++++++++++++++++>-[<+>-[<+++++++++++++++++++>-[<++>-[<+++++++++++++++++++++++++++++>-[<++>-[<++++++++++++++++++++++++++++++>-[<++>-]]]]]]]<.>>>>]}{}

在线尝试!

在线尝试!

解释仍在进行中,我仍在打高尔夫球


这会在Brainfuck中生成一个Brainfuck quine,在Brain-Flak中生成一个Brain-Flak quine。当在Brain-Flak中运行时,它应该生成一个Brainfuck quine;在Brainfuck中运行时,它应该生成一个Brain-Flak quine。
帕维尔

我会再做一次。我很抱歉,我只是有以下的作为和烧烤很难
小麦向导
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.