海盗世界的发行规则


14

现有的“游戏”中,海盗会根据某些规则合理地分割金币。引用维基百科

有5个有理性的海盗,A,B,C,D和E。他们找到100个金币。他们必须决定如何分发它们。

海盗有严格的资历等级:A胜过B,B胜过C,C胜过D,E胜过E。

因此,海盗世界的分配规则是:最高级的海盗应建议分配硬币。然后,包括提议者在内的海盗就是否接受这种分配进行投票。在平局的情况下,提议者将投决定票。如果接受分配,则分配硬币并结束游戏。如果不是,则将提议者从海盗船上扔下并死亡,然后下一个最高级的海盗提出新提议,以重新启动系统。

海盗的决定基于三个因素。首先,每个海盗都想生存。其次,给定生存能力,每个海盗都希望最大限度地增加各自获得的金币数量。第三,如果其他所有结果均相同,则每个海盗都倾向于投掷另一艘船。海盗彼此不信任,并且除了提议的分配计划之外,海盗之间不会做出任何承诺,也不会兑现任何承诺,海盗计划将给每个海盗大量的金币。

挑战

输入一个整数n1 <= n <= 99,其中n是海盗数-并从第一个海盗开始输出硬币的分布。

测试用例(第一行是输入;第二行是输出):

1
100

2
100 0

3
99 0 1

5
98 0 1 0 1

这是,因此以字节为单位的最短解决方案为准。


1
我认为这是以前问过的,但我不知道在哪里可以找到。
feersum

2
@ feersumcodegolf.stackexchange.com / questions/ 54235/…(已删除)
丹尼斯

3
精氨酸[0]。Java现在有理由使用它。
Addison Crump

3
为什么要限制n < 100?人员过多,镀金不足的海盗船也需要分发帮助。
Ryan Cavanaugh

1
@Neil这是一个糟糕的主意。如果那是“理性”海盗的行为,那么除A外的所有海盗都将试图杀死A,以使他们得到$ 100 /(n-1)$。这将迅速杀死除最后两名海盗以外的所有人。
kaine

Answers:


12

果冻11 10 字节

R%2ḊµSȷ2_;

在线尝试!一次验证所有测试用例

怎么运行的

对于输入n,该任务归结为创建长度为n的列表x,0,1,0,…其总和为100

R%2ḊµSȷ2_;  Main link. Input: n

R           Yield [1, 2, ..., n].
 %2         Replace each integer by its parity. Yields [1, 0, 1, 0, ...].
   Ḋ        Dequeue; remove the first 1. This yields the list a = [0, 1, ...].
    µ       Begin a new, monadic link. Argument: a
     S      Compute the sum of a.
      ȷ2_   Subtract the sum from 100. (ȷ2 is 1e2 in Python syntax)
         ;  Prepend the difference to a.

7

Python,33个字节

lambda n:([-n/2+101]+[0,1]*n)[:n]

计算第一个值,附加一些 0, 1, 0, 1...,将其截断为length n

请注意,-n/2+101不能将其简化为101-n/2一元和二进制-优先级不同:前者解析为(-n)/2,后者为101-(n/2)

递归时间更长(45):

f=lambda n,i=100:1/n*[i]or f(n-1,i-n%2)+[n%2]

4

MATL,12字节

:2\ts_101+l(

这使用当前版本(9.2.2)的语言/编译器的比此挑战要早。

>> matl :2\ts_101+l(
> 5
98  0  1  0  1

说明

:         % implicitly input number "n". Generate vector [1, 2, ..., n]
2\        % modulo 2. Gives [1, 0, 1, ...]
ts        % duplicate and compute sum
_101+     % negate and add 101
l(        % assign that to first entry of [1, 0, 1, ...] vector. Implicitly display


3

Python,62 58字节

编辑:很高兴我把它做成了单线。但是我为Python迷路了。因此,这仅供参考。谢谢@Zgarb

def x(i):n=[~j%2for j in range(i)];n[0]=101-sum(n);print n

它接受输入,创建从1到i的所有数字的pf奇偶校验列表。然后将i中的第一个元素设置为101-sum(n)并打印。

在这里尝试


3

Javascript ES6,45个字节

a=>[...Array(a)].map((x,y)=>y?--y%2:202-a>>1)

感谢@Neil节省了1个字节!


1
202-a>>1保存一个字节。
尼尔

3

𝔼𝕊𝕄𝕚𝕟,14个字符/ 26个字节

⩥ï⒨?‡$%2:ỉ-ï»1

Try it here (Firefox only).

不错,但也不好...

说明

⩥ï⒨?‡$%2:ỉ-ï»1 // implicit: ï=input, ṥ=101
⩥ï⒨            // map over a range [0,ï) and return:
    ?‡$%2       // (if mapitem>0) then ($-1) mod 2
         :ỉ-ï»1 // (else) 202-ï>>1
                // implicit output

2

认真地23 17字节

编辑:谢谢@quintopia

,R`2@%`M;Σ2╤u-0(T

使用与我的Python答案相同的方法,但是我使用映射执行模2,然后多次旋转堆栈。

说明

此代码推送输入(我将其称为i)。下一步推动range(1,i+1)功能。然后推2,旋转堆栈,最后取模。

接下来,将此函数映射到可迭代的范围。这给出了列表中每个元素的奇偶校验。

最后,复制堆栈,对奇偶校验列表求和,压入2、10 ^ 2和100 + 1,然后减去总和(我称这个值为n)。接下来,代码压入0,将堆栈旋转1,并将列表的索引0元素设置为n。结果列表将隐式打印。


该长度不得超过17个字节:,R`2@%`M;Σ2╤u-0(T
quintopia,2016年

1

Japt,14个字节

我发现自己希望内置的另一个挑战是我刚刚考虑添加的...

1oU mv u#Ê-UÁ1

在线尝试!

1oU mv u#Ê-UÁ1  // Implicit: U = input integer
1oU             // Create the range [1, U).
    mv          // Map each item to 1 if even, 0 otherwise.
       u        // Unshift (add to the beginning of the array)
        #Ê-UÁ1  //  the char code of Ê (202), minus U >>> 1 (floor of U / 2).

1

动作脚本3,87个字节

function x(n){var l=[],i=1;for (l[0]=int(101-n/2);i<n;){l[i]=++i%2;}return l.join(" ")}

这不是最好的高尔夫语言,但是我喜欢发布as3答案。



0

Perl 51 49 44字节

$,=$";@"=map{$i++%2}2..<>;say 100-(@">>1),@"

需要以下perlrun选项 -E

$ perl -E'$,=$";@"=map{$i++%2}2..<>;say 100-(@">>1),@"'<<<5
98
0
1
0
1

0

QBIC28 25字节

:?100-(a-1)'\`2[2,a|?b%2

说明

:               Get command line parameter, assign to 'a'
                Determine the part of the treasure for the crew:
      (a-1) \ 2 Integer Divide 'a'-1 by 2. The -1 compensates for even cases.
           ' `  Make \ a direct command for QBasic instead of substituting it for ELSE.
?100-           Print 100 coins, minus the crew-share --> Captain's booty.
[2,a|           FOR b=2; b <= a; b++; ie for every other crew member
?b%2            Give every odd crewman a coin.
                [FOR loop implicitly closed by QBIC]
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.