127
\$\开始组\$

看起来像是我们达成了共识我们需要答案的格式的某些默认值在那次民意测验中,出现了两次问题,即程序和函数应允许哪些输入/输出格式。

这是另一项民意调查。但这一个的工作原理不同。所有的输入/输出方法都是相互独立的,因此每个方法都有一个答案。对你认为合理的违约投赞成票。否决那些你认为不应该被允许的,除非OP明确允许。

为了保持远程管理,我没有为函数的所有可能输入发布单独的答案。因此只有四个:函数可以通过其参数和返回值接受输入/输出。或者函数可以使用完整程序可以使用的任何方法。我不认为允许程序从STDIN(仅)获取输入,允许函数从ARGV(仅)或类似的东西获取输入有任何意义。如果你不同意,请留言。

如果我忽略了I/O方法,请随意添加您自己的答案。

注:一些选票已被恢复,因为它们被检测为连续投票。如果您对多个答案进行投票,请在投票之间留出一些时间。

如果一种方法有5张净票,且赞成票至少是反对票的两倍,则允许使用该方法。

\$\端组\$
2
  • \$\开始组\$ 相关的(数字输入/输出可以是字节值形式吗?) \$\端组\$ 评论 2016年12月13日16:10
  • 6
    \$\开始组\$ “当前投票结果现在是标签维基的一部分”哪个标签维基?meta-wiki没有code-golf标签。ppcg维基有codegolf.stackexchange.com/tags/code-golf/info但这里缺少很多答案。 \$\端组\$ 评论 2018年7月18日18:17

118个答案118

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

函数可以通过其返回值输出

\$\端组\$
9
  • 1
    \$\开始组\$ 有多少种语言支持此功能?我支持输出到STDOUT。 \$\端组\$
    – 用户10766
    评论 2014年11月3日0:16
  • 35
    \$\开始组\$ @hosch250等等,有没有语言具有没有返回值的函数?o.o型 \$\端组\$ 评论 2014年11月3日0:17
  • \$\开始组\$ 哦,这不被视为输出我最后听到的内容——这是返回一个值。如果问题要求函数,这是正确的。如果问题要求一个程序,我支持输出到STDOUT或文件。 \$\端组\$
    – 用户10766
    评论 2014年11月3日0:19
  • \$\开始组\$ @hosch250这个特定的答案只涉及函数。是否函数和/或程序是否被允许是另一个问题(参见链接的元问题,但当然最终取决于挑战作者)。但这个答案说明如果函数是允许的,然后应该允许它们使用其返回值作为结果-这里的所有其他答案都是以单词开头的功能. \$\端组\$ 评论 2014年11月3日0:21
  • \$\开始组\$ 哦,对不起。我肯定会投票决定。 \$\端组\$
    – 用户10766
    评论 2014年11月3日0:22
  • 1
    \$\开始组\$ @MartinEnder大多数(全部?)8位BASIC解释器不专门从子例程返回值,而许多解释器允许您使用DEF(排放催化剂)关键字,这是非常有限的。我也不记得WorkBench中包含的Amiga BASIC有来自子例程的返回值,但我已经很多年没有使用过Amiga BASIC了,所以不要引用我的话。6502/10程序集也不会从子程序返回值。如果你知道你已经将结果存储在累加器中,那么你只需在子例程返回时使用它。 \$\端组\$ 评论 2017年4月4日8:58
  • 2
    \$\开始组\$ @MartinEnder是的,scratch的函数没有返回值 \$\端组\$ 评论 2017年8月27日15:51
  • 1
    \$\开始组\$ @Hosch250有些语言没有STDOUT,比如JS \$\端组\$ 评论 2019年7月3日20:39
  • 1
    \$\开始组\$ @VFDan如果是JS,控制台.log-ing通常被注册为STDOUT。此外,Node.js进行STDOUT。 \$\端组\$
    – 自由区
    评论 2021年5月3日6:43
132
\$\开始组\$

函数可以通过函数参数接受输入

\$\端组\$
  • 2
    \$\开始组\$ 我在很多问题中都用到了这一点,这是肯定的。 \$\端组\$
    – 乔·Z。
    评论 2014年11月16日22:43
  • 2
    \$\开始组\$ 它能通过重复调用一个函数,一次调用一个值来获取数组吗? \$\端组\$ 评论 2017年12月18日21:39
  • \$\开始组\$ @l4m2听起来像是一种特殊的咖喱,值得在另一个问题中提出。(原则上,这应该是有效的,但值得明确讨论。) \$\端组\$ 评论 2017年12月18日21:40
129
\$\开始组\$

程序可以通过STDIN输入

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

程序可以输出到STDOUT

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

程序可以通过GUI提示进行输入

