可重新排列的代码保龄球


14

保龄球挑战赛

无论您如何重新安排源代码,都编写一个程序或函数以产生相同的输出。(输出不能是错误)


Pangram评分

  • 您的分数就是源代码中唯一字符的数量。

    带有源代码 的程序AJB得分为3
    A带有源代码 的程序AAJ得分为2
    A带有源代码的程序111得分为1

  • 这是一个变体。得分最高的程序将获胜!

(为方便起见,在此处创建了自动评分工具)


挑战规则

  1. 输入
    程序/功能可以接受输入,但是这完全是可选的。

  2. 输出
    此输出可以是您想要的任何内容,但应为非null,非null,非空和非错误。(因此输出必须至少为1个字节)

  3. 重新排列
    无论源代码如何重新排列,输出都应该相同。

    例如:
       程序:ABJ输出hello world,如同方案:[ AJBJABJBA等]

这是一个变体。字符数最多的程序获胜!


1
我认为,没有任何具体任务要完成,这一挑战太广泛了。
丹尼斯

2
non-nil是什么意思?
丹尼斯

2
虽然您的pangram评分是为了使代码保龄球有效,但我不确定这些挑战是否应该标记为代码保龄球。计分机制与应该使用代码保龄球的方式大不相同,因此我想说要么使用代码挑战,要么创建一个新标签。
马丁·恩德

1
我必须同意马丁的观点。例如,这个挑战不是代码高尔夫。只要你的分数由除了字符(或字节)的总数东西,它不是一个代码保龄球挑战了
弥敦道美林

3
程序/功能必须结束吗?(例如,我可以0永远打印吗?)
MildlyMilquetoast

Answers:


18

语言,如果使用UTF-8,则为1,112,064点

我的程序由每个可能的UTF-8字符组成。 它打印出“ Hello world”,并使用1.75 * 1076千字节的空间。

(要生成程序,您只需创建一个文件,该文件包含17498005810995570277424757300680353162371620393379153004301136096632219477184361459647073663110750484字符,确保文件中包含每个可能的UTF-8字符)


2
先生,你是个天才。等一下,为什么我的电脑坏了?:'P
HyperNeutrino

我以为Unicode有1114112个字符?
MilkyWay90 '18

14

多种语言2分

0.

产生0.00..0。要求自由数解析,该解析可以在开始或结束时使用小数点来确定,假设缺少的整数或小数部分为0。0000000.会给出相同的分数。

