你能打败我吗?(强盗专区)


43

强盗区

警察部门可以在这里找到。

挑战

您的任务是以相同的语言相同的版本(例如,Python 3.5Python 3.4,所以这是不允许的)使警察提交的文件超越。当以字节为单位的长度比原始提交短时,提交将超出配音。您只需要打高尔夫球至少1个字节即可破解提交。例如,如果任务是执行n,则提交如下:

print(2*input())

您可以通过执行以下操作使警察胜过警察:

print 2*input()

甚至这样(因为允许使用lambda):

lambda x:2*x

使用以下标头将此发布:

##{language name}, <s>{prev byte count}</s> {byte count}, {cop's submission + link}

例如:

Python 2中,16 12个字节,阿德南(+链接提交)

lambda x:2*x

计算A005843,(偏移量= 0)。

在这种情况下,您已经破解了提交。

计分

提交最多的人是获胜者。

规则

  • 破解提交必须使用与警察提交相同的语言。
  • 相同的输入应该导致相同的输出(因此a(2)= 4应该保持4)。
  • 对于Python之类的语言,您可以导入该语言中标准包含的库。(因此,没有numpy / sympy等。)
  • 输入和输出均为十进制(以10为基数)。

注意

挑战完成了。强盗部分的获胜者是feersum。CnR的最终分数如下所示:

  • feersum16条裂缝
  • 丹尼斯12条裂缝
  • 漏尼姑6个裂缝
  • Lynn4条裂缝
  • 英里3条裂缝
  • 马丁·恩德(Martin Ender)2条裂缝
  • Emigna2条裂缝
  • jimmy230131裂缝
  • Sp30001个裂缝
  • randomra1个裂缝
  • alephalpha1个裂缝
  • 妮米1裂缝
  • 可破坏的西瓜1个裂缝
  • Dom Hastings1个裂缝

Answers:


8

切达干酪(Cheddar),7 6字节,Downgoat

(<<)&1

这似乎可行,但是我可能总是无法正确理解该语言。


