选择高尔夫语言[关闭]


28

选择正确的高尔夫语言有哪些技巧?哪些因素影响选择的语言?

以下是一些示例问题类型:

  • 需要I / O解决方案(控制台或文件)的问题
  • 需要解析的问题
  • 需要您将解决方案作为函数定义编写的问题
  • 数学问题
  • 处理质数时出现问题
  • 解决数字难题
  • 执行数值方法
  • 字符串处理
  • 数组处理
  • 棘手的2D阵列问题
  • 计算几何
  • 递归
  • 2D图形
  • 3D图形
  • 音讯
  • 网络/网络
  • 并行处理

不要仅仅因为喜欢而说“ Use GolfScript | J”之类的话。


对于某些问题,它是类型系统。例如,如果您需要处理大于64位的整数,则需要内置的语言(例如Golfscript,Haskell)而不是使它们昂贵的语言(例如Java)。
彼得·泰勒,

按照我们有关“提示”类型问题的政策,我已将此网站设为Wiki。
dmckee 2011年

如果您需要以特定字母开头的语言,则99瓶很有帮助...
Jesse Millikan

对于ace,trimmsty,algorithmhark和hosch250表示感谢,以帮助使该线程成为更好的资源。请继续提交意见!这在Algorithmshark和hosch250之间是一个艰难的悬赏电话,他们俩都付出了大量的努力,但最终,Shark Shark得到了领导的认可。
Jonathan Van Matre 2014年

选择您想要的任何语言。这也是一个竞争的语言。用更多语言提供更独特,有趣的解决方案是很好的。
Mego

Answers:


-1

根据需要,C / C ++很快,但是您必须自己编写更多的代码。Python和Ruby的速度较慢,但​​使用内置方法的代码更容易编写,这些方法缩短了很多工作,并且它们自动处理无限大的值(如果有RAM)。如果可以以这种方式构造问题,则使用Haskell这样的函数式语言非常适合纯粹的数学函数式使用。


2
作为主要的python用户,在Py中,您需要为字符计数的易用性付费,尽管有一些真正的技巧可以节省字符。Haskel和Lisp虽然很有趣,但是它们的运行时间甚至比Python还长。
2011年

这可能不应该是公认的答案。有关高级语言与低级语言的描述实际上与字符数无关。
Samy Bencherif '17

是的,在2011年回答2017年2月23日编辑的问题是很公平的。也许我们在回答完问题后应该停止更改这些问题?
ewanm89

10

投入我的两分钱 数组编程语言(尤其是JAPL)上。

K / Kona,Q和Nial也属于此类,但他们通常有相同的好处和批评。谨慎使用。我将在下面使用J例子,主要是因为它们是ASCII,因此易于键入-请记住,APL字符算作单个字节,所以不要将其作为打高尔夫球的语言的问题。

  • 数学问题
  • 解决数字难题
  • 执行数值方法
  • 棘手的2D阵列问题

这两种都是非常好的数学和数据处理语言,因为它们在较高的层次上折腾数组,并且很多循环是隐式完成的,例如,将3、4和5(10 + 3 4 5)分别加10 或求和数组的行(+/"1 arr-循环在中"1)。

  • 处理质数时出现问题

特别是在质数问题上,J和APL的某些方言一样,J具有快速且简短的内置基元。(编辑:我想到的是Nars2000,它是部分方言,部分是完全不同的实现。APL没有内置的质数。)第N个质数(p:),不。最多(_1&p:),因数(q:),GCD和LCM(+.*.),依此类推,那里有很多。但是,在实践中,该问题通常会指定您必须自己编写主要的实现,因此这些使用不会太多。仍然有整洁而奇特的方式来获取所需的主要东西,它的剪切和粘贴变少了。

  • 字符串处理
  • 数组处理

数组和字符串处理有点复杂:如果APL / J擅长于此或者具有原始的或惯用的习语,那么这几乎是微不足道的。如果这是非常顺序的并且不是很可并行化的,那么您将经历一段糟糕的时光。两者之间的任何事情都悬而未决,尽管通常他们会做出积极响应。

  • 需要I / O解决方案(控制台或文件)的问题
  • 需要您将解决方案作为函数定义编写的问题

IO很奇怪。APL有一个单字符输入表达式,但是使用J时,您至少要花费8才能读取一个数字:".1!:1]1。输出的详细程度稍差一些,但实际上,您仍在浪费6或7个字符。如果您可以将输入作为函数的参数,而不必费解IO本身,那么J特别喜欢它。

实际上,对于J和APL,通常将解决方案编写为您在控制台上调用的函数。使用APL,您基本上可以只为变量输入变量名,并用花括号将要使用的表达式包装起来,然后将其命名为day。

但是使用J时,显式定义函数会产生一些开销- 3 :'...'并且您必须转义其中的任何字符串-因此通常要做的是所谓的默认编程:您可以在函数级别进行编程,以一种方式组合基元和Haskell一样。这既是福也是祸,因为您不必花费太多的字符来引用您的论点,但是很容易淹没在括号中并最终失去了数十个字符,从而试图将您本来简短而又聪明的解决方案改编为有用的东西。

  • 需要解析的问题
  • 计算几何

我没有打高尔夫球这些特定问题的经验,但是我会这样说:最后,数组编程语言非常擅长以相同的方式进行管道传输和转换大量数据。如果您可以将问题转变为号码改组的练习,则可以使其成为APL / J问题,不费吹灰之力。