(这是针对语言的,对于这些语言,这是最接近于STDIN的替代方案,如JavaScript提示(),Mathematica的输入[]输入字符串[],Matlab的输入()和VBScript输入框().)

\$\端组\$
7
  • 1
    \$\开始组\$ 其他语言呢? \$\端组\$ 评论 2014年11月4日0:32
  • \$\开始组\$ @Ypnypn我不知道有哪种语言可以从STDIN中读取,但在哪里生成图形提示比这更短。但在这种情况下,我认为两者都可以。 \$\端组\$ 评论 2014年11月4日9:22
  • 1
    \$\开始组\$ @马丁·贝特纳·马特拉斯输入(“”)通常只是从命令行读取,也许你的意思是inputdlg(“”)? \$\端组\$
    – 鞭子
    评论 2015年9月11日16:29
  • \$\开始组\$ 不管怎样,妈妈的输入输入字符串在脚本中运行时,两者都会接受下一行输入。 \$\端组\$ 评论 2015年11月8日12:35
  • \$\开始组\$ @马丁·恩德wscript(wscript). \$\端组\$ 评论 2016年7月21日15:47
  • 1
    \$\开始组\$ 猛击读取<var> \$\端组\$ 评论 2018年1月7日22:09
  • 1
    \$\开始组\$ 所以阅读选择确认提示框也允许其他 \$\端组\$ 评论 2018年3月10日8:56
101
\$\开始组\$

程序可以通过在屏幕上显示来输出。

这使得使用以下语言成为可能Vim脚本无法将输出直接打印到标准输出.

示例来自挑战:

$echo“这是测试线!”|vim--c'nm Q vEUWvEuWQ |normal Q'

将显示:

这是一条测试线!~~~~~

维姆会话。

我认为这种显示结果的方式应该是有效的。我确信还有其他特定于域的语言,如Vim脚本缺少完整的I/O支持,可以使用另一种方式显示结果。

\$\端组\$
2
  • 4
    \$\开始组\$ 顺便说一句,vim的输出是标准输出,但如果您处理标准输出,就会有额外的垃圾。 \$\端组\$
    – 约书亚
    评论 2016年1月25日20:04
  • \$\开始组\$ 它甚至不仅仅是领域特定的语言。我认为QBasic属于这一类:它没有任何输出(或输入)流的概念,而是将字符写入“窗口” \$\端组\$ 评论 2016年9月3日3:51
95
\$\开始组\$

程序可以使用退出代码输出。。。

退出代码基本上是程序的返回值。如果函数可以使用其返回值进行输出,那么程序也应该能够这样做。

示例:

\$\端组\$
7
  • \$\开始组\$ 嗯……这应该是“当且仅当挑战要求输出一个值保证在0到255之间(包括0和255)的整数时”吗?例如,如果挑战是“输出传递给程序的参数数量”,那么int main(int argc,char**argv){return argc;}应该是一个有效的解决方案(IMO),因为退出代码被0xFF(0xFF)。(也许这是规则中隐含的正确性的一部分?只是想说清楚。) \$\端组\$
    – 瓦查金
    评论 2016年12月18日5:05
  • 6
    \$\开始组\$ @wchargin这似乎是对运行程序所用的任何东西的限制。我可以编写一个PowerShell脚本,如退出1000000,并在PowerShell ISE中执行。这不会给我带来任何问题。 \$\端组\$
    – 霹雳舞
    评论 2016年12月19日19:14
  • \$\开始组\$ 有趣,我不知道。据我所知,这在所有*nix操作系统(包括Mac)上都是正确的,但我很乐意被纠正! \$\端组\$
    – 瓦查金
    评论 2016年12月19日19:21
  • \$\开始组\$ 有理由将其限制为整数吗?我的意思是,如果有一个环境,程序可以返回整数以外的其他值,为什么不允许这样呢? \$\端组\$
    – 贾森
    评论 2016年12月22日10:21
  • \$\开始组\$ @Jasen我看不出有什么理由把它限制为整数。 \$\端组\$
    – 霹雳舞
    评论 2016年12月22日14:04
  • \$\开始组\$ 我是这个网站的新手。崩溃程序的退出代码是否被视为有效的输出方式(例如,SIGSEGV公司)? \$\端组\$ 评论 2017年1月9日16:04
  • 5
    \$\开始组\$ @ShmuelH。如果您故意使程序崩溃(或仅使用等效的退出(代码)在该语言中)以获取特定的退出代码,它是有效的。 \$\端组\$
    – 用户45941
    评论 2017年1月9日16:31
85
\$\开始组\$

程序可以通过命令行参数接受输入

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

函数可以通过咖喱

