首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日本打高尔夫球的技巧

日本打高尔夫球的技巧
EN

Code Golf用户
提问于 2017-05-17 21:04:28
回答 12查看 2.2K关注 0票数 23

现在我对Code完全上瘾了,也许是时候学几种高尔夫语言了。

考虑到我几乎只使用JavaScript,杰夫特似乎是一种逻辑语言。我将在下一次获得的机会上深入研究这些文档,但是,在此期间,请在下面的答案中发布您对but的任何提示。

由于我是日本语和高尔夫语言的初学者,如果你能在可能的情况下将你的技巧“翻译”到JavaScript,那将是帮助我处理事情的一个很大的帮助。

EN

回答 12

Code Golf用户

回答已采纳

发布于 2017-05-18 00:25:54

从JavaScript到Japt

正如您可能知道的那样,Japt只是JavaScript的一个简短的扩展版本。我创建Japt是因为我厌倦了像String.fromCharCode(x)Math.floor(x)这样的长属性名称,也厌倦了做诸如创建一个范围之类的单调乏味的事情。下面是您从JavaScript到Japt时需要知道的最低要求:

  • JS是一种被转移的语言;JS代码被转换到JavaScript,然后以JS的形式运行。(我想你可以说是编好了,但转写听起来更时髦。免责声明:我对自己是潮人一无所知)
  • 默认情况下,所有条目都是完整的程序。输入被隐式解析,前六个输入被放入变量UVWXYZ;完整的数组存储在N中。最后一个表达式的结果会自动打印出来。
  • 所有大写字母都是变量,在转换时保持不变。大多数都有预设值,您可以在Japt文档的“变量”部分(在翻译员上)找到这些值。
  • 所有小写字母都是原型函数或方法。Japt在数字、字符串和数组上添加a-z (和à-ÿ)方法。当您使用这些字母之一时,Japt填充.(;Japt中的Uc等同于JavaScript中的U.c(,这可能意味着ceil、charCodeAt或concat,这取决于U的类型。这是Japt的大部分功能来源;您可以在Japt文档的"_____函数“部分(在翻译员上)找到这些方法的完整列表。
  • 空格表示))表示))。这是因为当我第一次设计Japt的时候,我想尽可能多地保存字节,这就是我第一次想到这样做的方式。(尽管Us w n确实比Us)w)n)好看,但IMHO。)
  • 函数被表示为ABC{...},其中ABC可以是任何变量字符串。函数在很大程度上像在JS中一样工作,主要的区别是自动返回最后一个表达式(而不必使用return或花哨的ES6括号)。
  • '表示单个字符字符串(即'a"a"相同),#接受下一个字符代码并成为该数字(#e101相同)。
  • 美元符号之间的任何东西,$在转移溢出过程中都保持不变。例如,您可以使用它来实现for循环,因为but没有这些循环,但是我建议使用其他方法(例如字符串和数组上的m,或者数字上的o )。
  • JS中常用的大多数其他字符-- ""0-9(+=等等--在转移时保持不变(至少在大多数情况下)。

这就是编写基本Japt代码所需的全部知识。在日本获得最大的高尔夫力量需要更多的知识,但这可以在其他答案中找到。

下面是一个基本的例子。假设您需要一个ASCII字符字符串,并将每个字符替换为十六进制字符代码。下面是如何在JavaScript中这样做的:

代码语言:javascript
复制
U.split("").map(x=>x.charCodeAt(0).toString(16)).join("")

现在皈依到杰夫特。JS中的.split("")相当于JS中的q"",甚至更短的JS中的q.join("")也只是q,区别在于对象是数组而不是字符串。.map(m.charCodeAt(c.toString(s。所以我们的our代码看起来可能是:

代码语言:javascript
复制
Uq mX{Xc0 s16} q 

但是,在Japt中,m对字符串的工作效果和对数组的工作一样好,因此我们可以删除两个qs:

代码语言:javascript
复制
UmX{Xc0 s16}

正如您在"JS代码“框中看到的那样,在线测试!直接转到:

代码语言:javascript
复制
U.m(function(X){return X.c(0).s(16)})

当您学习使用Japt时,您将变得越来越不专注于从JavaScript来回转换,并且能够以Japt作为自己的语言进行编码。以下是一个完全省略JavaScript部分的解释:

代码语言:javascript
复制
UmX{Xc0 s16}
               // Implicit: U = input string
UmX{       }   // Take U, and replace each character X with the result of this function:
    Xc0        //   Take the char-code at index 0 in X (the first and only one).
        s16    //   Convert this to a hexadecimal string.
               // Implicit: output result of last expression
票数 12
EN

Code Golf用户

发布于 2017-09-13 15:02:38

压缩字符串数组

更新:本技巧中的工具已经被重写、改进并集成到我的Japt翻译中。为了获得最好的结果,建议您使用该压缩机,而不是下面链接的任何一个。当我有更多的时间时,我将重新讨论这个技巧,并在考虑新的压缩器的情况下重写它。

Introduction

如果您的代码中有一个字符串数组,那么最明显的压缩方法就是分别对把每一个字符串都穿过去Oc进行压缩。为了本技巧文章的目的,我们将使用数组["lollipop","marshmallow","nougat","oreo"],它最初的重量为42字节。通过Oc运行每个字符串将给我们提供如下信息:

代码语言:javascript
复制
[`lo¥ipop`,`Ú\hÚaow`,`Í`,`eo`]

现在是33个字节,这是一个不错的节省。

步骤1

但是我们可以做得更好。如果我们将数组加入到一个以换行符分隔的字符串中,则可以去掉括号、逗号和无关的回标,然后在换行符上拆分以获得数组。将其应用到示例数组中,我们将得到以下内容:

代码语言:javascript
复制
`lo¥ipop
Ú\hÚaow
Í
eo`·

现在降到26个字节。

步骤2

但是,我们还能做得更好!我们可以使用小写字母来分隔字符串,而不是换行符,这可能包含在压缩中。z在我们的任何字符串中都没有使用,所以让我们把它放进去,看看我们是如何处理的。

代码语言:javascript
复制
`lo¥ipopzÚ\hÚaowzÍzeo`qz

啊,胡说八道--没有改进,我们的字节数增加了一倍!您可能还可以使用另一个字母,但取决于您的字符串,可能会有相当多的字母需要尝试--在我们的示例中,有11:b,c,d,f,j,k,q,v,x,y,z。尝试每个字符串都会非常繁琐,这就是这个方便的工具引入的地方;将换行符分隔为字符串,它将尝试用每个字母分隔字符串,而每个字母都不包含在字符串和输出中:

  • 最短的压缩字符串,
  • 它使用的分隔符,以及
  • 它的长度。

通过运行示例字符串,可以看到b提供了最好的结果:

代码语言:javascript
复制
`lo¥ipáæqrÚaowbÍÞo`qb

在这里,我们只剩下24个字节。

步骤3

但是,我们可以做得更好!如果数组中的字符串顺序不重要,那么可能会有一个不同的排列,加上一个不同的分隔符,可以计算出更短的时间。不过,尝试每一种可能性都会更加乏味。用我们的4个字符串,有24个不同的排列尝试。与每11个可能的字母成为264!这就是这个工具发挥作用的地方。同样,将新行分隔的字符串提供给它,它将尝试每个置换和每一个分隔字母的每一个组合,输出:

  • 最短压缩字符串中字符串的顺序,
  • 压缩的字符串,
  • 它使用的分隔符,以及,
  • 它的长度。

通过运行示例字符串,可以看到以"nougat","oreo","lollipop","marshmallow"作为分隔符的b提供了最好的结果,最终字节数仅为23:

代码语言:javascript
复制
`ÍÞo½o¥ipáæqrÚaow`qb

加值提示:整数数组压缩

通过首先将每个整数转换为更高的基,可以将相同的原则应用于整数数组。使用此示例,36个字节数组:

代码语言:javascript
复制
[588181,156859,595676,475330,680474]

我们可以通过首先将其转换为一个由32条基本字符串组成的数组,然后通过第一个压缩程序运行它,从而将其压缩到29个字节:

代码语言:javascript
复制
`huclt4p5r5ÛÊg62tkogq`qt mnH

或低至27个字节使用第二个程序:

代码语言:javascript
复制
`4p5Ïcl5ÛÊg62tkogq`qt mnH

通过将整数转换移动到已经在数组上运行的方法,您可能可以在上面保存另一个字节或2个字节。

Notes

  1. 不要忘记考虑q<letter>(<space>)·多花费的1到2个字节。尽管如此,您可能可以使用其中一个Unicode快捷键获得一个字节返回,这取决于您的分隔符(例如,ql<space>相同)。
  2. 在使用最后一个工具时要注意一点:你拥有的字符串越多,就会有越多的排列,程序运行得越慢,直到最终退出。如前所述,我们的4个示例字符串和11个可能的字母尝试,有264种可能的组合,增加字符串的数目仅1与相同的11个字母,我们已经有1320个组合尝试。(如果需要,可以使用这个工具来计算组合的数量)。

Credits

  • 奥利弗的灵感来源于创作本技巧中的工具。
  • ETHproductions用于校对。
票数 8
EN

Code Golf用户

发布于 2017-05-17 22:14:59

压缩字符串

Japt (当前)使用激波库进行字符串压缩。您可以使用Oc压缩任意字符串,只要它包含小写字母的运行:

代码语言:javascript
复制
Oc"Hello, World!"

这输出 HÁM, WŽld! (从技术上讲,Ž是一个不可打印的字符)。您可以通过将它封装在后面来解压它:

代码语言:javascript
复制
`HÁM, WŽld!`

在线测试!

或者,您可以使用Od函数解压缩任意字符串。这通常没什么用,但是它有它的目的.

票数 7
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/121253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档