或者,(**)&2。我尝试2&(**)失败了。:(
丹尼斯

@Dennis (**)&2对我来说效果很好:/但这也可以。
Downgoat

14

果冻54 个字节乔治五世·威廉姆斯

RÆḊḞ

在这里尝试。

隐藏功能!

如果我没记错的话,ÆḊ(A)= sqrt(det(AA T))是n!乘以n 个输入点和m维空间中的原点形成的单纯形的n维Lebesgue测度。当n = 1时,它退化为欧几里得距离。毕竟不是那么奇怪...


1
是的,我对行列式做了一些奇怪的事情……隐藏得如此之深,以至于我自己找不到它!
丹尼斯

@Dennis我知道这一点,因为有一天我也尝试扩展行列式,如果您希望它可以作为交叉产品使用,那就是您得到的。但是花了我很长时间,因为我认为这也可能很奇怪,并且没想到有人会提出同样的事情……
jimmy23013

这些真的可以视为“字节”吗?该代码点当前正在使用UTF-16范围内。这将使该解决方案在假设异构编码的情况下达到6个字节,而在同类编码的情况下达到8个字节。在这里诚实地问。
2013年


11

六角91 33字节,蓝色

1""?{\>{+/</+'+./_'..@'~&/!}'+=($

展开:

    1 " " ?
   { \ > { +
  / < / + ' +
 . / _ ' . . @
  ' ~ & / ! }
   ' + = ( $
    . . . .

在线尝试!

看起来还是可以打高尔夫球的,但我想我会在FryAmTheEggman击败我之前发布它。;)

说明

这是一些用颜色编码的执行路径:

在此处输入图片说明

但是,由于打高尔夫球,这些不必要的麻烦。这是具有更合理布局的完全相同的代码:

在此处输入图片说明

这样更好 最后,这是一个内存图,其中红色箭头指示内存指针(MP)的初始位置和方向:

在此处输入图片说明

要点是,我要在标记为f(i)f(i + 1)f(i + 2)的三个边缘上迭代计算斐波那契数,同时要跟踪边缘ABC上的迭代器。这样做时,这些边缘的角色在每次迭代后会周期性地交换出去。让我们看看这是怎么回事...

代码从执行一些初始设置的灰色路径开始。请注意,f(i)已经具有正确的初始值0

1   Set edge f(i+1) to 1.
""  Move the MP to edge A.
?   Read input n into edge A.
)   Increment n.

现在,绿色路径是主循环。_>只是镜子。

(     Decrement n.
<     If the result is zero or less, continue on the red path, otherwise
      perform another iteration of the main loop.
{     Move the MP to edge f(i+2).
+     Add edges f(i) and f(i+1) into this edge, computing the next Fibonacci number.
'     Move the MP to the edge opposite A.
~     Multiply by -1 to ensure that it's non-positive (the edge may have a positive
      value after a few iterations).
&     Copy the current value of n from A.
'     Move back and to the right again.
+     Copy n by adding it to zero. Since we know that the other adjacent edge
      is always zero, we no longer need to use ~&.
'+'+  Repeat the process twice, moving n all the way from A to B.
=     Reverse the orientation of the MP so that it points at f(i) which now
      becomes f(i+2) for the next iteration.

这样,MP会在边的内部三元组周围移动,计算连续的斐波那契数,直到n达到零。然后最后执行红色路径:

{}    Move the MP to f(i).
!     Print it.
@     Terminate the program.

用Timwi的HexagonyColorerEsotericIDE生成的图。


天啊!我本来希望被您打败,但我却没被打那么多!0.o
蓝色,

@Blue您打算为您的内容添加说明吗?我会对那是如何工作感兴趣。:)迟早我都会对此做一个解释,但是我不确定今天是否会找到时间。
Martin Ender

是的,我使用的是更传统的计算方法。我完全忘了和,这可以挽救一些字节


7

叠猫,14 13字节,feersum

^]T{_+:}_

带有-nm+4个字节的标志。 在线尝试!

好吧,那个循环真是疯狂。我尝试了几种方法,例如对简化后的字母进行强行强制和强制扩展,3x+2或者5x+4尝试对其进行扩展,但是我从未期望解决方案实际上包含一个循环。

观察其工作方式的最佳方法是添加一个D调试标志(使用来运行-nmD)并为上述TIO链接打开调试功能。一{}环记得堆的循环开始的顶部,并退出时堆栈的顶部是再次证明价值。循环的内部对堆栈的前三个元素进行减法和循环操作很有趣,这就是循环如何运行如此多次迭代的方式。


6

Sesos,14个 11字节,Leaky Nun

计算n 2在这里尝试。

十六进制转储:

0000000: 16c0f7 959d9b 26e83e ce3d                         ......&.>.=

从组装:

set numin
set numout
get
jmp
  jmp, sub 1, fwd 1, add 1, fwd 1, add 2, rwd 2, jnz
  fwd 2, sub 1
  rwd 1, sub 1
  jmp, sub 1, rwd 1, add 1, fwd 1, jnz
  rwd 1
jnz
fwd 2
put

不错,您比我最初的高尔夫版本还要矮。
Leaky Nun

它用于计算1 + 3 + … + (2n–1)的,而不是n × n:)
林恩

我还用你的方法
漏尼姑

6

令人遗憾,776个 759字节,可破坏西瓜

| |||||||| | |
|| |||||| |
||| |||| |
|||| || |
||||| || |
|||| |||| |
||| |||||| |
|| |||||||| |
| |||||||||| |
|| |||||||| |
||| ||||||| |
||||||||||| |
||||||||||| |
||||||||||| |
||||||||||| |
|||||||||| |
||||||||| |
||||||||| |
||||||||| |
||||||||| |
|||||||||| |
||||||||||| |
|||||||||||| |
||||||||||| |
|||||||||| |
||||||||| |
|||||||| |
||||||| |
|||||| |
||||| |
|||| |
||| |
|| |
| |
| |
| |
|| |
|| |
|| |
|| |
|| |
| |
| |
| |
|| |
||| |
|||| |
||||| |
|||||| |
||||||| |
|||||| |
||||||| |
|||||||| |
||||||||| |
|||||||||| |
||||||||||| |
|||||||||||| |
||||||||||| |
|||||||||| |
||||||||| |
|||||||| |
||||||| |
|||||| |
||||| |
|||| |
||| |
|| |
| |
| |
| |
| |
|| |
| |
|| |
||| |
||| |
|||| |
||| |
|| |
| |
| |
| |
|| |
|| |
|| |
|| |

我试图阅读该语言的源代码,但是太混乱了。一方面,ip[1]行号ip[0]是列号,而cp坐标是另一种方式。但是,有时的值cp被分配给ip。我放弃了试图了解程序在做什么的想法,找到了一种使用更少的小节对相同指令序列进行编码的方法。



5

J,17 12字节,英里

+/@(]!2*-)i:

与原来的高尔夫几乎相同。:)