对于像Haskell这样的一些函数式编程语言,这实际上是必要的,因为只有单参数函数存在,并且具有多参数的函数被(有点透明)实现为curried函数。(另一种方法是获取值的列表或元组,但这并不是在Haskell中自然编写双参数函数的方式。)

根据本共识对于存在多参数函数的语言,也应该允许这样做。以JavaScript为例,而不是定义

f=(a,b)=>。。。

并称之为f(a,b)然后还可以定义

f=a=>b=>。。。

并称之为f(a)(b).

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

磁带执行后的内容可以用作图灵机的输出

\$\端组\$
2
  • 7
    \$\开始组\$ 这是我的赞成票。 \$\端组\$ 评论 2015年9月22日20:54
  • 6
    \$\开始组\$ 强调“执行后”。如果你允许一台非暂停图灵机的最后一盘磁带被考虑出来,你的程序可以计算一个不可计算的函数。 \$\端组\$ 评论 2018年12月10日14:15
69
\$\开始组\$

函数可以通过与完整程序相同的方法输出

(这取决于投票的进行方式,但可以是STDOUT、STDERR和文件的任何子集。)

\$\端组\$
7
  • \$\开始组\$ 这违反了单一责任原则、关注点分离原则,我认为它在代码高尔夫中没有什么用处。此外,函数式编程语言根本不允许您这样做,我希望您对Haskell有更多的爱。 \$\端组\$ 评论 2014年11月3日6:42
  • 4
    \$\开始组\$ @JanDvorak高尔夫的一个简单用法是打印短于返回在Python中。 \$\端组\$ 评论 2014年11月3日8:57
  • 5
    \$\开始组\$ 欧洲。不支持这种优化。它可能有用的是在循环中打印,而不是在数组中收集结果。仍然不支持这样做。 \$\端组\$ 评论 2014年11月3日9:02
  • \$\开始组\$ @JanDvorak Yeesh,我不认为可以重复打印以“输出”列表。我认为,即使这次投票通过,也不应该允许这样做,因为输出并不是要求的列表。 \$\端组\$ 评论 2014年11月3日9:06
  • 12
    \$\开始组\$ @xnor为什么不允许完整程序也这样做呢? \$\端组\$ 评论 2014年11月3日11:22
  • \$\开始组\$ @MartinBüttner嗯,你说得对,程序真正“输出”的是结果的字符串表示,所以这个规则应该意味着函数也可以保持一致。但这是另一个尴尬的结果,使我不赞成这一规则。 \$\端组\$ 评论 2014年11月4日2:15
  • \$\开始组\$ 出口代码怎么办?函数不应该是可重用的吗?如果我的函数退出程序,它就无法重用。标题就是这么写的 \$\端组\$ 评论 2017年10月26日13:14
65
\$\开始组\$

程序可以输出到STDERR

\$\端组\$
8
  • 11
    \$\开始组\$ 谁能评论一下为什么不这样做?例如,打印(“你好,世界!”)以lua打印到STDERR。 \$\端组\$
    – 
    评论 2016年1月31日0:40
  • 7
    \$\开始组\$ 禁止向STDERR输出似乎与允许输出到屏幕. \$\端组\$
    – 丹尼斯
    评论 2016年5月2日18:47
  • 1
    \$\开始组\$ 这应该作为标准。。。啊。我懂了。 \$\端组\$ 评论 2016年7月21日16:00
  • \$\开始组\$ 我看到的唯一问题是“语言”写入STDERR的内容和“程序”写入的内容之间的模糊性。如果不区分这两者,就会出现错误五和类似的答案,这是值得怀疑的。 \$\端组\$ 评论 2016年12月29日18:29
  • \$\开始组\$ 我认为默认情况下不应该允许这样做(但在某些挑战中可以明确允许)。我认为这违背了一些挑战的精神,例如另一方面,它可以被明确禁止,但不是每个人都会想到这一点 \$\端组\$ 评论 2017年1月27日12:36
  • 8
    \$\开始组\$ 这是PHP的突破,其中<?=a;输出至STDOUT和注意:在第3行的[…][…]中使用了未定义的常量a-假定为“a”至STDERR。 \$\端组\$ 评论 2017年1月27日14:35
  • 5
    \$\开始组\$ @IsmaelMiguel这意味着只有在您选择的输出格式时,输出到STDERR才有价值。 \$\端组\$
    – 银河90
    评论 2019年4月6日22:31
  • 1
    \$\开始组\$ @YoYoYonnY什么时候开始的?所有Lua 5.1-5.3输出到标准输出… \$\端组\$ 评论 2019年7月17日14:16
63
\$\开始组\$

函数可以通过修改其参数或写入输出参数来输出

这里,“out arguments”指的是通过引用传入的参数,以便修改价值函数内部(而不是仅仅覆盖参数)还修改函数外部的值(否则,函数返回后输出值将不可见)。注意,这在所有语言和所有类型中都不可能实现。

