攻击九头蛇


15

这次您不是一个能够杀死九头蛇的熟练战士(请参阅此处此处),而是您是一个不了解如何杀死一种生物或使用哪种武器对付该生物的战士。

在这个问题上,每当切断一个头时,两个头就会在同一位置长出。由于您没有同时切断许多头的机制,因此头的数量只会增加。在这种情况下,我们的Hydra可以从N(N⩾1)个头开始。让我们将第一个遇到的世代称为世代,我们将来自第一世代的头像表示为0,将第一次打击后创建的头像表示为1,依此类推。

输入值

您将得到一个整数,该整数N表示Hydra最初具有多少个头,以及一个N包含要在其中使用哪个索引的大小列表(在示例中,我将使用0索引格式)。您始终可以假设给定的索引是有效的-请记住,列表(即:heads)会随着您削减heads而增长。

输入N = 4[0,4,2,5]

第0代-攻击指数0

0 0 0 0     =>     1 1 0 0 0
^                  ^ ^

第1代-攻击指数4

1 1 0 0 0     =>     1 1 0 0 2 2
        ^                    ^ ^

第2代-攻击指数2

1 1 0 0 2 2     =>     1 1 3 3 0 2 2
    ^                      ^ ^

第三代-攻击指数5

1 1 3 3 0 2 2     =>     1 1 3 3 0 4 4 2
          ^                        ^ ^

上一代

1 1 3 3 0 4 4 2

如您所见,给定的索引与上一代的列表有关。

输出量

您需要输出最后一代。

测试用例

N = 1 and [0] => [1,1]
N = 2 and [0,0] => [2,2,1,0]
N = 2 and [0,1] => [1,2,2,0]
N = 2 and [1,0] => [2,2,1,1]
N = 2 and [1,1] => [0,2,2,1]
N = 4 and [0,4,2,5] => [1,1,3,3,0,4,4,2]
N = 6 and [0,0,0,0,0,0] => [6, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0]
N = 6 and [5,6,7,8,9,10] => [0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 6]
N = 10 and [1,7,3,12,9,0,15,2,2,10] => [6, 6, 9, 9, 8, 1, 3, 3, 0, 0, 10, 10, 2, 5, 5, 0, 0, 4, 7, 7]

这是所以最短答案以字节为单位!



需要一个测试案例,该案例的初始头数大于被切除的头数。我认为我至少看到了一个当前的答案,但在这种情况下失败了。
Xcali

@Xcali实际上保证要切除的头数等于初始的头数:您将得到一个整数N(...)和一个大小列表N(但是当我第一次阅读时,我也错过了该部分)挑战。)因此,N这根本没用。
阿纳尔德

3
我考虑过实际上N从输入中删除的内容,因为它是作为数组的大小“隐式”给出的。但是,我认为这些解决方案将通过提供N而不是依靠array.size()或类似的方式节省字节。
ihavenoidea

1
棒漫画的相关顺序(+下一个)。
圣保罗Ebermann

Answers:




5

Stax12 11 字节

î╓≡╧▄#¥oWä)A

在staxlang.xyz上运行并调试它!

感谢递归节省了一个字节!

解压缩(13字节)和说明:

z),{i^c\&:fFm
z)               Push initial array of zeroes to stack
  ,              Push array of attacks to stack
   {       F     For each attack, push it and then:
    i^c\           Push [x,x], where x is the generation number
        &          Set the head at the attack index to this new array
         :f        Flatten
            m    Print the last generation

挑战明确表示“必须输出最后一代”,所以我猜想这种共识在这里不成立。如果是这样,可以通过将结果保留在否则为空的堆栈中来管理十个字节

z),Fi^c\&:f

1
0]*可以替换为z)。编辑:显然,这是未记录的行为,但是pad-left以任一顺序获取其操作数。(npm哈哈)
递归

1
@recursive无证行为是最好的行为方式:)
Khuldraeseth na'Barya

5

Haskell63 57字节

foldl(\y(x,n)->take n y++x:x:drop(n+1)y).(0<$)<*>zip[1..]

在线尝试!


take并且drop比短splitAt。谈到g为lambda节省了另一个字节:foldl(\y(x,n)->take n y++x:x:drop(n+1)y).(0<$)<*>zip[1..]
nimi

很好-我同时尝试了这两种方法,但由于某种原因,我仅尝试使它变得g毫无意义,而且情况变得更糟。
B. Mehta,

4

Oracle SQL,325字节

select listagg(ascii(substr(l,level,1)),', ')within group(order by level)
from(select * from t
model dimension by(1 i)measures(l,r)
rules iterate(1e5)until(r[1]is null)
(l[1]=regexp_replace(l[1],'.',chr(:n-length(r[1])+1)||chr(:n-length(r[1])+1),1,ascii(substr(r[1],1,1))+1),r[1]=substr(r[1],2)))
connect by level<=length(l);

在SQL * Plus中进行测试。

SQL> set heading off
SQL>
SQL> create table t(l varchar2(4000), r varchar2(4000));

Table created.

SQL>
SQL> var n number;
SQL> exec :n := 10;

PL/SQL procedure successfully completed.

SQL>
SQL> insert into t
  2  values(rpad(chr(0),:n,chr(0)), chr(1)||chr(7)||chr(3)||chr(12)||chr(9)||chr(0)||chr(15)||chr(2)||chr(2)||chr(10));