i:与之+1相比具有范围i.是有用的(而且很奇怪)。如果i.在这里使用n=0将是不正确的,但幸运的是i:可以解决。

在这里在线尝试。


i:零值时为零的巧妙技巧。我的版本是+/@(]!2*-)i.,]
英里

5

M,10 6个字节,Dennis

R×\³¡Ṫ

鉴于ñ,它计算ñ -电平的阶乘ñ。这是一个有趣的练习!

该代码能够像Jelly一样运行,因此您可以在线尝试

说明

R×\³¡Ṫ  Input: n
R       Create the range [1, 2, ..., n]
   ³¡   Repeat n times starting with that range
 ×\       Find the cumulative products
     Ṫ  Get the last value in the list
        Return implicitly


5

Haskell,15个 14字节,xnor

until odd succ

我花了几个小时的徒劳学习解密“毫无意义的”语法…… until我发现了这一点。

或者,对于不太灵活的13个字节,until odd(+1)


做得好,这就是我的想法。我喜欢这三个词。
xnor

4

Python 2中,43 40,xsot

g=lambda n:n<2or-~sum(map(g,range(n)))/3

有趣的是,这与我最初的想法不同。
xsot

4

派克(Pyke),11个 9字节,泥泞的鱼

hVoeX*oe+

在这里尝试!

这个怎么运作

          Implicit input: n (accumulator), n (iterations)
h         Increment the number of iterations.
 V        Do the following n + 1 times.
  o         Iterator. Pushes its value (initially 0) and increments it.
   e        Perform integer division by 2.
            This pushes 0 the first time, then 1, then 2, etc.
    X       Square the result.
     *      Multiply the accumulator and the result.
      oe    As before.
        +   Add the result to the accumulator.
            This sets the accumulator to a(0) = 0 in the first iteration and
            applies the recursive formula in all subsequent ones.

使用该方法,您可以得到8 hV~oX*o+。我的5个字节的答案是SDmX^
蓝色

啊,~o很整洁。我不知道该怎么办SDmX^
丹尼斯,

它基本上在1索引范围和平方之间使用混合基础会话。OEIS上没有任何内容
蓝色

哦,m只会影响X而不影响^?这解释了很多。
丹尼斯

是的,m类似的只使用下一个节点。对我的文档有何评论?
2016年

4

05AB1E7 4,Emigna

LnOx

从正整数平方和的公式1 ^ 2 + 2 ^ 2 + 3 ^ 2 + ... + n ^ 2 = n(n + 1)(2 * n + 1)/ 6双方乘以2,我们得出Sum_ {k = 0..n} 2 * k ^ 2 = n(n + 1)(2 * n + 1)/ 3,这是该序列的替代公式。-Mike Warburton(mikewarb(AT)gmail.com),2007年9月8日


我很高兴您在4点破解了它,因为我错过了我的公开版本的微不足道的修改。真好!
Emigna'8

4

果冻,22 21字节,丹尼斯