\$\端组\$
8
  • 2
    \$\开始组\$ 这是否意味着在允许的语言中返回可以简单地用赋值替换吗? \$\端组\$ 评论 2015年6月10日21:05
  • 9
    \$\开始组\$ @ThomasKwa是的,前提是更改后的值可以在调用函数的上下文中访问。 \$\端组\$ 评论 2015年6月10日21:18
  • 1
    \$\开始组\$ 所以你的意思是,这只适用于没有参数、通过引用或类似语义的语言?例如不在shell中。。。 \$\端组\$
    – 贾森
    评论 2016年12月22日10:27
  • \$\开始组\$ @Jasen我不知道shell,但对你的问题是肯定的。 \$\端组\$ 评论 2016年12月22日10:31
  • \$\开始组\$ 应该澄清这一点,即您必须实际修改参数,而不仅仅是覆盖它。请参阅用于不正确的使用。 \$\端组\$
    – 艾萨克
    评论 2017年6月28日9:40
  • \$\开始组\$ @isaacg说得好,谢谢。 \$\端组\$ 评论 2017年6月28日9:46
  • \$\开始组\$ @isaacg你需要链接到一个特定的版本,这样评论才有意义。 \$\端组\$ 评论 2017年6月30日19:58
  • 1
    \$\开始组\$ 我提到的版本是codegolf.stackexchange.com/revisions/128782/6 \$\端组\$
    – 艾萨克
    评论 2017年6月30日23:35
59
\$\开始组\$

对于基于堆栈的语言,可以在调用之前将函数的输入推送到堆栈中

基于堆栈的语言可能会假定其函数的输入被自动推送到堆栈中。

\$\端组\$
7
  • 1
    \$\开始组\$ +1,这是CJam和GolfScript(可能还有其他一些基于堆栈的语言)的事实上的标准。您可能想对输出做出相应的回答。 \$\端组\$ 评论 2016年2月19日13:29
  • 7
    \$\开始组\$ 我认为这里的重点应该放在“功能”上,而不是片断。这两者之间有一条很细的线。。。 \$\端组\$
    – Sp3000型
    评论 2016年2月19日13:34
  • 1
    \$\开始组\$ 有没有基于堆栈的语言可以让您定义函数?据我所知,他们中的大多数人都不让你写信完整程序通过STDIO使用IO。(在我看来功能应该满足(也许在其他标准中):可以在同一程序中重用的代码片段,而无需再次键入它们) \$\端组\$
    – 鞭子
    评论 2016年7月10日16:27
  • \$\开始组\$ @弗劳尔·维西在某些方面有作用。有一些基于堆栈的语言具有作用域,但我无法立即命名它们。 \$\端组\$ 评论 2016年7月11日4:12
  • 4
    \$\开始组\$ @为了完成,flawr:许多(大多数?)非深奥的基于堆栈的语言允许您定义函数。Factor、Forth、Postscript、Joy、Cat和其他许多功能都有(命名和匿名)。dc(RPN计算器)具有类似于函数的寄存器。 \$\端组\$ 评论 2016年9月14日17:35
  • \$\开始组\$ @flawr:Underload允许您重用有问题的函数(以一种尴尬的方式,因为Underloads没有命名方法,但这是可能的,而且相当常见)。 \$\端组\$
    – 用户62131
    评论 2017年1月15日17:05
  • 1
    \$\开始组\$ 这是否适用于具有显式IO但没有隐式IO的语言? \$\端组\$
    – 阿达林
    评论 2017年8月5日17:19
56
\$\开始组\$

程序可以输出到文件

\$\端组\$
5
  • 12
    \$\开始组\$ 为什么人们反对? \$\端组\$ 评论 2014年11月8日5:48
  • 8
    \$\开始组\$ @xnor是/开发/空是否认为是有效的输出文件?我不妨提交一个空白程序,并声称它输出了正确的答案/开发/空. \$\端组\$ 评论 2016年2月15日21:55
  • 16
    \$\开始组\$ @帕特里克·罗伯茨不,/开发/空不是有效的输出文件,具体原因是以后无法检查输出。“输出到文件”意味着您可以通过查看特定文件来查看程序的输出。 \$\端组\$ 评论 2016年9月3日4:05
  • 19
    \$\开始组\$ 使用strace(或chroot,或mv!)可以看到写入/dev/null的内容 \$\端组\$
    – 贾森
    评论 2016年12月22日10:30
  • 5
    \$\开始组\$ @Patrick Roberts但它没有输出到/开发/空 \$\端组\$
    – 银河90
    评论 2019年4月6日22:28
56
\$\开始组\$

