Answers:
{`"_~"+Wq~g#%}_~
标准quine的一个相当简单的修改。17字节的其他解决方案:
{`"_~"+q~{W%}&}_~
{`"_~"+q~!2*(%}_~
如果我可以假设输入仅为0或1(作为布尔值的替代,在CJam中没有专用的类型),则通过省略以下内容得到15 g
:
{`"_~"+Wq~#%}_~
{`"_~"+ e# Standard generalised quine framework. Leaves the source code on the stack.
W e# Push a -1.
q~ e# Read and evaluate input.
g e# signum, turning truthy values into 1 (leaving 0 unchanged).
# e# Power. -1^0 == 1, -1^1 == -1.
% e# Select every Nth element: a no-op for 1 and reverses the string for -1.
}_~
g
。
...我...我在击败CJam!(大喊)妈妈!妈,我行了!
'rd3 * i86 *-)rl \ O
说明:
'rd3 * i86 *-(rl \ O 标准奎因,但有一点曲折: '将源代码捕获为字符串 rd3 *在ASCII中创建'字符 i86 *-以ASCII格式获取输入字符,然后从中减去48。 如果为零,则if语句将跳过下一条指令。 (r如果堆栈的第一项为零,请不要执行下一项。 这里的下一项是相反的。 l \ O打印出堆栈。
v'rd3 *} v)rZ v将输入捕获为变量。 '捕获源,直到遇到另一个' r反转堆栈。 d3 *将'推入堆栈。 }将堆栈旋转到右侧。 v)将变量(输入)压入堆栈并测试其是否不为零。 r如果是这样,请反转堆叠。 Z输出堆栈中的所有内容。
prompt()
是必要的,除非我们切换到Node.JS。我相信$=_=>(A=`$=${$};$(prompt())`,alert(_?A:[...A].reverse().join``));$(prompt())
它可以正常工作,尽管也许可以降低更多。
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh
说明:
Burlesque具有内置的高级堆栈和代码操作。实际上,您无法访问该程序的源代码,但可以访问将来将要执行的其余代码。这意味着#Q
将返回其后的所有代码,这就是为什么我们必须将所有内容添加到#Q
正在执行的代码中的原因ri#Q
。
blsq ) #Q1 2++
12 -- this is the result of 1 2++
{1 2 ++} -- this is the result of #Q
++1 2
从技术上讲是非法代码,因为它是基于堆栈的。但是我们可以操纵代码以使其执行为1 2++
:
blsq ) #Q<-#q++1 2
12
使用这些内置程序非常棘手,除与quine相关的东西外,没有人将它们用于任何有生产力的工作。如果颠倒++1 2
你2 1++
将产生21
,而不是12
。上面的代码产生的原因12
是因为#Q
还包含了<-
这样的代码,所以最终我们执行的不仅是2 1++
:p。我们最终执行2 1++#q<-
产生的结果12
。
我们实际上可以替换代码中的内容,例如,此代码将?+
自身中所有出现的内容替换为?*
blsq ) #Q(?+)(?*)r~5.-#q5 5?+
25
用法:
$ echo "1" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
hs fi sp "-<" j +. /\ "Q#ir" -~ HS 2Q#ir
$ echo "0" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh
"66*2-n,?r$O.
除了这四个字符,这与标准quine完全一样n,?r
。n
从输入中获取一个整数,将其,
取反,因此如果输入为真,则?
跳过r
该整数。否则,r
反转堆栈,以便以相反的顺序输出。
interface N{static void main(String[]a){var s="interface N{static void main(String[]a){var s=%c%s%1$c;s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}";s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}
b->{var s="b->{var s=%c%s%1$c;s=s.format(s,34,s);return b?new StringBuffer(s).reverse():s;}";s=s.format(s,34,s);return b?new StringBuffer(s).reverse():s;}
说明:
interface N{ // Class
static void main(String[]a){ // Mandatory main-method
var s="interface N{static void main(String[]a){var s=%c%s%1$c;s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}";
// Unformatted source code
s=s.format(s,34,s); // Format the source code (the quine-String)
System.out.print( // Print:
new Boolean(a[0])? // If the input is true:
new StringBuffer(s).reverse() // Print the quine-String reversed
: // Else:
s);}} // Print the quine-String as is
奎因说明:
var s
包含未格式化的源代码%s
用于将String本身放入 s.format(...)
%c
,%1$c
和34
用于格式化双引号s.format(s,34,s)
放在一起然后new StringBuffer(s).reverse()
根据需要根据输入布尔值反转quine-String。
0"D34çý‚sè"D34çý‚sè
通过添加修改默认quine 。0"D34çý"D34çý
‚sè
说明:
0 # Push 0 to the stack
# STACK: [0]
"D34çý‚sè" # Push the string 'D34çý‚sè' to the stack
# STACK: [0, 'D34çý‚sè']
D # Duplicate this string
# STACK: [0, 'D34çý‚sè', 'D34çý‚sè']
34ç # Push '"' to the stack
# STACK: [0, 'D34çý‚sè', 'D34çý‚sè', '"']
ý # Join the stack with '"' delimiter
# STACK: ['0"D34çý‚sè"D34çý‚sè']
 # Bifurcate (short for Duplicate & Reverse)
# STACK: ['0"D34çý‚sè"D34çý‚sè', 'ès‚Âýç43D"ès‚Âýç43D"0']
‚ # Pair them up:
# STACK: [['0"D34çý‚sè"D34çý‚sè','ès‚Âýç43D"ès‚Âýç43D"0']]
s # Swap to get the boolean input (0 or 1)
# STACK: [['0"D34çý‚sè"D34çý‚sè','ès‚Âýç43D"ès‚Âýç43D"0'], 1]
è # Index the input into the list
# STACK: ['ès‚Âýç43D"ès‚Âýç43D"0']
# (Output the top of the stack implicitly)
PS:自动打印尾随换行符。如果这也应该反向,则改为23字节:
0"D34çý‚sè?"D34çý‚sè?
在线尝试。(?
是不带换行符的显式Print)