_²×c×Ḥc¥@÷⁸÷’{S
‘µR+ç

我花了几个小时阅读最后一个的Jelly源代码,因此不妨使用这种“技巧”。我希望@Dennis将与我们分享他的数学发现,从而允许使用更短的公式(假设存在某些东西,而不仅仅是怪异的Jelly技巧!)。


为了进行比较,我有:''Ḥc_×c @ +¥\nr0ç@€:'+ \ S
Sp3000,2016年

@ Sp3000哦,那你为什么不张贴它?
feersum

丹尼斯在M:P
Sp3000上重新

4

J,20 19字节,英里

[:+/2^~+/@(!|.)\@i.

这将乘积作为平方的斐波纳契数之和来计算,该平方和被作为二项式系数之和来计算。

值得庆幸的是,@ miles本人在此注释中发布了用于生成斐波那契数的代码。


4

加速!526个 525字节,DLosc

N
Count x while _%60-46 {
(_+_%60*5-288)*10+N
}
_/60
Count i while _/27^i {
_+27^i*(_/27^i*26-18)
}
_*3+93
Count i while _/27^i/27%3 {
_-i%2*2+1
Count j while _/3^(3*j+2-i%2)%3 {
_+3^(1+i%2)
Count k while _/3^(3*k+1+i%2)%3-1 {
_+3^(3*k+1+i%2)*26
}
}
}
Count i while _/27^i/3 {
_-_/27^i/3%27*27^i*3+_/3^(3*i+1+_%3)%3*3
}
_/3
Count i while _/100^i {
_*10-(_%100^i)*9
}
Count i while _/100^i/10 {
_+_/100^i/10%10
Count j while i+1-j {
_+(_%10-_/100^(j+1)%10)*(100^(j+1)-1)
}
}
_/100
Count j while _/100^j {
Write _/100^j%10+48
}

我不知道这是如何工作的,但是我发现了一点改进。

24c24
< _+_/100^i*100^i*9
---
> _*10-(_%100^i)*9

啊,开枪。我希望没有人能错过我错过的数学高尔夫。+1
DLosc '16

4

Haskell,10个字节,xnor

gcd=<<(2^)

用法示例:map ( gcd=<<(2^) ) [1..17]-> [1,2,1,4,1,2,1,8,1,2,1,4,1,2,1,16,1]

工作原理:在oeis页面上,我们可以看到它a(n) = gcd(2^n, n)或使用Haskell语法编写:a n = gcd (2^n) n。带有模式的函数f x = g (h x) x可以通过function =<<:转换为无点f = g =<< h,因此gcd=<<(2^)转换为gcd (2^x) x


...............怎么
TuxCrafting





3

MATL,11个10字节,Luis Mendo

YftdAwg_p*

而不是执行-1 ^ length(array),而是将元素转换为布尔值(始终为1),取反并取元素的乘积。




3

Brachylog,11个10字节,致命

yb:AcLrLc.

在线尝试!

说明

Brachylog是Prolog衍生的语言,其最大的能力就是证明事物。

在这里,我们证明这些陈述:

yb:AcLrLc.
yb:AcL       Inclusive range from 1 to input, concatenated with A, gives L
     LrL     L reversed is still L
       Lc.   L concatenated is output

这完全是我想到的答案,做得好!
致命

3

果冻,9个 8字节,丹尼斯

œċr0$L€Ḅ

抱歉! 我找不到您想要的解决方案。

这取决于事实,C(n+k-1, k)即通过替换选择k值的方法很多n

注意:这是低效率的,因为它会生成可能的集合以对其进行计数,因此请避免在线使用较大的n值。

在线尝试最多验证n个

后来,我发现了另一个8字节版本,该版本足以计算n =1000。这使用二项式系数来计算值,并避免生成列表。

Ḷ+c’Ṛ;1Ḅ

在线尝试最多验证n个

说明

œċr0$L€Ḅ  Input: n
  r0$     Create a range [n, n-1, ..., 0]
œċ        Create all combinations with replacement for
          (n, n), (n, n-1), ..., (n, 0)
     L€   Find the length of each
       Ḅ  Convert it from binary to decimal and return

Ḷ+c’Ṛ;1Ḅ  Input: n
Ḷ         Creates the range [0, 1, ..., n-1]
 +        Add n to each in that range
   ’      Get n-1
  c       Compute the binomial coefficients between each
    Ṛ     Reverse the values
     ;1   Append 1 to it
       Ḅ  Convert it from binary to decimal and return


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.