功能可以通过与完整程序相同的方法进行输入

(这取决于投票方式,但可以是STDIN、ARGV和文件的任何子集。)

\$\端组\$
4
  • \$\开始组\$ 这违反了单一责任原则、关注点分离原则,我认为它在代码高尔夫中没有什么用处。此外,函数式编程语言根本不允许您这样做,我希望您对Haskell有更多的爱。 \$\端组\$ 评论 2014年11月3日6:43
  • 24
    \$\开始组\$ @JanDvorak我看不到代码高尔夫的良好编码实践的相关性。有些语言甚至没有函数,它们不一定会因为允许函数而处于劣势。在I/O选项上更加自由的想法是,每种语言都可以选择最短的语言。 \$\端组\$ 评论 2014年11月3日11:10
  • 2
    \$\开始组\$ 我唯一反对函数以与程序相同的方式接受输入的情况是,如果问题是“编写一个接受以下参数的函数”。此调查适用于非特定格式的问题,因此我认为没有理由排除从stdin读取的函数。 \$\端组\$ 评论 2014年11月4日13:16
  • \$\开始组\$ @马丁·巴特纳指出。我仍然不喜欢这个选项,但可以随意更改我的首选项。投票分歧非常接近ATM的阈值。 \$\端组\$ 评论 2014年11月7日9:47
53
\$\开始组\$

程序可以组合两种或多种输入方法

例如,如果输入是字符串和int,那么将字符串作为参数和STDIN中的int作为参数的函数将有效。

对于给定的程序,输入格式必须保持一致。

\$\端组\$
52
\$\开始组\$

输入可能被完全忽略

如果一个挑战指定您的程序应该接受某些选择的输入,但不是所有输入都是您解决任务所必需的,那么您可以简单地不接受不需要的输入。(这相当于通过您的语言没有查看的方法获取它们,例如通过无法访问命令行参数的语言中的命令行参数。)

\$\端组\$
2
  • \$\开始组\$ 你是在暗示,如果挑战是“取三个数字作为输入a、b和c,并返回a+b”,那么打印(输入()+输入())将是有效的Python提交吗? \$\端组\$ 评论 2017年5月23日3:20
  • 7
    \$\开始组\$ @挑战者5:对。此外,如果请求是返回a+c,那么这将是一个有效的提交(即使没有这个,您也可以这样做,例如,“a和c是通过标准输入输入的,b是从文件输入的”。这个规则基本上是为了避免必须这样做的荒谬性。) \$\端组\$
    – 用户62131
    评论 2017年5月23日3:44
52
\$\开始组\$

如果适用,支持多个停止状态的图灵机也可以通过其停止状态输出

这本质上等同于程序通过退出代码输出。

\$\端组\$
  • 4
    \$\开始组\$ 这是我的赞成票。 \$\端组\$ 评论 2015年9月22日20:54
  • \$\开始组\$ 正如我所见,图灵机将输出保留在磁带上,并具有单一停止状态。你的建议有先例吗? \$\端组\$ 评论 2015年9月24日16:51
  • \$\开始组\$ @xnor:通常是这样的,但我看到了图灵机器代码的方言,它确实支持多个停止状态。(例如,在我通常使用的morphett.info方言中,停止是基本的停止状态,但形式的任何状态halt-<任何字符串>也被视为停止状态。) \$\端组\$ 评论 2015年9月24日19:09
50
\$\开始组\$

图灵机的输入可以在执行前写入磁带

读写头应该从包含输入的磁带部分的最左边的单元开始。

\$\端组\$
6
  • \$\开始组\$ 这是我的赞成票。 \$\端组\$ 评论 2015年9月22日20:53
  • 6
    \$\开始组\$ 我认为只有当这是唯一的输入方法时才允许这样做。 \$\端组\$ 评论 2015年10月8日20:39
  • \$\开始组\$ 对于标准的图灵机来说,它是这样的。 \$\端组\$ 评论 2015年10月8日20:59
  • 4
    \$\开始组\$ 这里发生了什么,超级绝地?你发布了一个答案,一小时后评论道“这是我的赞成票”? \$\端组\$ 评论 2017年10月31日16:55
  • \$\开始组\$ @MDXF当时,关于这个问题的其他几个答案都有作者添加的类似评论(包括马丁的许多答案)。至少有一个被评论为“这是我投的反对票。”基本上,这是一种对你自己的元提案进行投票的方式,因为你实际上不能在这个网站上对自己的答案投赞成票或反对票。有趣的是,关于这个话题的大多数评论似乎都被删除了。 \$\端组\$ 评论 2017年11月1日11:22
  • 2
    \$\开始组\$ @SuperJedi224啊,好吧,谢谢。我当时怀疑袜子的动作,但这很有道理。 \$\端组\$ 评论 2017年11月2日16:37