就是说,并非所有问题都是APL / J问题。与Golfscript不同,APL和J恰好对打高尔夫球有好处,还有其他好处;)


贡献卓越!感谢您成为第一个进入泳池的人。
Jonathan Van Matre 2014年

4

为什么还没有称赞Perl?这是一种出色的高尔夫语言,几乎适用于所有这些语言,尤其是与弦有关的东西(正则表达式)。

Burlesque适用于与数字相关的程序,而Ruby适用于更简单的文本操作。

实际上,有语言和高尔夫分数列表在这里


我不了解Perl,但我同意。
ckjbgames

2

我喜欢使用晦涩的编程语言来(尝试)完成工作。

这是我列出的详细信息的我的最爱:

需要I / O解决方案(控制台或文件)的问题

TI-Basic之类的语言可以很好地工作,但是我更喜欢Ruby,因为puts

需要解析的问题

GolfScript一定会在这里为您提供帮助

需要您将解决方案作为函数定义编写的问题

TI-84表 -允许函数,Y=例如Y=|X|返回X的绝对值

数学问题

TI-Basic-专为计算器而设计,因此它包括数学;)

处理质数时出现问题

没什么特别的; Mathematica可能是工作的正确工具

解决数字难题

TI-Basic自动循环遍历数组

执行数值方法

TI基本Mathematica

字符串处理

Python-有一些很棒的字符串函数。

无论您认为TI-Basic多么出色,都不要将它用于字符串...

数组处理

TI-基础 - 通过阵列自动循环 ; 例如增加数组中的所有值-L1+1→L1

Ruby-也具有非常强大的数组功能,当然这!也将有助于压缩代码

棘手的2D阵列问题

RubyPython在这里效果最好,因为TI-Basic不支持2D数组

计算几何

TI-Basic具有几何特征,可用于大多数数学,包括微积分和线性代数


奖金

循环播放

无论是Arduino的QuomplexArduino具有内置功能void loop(){}Quomplex具有括号包含的无限循环([]

绘图/ GUI

Game Maker语言具有非常强大的绘图功能,并且由于支持在图形上绘图,因此 TI-Basic也是通用的有用工具。

奎因

要么HQ9 +Quomplex因为HQ9 +具有Q输出程序的源代码和Quomplex除非将自动打印出它的源代码*(输出)被指定,或者它不产生输出,具有限定#


2

如果您正在解决数学问题并且没有Mathematica,请尝试Sage。它基于Python,因此,如果您已经了解Python,则不需要太多时间来学习其语法。

例子:

它对图形绘制和方程式求解也很有用(例如,您可以solve()在Sage中使用该函数,或者如果规则禁止使用该函数,则它可以轻松实现Newton Raphson流程,因为它具有diff()可以执行符号微分的功能) 。

此外,如果您是Python2程序员,那么使用Sage可能会跳过长import语句而作弊。例如,math并且sys默认情况下已导入。(请注意,如果您的Python2程序依赖整数除法,则此方法可能不起作用。)


好信息!感谢您的贡献。
乔纳森·范·马特雷

1

我知道三种语言-Java,C ++和Python3。我不熟悉它们,但这是我的使用经验。

Java:

我再也不会用Java打高尔夫球了。仅需写80个字符Hello World!。但是,它确实有其优势:

输入需要创建一个Scanner对象。输入单个字符很困难。它要求指定您要输入的类型。
由于for循环,解析非常简单。增强的for循环对此非常有用。
Java支持方法,但是方法声明很长。
Java和其他所有高级语言在数学方面都很出色。
当问题涉及修改字符串时,将很难使用Java。您不能对现有字符串进行修改。
Java的数组易于使用。
Java擅长递归。
Java包含内置图形。它们非常易于使用。

C ++

C ++是一门非常强大的语言,但是当尝试以56个字符打高尔夫球时,它会有些冗长Hello world!

输入和输出都很容易。您无需指定要输入的类型-这是自动完成的。但是,您必须包括iostream库。
解析非常容易。
函数声明很简单,但是却吃了很多重要的字符。C ++擅长数学,但不像Java那样包含PI或E。
C ++的字符串易于使用,并可根据需要进行更改。
vector尽可能使用s代替arrays,但是两者都很容易使用。
C ++擅长递归。
C ++不包括内置图形。

Python 3

Python 3与C ++和Java类似。因为它不是强类型的,所以它要短得多-换句话说,它只是猜测变量是什么。

输入很容易,但是所有内容都以字符串形式输入。您必须手动将所有输入转换为所需的任何值。
解析和循环非常简单。
Python函数声明非常简单且简短。
Python擅长数学。
Python的字符串易于使用。
数组易于使用。
Python擅长递归。
Python不包含内置图形。


我想通过增强的for循环,您正在谈论范围for循环。自C ++ 11(en.cppreference.com/w/cpp/language/range-for)开始,C ++就支持此功能。它在语法上类似于Java for-range循环,并且需要可迭代对象的类实现begin()和end()或begin(T)和end(T)的给定对象进行重载。它还为C风格的字符串和内置数组实现,并适用于所有标准库容器。
foob​​ar 2014年

@foobar是的,我在谈论那个。感谢您提供的信息,自从上Java以来​​,我一直希望如此。
Hosch250 2014年

Java现在有一个61字节的解决方案,但您的观点仍然成立。
MilkyWay90
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.