用普通英语写奎因


41

写一个包含由单个英文空格分隔的真实英语单词的。“单词”定义为仅包含小写和大写字母的字符串(/[a-zA-Z]+/在正则表达式中)。要“真实”,您的单词必须由官方的Scrabble词典识别。

我使用的是Scrabble字典,因为它对有效和无效给出了明确的答案。普通词典中的灰色区域过多。注意,“ A”和“ I”(更不用说“ quine”)不是有效的拼写单词。

在大多数编程语言中,由于使用字母和空格来编写奎因几乎是不可能的,因此您可以选择用您选择的字符替换单词之间的单个空格。您还可以选择将字符追加到第一个单词的开头和最后一个单词的结尾。这些添加的字符可以是字母(az,AZ)以外的任何字符(包括换行符和非ASCII 。不过,添加它们会受到惩罚(请参阅评分)。

细节

  • 通常,这些木马可能不会读取或访问其自己的源代码。(我想说的是HQ9 +的 Q命令违反了这一点。)
  • 输出应转到stdout或类似的替代方法。没有输入。
  • 这些单词不需要正确地大写。他们在任何地方都可以有大写字母和小写字母。单词的顺序没有任何意义。
  • 在您的程序中,一个单词的使用次数不得超过3次。大写的单词仍然是同一个单词(例如,“ DOG”,“ dog”和“ dOg”都是同一个单词)。
  • 使用如PHP或HTML,可以只是语言他们的内容被认为是微不足道的漏洞,是不允许的。
  • 该程序必须包含至少一个单词。

计分

您的分数是程序中“真实单词”的数量加上以下惩罚:

  • 对于每个被另一个字符替换的空格,+ 1
  • 您在第一个单词前添加的每n个字符n n(是,n为幂n)
  • 在最后一个单词之后每添加n个字符n n

例如程序

We all LIKE PROgraMmING

得分为4,因为它包含4个单词;没有添加或替换任何空格的字符。它的输出当然是We all LIKE PROgraMmING

该程序

!We@all LIKE#PROgraMmING- =

将得分4 + 2 + 1 + 27 = 34; 单词4,替换空格2,!前面的1,- =结束的27 。它的输出当然是!We@all LIKE#PROgraMmING- =

最低分获胜。Tiebreaker得分最少的答案。如果仍然平局,则最高票数的答案将获胜。


1
该词典是否也以列表形式存在?与不必逐一检查每个单词相比,这对于浏览是很有帮助的。
Martin Ender

16
莎士比亚有人吗?
dwana


1
@JanDvorak我不这么认为...我不能写这样的东西不应该让其他人认为这是一个不好的问题,这是一个有效的挑战,虽然相当困难,但不是吗?
rorlork 2015年

7
我仍然对莎士比亚的解决方案感兴趣。
约翰·德沃夏克

Answers:


25

golfscript,8个字+ 8个符号= 20 16(3?)

{four"words.written~twice"four}words.written~twice

单词只是一个填充符,核心是一个微小的quine核心:

{".~"}.~

复制和评估一个函数,该函数仅附加说明以自我复制和评估。打印功能时,它将自动进行字符串化。这是做某事的最小的奎因。

或者我们可以使用永不求值的函数文字。但这感觉就像在作弊...

{whatever}

您不需要串联。{a`b"x.y~z"c}x.y~z
丹尼斯

@丹尼斯在这种情况下,我什至不需要检查。谢谢!我觉得我需要问问OP ...
John Dvorak

8
@Cephalopod我没有阅读自己的源代码。我只是将一个函数压入堆栈,运行时为我将其打印出来,而没有意识到我的整个源代码都是函数文字。
约翰·德沃夏克

1
我认为这{whatever}将违反过于琐碎的规则(“使用像PHP或HTML这样的语言仅能掩饰其内容被视为琐碎的漏洞,是不允许的。”)
Claudiu 2015年

1
@Claudiu是针对语言而不是解决方案的规则。这就是为什么我问。
约翰·德沃夏克

54

> <>,25个单词+(22 +1 1 +1 1)额外= 57 49

天哪,我的大脑。

'brr3deep*clap6beep+orb5flap*leap4deep+clap5beep5flap*leap9deep9clap*beep+flap0placed apple alp0leap=clip?lob8blip*flip0clip.

由于规则状态为“没有输入。”,因此要使该程序正常运行,您需要通过管道传递一个空文件。

哦,是的,brr是一个有效的拼字游戏的话,因为是tsktskpfft

说明

首先,以下词语是禁止操作:

deep clap beep flap leap clip blip flip

这是由于两个原因:

  • abcdefl推送数字(分别为10、11、12、13、14、15和堆栈长度)。此外,i如果没有EOF ,则按-1,以确保没有输入。
  • p命令将弹出三个字符v,y,x并放置v在该位置x,y

是的,> <>可让您即时修改源代码!不过,我们实际上并没有利用它,因为我们只需要p弹出即可。

如果我们摆脱了这些无人操作,就会得到:

'brr3*6+orb5*4+55*99*+0placed apple alp0=?lob8*0.

以类似的方式,laced appof 的一部分placed apple和of 的e alp一部分apple alp也是无操作的,rrof的brr将堆栈反转两次,我们也可以将其删除:

'b3*6+orb5*4+55*99*+0pl0=?lob8*0.

最后,看起来像常规的> <>程序!这个想法是利用标准的> <> quine,它的工作方式如下:

  • 最初的'开始字符串解析,将遇到的每个字符推入,直到我们碰到另一个'
  • 我们一直将char推到行尾,这时我们将指令指针包装回开始(因为> <>是环形的)
  • 我们'再次降落在初始位置,并停止字符串解析。结果是我们已经将程序中的每个字符(除了initial ')都压入了堆栈。

然后发生以下情况:

b3*6+o                Print the initial ' quote (ASCII 39)
r                     Reverse the stack
b5*4+                 Push a ';' (ASCII 59)
55*99*+0p             Replace the 'l' of 'lob' with ';'

(print loop)
l0=?;                 If the stack is empty, terminate. Otherwise...
o                     Print the top of the stack
b8*0.                 Jump back to the beginning of the loop

“在您的程序中,一个单词不得使用超过3次。大写字母的单词仍然是同一个单词(例如,“ DOG”,“ dog”和“ dOg”都是同一个单词)。” 先生,无论如何,你得到我的支持。
rorlork 2015年

@rcrmn我不断添加很多单词,我完全忘记了该规则!现在已修复,尽管我确实想避免使用i
Sp3000

1
在拼字游戏中,TIL“ pa”,“ la”和“ be”是有效词
John Dvorak

20
大声阅读您的程序使我想象出打孔卡计算机一定听起来像什么。
加尔文的爱好2015年

10
我认为您已经从R2D2操作系统的源头上窃取了该程序。
停止

21

1字

我通常不喜欢esolangs,但是这似乎很完美。我认为这是一个真实的想法

chicken

将1只鸡推入堆栈。然后显示堆栈。


1
这个(和Julia的答案)边界微不足道。您可以将它们保留在这里,但是没有接受承诺。
加尔文的爱好

@ Calvin'sHobbies为了公平起见,如果您觉得它太漏洞了,我会很乐意删除它-您的电话。我当时正在研究applescript解决方案,但对“最多不能使用3个单词”规则感到沮丧,这似乎使这一点特别困难。因此,我选择了便宜的trick俩:-)
Digital Trauma'Bul

@ Calvin'sHobbies:我是Julia论文的作者。如果您觉得我的帖子太过边界,我也同意删除DigitalTrauma的观点。我也做了R。那太近了吗?
Alex A.

@Alex和DT:取决于你们。我可能不会接受任何一个答案,但我不介意他们在这里。尽管我的想法与Julia的想法几乎相同,但我仍然对R的回答感到有些困惑……
Calvin的爱好2015年

12

R,2个字+ 1个替换+1¹结尾= 4

未分配任何对象的对象只会打印到stdout。由于表达式是对象,因此以下代码会自行打印:

expression(puppy)

上次提交的分数为5分:

function(hello)hello

您的灵感来自我狡猾的三点式解决方案,对吗?;-)
John Dvorak

1
@JanDvorak:我实际上在发布此文章之前并没有看到它,但是现在它可以追溯到灵感的来源。
Alex A.

12

Python 2,58 = 37个单词+ 21个标点符号

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash and%rif reload else fire;exec prog"or English;ramming=None or"ramming"if license else pirate;print fear%puzzle+ramming'if reload else fire;exec programming

加上一些换行符:

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash
and%rif reload else fire;exec prog"or English;ramming=None or
"ramming"if license else pirate;print fear%puzzle+ramming'
if reload else fire;exec programming

每个字词限制的三种用法使此一词难以编写。我想将字符串与所有代码一起使用3次以上,并且每个字符串都必须与if else and or操作员隔离,而我的操作量有限。


@ user23013糟糕,忘记将其替换为随机标识符。
feersum'3

7

朱莉娅(Julia),1个单词+1¹前面= 2

茱莉亚(Julia)有一些称为符号的对象,这些对象是使用before定义的:。就像我的R解决方案一样,提交后即可打印。

:puppy

5

DOS命令行10

& was unexpected at this time.

错误奎因,似乎没有被禁止


1
此代码不会“编码”代码的任何部分。请参阅我们对藜的定义
MilkyWay90

@ MilkyWay90使用定义&对整个代码进行编码并停止输出
l4m2

哦,您可以编辑答案,以便我删除我的
MilkyWay90

1
有趣的漏洞答案...不过是&一个词吗?
Redwolf Programs

@RedwolfPrograms不,但是& 是两个符号。5(字)+ 1(后)+ 2 ^ 2 =领先10
Draco18s

3

符文附魔,得分4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

在线尝试!

词:hot ox not knot(4)
替换:3 4 +(3)
之前:"(1)
之后:@(1)

GNOQWghtxz符文中的所有字符都是空运(以及空格和句点,但更多空格不利于得分)。包括功能的Xk,这提供了以下可用的单词列表:

5 Letter Word(s)
  thong
4 Letter Word(s)
  gong goth gowk gown hogg hong honk howk knot know nogg nowt tong town wonk wont zonk
3 Letter Word(s)
  got gox hog hon hot how nog noh not now nth own tho tog ton tow two who wok won wot
2 Letter Word(s)
  go ho no oh on ow ox to wo

我根据要进入的空间的需求选择了樱桃,这听起来很有趣。

删除所有NOP字符将产生以下信息:

"3X4+k@

在线尝试!


0

?? -单词后的1个单词+ 1 ** 1/1 ^ 1 = 1个字符= 2总分。

Ouch!

Ouch! 是有效的藜吗?

像一样运行pythuhn.py Ouch!Ouch!在当前目录中不能有一个命名的文件。

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.