42
\$\开始组\$

SQL提交可以从命名表中获取输入

这可能还不够好。但我不知道更好的方法。

\$\端组\$
1
  • \$\开始组\$ 应该可以,只要该输入被视为数据,而不是可执行代码 \$\端组\$ 评论 2019年8月12日9:03
41
\$\开始组\$

函数可以通过充当生成器返回列表

换言之,允许编写一个函数,根据请求懒洋洋地返回列表元素,使用该语言已有的支持来实现这一点(目前它经常出现,但有点像灰色区域)。这在大多数语言中都是习惯用法。

\$\端组\$
6
  • 2
    \$\开始组\$ 我甚至没有意识到这是一个争论点。。。 \$\端组\$
    – 用户45941
    评论 2016年11月30日21:57
  • 1
    \$\开始组\$ 我不认为是这样,但我们没有列出它,并且在Prolog中将生成器转换为列表在字节方面是相当昂贵的(有一个内置的,但它有一个相当长的名称)。所以我想确认一下,我不必在Prolog的答案中进行转换。 \$\端组\$
    – 用户62131
    评论 2016年11月30日23:03
  • \$\开始组\$ Python 2中的一些东西返回一个列表,但在Python3中它返回一个生成器。喜欢范围. \$\端组\$ 评论 2017年3月3日22:46
  • \$\开始组\$ @mbomb007我认为Python 3s范围相当于Python 2润智和Python 2范围有些不同。。。 \$\端组\$ 评论 2017年8月27日18:44
  • \$\开始组\$ 基本上。Python 2范围就像打电话列表()结果。 \$\端组\$ 评论 2017年8月27日19:24
  • \$\开始组\$ 也许不是最快的代码… \$\端组\$ 评论 2023年8月17日16:33
40
\$\开始组\$

程序可以将输入作为最后一个表达式的值

使用TI-84 BASIC之类的答案,它是存储最后一个表达式值的变量。这是TI-BASIC接受输入的最短方式,但其有效性为最近受到质疑。要明确的是,这是该流程如何与答案:

  • 在程序中,键入输入(数字、列表、字符串等),后跟换行符以分隔语句,后跟程序名,然后按Enter键。例如,

    1337prgm系数
  • 在程序外部,键入输入,按Enter键,然后键入程序名称并按Enter键。

编辑:我遇到了一种使用答案这与命令行参数类似,它们是允许:All作为一个表达式,键入输入,后跟冒号,然后是pgrmNAMEHERE公司例如,1337:pgrm因子.

\$\端组\$
11
  • 4
    \$\开始组\$ 我认为根据定义,提交将不是一个完整的程序,而是一个需要某种默认不允许的REPL环境的代码段。 \$\端组\$ 评论 2016年2月25日22:53
  • 9
    \$\开始组\$ 我认为TI-BASIC是一种特殊情况,它与其他语言有着根本的不同,并且只能调用什么可以被视为REPL;那么,一个完整的程序和一个代码片段有什么不同呢? \$\端组\$ 评论 2016年2月29日17:06
  • 4
    \$\开始组\$ @我不同意,你可以在REPL(更换)但你可以将它们写在可以执行的单独“文件”中。它们甚至在调用程序时支持参数,但也可以从stdin或通过提示符读取。 \$\端组\$
    – 鞭子
    评论 2016年3月5日12:55
  • \$\开始组\$ @在84+系列中,他们不能接受参数,并且没有STDIN,只有一个提示。 \$\端组\$ 评论 2016年3月15日16:48
  • 4
    \$\开始组\$ @lirtosiast根据TI 84+官方指南的两个命令输入提示可用。两者都让程序获取用户输入。两者的行为都很像例如。输入()在Python或MATLAB中。 \$\端组\$
    – 鞭子
    评论 2016年3月15日17:59
  • 1
    \$\开始组\$ @我同意他们的相似性;我的意思是,它们显示?提示用户键入内容。 \$\端组\$ 评论 2016年3月15日18:00
  • 1
    \$\开始组\$ @lirtosiast这是个问题吗?我认为许多语言都有表示新输入/新行的符号。 \$\端组\$
    – 亚麻布
    评论 2016年3月15日18:03
  • 1
    \$\开始组\$ @这不是问题。 \$\端组\$ 评论 2016年3月15日18:04
  • 4
    \$\开始组\$ @值得注意的是,至少对于TI-83和-84计算器,你不能在REPL中编写完整的程序。例如输入/提示和循环命令不能从REPL中使用。 \$\端组\$
    – 雅各布
    评论 2017年1月24日16:41
  • \$\开始组\$ 这是否意味着使用_对于Python REPL是否有效? \$\端组\$ 评论 2017年2月9日8:02
  • 2
    \$\开始组\$ @雅各布·康奈尔实际上有一些汇编程序可以让你绕过它 \$\端组\$ 评论 2017年3月27日13:46
