与朋友排队


16

游乐园里,吉姆(Jim)拥有最好的芽,随着您最喜欢的游乐设施出现,您和吉姆(Jim)交换了眼神。自然,您会争先恐后。不幸的是,他赢了,因为您是一名高尔夫球手,而且他参加了一项真正的运动(对不起朋友)。实际上,您太落后了,您和Jim被人分开了x。假设这条线是长的,n并且您在后面,那条线j在每个人之间曲折,那么您和Jim会在同一行中的哪个位置允许您聊天(相隔仅一行)?

输入值

3个整数

  • n-线的长度。该数字将始终大于或等于j并且将采用y * j其中y为正整数(队列中的行数)的形式。
  • j-行的一行中的人数(一行中的列数)。此数字将始终大于0。
  • x-你和吉姆之间的人数如此0 <= x < 2j - 1。提示:如果此数字为奇数,则您的输出应为空。

输出量

Jim与您在同一列中的行中的整数位置列表。
1这些整数可以是0或1的索引,只要您在答案中指定即可。
2这些整数可以假设您从位置0或位置n-1开始,只要您在答案中指定即可。

排队示例小
在此示例中,输入为n = 9, j = 3, x = 0。输出应该是2, 5因为当您与Jim处于同一列时,您的排名是2或5

测试用例

[9, 3, 0] -> [2, 5]
[12, 3, 0] -> [2, 5, 8]
[9, 3, 1] -> []
[9, 3, 2] -> [1, 4]
[14, 7, 10] -> [1]
[24, 4, 6] -> [0, 4, 8, 12, 16]

计分

这是,因此最短的答案(以字节为单位)获胜。


4
队列 rious看到这一些有趣的解决方案!(对不起的双关语,也可能不恰当地使用该词,但无论如何,请不要对我进行评判:P)
HyperNeutrino

1
我们可以返回假值而不是空数组吗?
Rɪᴋᴇʀ

@Riker我认为没有理由禁止这样做。去了
打个招呼

Answers:


9

Python 2中45 41 40 37个字节

lambda n,j,x:range(j-x/2,x%2or n-x,j)

非常简单的解决方案。我只是快速扫描了图案并找到了图案。1索引,1在队列的后面。

通过避免使用三进制,并使用-4个字节代替值,而是使用
-1个字节的数组,这要感谢@DeadPossum,这是由于@DeadPossum提供了一些启发,and而不是使用三进制或数组选择器,而是
or相反的顺序切换了-3个字节。仅因1索引而工作

另外,在所有4s上,划掉的4仍然是4 :(

在线尝试!


大声笑,您在我之前发布了14分钟:)我的版本短了3个字节:lambda n,j,x:x%2-1and range(j-x/2,n-j+1,j)
Dead Possum

@DeadPossum不错。我有另一个解决方案,它比这短一个字节,大声笑
HyperNeutrino

我对范围的第二个论点有误。它不应该这样n-j+1,所以lambda n,j,x:x%2-1and range(j-x/2,n-x,j)总长度要少40个字节
Dead Possum

@DeadPossum等待,我们被允许返回一个伪造的值而不是一个空数组吗?
HyperNeutrino

3
@FelipeNardiBatista就是“ 1索引”的意思,顺便说一句。
Rɪᴋᴇʀ

2

22 21字节

20个字节的代码,-p标志+1 。

c%2?lv-c/2+b*\,a/b-1

注意到njx作为命令行参数。0索引,从位置0开始。在线尝试!

说明

这是我最初的22字节版本,因为它更容易理解。

                       a, b, c are cmdline args; l is [] (implicit)
c%2?                   Test c mod 2
    l                  If it's 1 (truthy), return empty list; else:
                a/b-1  Number of rows in the queue minus 1
               ,       Range(^)
             b*        Multiply each element by b
     b-1-c/2+          Add (b-1)-c/2 to each element
                       Output in [1;2;3] format (implicit, -p flag)

通过观察该图案所获得的公式n=9j=3

x Output
0 [2;5]
2 [1;4]
4 [0;3]

如果我们把x/2012),从减去它j-1210),并添加到[0;3],我们得到正确的结果在所有情况下。


1

Java 8 lambda,101个字节

(n,j,x)->{int[]i=new int[n/j-1];int c=0,k=j-x/2;for(;k<n-x;k+=j)i[c++]=k;return x/2==0?i:new int[0];}

我的Python答案的几乎直接端口。范围虽然在Java中不存在。


0

Haskell,43个字节

(n#j)x|odd$round x=[]|m<-j-x/2=[m,m+j..n-x]

几乎直接从HyperNeutrino的Python答案移植而来

格式更完善的代码:

f n j x |odd$round x = []
        |otherwise   = let m=j-x/2 in [m,m+j..n-x]

编辑:忘记提及它是一个索引


0

C#-91字节

int[]r=new int[n/j-1];for(int i=1;i<n/j;i++){r[i-1]=i*j-x/2-1;}return(x%2==0)?r:new int[0];
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.