源代码GO!


18

让我们使用增强现实技术来狩猎隐藏在源代码中的小动物。编写一个quine程序,该程序输出自己的代码源,但5个连续的字符将被修改并显示PCG-mon除外:(^_^)

可以将5个连续的字符放置在源代码中的任何位置(从position 0n-5n即源代码的长度)。源代码的最小长度必须为5个字符。(^_^)长度大于等于2 的字符串或其任何子字符串不得出现在初始源代码中,而只能出现在输出中。

有效提交示例:

  • 源代码my source code,输出my (^_^)e code

无效:

  • 源代码(^_^) copy;,输出(^_^) (^_^)

获奖标准

以字节为单位的最短代码获胜。


5
不必过于消极,但这是一个广义的喹没有y问题的do x。在具有一般奎因方法的语言中,这是相当乏味的。您也没有指定如果源代码小于或等于5个字节应该怎么办。
FryAmTheEggman

@Fry我认为(^_^)用少于5个字符的源代码显示5个字符是不可能的吗?也许使用特定的编码...
Arnaud

3
虽然我不确定在这种情况下是否可行,但创建一个打印出比其包含的字节更多的程序是很简单的。例如,Pyth程序G产生输出abcdefghijklmnopqrstuvwxyz
FryAmTheEggman

3
我建议程序应至少包含6个字符,以便没有人尝试使用Bubblegum
Sp3000

2
@FryAmTheEggman暗沉和有趣的广义quine之间的界线很好。我的元答案大部分是关于quines的,唯一可行的解​​决方案是获取代表整个源代码的字符串,然后处理该字符串。如果有些解决方案在某种程度上无法构建完整的源代码,那么我认为通常已经可以使用一些有趣的解决方案(例如,当前领先的CJam答案)。对于没有Y的do X,似乎有必要限制子字符串,以避免琐碎的(quine)解。
马丁·恩德

Answers:


14

Javascript ES6,44个字节

$=_=>`$=(\^\_\^\)${($+'').slice(5)};$()`;$()

输出:

$=(^_^)=(\^\_\^\)${($+'').slice(5)};$()`;$()

仍在打高尔夫球,但目前仍然有效。


12
拥有另一张脸则+1:=_=
Cyoce

2
你不能做$=_=>`(\^\_\^\)${($+'').slice(3)};$()`;$()(实际上看起来更好,因为现在看来你正在唤醒一张沉睡的脸)。:)
马丁·恩德

10

VIM,33,27次的击键

qqqqqS(<C-v>94_<C-v>94)q@q<esc>hh"qPq@q

请注意,这<C-v>意味着ctrl + v,并且是byte 0x16<esc>是转义字符,并且是byte 0x1B

这只是对我的高尔夫球使用了稍加修改的版本,所以非常有用回答。

输出:

(^_^)S(^V94_^V94)q@q^[hh"qPq@q

这是有效的,因为这是^Vvim表示的方式<C-v>^[也是vim表示的方式<esc>

基本思想是仅(^_^)按代码点输入文本,因此我们可以避免将这些字符放在源代码中。在插入模式下,<C-v>number将插入ASCII字符“数字”。但是,由于挑战说明:

(^_^)长度大于等于2 的字符串或其任何子字符串不得出现在初始源代码中,而只能出现在输出中。

这个答案只输入的代码点滥用“串”规则^的字符,并输入(_)直接。

这是一个gif,可让您实际使用此解决方案,并将源代码和输出并排放置以进行比较:

enter image description here


很狡猾,利用^控制字符... +1
Rɪᴋᴇʀ

7

CJam13 11字节

"(_)"
_p'^*

在线解释器 (由于@MartinEnder而得2个字节)

"(_)"             Push string
      _p          Duplicate and print repr with newline
        '^*       Join string with '^'

3

Python,第115个 111 107字节

def f():s='def f():s=%r;print s%%s.replace(s[:5],"^".join("(_)"))';print s%s.replace(s[:5],"^".join("(_)"))

调用f(),输出为:

def f():s='(^_^)():s=%r;print s%%s.replace(s[:5],"^".join("(_)"))';print s%s.replace(s[:5],"^".join("(_)"))

对此问题的回答部分启发了这个问题


欢迎光临本站!
DJMcMayhem


3

Go(golang),131个字节

在Go中,这个挑战必须有答案!

package main;import"fmt";func main(){a:="package main;import\"fmt\";func(%c_%[1]c)(){a:=%q;fmt.Printf(a,94,a)}";fmt.Printf(a,94,a)}

在线尝试!


3

JavaScript(ES6),91字节

已经有一个JavaScript答案,但是没有非源代码阅读的JS答案:

a="a=%s;co%s.log(a,uneval(a),`(${'^'}_${'^'})`)";console.log(a,uneval(a),`(${'^'}_${'^'})`)

这是基于我的非参考读物《给高尔夫球,真是太好了》!。产出

a="a=%s;co%s.log(a,uneval(a),`(${'^'}_${'^'})`)";co(^_^).log(a,uneval(a),`(${'^'}_${'^'})`)

可以通过%s在字符串的第二个位置移动来轻松地修改它。例如,

a="a=%s;console.log(a,uneval(a),`($%s_${'^'})`)";console.log(a,uneval(a),`(${'^'}_${'^'})`)

输出

a="a=%s;console.log(a,uneval(a),`($%s_${'^'})`)";console.log(a,uneval(a),`($(^_^)_${'^'})`)

2

果冻,22 字节

“4094959441b³ỌØV”ṘVabc

TryItOnline可用

使用内置在有效载荷能够“ØV”ṘV
abc在端部只是填料被替换
将整数转换为基体100,从而导致[40,94,95,94,41]
铸件的字符,从而导致(^_^)
所以整个结果是“4094959441b³ỌØV”(^_^)


2

C#5.0,715字节

我知道,这是巨大的。只是想添加一个C#解决方案。

/*^()_*/using System.CodeDom;namespace System{class P{static void Main(){var b="/*^()_*/using System.CodeDom;namespace System{{class P{{static void Main(){{var b={0};var f=new string(new[]{{b[3],b[2],b[5],b[2],b[4]}});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider(\"CSharp\").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace(\"[4]}}}}}}}}\",f),w);Console.ReadKey();}}}}}}";var f=new string(new[]{b[3],b[2],b[5],b[2],b[4]});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace("[4]}}}}",f),w);Console.ReadKey();}}}

输出为:

/*^()_*/using System.CodeDom;namespace System{class P{static void Main(){var b="/*^()_*/using System.CodeDom;namespace System{{class P{{static void Main(){{var b={0};var f=new string(new[]{{b[3],b[2],b[5],b[2],b[4]}});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider(\"CSharp\").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace(\"[4]}}}}}}}}\",f),w);Console.ReadKey();}}}}}}";var f=new string(new[]{b[3],b[2],b[5],b[2],b[4]});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace("(^_^)}}",f),w);Console.ReadKey();}}}

在Ideone.com上获得


1

MATL,14个字节

')_`_*i't&Dwqh

产生输出')_`_*i'(^_^)h

在线尝试!

说明

')_`_*i'  % Push this string
t&D       % Duplicate and get string representation (i.e. enclose with quotes)
w         % Swap
q         % Subtract 1. Transforms ')_`_*i' into the code points of '(^_^)h'
h         % Concatenate. Automatically casts code points to chars. Implicitly display

1
我第一次尝试奎因!
路易斯·门多

1

Bash,178个字节

Q='#(8_8)
printf "Q=\47"
echo -n "$Q"|sed -r "s~(_|\()8~\1^~g"
echo -e "\x27"
tail<<<"$Q" -n4'
printf "Q=\47"
echo -n "$Q"|sed -r "s~(_|\()8~\1^~g"
echo -e "\x27"
tail<<<"$Q" -n4

PFFF,我不太擅长奎因斯:/任何建议多打高尔夫的举动都值得欢迎!:-)

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.