39
\$\开始组\$

汇编程序可以从寄存器获取输入

如果没有可用的I/O设备,答案可能包含一个从机器寄存器读取其输入值的子程序。

\$\端组\$
6
  • \$\开始组\$ 存在滥用的可能性。如果有人创建了一台具有一百万个不同专用寄存器的机器,该怎么办? \$\端组\$ 评论 2016年3月15日17:10
  • 8
    \$\开始组\$ @lirtosiast很适合代码colf。我看不出这与带有前缀vars的高尔夫语言有什么不同 \$\端组\$
    – 
    评论 2016年7月6日0:31
  • 2
    \$\开始组\$ @lirtosiast我认为必须在挑战开始之前定义所使用的编程语言。 \$\端组\$ 评论 2016年12月31日21:19
  • 4
    \$\开始组\$ 如果您使用x86-64打高尔夫球,标准调用约定已经在寄存器中传递了参数。所以你可以只写一个普通的函数,它可以从编译器生成的代码中调用。 \$\端组\$ 评论 2017年1月1日7:06
  • 4
    \$\开始组\$ 这需要澄清:我们可以使用任何注册,还是只指定由ABI使用的注册? \$\端组\$
    – 用户62131
    评论 2017年6月11日4:14
  • \$\开始组\$ 调用约定更新:您没有使用标准的C调用约定。您的语言是汇编/机器代码,所以可能这也是调用方的语言。它们可以传递参数并获取任何寄存器中的返回值,包括带有条件代码的机器上的FLAGS,如中所述x86/x64机器代码中的高尔夫技巧 \$\端组\$ 评论 2023年7月21日11:39
36
\$\开始组\$

基于堆栈的语言中的函数可以将输出留在堆栈中

主要是为了完整性。这是CJam和GolfScript以及其他基于堆栈的语言的de-facto标准。

\$\端组\$
8
  • \$\开始组\$ 这也是福斯的工作原理。 \$\端组\$ 评论 2016年8月3日15:18
  • \$\开始组\$ 这是否适用于具有显式IO但没有隐式IO的语言? \$\端组\$
    – 阿达林
    评论 2017年8月5日17:19
  • \$\开始组\$ @扎查尔不知道你是什么意思? \$\端组\$ 评论 2017年8月5日17:21
  • \$\开始组\$ 像Befunge或类似的语言。还是我误解了这类语言中“函数”的概念? \$\端组\$
    – 阿达林
    评论 2017年8月5日17:28
  • \$\开始组\$ @ZacharíBefunge没有功能,所以这个答案不适用。 \$\端组\$ 评论 2017年8月5日18:42
  • \$\开始组\$ 我不同意。我认为,如果隐式输出可用,他们可以将其留在堆栈中。否则无法检查它是否留在堆栈中。 \$\端组\$
    – MD XF
    评论 2017年10月31日16:57
  • 1
    \$\开始组\$ @如果语言对返回值有隐式输出,那么这不等于允许“普通”语言中的函数只使用其返回值吗?否则就无法检查返回值是否具有正确的输出? \$\端组\$ 评论 2017年10月31日17:52
  • \$\开始组\$ 是的,就像BIT++ \$\端组\$
    – 凯佩
    评论 2018年9月15日18:25
35
\$\开始组\$

汇编程序可以将输出写入某些指定的内存位置

如果没有可用的I/O设备,答案可能包括一个将其输出值写入某些指定内存位置的子程序(例如,将机器字写入$0000).

\$\端组\$
2
  • \$\开始组\$ 我认为这包括写入缓冲区以输出多个值。 \$\端组\$
    – 量子阱
    评论 2018年7月12日2:23
  • 1
    \$\开始组\$ 我觉得所有这些类似的帖子都可以组合成类似“如果没有可用的输入/输出设备,程序可能会使用寄存器/变量/内存位置进行输入/输出”这样的内容。这将涵盖具有相同问题的汇编程序、SQL和其他高级语言。 \$\端组\$
    – 12甲21
    评论 2018年12月30日19:00
35
\$\开始组\$

函数可以通过存在或不存在错误/异常返回布尔值

也就是说,崩溃以返回没有冲撞回来真的。这相当于通过退出代码输出的功能,对于完整的程序来说是允许的(如果程序没有崩溃,几乎所有解释器都会默认返回退出代码0,如果程序崩溃,则返回非零)。

我在写一篇关于如何将I/O默认值应用于Brachlog的文章时,意识到这不在列表中;这种输出布尔值的方法在大多数声明性语言中都是惯用的(即,即使我不是的高尔夫球),它在其他范式中仍然有意义(更为罕见,但它被认为是行业中可接受的编程技术,如OCaml语言)。