1 row created.

SQL>
SQL> select listagg(ascii(substr(l,level,1)),', ')within group(order by level)
  2  from(select * from t
  3  model dimension by(1 i)measures(l,r)
  4  rules iterate(1e5)until(r[1]is null)
  5  (l[1]=regexp_replace(l[1],'.',chr(:n-length(r[1])+1)||chr(:n-length(r[1])+1),1,ascii(substr(r[1],1,1))+1),r[1]=substr(r[1],2)))
  6  connect by level<=length(l);

6, 6, 9, 9, 8, 1, 3, 3, 0, 0, 10, 10, 2, 5, 5, 0, 0, 4, 7, 7

PS。适用于最大255的数字。


3

Zsh,41个字节

我们忽略了N,如按规则规定

for i;a+=(0)
for i;a[i]=($[++j] $j)
<<<$a

在线尝试!

相当标准:创建一个从0开始的数组,将其打印完成。a[i]=(a b)更改和插入的方法对我来说都是新的,很高兴我发现了它的用途。


或,也为41个字节

a[#]=
for i;a[i]=($[++j] $j)
<<<${a/#%/0}

这是次标准。我们利用一些巧妙的技巧:

  • ${a/#%/0}:这是替代品,但#%告诉zsh来锚比赛的起点和终点。由于它是空的,我们将所有空元素替换为0。
  • a[#]=:这实际上$#在Zsh中声明了一个空的size数组。就像char *a[argc]在C语言中一样。如果不这样做,就不会得到所需的尾随零。

在线尝试!


3

Scala,104个字节

def^(l:Seq[Int],r:Seq[Int]):Seq[Int]=if(r.size>0)^(l.patch(r(0),Seq.fill(2)(l.max+1),1),r.drop(1))else l

在线尝试!

似乎是迄今为止最长的答案。:)

List.fill(2)(l.max+1)可以替换为,List(l.max+1,l.max+1)但长度保持不变。


3

JavaScript(ES6), 61 59  51字节

感谢@Shaggy指出 n始终是数组的长度,在两个版本中都节省了8个字节

期望数组采用0索引格式。忽略n

a=>a.map(i=>b.splice(i,1,++g,g),b=a.map(_=>g=0))&&b

在线尝试!


JavaScript(Node.js)  64  56字节

使用reduce()flat()

a=>a.reduce((b,i,g)=>b.flat(1,b[i]=[++g,g]),a.map(_=>0))

在线尝试!


a=>a.map(i=>b.splice(i,1,++g,g),b=a.map(_=>g=0))&&b工作,没有考虑n
毛茸茸的

@蓬松的哎呀。我错过了那部分:还有尺寸清单N。所以,是的,似乎n没有用。
阿纳尔德


2

PHP,101字节

function h($n,$a){$h=array_fill(0,$n,0);foreach($a as$b)array_splice($h,$b,0,$h[$b]=++$x);return $h;}

在线尝试!


欢迎!考虑添加解释和指向在线解释器(例如TIO)的链接。仅代码答案通常会自动标记为低质量。有关详细信息,请参见现有答案。
mbomb007 '19

我添加了一个TIO链接
-XMark


1

视网膜0.8.2字节

\d+
$*_
r`_\G
,0
+`^((,*)_)(_)*(.*,,(?<-3>\d+,)*)\d+
$2$4$.1,$.1
^,+

在线尝试!链接包括测试用例。1个索引。将输入作为...list,N。不需要列表的长度N。说明:

\d+
$*_

将所有输入都转换为一元运算符,但是使用_,这样就不会与digit的后续用法混淆1。(Retina 1会自动执行此操作以节省2个字节。)

r`_\G
,0

替换为零N数组N,但不要更改列表。

+`

处理列表中的所有元素。

^((,*)_)(_)*(.*,,(?<-3>\d+,)*)\d+

查找列表的下一个元素和数组中的等效位置。$1=当前代(以长度计),$2=前几代的逗号,$3=当前索引-1,$4=首位$3

$2$4$.1,$.1

用十进制的当前一代的两个副本替换当前索引处的头部。


1

Pyth,16个字节

u.nXGH,=+Z1ZE*]0

在线尝试!

有趣的是,事实证明我不能用它s来使列表变平,因为它实际上是的简写+F,它将+在列表的最左边两个元素上执行,直到所有元素都已处理完毕。这意味着可以根据最后一次替换发生的位置简单地对前几个元素进行求和。

u.nXGH,=+Z1ZE*]0Q   Implicit: Q=input 1 (N), E=input 2 (array), Z=0
                    Trailing Q inferred
              ]0    [0]
             *  Q   Repeat Q times
u           E       Reduce E, with current value G and next value H, starting with the above:
       =+Z1           Increment Z in-place
      ,  Z Z          Pair the updated Z with itself
   XGH                In G, replace the element with index H with the above
 .n                   Flatten
                    Implicit print



1

05AB1E,10个字节

-IvN>D‚yǝ˜

在线尝试!

   -             # subtract the input from itself (yields a list of 0s)
    Iv           # for each number y in the input
      N          # push the 0-based loop count
       >         # add 1 to get the generation number
        D        # duplicate
         ‚       # wrap the two copies in a list
          yǝ     # replace the element at index y with that list
            ˜    # flatten
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.