37
\$\开始组\$

第一次用特定语言打高尔夫球的人应该知道哪些最重要的规则?例如,高尔夫程序通常如何进行输入和输出?

每种语言都应该有一个CW答案,作为该语言高尔夫球场规则的go-to解释。

  • 使用代码段示例。展示,不要说。
  • 简洁胜过全面。
  • 在技术上要准确无误。
  • 解释术语。并非每个人都听说过“STDIN”或“匿名函数”。
  • 不要包含任何语言中适用的内容,如“包含一个带有字节数的标头”
  • 不要包含减少字节数的技巧。这是提示页面。

按字母顺序排列的语言列表

以下堆栈段提供了当前具有指南的语言的字母列表。

函数answersUrl(a){return“https://api.stackeexchange.com/2.2/问题/“+问题ID+”/回答?page=“+a+”&pagesize=100&order=desc&sort=creation&site=codegolf.meta&filter=“+ANSWER_filter}函数注释Url(a,b){return”https://api.stackexchange.com/2.2/answers/“+b.join(”;“)+”/评论?page=“+a+”&pagesize=100&order=desc&sort=creation&site=codegolf.meta&filter=“+COMMENT_filter}函数getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),方法:“get”,数据类型:“jsonp”,crossDomain:!0,成功:函数(a){answers.push.apply(answers,a.items),answers_hash=[],answer_ids=[];var b=+a.share_link.match(/\d+/);answer_ids.push(b),answers_hash[b]=a}),a.has_more||(more_answers=!1),comment_page=1,getComments a.post_id].注释.推送(a)}),有更多吗?获取评论():更多评论?getAnswers():process()}})}函数process;var d=c.match(HEADER_REG);如果(d){vare=d[1];a.push({lang:e,名称:/<a/.test(e)?jQuery(e).text():e,链接:b.share_link})}}),a.sort(函数(a,b){return a.name>b.name?1:a.name<b_name?-1:0});对于(var b=0;b<a.length;++b){var c=jQuery(“#language-template”).html(),d=a[b];c=c.replace(“{language}}”,d.lang).replace(”{LINK}}“,d.LINK),c=jQuery(c),jQuery“#langues”).append(c)}}var QUESTION_ID=11924,ANSWER_FILTER=“!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe”,COMMENT_FILTER ILTER=“!)Q2B_A2kjfAiU78X(md6BoYk”,OVERRIDE_USER=20260,答案=[],answers_hash,answer_id,answer_page=1,more_answers=!0,comment_page;获取答案();var HEADER_REG=/<h\d>\s*([^\n]+[^\s])(?=\s*<\/h\d>)/,OVERRIDE_REG=/^OVERRIDE\s*头:\s*/i;
body{text-align:left!important}#language-list{padding:10px;width:290px;float:left}表格头{font-weight:700}表格td{paddion:5px}
<脚本src=https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js></script><link href=“//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b”rel=stylesheet><div id=language-list><h2>语言列表

\$\端组\$
10
  • \$\开始组\$ 一种语言在这里有一个答案应该有多引人注目?例如,Brain-Flak有一些由Meta帖子整理出来的IO特性,所以将它们全部列在一个地方可能会有帮助,但我怀疑任何新来者都会在Brain-Falk中回答挑战。 \$\端组\$
    – 小麦向导 国防部
    评论 2017年3月30日4:15
  • 2
    \$\开始组\$ @WheatWizard可以包含任何语言。目标观众是第一次使用这种语言的高尔夫球手,其中包括已经有经验的高尔夫球友尝试一种新语言。 \$\端组\$ 评论 2017年3月30日4:17
  • 1
    \$\开始组\$ @如果每个人都对他们使用的语言的答案投赞成票,那么最著名的语言将登上榜首。这篇文章还可以使用Stack Snippet来创建按字母顺序排列的语言列表,特别是当它涉及到多个页面的答案时。 \$\端组\$ 评论 2017年3月30日7:11
  • \$\开始组\$ @DLosc我不相信排序。指南可能会因写得好而被投票支持,甚至可能只是提前发布。按字母顺序排列的堆栈片段会很好。你能加一个吗? \$\端组\$ 评论 2017年3月30日8:36
  • \$\开始组\$ 这似乎是不同元问题答案之间不一致的新来源。好处真的大于坏处吗? \$\端组\$ 评论 2017年3月30日9:27
  • \$\开始组\$ @彼得·泰勒上下文。 \$\端组\$ 评论 2017年3月30日9:34
  • \$\开始组\$ 那么,这是PPCG上的文档(我指的是仅在So上的功能)? \$\端组\$ 评论 2017年3月31日9:22
  • 2
    \$\开始组\$ @xnor Added Stack Snippet是排行榜每个人:可以随意进一步调整,缩小等。 \$\端组\$ 评论 2017年3月31日19:41
  • \$\开始组\$ 你的片断根本没有被打过。我觉得被背叛了。 \$\端组\$
    – 尼克
    评论 2017年4月11日1:52
  • 1
    \$\开始组\$ 我想指出这一点根据最新的meta共识,命令行标志不再是分数的一部分。这至少会影响C#、Sed和Perl指南(没有通读每一篇文章)。 \$\端组\$
    – 起泡器
    评论 2018年11月27日0:30

15个答案15

重置为默认值
17
\$\开始组\$

哈斯克尔

基本IO

在Haskell中,有效答案通常是一个函数,除非挑战需要完整的程序。即使挑战要求您输出无限数据流(就像所有质数一样),您也可以编写一个返回无限列表或字符串的函数。

功能

默认情况下,这些类型的函数是代码高尔夫挑战中的有效答案(基于这个元问题):

  1. 命名函数(此处(f))带参数:

    fx=x++映射gxg n=div n 2*div n 3
  2. 命名函数(此处(f))无参数:

    f=(++)=<<映射gg n=div n 2*div n 3
  3. 没有参数的未命名函数(此处为第一行):

    (++)=<<映射gg n=div n 2*div n 3
  4. 二进制函数可以定义为中缀运算符(此处!):

    x!y=x++映射gyg n=div n 2*div n 3
  5. 对于应该在不带任何输入的情况下生成某些输出的挑战,对象本身被视为函数,该函数由于延迟求值而不带任何参数(请参见这个元问题):

    ['a'..'z']++['a'..'z']++['0'..'9']

在所有情况下,您都可以在此处使用辅助函数和/或常量,定义在单独的行上或用分号分隔(前者更适合可读性,因为字节计数相同)。使用模式匹配的函数定义跨多行分布:

f‘A’=‘B’f‘B’=‘A’f x=x

默认情况下,所有函数都是循环的(部分应用),因此以下四个答案是等价的:

f n x=映射(取n)xf n=图(取n)f=地图采集地图.拍摄

Haskell没有可变值的概念,因此所有函数都必须返回结果,而不是就地修改参数。

函数的类型可以比质询要求的更通用,例如,当质询要求反转字符串时(在Haskell中是一个字符列表),可以接受使用任何类型的元素反转列表的函数。如果在没有使用正确类型的参数调用函数的情况下无法推断函数的类型,则可以假定存在这样的调用(请参见这个元问题).

允许函数将其返回值包装在也许 吧Monad(参见这个元问题).

完整程序

完整的程序要么从用户那里读取输入,要么接受命令行参数,然后将结果打印到终端。完整程序定义如下主要的,当然可能包括辅助定义:

main=print.map g=<<读取Lng n=div n 2*div n 3

输入格式通常是灵活的,因此可以采用Haskell格式的列表[1,2,3]等。

混合答案

您还可以使用一个函数将其结果打印到终端(并且具有如下类型a->IO()),或者是一个“函数”,它从用户那里读取输入并计算结果(类型类似IO a(输入输出)).这些在实践中很少见。

库和扩展

可以使用进口文件开头的关键字:

导入数据。列表f x=地图(++x)$尾部x

字节计数中必须包含导入。也可以使用GHC扩展(但几乎总是花费太多字节而无法使用):

{-#LANGUAGE并行列表组件#-}f x y=[a-b|a<-x|b<-y,奇数b]

数据类型

Haskell有一个严格的类型系统,因此一些在脚本语言中很容易完成的特定任务在Haskel中很麻烦。最常见的问题是不同类型的输入/输出(如“如果输入是数字,则增加它,如果是字符串,则附加一个空格”)和任意嵌套数组(如[[1],2])Haskell中均不支持这两个选项。在这种情况下,您基本上有三种选择:

  1. 使用内置或进口实现此行为的ed类型:要么对于各种类型,数据。用于嵌套列表。
  2. 定义自定义数据类型。最常见的嵌套列表方法是

    数据N=I Int|L[N]

    哪里国际可以替换为您需要的任何基本类型。

  3. 以合理的格式使用字符串表示。

所有Haskell编译器都实现类型推断,这意味着您(通常)不必指定函数和值的类型,因为编译器会为您推断它们。推断的类型是否比所需的更通用并不重要。

真实性

仅限类型的值布尔具有真实性:真的是真实的并且False(错误)是假的。

编译器

如果没有其他说明,则假定提交在当前版本的格拉斯哥-哈斯克尔编译器GHC。如果您的答案需要其他编译器或解释程序,例如Lambdabot,或依赖特定的GHC版本,则应相应地提交,例如。哈斯克尔·兰达博特哈斯克尔GHC 6.10.

虽然不鼓励使用假设REPL(Read-Eval-Print Loop)环境的答案。它们也应相应地指出,例如哈斯克尔GHCI.

提示

Haskell高尔夫小贴士收集在这里.

\$\端组\$
13
\$\开始组\$

蟒蛇

常规I/O

您的提交应该是一个程序或函数。它应该打印输出或返回输出。这些示例提交计算阶乘的在Python 2中:

#打印程序n=输入();p=1对于范围(1,n+1)中的i:p*=i打印p#定义的输出或打印函数定义f(n):p=1对于范围(1,n+1)中的i:p*=i打印p#Lambda函数,不需要名称λn:减少(整数__mul__,范围(1,n+1))#Lambda函数,命名为使用递归调用f=lambda n:1,如果n==0,否则n*f(n-1)

您可能不希望输入预先写入变量。

#无效,应输入np=1对于范围(1,n+1)中的i:p*=i打印p

也不能仅通过将结果保存到变量来输出。

#无效,不输出结果n=输入();p=1对于范围(1,n+1)中的i:p*=i

输出也不能像交互式shell中那样只是表达式的值。

输入

我们对输入格式很开放。例如,如果一个挑战要求获取一个数字列表,那么您可能会得到一个类似于Python的列表[1,2,3],不像"1 2 3"因此,Python 2程序可以

l=输入()

而不是

l=映射(int,raw_input().split())

同样,当程序接受字符串输入时,您可能会期望它使用引号输入()在Python 2中,而不是原始输入(_input).

版本

Python 2或Python3都可以。如果代码需要特定的版本,请在标题中包含版本号。

图书馆

您可以导入库。这个进口语句计算为代码长度的一部分。如果它是非默认库,那么松软的,将标题中的语言称为“Python with scipy”。

Truthy/Falsey公司

一些挑战要求输出是真实的还是虚假的,这取决于布尔(x)。在Python中,只有False(错误),0,,空的收藏品是假的,其余的都是真的。

关于函数的更多信息

函数提交可以包括函数外部的帮助器代码,例如

进口再保险;r=范围λl:。。。

函数可以使用额外的可选参数。例如,此阶乘函数提交需要单个数字,但使用了可选输入帮助递归:

f=λn,i=1:1,如果i>n其他i*f(n,i+1)

但是,您可能不需要使用特定的额外参数来调用函数,例如,对于

f=lambda n,i:1,如果i>n其他i*f(n,i+1)
\$\端组\$
  • \$\开始组\$ 值得在关于函数的更多信息函数需要可重用,但可能假设函数调用之间的其他代码不会触及全局变量的部分? \$\端组\$ 评论 2017年3月30日7:54
  • 1
    \$\开始组\$ 您还提到了“输出也不能像交互式shell中那样只是表达式的值。”REPL答案允许他们可能会接受意见从上次计算的表达式. \$\端组\$ 评论 2017年3月30日8:29
  • \$\开始组\$ @MartinEnder我认为重用性很少提及。我没有想到有人会担心函数调用之间的额外代码。这些是新用户可能会关心的事情吗,也许是基于其他语言?关于REPL,我认为“Python REPL”是一种独立的语言,因此超出了本文的范围。它可以改写,尽管我真的不想鼓励REPL回答。 \$\端组\$ 评论 2017年3月30日8:32
9
\$\开始组\$

JavaScript脚本

这个答案高度基于Python答案,感谢@xnor的设置。

您的提交应该是一个程序或函数。它应该打印输出或返回输出。这些示例提交计算阶乘的:

常规I/O

//浏览器程序,输入带提示,输出带警告n=提示();对于(p=i=1;i<=n;i++)p*=i;警报(p)//Node.js程序,从process.argv获取输入并使用console.log输出n=进程.argv[2];对于(p=i=1;i<=n;i++)p*=i;控制台.log(p)//使用console.log输出的函数(在浏览器中也可以使用alert)函数(n){用于(p=i=1;i<=n;i++)p*=i;控制台.log(p)}//返回值的函数函数(n){for(p=i=1;i<=n;i++)p*=i;返回p}//返回的函数,命名为使用递归调用f=函数(n){返回n?n*f(n-1):1}函数f(n){返回n?n*f(n-1):1}//ES6箭头功能n=>{对于(p=i=1;i<=n;i++)p*=i;返回p}//ES6箭头函数,命名为使用递归调用f=n=>n?n*f(n-1):1

您可能不希望输入预先写入变量。

//无效,应输入n对于(p=i=1;i<=n;i++)p*=i;警报(p)

也不能仅通过将结果保存到变量来输出。

//无效,将结果保存到pn=提示();对于(p=i=1;i<=n;i++)p*=i

输出也不能像交互式shell或浏览器控制台中那样只是表达式的值。

//无效,计算结果为结果,而不是输出或返回数组(+prompt()).fill().reduce(p=>p*i++,i=1)

输入

我们对输入格式很开放。例如,如果一个挑战要求获取一个数字列表,那么您可能会得到一个JavaScript数组,如[1,2,3],不像"1 2 3"。因此,函数可以

函数(a){return a.length}

而不是

函数{returns s.split(“”).length}

如果您正在使用箭头函数并有多个输入,可以使用咖喱:

//非电流箭头函数(a,b)=>a+10*b//Curried箭头功能a=>b=>a+10*b

curried函数可以通过对每个参数调用一次来使用,例如。f(1)(2)而不是f(1,2).

版本

如果使用最新版本的ECMAScript(ES6:箭头功能,扩散算子,模板文字,等。; 欧洲标准7:指数算子; 等等)、在报头中包括ECMAScript版本。最佳做法是使用以下标题JavaScript(ES6),JavaScript(ES7)等。对于未来的ECMAScript版本,您可能希望使用年份名称,例如。JavaScript(ES2018),因为ECMAScript已切换到此命名系统。

据您所知,如果您的代码仅在特定环境或浏览器中工作,请将其包含在标题中,例如。JavaScript(Firefox 44)。如果您提交一个Node程序,您可能希望完全跳过“JavaScript”,只需使用节点.js.

Truthy/Falsey公司

一些挑战要求输出是真实的还是虚假的,这取决于布尔值(x)(或同等!!x). 仅限,0,未定义,NaN公司,无效的,而空字符串是虚假的,其余字符串是真实的。

关于函数的更多信息

函数提交可能包括函数外部的帮助器代码,例如

S=字符串;C=S.from字符代码l=>。。。

在ES6及以上版本中,函数可以使用额外的可选参数。例如,此阶乘函数提交需要单个数字,但使用了可选输入帮助递归:

f=(n,i=1)=>i>n?1:i*f(n,i+1)

但是,您可能不需要使用特定的额外参数来调用函数,例如,对于

f=(n,i)=>i>n?1:i*f(n,i+1)
\$\端组\$
0
7
\$\开始组\$

APL(动态)

基于xnor的Python答案user62131的果冻回答.

常规I/O

你的提交应该是一个程序(tradfn)、一个函数(traffn、dfn或默认函数)或一个操作符(tradop或dop)。它应该提示输入STDIN中的字符和/或计算输入,和/或接受一个或两个参数。它应该将结果和/或打印返回到STDOUT或STDERR。如果没有指定其他内容,程序将打印到STDOUT,函数将返回结果。

输入

有两种访问STDIN的方法:获取单行文本as-is。获取一行文本并对其求值。这对于数字输入很有用,无需使用执行输入的文本。

输出

非赋值的表达式将隐式打印到带有尾随换行符的STDOUT。在dfns和dops中,这样的行还将终止函数/运算符。STDOUT的输出也可以通过⎕←。STDERR的输出通过完成⍞←并且没有尾随换行符。

程序

Tradfn项目是简单的一行或多行代码,其中输入(如果需要)是通过和/或在TIO上,Tradfn程序进入Code字段,Header字段必须有一个后跟程序的名称。页脚字段必须具有。在“输入”字段中,第一行必须有程序名才能调用它,紧随其后的行将是输入行(如果有)。

功能和运算符

函数可以是中缀或前缀。

Tradfns函数Tradop操作员包括一个标题行指定其语法。然后它们可以引用标题中使用的名称。他们可以通过以下方式执行额外的I/Otradfn计划(见上文)。在TIO上,整个tradfn/tradop都位于Code字段中,标题必须以最后一行必须是,但这三个字符(包括最后一个字符之前的换行符)不应计入提交长度。

Dfn函数Dop操作符是第一行以开头的一行或多行代码{最后以结尾},它们将其右参数和可选左参数称为.Dops还将其左操作数和可选右操作数称为⍺⍺⍵⍵。第一个不是赋值的表达式将终止函数,并返回该表达式的结果。否则,它们可能会以以下方式执行额外的I/Otradfn计划(见上文)。在TIO上,整个dfn/dop(包括大括号)都放在Code字段中,第一行前面必须有一个名称和,例如。我的Fn←.名称和不应计入提交长度。在Input字段中,第一行必须有函数/运算符的名称才能调用它,后跟参数(可选),对于运算符,操作数和紧随其后的行将是附加输入行(如果有)。

隐性功能是指将其参数作为右参数和可选左参数作为以及应用子功能的结果(f)具有与刚才相同的参数(f).同时可以用于其他输入,它们将只接受输入一个,即当定义函数时,该输入对于默认函数的所有应用程序都是常量。在TIO上,整个默认函数都位于“代码”字段中,并且前面必须有一个名称和,例如。MyFn←.名称和不应计入提交长度。在Input字段中,最后一行必须有函数名才能调用它,后跟参数(可选),前面的行将是其他输入行(如果有)。

示例

这些示例提交计算点积两个矢量中的一个:

提示输入评估值并打印到STDOUT的程序(tradfn):

⎕+.×⎕

打印到STDERR的程序(tradfn):

⍞←⎕+.×⎕

打印到STDOUT的函数(tradfn):

x财年x+.×y

打印到STDERR的函数(tradfn):

x财年←x+.x y

返回结果的函数(tradfn):

r←x F yr←x+.×y

打印到STDOUT的操作员(tradop):

(x F)yx+.×y

打印到STDERR的操作员(tradop):

(x F)y←x+.x y

返回结果的运算符(tradop):

r←(x F)yr←x+.×y

函数(dfn):

{⍺+.×⍵}

操作员(dop):

{⍺⍺+.×⍵}

您可能不希望输入预先写入变量:

⍝无效,需要输入x和yx+.×y

也不能仅通过将结果保存到变量来输出。

⍝无效,将结果保存到rr←⎕+.×\9109

输入格式

我们对输入格式很开放。例如,如果一个挑战要求获取一个数字表,您可能会期望一个APL向量,如(1 2)(3 4)或者是一个实际的矩阵,比如2 2⍴1 2 3 4,不一定像JSON[[1,2][3,4]]因此,APL计划可以做到

t←↑⎕

t←⎕

而不是

t←↑⎕JSON⍞

版本

Dyalog APL向后兼容。但是,您可以设置以下状态⎕分区(Div公司vision方法),⎕法国(F类漂浮点R(右)代表),⎕IO接口(索引O(运行)里根),⎕毫升(M(M)迁徙L(左)电平),以及⎕WX公司(W公司窗户Ex姿势)以实现期望的行为。您不必计算设置这些所需的字符数。这是合理的,因为存在默认设置所需的系统。

图书馆

您可以导入库。这个⎕塞浦路斯(C操作)语句计算为代码长度的一部分,例如。⎕CY'dfns'.

函数提交可能包括函数外部的帮助器代码,例如

⎕CY'dfns'⋄N←标准兰德f←。。。

Truthy/Falsey公司

一些挑战要求输出是真实的还是虚假的,这取决于像什么样的条件:如果和dfn/dop防护(:)可以接受。包含单个1或0、任意维数(0-15)的简单数组可以分别用于判断真假。所有其他值都是非布尔值。

评分

Dyalog APL有自己的256个字符的代码页。如果你的代码完全由这个代码页中的字符组成(大多数都是这样),你可以将其评分为每个字符1个字节。

如果出于某种原因需要在APL的代码页之外使用字符,这是合法的,但必须使用UTF-8字节计数对程序进行评分,其中非ASCII字符计数为2个或更多字节。TIO的Dyalog Unicode将在“代码”字段的左上角报告字符数和UTF-8字节数,格式为“X个字符,Y个字节(UTF-8)”。

每个版本14.0中都添加了三个原语(内置)(,,以及)和16.0(,,以及)不包括在代码页中,因此可能不会在每个字符1字节的提交中使用,而不会将每个字符计算为其最短的多字符替代项:
⎕U2338⎕U2364⎕可选
⎕U2286⎕U233A⎕U2378
此外,请记住,如果下一个字符是字母数字,则这些较长的名称后面需要加一个空格。请注意可以通过设置达到⎕ML←3和使用然而,您必须说明由于以下原因导致的所有其他变更⎕毫升改变.
你可以现在通过声明使用SBCS公司.

\$\端组\$
2
  • \$\开始组\$ 中有重复的单词:“Dfn函数和Dop运算符是一行或多行代码,其中第一行以{开头,最后一行以}结尾,它们将其右参数和可选左参数分别称为⍵和⍺。此外还有Dops指他们左操作数和可选右操作数,如⍺\9082;和⍵𕿝。" \$\端组\$
    – RGS公司
    评论 2020年4月5日10:22
  • \$\开始组\$ @RGS谢谢。固定的。你也可以编辑这样的错误。 \$\端组\$
    – 阿达姆
    评论 2020年4月5日10:23
6
\$\开始组\$

果冻

Jelly是一种为代码高尔夫设计的语言。以下是我们的规则如何适用于它:

程序结构

PPCG问题通常要求“程序或函数”(如果他们没有具体说明他们想要什么,默认情况下他们想要一个程序)。

Jelly中的程序相当简单,它定义了程序是什么(一系列链接,默认情况下最后一个链接在其中运行)。有效的函数提交是可以通过数字调用的链接(即使用类似于内置的1Ŀ); 换句话说,它是程序的一行。您可以使用额外的行(即使在编写函数提交时)来定义帮助器链接。

接受输入

完整程序通常从命令行参数获取输入³,,,依此类推。如果您喜欢使用nillad,可以这样ɠ阅读“标准输入流”(以及一些挑战,尤其是旧的挑战,可能明确要求您这样做)。请注意,您不必总是编写³明确地;默认情况下,它们将作为程序主链接的参数。

如果你正在编写一个函数提交,你可以通过上述任何一种方式进行输入。如果你的链接不是niladic,你也可以检查它的参数;一元链接可以通过,通过的二元链接。与完整程序一样,您不必总是编写因为它们在许多上下文中用作默认参数。

生产产量

在Jelly中有两种主要的输出方式:在“标准输出流”上,以及通过程序的返回值。

当你编写一个完整的程序时,所有的输出都会转到同一个位置;程序的返回值(即其主链接末尾的当前值)将在程序执行结束时写入标准输出。基本上所有其他输出方法(例如。,Ȯ,在上下文外编写nilad等)将直接转到标准输出。因此,您的所有输出都合并在一个位置,您需要确保不会生成无关的输出,这将使您的提交无效。

当您编写函数(即基于链接的)提交时,这两个输出位置(链接的返回值和标准输出)被认为是不同的,您必须指定其中一个位置作为程序的输出(另一个将被忽略)。这是Jelly中函数和程序提交之间唯一真正的区别。(请注意,一些问题可能特别需要完整的程序,或特别需要功能。)

通过存在或不存在导致口译员崩溃的错误来报告输出也是合法的;这称为“通过退出状态输出”,如果Jelly解释器没有崩溃,则退出状态为0,如果果冻解释器崩溃,则为1。因此,此方法仅适用于输出布尔值。

正确与错误

《果冻》中的所有价值观要么真实要么虚假;规则是数字0为假,空结构(如空列表或空字符串)也是如此,所有其他值都为真。注意,输出布尔值的问题可能需要真/假输出,一致的真/假输出,或只是任意两个一致输出;确保你阅读了这个问题,以理解它的要求。

评分

果冻有自己的256个字符的代码页。如果您的程序在此代码页中完全由字符组成(大多数情况下都是这样),则可以将程序评分为每个字符1个字节。(注意:和换行符是100%可互换的,事实上在Jelly的代码页中编码方式相同;您可以在提交中使用这两个字符中的任何一个来代表另一个字符。)

如果出于某种原因需要在Jelly的代码页之外使用字符,这是合法的,但必须使用UTF-8字节计数为程序评分,其中非ASCII字符计数为2个或更多字节。(在标题中提到这一点,例如“UTF-8的100字节”。)为了准确计算计数,使用UTF-8字节计数程序是最容易的,因为这很难手动完成。

\$\端组\$
5
\$\开始组\$

PowerShell(PowerShell)

您的提交应该是一个程序或函数。它应该打印输出或返回输出写入输出当脚本完成执行时发生,只需将结果保留在管道上就足够了。

这些示例提交计算阶乘的:

常规I/O

#打印(隐式)的程序通过命令行参数接受输入参数($n)$p=1对于($i=1;$i-le$n;$i++){$p*=$i}$p美元#返回的命名函数也可以是“filter f($n){”函数f($n){$p=1对于($i=1;$i-le$n;$i++){$p*=$i}美元}

PowerShell确实通过具有等效于“lambda”或“unnamed”函数的功能脚本块,但它们是一个高级概念,(通常)在代码嗅觉中没有用处,因此在本介绍性主题中不作介绍。

您可能不希望将输入预先存储在变量中

#无效,假设输入已存在于$n中$p=1对于($i=1;$i-le$n;$i++){$p*=$i}美元

您也不能仅通过将结果保存在变量中进行输出。

#无效,只将结果保存到$p,不输出参数($n)$p=1对于($i=1;$i-le$n;$i++){$p*=$i}

输入

我们对输入格式非常宽松。例如,如果一个质询要求输入一个数字列表,您可以期望输入为PowerShell数组,如$l=@(1,2,3),不像"1 2 3"。因此,对于本例,PowerShell程序可以

param($l)$l.获取类型()

并期望输出显示它的类型系统。阵列.

然而,一般来说,将“数字列表”作为单独的命令行参数并使用内置$个参数作为数组。这在某些情况下是允许的;询问具体的挑战。

版本

最新版本的开源通常假定存储库是“在线试用!”网站上使用的版本。一般来说,版本是向后兼容的,因此,如果v2中有一个功能,那么它也应该在最新版本中可用,您不需要指定。

图书馆

您可以导入库和。NET功能。导入命令,如添加类型-A系统。窗户。形式,或静态调用,如[system.math]::Floor(),必须包含在字节计数中。如果它是非默认库,如PowerShell Community Extensions,请在标题中调用语言“PowerShell with PSCX”。

Truthy/Falsey公司

PowerShell是严格类型的,但它会根据需要动态转换。对于PowerShell数据类型,以下代码段用于确定某些内容是真实的还是虚假的:

如果($x){“正确”}其他{“错误”}

这意味着0,$假,""(空字符串),@()(空数组),$空,以及设置给这些对象的变量(包括未初始化的变量,默认为$空)是虚假的,其他一切都是真实的。

这篇文章的大部分格式来自@xnorPython答案.谢谢!

\$\端组\$
5
\$\开始组\$

大脑-高射炮

输入

Brain-Flak中的输入将作为命令行参数传递给解释器。(在“在线试用”中,这不起作用,相反,必须将其放入输入带有空格分隔符的字段)它们将在执行开始时出现在活动堆栈上。

如果挑战需要特定数量的输入,则可以按您选择的任何顺序传递。

如果挑战要求您获取项目列表或数组,则可以将所有项目作为单独的命令行参数传递。

例如,如果挑战是将列表中的所有数字相加,则以下代码有效:

(([]){[{}]{}([])}{})

输出

对于Brain-Flak来说,程序末尾打印的任何内容都是输出,这不包括偏移。你可以在执行结束时把你想要的东西放在堆外。

对于真实值和虚假值,只考虑最上面的项。如果最上面的项目为零,那么它是虚假的,否则它是真实的。

例如:

506

真的


014

False(错误)

因为Brain-Flak的堆栈中填充了无限多的零,所以空堆栈被视为零,因此在Brain-Falk中是错误的。

数值也不适用。例如,如果您必须输出5您可能无法输出:

510

然而,堆栈仍然用无限的零填充,因此当输出需要零时,可以接受空堆栈。

\$\端组\$
0
5
\$\开始组\$

赛德

由于sed没有功能,提交将是完整的程序,通过标准流进行输入和输出。

无输入的程序

有时,问题只要求输出,而不指定提供任何输入。因为sed无法生成任何输出,除非至少有一行输入,所以在这些情况下,您应该假设输入由一个换行符组成。

评分

程序通常采用单字节字符编码,因此计算字符数通常就足够了。正常情况下,需要添加口译员标志;例如,如果程序需要,则为+1-第页.

数字I/O

如果问题没有特别限制,那么一元是sed最有用的数字格式。可以使用sed进行算术运算;虽然不太可能赢,这当然是一个有趣的挑战!

提示

请参见提示在主站点上。

\$\端组\$
2
  • \$\开始组\$ Sed不要求程序具有尾随换行符 \$\端组\$ 评论 2017年4月7日3:15
  • \$\开始组\$ Sed没有天生的真实/虚假概念 \$\端组\$ 评论 2017年4月7日3:16
5
\$\开始组\$

猛击

评分

通常以字节计算。Bash程序不需要尾随换行符,所以如果编辑器自动添加了一个,就不要计算这个。

如果条目仅使用内置功能(使用键入-a<命令>查找),然后您可以作为纯粹的猛击。但是,如果您的条目调用外部二进制文件(例如。粘贴来自coreutils),那么您的条目应该在标题中提到这一点,例如。Bash+coreutils.

Truthy/Falsey公司

这在shell类型语言中有点奇怪。Shell命令(无论是外部二进制文件还是Shell内置文件)返回0到255之间的状态代码。通常,0表示成功,而任何其他数字表示出现错误。返回代码可以在$?变量。例如格雷普如果找到匹配项,则返回0;如果不匹配,则返回1:

$echo haystack | grep-q针$echo$?1$echo干草堆|grep-q干草$echo$?0$

流量控制声明(包括如果)相应地使用这些值:

$if echo haystack | grep-q针;然后echo找到了它;fi(菲涅耳)$if echo haystack | grep-q hay;然后echo找到了它;fi(菲涅耳)找到了$

所以TRUE=0,FALSE=anything-颠倒,对吗?你甚至可以在真的内置组件:

$真$echo$?0$假$echo$?1$

如果这还不够令人困惑(( ))算术扩展测试可用于生成返回码。在内部,这些函数使用更常见的TRUE=1/FALSE=0范式进行操作,但当表达式的结果从(( ))例如:

$ ((1))$echo$?0$ ((0))$echo$?1$

输入/输出

程序和函数都可以从STDIN读取和/或使用位置命令行参数$1,$2等(或$@为他们所有人)。

出于测试目的,可以使用设置--<param1><param2>。。。

输出通常为STDOUT。根据标准规则,可忽略STDERR的任何输出。

Truthy/Falsey输出也可以是如上所述的shell返回代码的形式。这适用于程序和函数。这个返回关键字可用于显式返回给定状态,但如果不使用关键字,程序或函数的状态将是最后执行的命令的状态:

$f()(true;false)$f美元$echo$?1$f()(假;真)$echo$?0$

I/O数据类型

这是相当灵活的。输入/输出列表的最常见(Unix)方法是使其以新行分隔,即每行一个项目。然而,如果对于给定的挑战来说方便的话,没有理由不使用逗号分隔的值。对于shell脚本,并没有一种正确的方法来实现这一点。

版本

4.0版和更高版本具有几个更高级的功能。一些人突然想到:

  • 关联数组
  • 更具表现力的支架扩展
  • Regex条件
  • 映射文件

不同的操作系统有不同的实用程序。例如Linux找到通常是coreutils的一个版本。这与BSD味道大不相同找到在MacOS上-即使bash版本相同。

\$\端组\$
4
\$\开始组\$

C类#

基本输入/输出

提交可以是命名函数、完整程序或匿名函数。函数将输入作为参数,通常返回结果(有时裁判外面的参数可能是适用的)。程序从“argv”(命令行参数)或“STDIO”(标准输入/输出)获取输入。

这些示例解决方案计算整数输入的阶乘。通常可以接受整数的字符串表示形式(对于完整的程序来说是典型的),也可以接受函数或lambda表达式的整数参数。

//“完整程序”从STDIN读取输入,将输出写入STDOUT静态void Main(){int n=int.Parse(System.Console.ReadLine()),//读取整数a=1;//蓄电池对于(;n>0;)a*=n-;系统。慰问。WriteLine(a);}
//“完整程序”从命令行参数(“argv”)读取输入并通过退出代码返回static int Main(字符串[]参数){int n=int.Parse(args[0]),//读取整数a=1;//蓄电池对于(;n>0;)a*=n--;返回a;}
//递归命名函数整型F(整型n){返回n>1?F(n)*n:1;}
//递归命名函数(C#6“expression bodid”语法)int F(int n)=>n>1?F(n)*n:1;
//迭代匿名类型lambda表达式(整数n)=>{整数a=1;对于(;n>0;n-)a*=n;返回a;}
//递归命名lambda表达式(这些在C#高尔夫中没有用处)系统。函数<int,int>F=null;F=n=>n>1?F(n)*n:1;

您可能没有其他语言(例如。x=>x*x必须是(整数x)=>x*x),因为类型信息可以更改代码的行为,因此需要明确。

版本

C#在其生命周期中发生了大约2次突破性的变化,其中没有一次与高尔夫运动有太大关系,所以只需使用最新的:太多了关于C#6和C#7中可能有用的东西进行探索。注意,C#7元组目前不能真正使用,因为它们需要外部库。

图书馆

一般来说,您可能想要使用的一切都在mscorlib数据库,编译器(默认情况下)自动包含的库(csc公司(.NET)或最大连续性(Mono)),因此很少需要任何外部DLL。

请注意,使用外部DLL需要编译器命令行参数,这些参数必须添加到字节计数中。

csc/r:OxyPlot.dll main.cs

一些通用。NET DLL可以使用时需要这些参数csc公司:https://stackoverflow.com/questions/2356180/no-需要引用到windows-forms-assembly

使用指令也会计入字节数:

使用系统。LINQ;使用C=系统。慰问;

Truthy/Falsey公司

在C#/中。净收入,真实性虚假由定义真的操作符,它(除非您在自己的类中定义它们)仅为布尔数据类型。

如果要求您生成一个真/假值,那么它必须是您可以在如果语句,它将是布尔真的,或手动定义的类(但这不太可能出现在代码高尔夫中)。例如,你不能返回1对于true和0对于false,除非挑战明确允许您这样做。

在线试用

请记住,大多数人不会从IDE运行您的代码,他们只会在线试用.TIO具有Mono和。使用C#7的NET内核。

过去,Mono和之间存在一些差异。NET编译,特别是使用转到语句,因此始终值得检查代码是否按预期运行以避免混淆。每个人都很欣赏一个“在线试用”链接,这是一个很好的答案!

\$\端组\$
2
  • \$\开始组\$ 1.分离但连续的代码块会合并在一起,除非在它们之间放置了一些东西。HTML注释是一个有用的分隔符。2.两个“完整程序”示例缺少使用系统;或完全合格系统。慰问。WriteLine(写入行).(和写入高尔夫球比WriteLine(写入行)...). 3.“递归命名lambda表达式”不是递归的。4.我不明白你在关于真实/虚假的部分想说什么,但我很肯定这是错误的,因为它没有提到布尔类型。 \$\端组\$ 评论 2017年3月30日9:24
  • \$\开始组\$ @感谢彼得·泰勒,其中一些是粗鲁的遗漏。真/假的东西没有错,但确实很愚蠢,更不用提了布尔(此外,这些是社区维基,我认为每个人都会加入进来,所以你可以随意做出任何你喜欢的更改,我只是为了让事情有所进展而发布这些更改) \$\端组\$ 评论 2017年3月30日9:46
4
\$\开始组\$

波尔

版本

这个珍珠默认情况下,解释器只打开与Perl规范的最旧版本兼容的功能。如果您想要更新的语言功能(这在高尔夫中非常常见),可以使用命令行选项免费请求。例如:

珍珠-M5.010

一些答案在最新版本的Perl中不起作用,因为现在默认情况下这些功能已被禁用。当您想将Perl代码插入正则表达式(两种常见的Perl高尔夫球技巧的组合)时,通常会出现这种情况。只要您将代码定位在默认启用了该功能的Perl版本(并且不使用任何更新的功能),这就是合法的。如果你使用的不是最新的版本,你应该在提交的标题中提到它。

程序结构

PPCG上的绝大多数问题都要求“程序或功能”。(如果问题没有指定请求的提交类型,那么默认情况下它需要一个程序或函数。)

程序(或“完整程序”)不需要任何类型的页眉或页脚,也不需要shebang(例如。#!/usr/bin/perl); 这只是一系列陈述:

我的$x=4;打印$x

Perl中的大多数PPCG提交都是程序。如果出于某种原因想要编写函数(或者如果问题特别要求函数),可以将其命名为:

子f{“你好,世界!”}

但您不必这样做,因为返回子例程引用也是一种合法的函数:

sub{“你好,世界!”}

接受输入

如果您正在编写程序,可以从默认输入流中获取输入:

<>

或从命令行:

$ARGV[0]

在Perl中,所有形式的输入都可以有效地归结为其中之一。然而,您可以使用命令行选项来打开显式输入,这不会带来任何损失。这个-一个,-第页,-n个,以及-我所有选项都允许您访问一种形式的隐式输入。

如果您正在编写函数,当然也可以通过函数参数进行输入,例如:

$_[0]

@_

请注意,您不能只要假设输入存在于一个特定的变量中(除非您使用这样的选项-一个-n个放在那里)。

生产产量

在程序中,可以通过在默认输出流上打印输出来生成输出:

说“你好,世界!”

或在警告/错误输出流上:

警告“你好,世界!”

或通过设置程序的退出代码:

出口1

您还可以使用这些方法通过输出间接地; 例如,分配给$\为了影响隐含的打印由暗示的声明-第页是合法的,并且导致错误影响程序的退出代码也是合法的。

如果你正在编写一个函数,你可以使用上面的任何方法。您还可以通过函数的返回值输出:

返回4;函数末尾的4#

或覆盖@_,允许函数的调用方通过输入的副作用读取输出:

$_[0]=4;

正确与错误

在Perl中,几乎所有的值都是true(因此,对于询问true或false值的问题,这些值都是合法的“true”输出)。有四个错误值:''(空字符串),0(整数零),'0'(整数零的字符串化;在大多数上下文中都等效,包括此处),以及未定义(未定义值);其他一切都是真实的。请注意,如果一个问题要求您输入布尔输出,它可能需要任何真/假值一致的真/假值,或只是任何两个一致的值;阅读问题,看看需要什么。

代码评分

Perl中的提交通常如下所示:

波尔-第页,10字节

$_=反向

这里,“10”是提交中的字节数-第页向Perl解释器指示所需的命令行选项。

Perl程序几乎总是使用ASCII字符。如果您使用的是非ASCII字符,Perl默认情况下会将其解释为位于单字节代码页中,该代码页与ASCII一致,并且在上半部分具有未知(但一致)字符。因此,值得寻找一个包含您需要的所有字符的单字节代码页;Perl会将其视为不透明的,因此会接受其中的任何一个。

如果出于某种原因需要使用Unicode,则可能必须添加命令行选项才能启用Unicode;-Mutf8(Mutf8),-C类等。注意,根据最近达成的共识,命令行选项不再对添加分数惩罚问题。

\$\端组\$
2
\$\开始组\$

CJam公司

输入

CJam提交的文件可以是完整的程序,使用q个(读取整个输入),第页(读取空白分隔标记),以及(读第行)。或者,它们可以使用ea公司(推送命令行参数)。

这些都是有效的CJam提交文件:

q S/:i~+里里+电子艺界:i~+

CJam答案也可以是块的形式,这是代码对象。将它们包含在完整的程序中会将它们推送到堆栈中,在那里可以使用~.

{ + }

CJam块也可以通过附加:?到一个街区,其中?是任何大写字母:

{)\(\1${K}&}:K

块可以使用q个,第页,以及,但完整的程序可能不会从堆栈中获取输入。

输出

完整的程序和块都可以通过o个(输出),n个,(输出带有尾随换行符-这仅在TIO上可用),以及第页(带有尾随换行符的输出字符串表示)。

日文ri+o

然而,完整的程序也可能依赖于CJam的堆栈自动打印。请记住,堆栈打印时带有尾随换行符,但这在大多数挑战中通常并不重要:

里里+

块可以输出o个,n个,或第页,或在堆栈上保留值:

{+n}{ + }

评分

CJam没有特殊的字符编码。所有命令都是一个字节,但在字符串或字符文本中可能会遇到Unicode。你可以使用这样的网站https://mothereff.in/字节计数器以UTF-8格式检查代码长度。

e#8字节里里+e#15字节ri-ri+'😀

实施

上有CJam的JavaScript实现网址:https://cjam.aditsu.net。您也可以从以下位置使用Java解释器https://tio.run/nexus/cjam,或从下载https://sourceforge.net/p/cjam注意,TIO版本支持一些额外的功能(如n个)aditus.net和SourceForge版本没有。

\$\端组\$
2
\$\开始组\$

辛克莱ZX80 BASIC(4K ROM)

背景

ZX80 BASIC有一个有限的解释器,它缺少许多关键字,只有大写字符和这些大写字符的反转版本。它的字符集不符合ASCII标准,通常只对屏幕和盒式磁带进行读取和写入。如果没有增强型ZX81 ROM,就无法绘制到屏幕上,除非打印到屏幕上或计算出DFILE(屏幕位置)在RAM中的位置,并将各个字节存储到屏幕上。最新的ZXPand允许您的ZX80读写SD卡,尽管这需要ZX80的专用套件。像EightyOne这样的模拟器将使用ZXPand模拟真实的ZX80。

打印程序

10打印“你好妈妈”

子例程

10打印“你好”;20通SUB 10030停止100打印“妈妈”110返回

变量

10 LET A$=“你好”20 LET B$=“最小”30打印A$;B类$40 LET X=10050让Y=20060打印X,Y

循环

I=0至10时为1020打印I,;30下一步

或者如果你不想以1为步进行计数,那么

10让I=020打印I,;30让I=I+240如果I<10,则转到20

阅读键盘

10输入A$20打印“您键入了以下字符串:”30打印A$40输入A50打印“您输入了以下整数:”60打印A

请注意,没有变量INKEY(墨水)$GET(获取)关于Sinclair ZX80 4K ROM的声明。

处理浮点数

好吧,这是一个困难的问题,但让我们假设你想打印价格从0.01英镑到327.67英镑的商品的价格,这里有一种方法:

10输入M20 LET M=ABS(M)30让S$=“。”40打印M/100;新加坡元;50 LET R$=STR$(百万)60如果M<10,则打印“0”;70如果M>99,则让R$=TL$(R$)80如果M>999,则设R$=TL$(R$)90如果M>9999,则让R$=TL$(R$)100打印R$

基本上,用整数计算,打印出除以100的结果,将M变量传递给字符串,然后根据M的值将字符串左移一个字符,直到达到便士。或者,如果M<10,则打印前导零。我相信你可以想出一个更好的解决方案,用上面的符号列表打破327.67的障碍。

Truthy/Falsey公司

ZX80返回-1如果为true或0如果为假。为了实现不相等,必须使用以下内容:

10 LET A$=“1”20 LET B$=“2”30如果不是A$=B$,则打印“不等于”40如果A$=B$,则打印“EQUALS”50打印1=260打印2=2

动画

如果不使用机器代码,这是不可能的,因为当BASIC解释器进行计算时,屏幕被关闭。当您使用input等待键盘输入时,只会得到一个静态屏幕。

颜色[SIC]文本/图形

ZX80只有单色显示器

模糊和最小化列表

ZX80不接受BASIC最小化或多状态行,如:

10打印“你好妈妈”;:转到10

输入列表时会自动添加空格,并且没有关键字缩写。BASIC关键字被标记化。

标准输入/输出

在1980年,这可能不是一件正式的事情,所以标准输入可能意味着从键盘读取变量或从盒式磁带播放器(或虚拟等效设备)读取,而标准输出可能意味着写入屏幕,或将数据存储到变量,或将数据记录到盒式磁带(或虚拟等效设备)。

评分

要知道ZX80程序列表(在BASIC解释器中)的字节数,最简单的方法是使用保存命令和八十一模拟器.在ZX80模式下启动模拟器;由于辛克莱出色的“一键式”BASIC输入系统,您将需要键盘助手。工具菜单,确保您拥有磁带管理器。。。使能(或者,CTRL+F9组合键).

现在按保存空文件E类新品[在PC键盘上输入]。磁带管理器窗口中,您将看到一个空文件需要多少时间,因为即使没有程序,它也会保存所有当前内存。应该说41字节,但如果启用了16K,这可能会有所不同。

现在输入您的程序。

10打印“你好”20转到10

应保存58个字节,因此程序大小为17个字节,如下所示:

  • 每行号两个字节(1020是四个字节);
  • 每个令牌用于打印;
  • “你好”是七个字节;
  • 两个字节用于10排成一行20(转到10)
  • 每行一个字节作为换行符

无条件循环

是的,GO TO关键字存在。

对象方向

呃。。。

\$\端组\$
4
  • 2
    \$\开始组\$ "对象方向:错误。。。" \$\端组\$
    – 
    评论 2017年4月4日14:36
  • 1
    \$\开始组\$ 你能在这篇帖子中解决得分问题吗?IIRC是一种标记化语言,使事情复杂化 \$\端组\$ 评论 2017年4月7日3:18
  • \$\开始组\$ 我确实要求在Retro Computing Stack Exchange上出现类似代码嗅觉的挑战和“一行程序”,但显然这与Retro Competing无关。ZX80和其他8位和16位机器大多不适合代码嗅觉-然而,如果Code Golf堆栈交换允许8位特定类别和挑战作为试验,那么这种情况可以简化,这样我们就可以解决复古/古代8位技术所呈现的所有异常。 \$\端组\$ 评论 2017年4月7日8:19
  • \$\开始组\$ 目前,我只能估计字节数,因为我还没有找到ZX80编程的好资源,所以根据符号列表的ZX81字节数,它是每行3个字节加上每按键1个字节。可以忽略空格,除非它们位于字符串文本中。例如,如果您按Y(Y)对于打印它会立即由一个空白区域继续,如果不删除打印关键字 \$\端组\$ 评论 2017年4月7日8:22
1
\$\开始组\$

欠载

Underload是一种基于堆栈的tarpit esolang,对于一些问题(尤其是s) 对于大多数其他人来说,这是一个可怕的选择(但即使是可怕的选择,也会给高尔夫带来乐趣!)。如果您计划在CGCC使用它,您需要了解以下内容:

基础知识

CGCC问题通常要求您提交完整的程序或功能。

Underload中的完整程序只是一个从空堆栈开始运行的代码字符串;它无法接受输入。因此,这种编写提交文件的方法只适用于不需要程序输入的问题。不过,当你可以使用它时,它往往是最短的,因为绝对没有样板文件。这里有一个Hello,World!完整程序:

(你好,世界)S

在剩下的时间里,你的提交必须是一个函数。函数可以通过任何合法的I/O方法进行I/O。因此,在欠载的情况下,您需要从堆栈中获取输入;并可以通过将其推送到堆栈上或使用S公司命令。(您需要选择其中一种机制作为程序的“官方”输出机制,其他机制将被忽略。)

此外,根据CGCC定义,函数必须是可重用的,即必须能够多次调用它。因此,不允许只提交函数体;您必须将函数括在括号中(这样在调用之前可以通过复制函数多次调用它),并记住将它们包括在字节计数中。这里有一个Hello,World!功能:

(你好,世界!)

要在Try It Online!上测试您的功能!,将它们写在“代码”框中,并将参数放入表单中的“页脚”框中(arg1)~(arg2)~^即交换函数下面的参数,然后调用函数。如果函数在其堆栈上生成输出,则需要添加S公司打印到页脚。

数字I/O

Underload中数字的正常定义是“Church numbers”,它实现非负整数,如下所示:

0  !()12  :*3  ::**4  :::***5  ::::****

等等。(等效字符串,如:*:*对于4,也可以接受。1是一个空字符串。)这些基本上是将函数转换为这些函数的循环/重复应用版本的程序,例如数字4表示为任何字符串,如果解释为函数体,将映射函数λx.f(x)到函数中λx.f(f(f(f(x)))(或者在欠载术语中,用字符串本身的四个副本替换字符串)。Underload中处理数字的程序通常对输入和输出中的数字使用这种解释。

真实/虚假

在Underload中,没有公认的表示true和false的方法,具体格式取决于程序。

如果一个问题确实要求你使用语言的特定真值和假值(或特定的真值和假值),你应该使用^对于true和!对于false,因为这些是您需要在if语句的等效语句中使用的值。然而,没有理由将自己局限于这些表示形式,以便在程序内部使用;使用最适合挑战的表达方式。

列表

关于如何在Underload中表示列表,目前还没有达成共识,所以请尽可能对程序最有意义。(字符串可以直接表示,也可以表示为字符代码列表;如果要将字符串视为不可分割的单元以外的任何东西,则需要后一种形式。)

\$\端组\$
0
\$\开始组\$

H(H)

(这个问题只提到了“语言”,所以像H这样的语言应该可以。)

H程序除了输入、输出和变量初始化之外几乎什么都不包含。然而,对于编写程序来说,它仍然非常强大。这是一个简单的单行cat程序:

#这是一个单行cat程序,它将输入复制到输出。input(“输入一行:”;a);打印(a);

有效答案(如上面的答案)只能与来自标准I/O的用户交互;也就是说,没有办法打破这种互动规则。

例子:

#这是有效的打印(-2+4);

在H实现中尝试一下,这可能会让你大吃一惊。

实施

该网站中有H的实现。提到所有这些都是很琐碎的。

\$\端组\$

你必须登录来回答这个问题。

不是你想要的答案吗?浏览标记的其他问题.