我不完全相信这是否应该被接受,尽管我目前有点支持(支持的主要观点是,即使你不打高尔夫球,这通常也是最自然的输出方式,并且许多语言都有一个尝试/抓住或等效值,将其转换为常规布尔值;主要的反对意见是,它让人觉得有点廉价/滥用)。然而,我们肯定可以对这是否可以接受做出裁决,因为在许多情况下,这将是编写代码的最短方式,因此这关系到如何编写代码答案已经写好了。

\$\端组\$
6
  • 9
    \$\开始组\$ 这相当于函数的“通过退出代码输出”+我给你一个。 \$\端组\$ 评论 2017年3月29日17:42
  • 8
    \$\开始组\$ 这两种方式都不确定,但这将是Python高尔夫的一个重大变化。特别是,如果一个保持嵌套的递归函数被认为是堆栈溢出错误,这有点奇怪,因为通常假设存在无限的堆栈深度。 \$\端组\$ 评论 2017年3月30日8:58
  • \$\开始组\$ 如果有什么区别的话,我认为这应该只允许在具有某种错误处理方式的语言中使用(通常是try/catch)。否则,不可能在程序中实际使用代码。 \$\端组\$
    – 12甲21
    评论 2018年3月2日2:20
  • \$\开始组\$ @12Me21我读到的“崩溃”与“错误”或“异常”不同,“崩溃”总是不可恢复的。 \$\端组\$
    – Ο尿
    评论 2018年7月30日21:03
  • 2
    \$\开始组\$ 这里是否与我们对功能可重用性的立场相矛盾,即函数提交必须是可重用的吗?是否应允许提交退出并出现错误? \$\端组\$
    – 丁格斯
    评论 2021年10月19日10:57
  • \$\开始组\$ 最近的元讨论扩展了我的上述评论:抛出异常的函数:规则的异常? \$\端组\$
    – 丁格斯
    评论 2022年8月30日13:28
34
\$\开始组\$

单个值的输入和输出可以表示为单个列表

例如,如果值为4,[4]将是可接受的表示形式(使用Python列表语法)。

\$\端组\$
1
  • 5
    \$\开始组\$ 这在J。 \$\端组\$ 评论 2017年4月26日16:51
32
\$\开始组\$

在没有任何输入方法的语言中(例如///),程序可以通过插入源代码来获得输入

\$\端组\$
7
  • \$\开始组\$ @DLosc那么///中需要在末尾更改的代码呢?例如,一个简单的程序,如果字符串的末尾没有句号,则会在那里添加一个句号/.;/;//x///;/。x/(此处输入);哪里x个是一个保证不在输入中的特殊字符(可能是换行符)。 \$\端组\$ 评论 2016年11月20日9:34
  • 10
    \$\开始组\$ 这称为硬编码。 \$\端组\$ 评论 2017年2月28日12:33
  • 1
    \$\开始组\$ @我们能允许支持输入命令的语言进行硬编码输入吗? \$\端组\$
    – 用户85052
    评论 2019年8月25日11:38
  • 1
    \$\开始组\$ 这是一个很好的问题,根据经验我猜不会,但你应该在这里搜索元/问你自己的问题@A类_ \$\端组\$ 评论 2019年8月26日4:05
  • \$\开始组\$ 这包括二维编程语言和/或细胞自动机吗? \$\端组\$ 评论 2020年10月2日20:35
  • 1
    \$\开始组\$ @RedwolfPrograms我很久没有考虑过这个问题了,但我想是的。 \$\端组\$ 评论 2020年10月3日4:30
  • \$\开始组\$ @boboquack我将发布一组单独的答案,因为它看起来差异很大,共识可能会有所不同。感谢您的快速回复! \$\端组\$ 评论 2020年10月3日14:26
31
\$\开始组\$

提交可以使用字符串列表而不是多行字符串

输入或输出可以等效于由换行符分隔的字符串。例如,多行字符串:

12菲兹牌汽车4嗡嗡声

可以将其视为字符串列表,如:

[“1”、“2”、“嘶嘶”、“4”、“嗡嗡”]
\$\端组\$
2
  • 2
    \$\开始组\$ 我总是在多行挑战中看到关于这一点的评论,所以我想我应该把它放在那里,看看它作为一种标准的输入形式是否受到欢迎 \$\端组\$
    – 乔·金 国防部
    评论 2018年11月13日11:54
  • 18
    \$\开始组\$ 我将为添加一个例外ASCII艺术因为换行符可能是这些挑战的重要组成部分。 \$\端组\$ 评论 2018年11月19日19:43

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

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