这也适用于以下语言(在某些情况下,显示为不同的输出):

  • Python REPL
  • Javascript REPL
  • MATLAB(产生ans = 0
  • 八度(产生ans = 0
  • MATL(产生0
  • 贾姆
  • 视网膜(产生0
  • 堆叠(产生0

对于Python,我认为这是获得高于1的分数的唯一方法,因为这种可能性已被穷尽。

  • 任何二进制或一元运算符都将作为最后一个字符失败
  • 任何一项[](){}都需要匹配,并且如果最后一位先到则将失败
  • 制表符或空格不能开始一行。在REPL中不能使用换行符。
  • 一个, 不能是第一个字符
  • 一个#放在第一会评论的一切,产生不输出
  • 开始\是无效的行继续
  • 反引号(Python 2)必须配对,并且它们周围没有内容是错误的
  • $!?,和@无其他不可用的字符不能被使用

这使字母,数字_.和报价。

  • 使用引号时,引号之外的任何非字符串都会产生错误。
  • 具有可能的数字的字母和_变量名称,某些排列总是不存在。

叶子的数字和.。除非所有数字都是,否则排列不同的数字会给出不同的数字0。因此,我认为零.是获得高于的唯一方法1。但是,我不太了解Python词法分析器,所以我可能会丢失一些东西。


11

CJam,得分15

T U
V	LMOQR[]0q

在线尝试!

始终打印0000

  • 0 只是推零。
  • TUV是被预先初始化为零的变量。
  • LMOQR是被预先初始化为空列表,这样他们就不会在输出中显示的变量。
  • [并且]可以将内容包装在列表中,也可以不包装,但是不必正确匹配它们,并且无论如何都要对输出进行展平。
  • q 读取为空的输入,因此也不显示在输出中。
  • 解析器将忽略换行,空格和制表符。

对于像CJam这样的语言,这是一个很好的答案!尼斯
艾伯特·伦肖

r可以添加一个小写字母来完成类似于小写字母的操作q吗?
艾伯特·伦肖

1
@AlbertRenshaw您不能同时使用它们,因为其中一个会在EOF上出错。
Martin Ender

9

MATL3 5 6点

添加空白的想法来自Bijan的答案

lv
 T1

该代码或其任何排列输出由换行符分隔的三个。

在线尝试!

说明

  • l默认情况下,该功能将第一号压入堆栈。
  • 字面量1也一样。
  • 文字T推送true,显示为第一位。
  • 空格和换行符是分隔符,在这里什么也不做。
  • v到目前为止将整个堆栈连接到列向量中。因此,例如,v之后T会将前两个数字连接到一列中(然后将下一个数字推送)。缩写v将产生一个空数组。

在代码的末尾,使用以下规则隐式显示堆栈:

  • 堆栈中的每个元素或数组都显示在不同的行上。
  • 列向量与每个元素显示在不同的行上。
  • 空数组将导致没有输出。

因此,输入字符的任何排列都会1在不同的行中产生3次。


说明?我很好奇这是如何工作的。
SparklePony同志17年

@Sparkle添加了一个解释
Luis

真好!还只是想指出,Removing any part of the source code however should cause that specific output to not be produced.在您发布时,挑战中已经包含了我的文字,并不是要添加它,而是将其删除。也许这可能会帮助您提高分数
Albert Renshaw

1
@AlbertRenshaw感谢您的注意!还有两点
路易斯·门多

我指责你是在偷我的主意。但这不是问题。
Bijan

6

果冻,得分53 101

¶ ¤$¥&+ABDFHNPQSUVX^_aborv|®²×ȧȯḄḅḌḞḢḤḷṀṂṚṛṠṢṪẠạị«»()kquƁƇƊƑƘⱮƝƤƬƲȤɓɗƒɦƙɱɲƥʠɼʂƭʋȥẸẈẒẎŻẹḥḳṇọụṿẉỵẓḋėġṅẏ

仅使用Jelly 代码页中的字符。

Jelly的隐式输入为0ạị«»上面代码字符串的前半部分(包括,包括)主要由单原子(大写)和二元(小写和符号)原子组成,这些原子在给定零或仅包含一个零的列表中(或两个这样的输入(对于双字符)返回一个零或仅包含一个零的列表。

例外是:

  • 空格:它将被忽略(即使它位于代码页中)。

  • pilcrow 分隔链接(换行符也是如此-但这实际上是相同的字节),但是无论如何,其他字节都不会引用该代码。

  • 金龟子¤指示解析器将其从nilad(或常数)开始的所有剩余内容视为常数(并作为第一个原子)。

  • Dollar(美元)$指示解析器将到其的两个链接视为monad(并且,有些奇怪的是,它充当第一个原子)

  • 日元,¥类似地指示解析器将指向其左侧的两个链接视为对偶。

  • 推荐的®最初会回顾注册表的值0(它的对等版权,©当用作第一个原子时会中断,因为从左边链接的arity(尚未设置)中找到了arity。

括号(及之后的)代码是当前未使用的代码点,所有这些代码点均已解析,并且每个代码都引起一个新链(很像换行符,尽管它们没有像换行符那样创建可调用链接的效果,但是没问题,因为没有尝试这样做)。


1
您可以免费在代码页外添加所有字符,因为解释器会在处理代码之前将其删除。我仍然不知道非零意味着什么。
丹尼斯

1
我认为挑战的精神可能是人物应该在页面上。我询问非零,响应是指定最小输出1字节。
乔纳森·艾伦

@Dennis关于括号内解析的正确术语有任何想法吗?
乔纳森·艾伦

所有未使用的字符开始一个新的链接,就像换行符一样。
丹尼斯

1
我们称它们为未定义行为。:P
丹尼斯

4

TI-Basic(83系列),93点(TI-84 Plus上为99)

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZθnπeiAnsrandgetKeyZXsclZYsclXsclYsclXminXmaxYminYmaxTminTmaxθminθmaxZXminZXmaxZYminZYmaxZθminZθmaxZTminZTmaxTblStartPlotStartZPlotStartnMaxZnMaxnMinZnMinΔTblTstepθstepZTstepZθstepΔXΔYXFactYFactTblInputNI%PVPMTFVP/YC/YPlotStepZPlotStepXresZXresTraceStep

所有的数字,所有的单字节变量(包括θ和ñ,极性和顺序图形自变量),常数π,ê,和,有些不是很变量(Ansrand,和getKey),以及59个不同窗口变量(所有保证定义的变量)。

隐式乘法保证当我们以任何顺序取结果时结果将为0。如果它在新的计算器上运行,则所有变量将为0;否则,所有变量将为0。即使不是,getKey也将为0,因为在程序返回值之前没有时间按任何键。

在TI-84 Plus或更高,我们可以通过添加标记得到6分以上getDategetTimestartTmrgetDtFmtgetTmFmtisClockOn。结果现在总是会{0 0 0}因为getDategetTime返回长度为3的列表,并通过元素隐含的乘法分配。

我认为这些都是可以使用的标记:任何实际的命令都是前缀,中缀或后缀(这意味着它们在程序的开头或结尾将不起作用),并且任何其他变量可能都未定义(并在执行时导致错误)用过的)。


这很聪明。哈哈不是特别令人印象深刻,但确实很聪明!+1
艾伯特·伦肖

3

(非竞争)Brainf-ck,63个字节

好吧,我不知道这是否被认为是作弊,但是...

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

点将打印当前字符(0x00),其余字符不执行任何操作。从技术上讲,这可以无限扩展,因此,如果这被认为是作弊行为,请告诉我。


我认为输出为零
Albert Renshaw

哦,那我应该删除我的答案还是将其标记为不竞争?
brianush1年

1
有97级型的人物,其中7个不能使用(8-1),所以我会说90
毕坚

@ brianush1,您可以将其保留为非竞争性,以便其他人可以看到。我将进一步编辑问题以解释输出必须至少为1个字节
Albert Renshaw

15
@AlbertRenshaw(抱歉所有这些评论)如果输出必须是1个字节,则该NULL字符应该算作,因为它是一个字节,虽然一个具有值0。
brianush1

3

Haskell,3分

+ 1

无论如何重新排列此代码,总会返回增加输入的函数。repl中的用法示例:

>(+ 1) 1
2
>(1+ ) 1  
2
>( +1) 1
2

2

√A I¥®I O¿,128234(?)点

在@DestructibleLemon的帮助下,我到达了128,234。该程序使用所有Unicode字符(128237)除外oOł。奇怪的是,其中两个是输出命令。

当然,没有一种语言可以使用所有这些字符,对吗?嗯,这种语言只会忽略它无法识别的命令。问题解决了。

默认情况下,该语言将输出以下内容:

===== OUTPUT =====



==================

这是非零,非空,非空和非错误。

注意:如果这违反了一些不成文的规定,请在评论中通知我,然后我将对其进行更改。如果您知道我的分数(假设允许),也可以在评论中发布。


它使用什么字符集?utf 8?utf-16?它是否使用所有unicode?
破坏的柠檬

@DestructibleLemon在github页面上,似乎使用“ CP-1252”进行编码。
brianush1年

@DestructibleLemon命令全部在CP-1252(Windows-1252)中使用,但是它将接受任何Unicode字符作为有效语法
caird coinheringaahing

显然,这里有128,237个Unicode字符,所以,您将有128,234个?en.wikipedia.org/wiki/Unicode#cite_note-24
破坏的柠檬

根据其他答案,显然有1,112,064个unicode,所以我现在不太确定
Destructible Lemon

1

J,3个字节

 1

字符1,空格和换行符将始终打印1。



1

,1,114,111个字符(如果使用unicode)。

<87 dots here> Every Unicode character except NUL and . here

说明:

1                                           leading binary number
1010                                        010 increments the value under the pointer
1010111                                     111 prints out chr(1)

因此,生成的二进制字符串是1010111,转换为十进制是87,因此我们需要87点。

每个其他字符都是一个注释,因此我们使用除NUL之外的每个字符,因为Python3随后会停止读取文件,并使用一个点,因为点不是注释。


0

前奏曲,得分1,112,051

(仅考虑可打印的ASCII时[\t\n -~],分数为84。如果考虑所有Unicode代码点,则分数为1,112,051。)

!
" #$    %&'+,-./0:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

(然后[\u{7f}-\u{10ffff}]在其后附加所有字符。)

始终打印0


Prelude是一种基于堆栈的并行语言,其中堆栈中预填充了无限数量的0。

  • +:弹出两个值(始终为0),将其相加(0),然后压入堆栈。
  • -:弹出两个值(始终为0),减去两个值(0),然后压入堆栈。
  • #:弹出一个值并丢弃它。
  • !:弹出一个值并将其输出为数字(始终为0)(规范说“字符”,而解释器说“数字”;无论哪种情况,都会输出一个字节)
  • 0:按0。
  • ^vV:推动一个/下一个并行程序(“声音”),但所有的“声音”的堆栈的顶部的值都充满了0,所以他们总是推0。
  • 其他字符:无操作。

因此,我们只需要避免使用13个字符:

  • ():不成对的括号将导致错误
  • 19:我们只想输出0。
  • ?:我们不想输入任何内容。
  • *:导致由lone组成的一行之前和之后的代码的一致性检查非常复杂*。因此,我们需要删除新行或删除*。参考实现使用Python 2 .readline(),“换行”可能表示\r\n。因此,最好删除*

0

死鱼,得分86

o.ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghjklmnpqrtuvwxyz?!|[]_-();'"*&^$#@!1234567890+=<>,/\:

如果那是非法的,那么也有

o

(得分1)

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.