PHP, 323 ไบต์
เช่นเดียวกับที่คนอื่น ๆ นับเหรียญจนกระทั่งผลรวมขององค์ประกอบสองชิ้นสุดท้ายในอาร์เรย์
<?function t($g){rsort($g);$m=array_slice($g,1);for($y=1,$i=$g[0];$i<$g[0]+$m[0];$i++){$a=$b=$i;$p=0;$r=$s=[];while($a||$b){$o=$n=0;$g[$p]<=$a?$a-=$r[]=$g[$p]:$o=1;($m[$p]??1)<=$b?$b-=$s[]=$m[$p]:$n=1;$p+=$o*$n;}$y*=count($r)<=count($s);}return$y;}for($i=0,$t=1;++$i<count($a=$_GET[a]);)$t*=t(array_slice($a,0,$i+1));echo$t;
คำตอบที่ดีที่สุดและยาวที่สุดของฉันฉันเชื่อ> 370 ไบต์
ฉันให้เฉพาะรุ่นที่ขยายเท่านั้นเพราะมันนานกว่านั้นคำตอบของฉันก่อนหน้านี้
for($x=1,$n=0,$f=[];++$n<count($a)-1;){
$z=array_slice($a,0,$n+1);
$q=$a[$n]-$a[$n-1];
$i=array_fill(1,$c=max($a[$n+1]??1,11),"X");#$q*$a[$n]
$f=range($a[$n],$c,$q);
$f[]=2*$a[$n];
for($d=[$z[$n]],$j=0;$j<$n;){
$f[]=$a[$n]+$d[]=$z[$n]-$z[$j++];
}
while($f){
$i[$t=array_pop($f)]="T";
foreach($d as $g)
if(($l=$t+$g)<=$c)$f[]=$l;
}
foreach($i as$k=>$v){
if(in_array($k,$z))$i[$k]="S";
}
#var_dump($i);
if($i[$a[$n+1]]=="X")$x*=0;
}
echo$x;
คำอธิบายสำหรับคำตอบนี้
เวอร์ชั่นออนไลน์
ตั้งค่าทั้งหมดในอาร์เรย์เป็น false == X
ตั้งค่าตัวเลขทั้งหมดในอาร์เรย์ที่คุณควบคุมเป็น S
พบความแตกต่างระหว่าง S สุดท้ายและ S อื่น ๆ หรือ 0
เริ่มต้นที่ S สุดท้ายในอาร์เรย์
ตั้งค่าตัวเลขทั้งหมดเป็น D โดยที่ S + ล่าสุดหนึ่งในความแตกต่างทั้งหมด
เริ่มต้นที่ D
ชุด "T" ถึงค่า D ในอาร์เรย์
GOTO 5 ทำซ้ำกับ DI ทั้งหมดที่พบไม่ได้อยู่ในรหัส
หากรายการถัดไปใน Array มี X มันจะเป็นจริงหรือไม่จริง
ขั้นตอนเพิ่มเติมความแตกต่างคือในกรณีในตัวอย่าง 3 ระหว่าง 1 และ 4 คือ 2 X ซึ่งหมายความว่าคุณต้องการ D ที่สองตามขั้นตอนที่ 5 หลังจากค่านี้ในกรณีนี้ 10 เป็นกรณีทั้งหมดจริงฉันสามารถเห็นได้ว่ามีความสัมพันธ์ ระหว่างความแตกต่างและจำนวนในอาร์เรย์ที่คุณควบคุมเพื่อคำนวณจำนวน D (ขั้นตอนที่ 5) ที่คุณต้องได้รับจากจุดก่อนที่คุณจะพบคดีเท็จครั้งล่าสุด
คุณตั้งค่าหลายค่าจากรายการสุดท้ายเป็นจริงโดยตรง คะแนนเหล่านี้สามารถสร้างความแตกต่างในการตัดสินใจว่าเป็นไปได้หรือไม่ที่จำนวนโลภเหรียญที่มีค่าถัดไปจะเท่ากันดังนั้นจะเป็นจำนวนเท่าของค่าสุดท้ายในอาร์เรย์ ในอีกทางหนึ่งคุณสามารถตั้งศัตรูได้
ตั้งศัตรูคนแรกที่ 1 + วินาทีสุดท้าย
จากจุดนี้เพิ่มแต่ละค่าในอาร์เรย์เพื่อตั้งค่าศัตรูต่อไป
เริ่มต้นด้วยศัตรูคนสุดท้ายไปที่ 2
ถ้าตอนนี้คุณมีศัตรูและคดีจริงอยู่ในนั้นความน่าจะเป็นที่เพิ่มขึ้นที่การนับสามารถเหมือนกันเมื่อมี D มากขึ้นความน่าจะเป็นจะลดลง
table{width:80%}
td,th{width:45%;border:1px solid blue;}
<table>
<caption>Working [1,4]</caption>
<tr><th>Number</th><th>Status</th></tr>
<tr><td>1</td><td>S</td></tr>
<tr><td>2</td><td>X</td></tr>
<tr><td>3</td><td>X</td></tr>
<tr><td>4</td><td>S</td></tr>
<tr><td>5</td><td>X</td></tr>
<tr><td>6</td><td>X</td></tr>
<tr><td>7</td><td>D3</td></tr>
<tr><td>8</td><td>D4</td></tr>
<tr><td>9</td><td>X</td></tr>
<tr><td>10</td><td>D3D3</td></tr>
<tr><td>11</td><td>D4D3</td></tr>
<tr><td>12</td><td>D4D4</td></tr>
<tr><td>13</td><td>D3D3D3</td></tr>
<tr><td>14</td><td>D4D3D3</td></tr>
<tr><td>15</td><td>D4D4D4</td></tr>
<tr><td>16</td><td>D4D4D3</td></tr>
</table>
<ul>
<li>S Number in Array</li>
<li>D Start|End point TRUE sum Differences from last S</li>
<li>X False</li>
</ul>
บวก Bytes Thank You @JonathanAllan ให้ฉันทำข้อสอบผิด
262 Bytes เกือบ แต่ไม่ดีพอ 4 testcase ผิดในขณะนี้
กรณีทดสอบ [1,16,256] ก่อนหน้านี้ควรเป็นจริงหลังจากเท็จ
<?for($q=[1],$i=0,$t=1,$w=[0,1];++$i<count($a=$_GET[v]);$w[]=$a[$i],$q[]=$m)($x=$a[$i]-$a[$i-1])>=($y=$a[$i-1]-$a[$i-2])&&((($x)%2)==(($m=(($a[$i]+$x)*$a[$i-1])%$a[$i])%2)&&$m>array_sum($q)||(($x)%2)==0&&(($a[$i]-$a[$i-2])*2%$y)==0||in_array($m,$w))?:$t=0;echo$t;
เรียงลำดับจากน้อยไปมาก
คำอธิบาย
for($q=[1],$i=0,$t=1,$w=[0,1] # $t true case $q array for modulos $w checke values in the array
;++$i<count($a=$_GET[v]) #before loop
;$w[]=$a[$i],$q[]=$m) # after loop $q get the modulo from the result and fill $w with the checked value
($x=$a[$i]-$a[$i-1])>=($y=$a[$i-1]-$a[$i-2])
# First condition difference between $a[i] and $a[$i-1] is greater or equal $a[$i-1] and $a[$i-2]
# if $a[$-1] == 1 $a[$i-2] will be interpreted as 0
&& ## AND Operator with the second condition
(
(($x)%2)== # See if the difference is even or odd
(($m=(($a[$i]+$x)*$a[$i-1])%$a[$i])%2)&&$m>array_sum($q)
# After that we multiply the result with the lower value *$a[$i-1]
# for this result we calculate the modulo of the result with the greater value %$a[$i]
# if the difference and the modulo are both even or odd this belongs to true
# and the modulo of the result must be greater as the sum of these before
# Ask me not why I have make try and error in an excel sheet till I see this relation
||
(($x)%2)==0&&(($a[$i]-$a[$i-2])*2%$y)==0 # or differce modulator is even and difference $a[$i],$a[$i-1] is a multiple of half difference $a[$i-1],$a[$i-2]
||
in_array($m,$w) # if the modulo result is equal to the values that we have check till this moment in the array we can also neglect the comparison
)
?:$t=0; # other cases belongs to false
echo$t; #Output
ดูเหมือนว่าสิ่งที่ฉันได้เห็นตารางมีค่าจาก [1,2,3,4,5,6] และฉันเปลี่ยนเฉพาะรายการสุดท้ายจนถึง 9 สำหรับ 2to3 และ 4to5 เราสร้างมูลค่าของค่าที่ต่ำกว่าใน การคำนวณแบบโมดูโล
table{width:95%;}th,td{border:1px solid}
<table><tr><th>difference</th><td></td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td></tr>
<tr><th>difference modulo 2</th><td></td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td></tr>
<tr><th>value</th><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr>
<tr><th>result</th><td></td><td>3</td><td>8</td><td>15</td><td>24</td><td>35</td></tr>
<tr><th>modulo value great</th><td></td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr>
<tr><th>modulo 2</th><td></td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td></tr>
<tr><th></th><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><th>difference</th><td></td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td></tr>
<tr><th>difference modulo 2</th><td></td><td>1</td><td>1</td><td>1</td><td>1</td><td>0</td></tr>
<tr><th>value</th><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>7</td></tr>
<tr><th>result</th><td></td><td>3</td><td>8</td><td>15</td><td>24</td><td>45</td></tr>
<tr><th>modulo value great</th><td></td><td>1</td><td>2</td><td>3</td><td>4</td><td>3</td></tr>
<tr><th>modulo 2</th><td></td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td></tr>
<tr><th></th><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><th>difference</th><td></td><td>1</td><td>1</td><td>1</td><td>1</td><td>3</td></tr>
<tr><th>difference modulo 2</th><td></td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td></tr>
<tr><th>value</th><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>8</td></tr>
<tr><th>result</th><td></td><td>3</td><td>8</td><td>15</td><td>24</td><td>55</td></tr>
<tr><th>modulo value great</th><td></td><td>1</td><td>2</td><td>3</td><td>4</td><td>7</td></tr>
<tr><th>modulo 2</th><td></td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td></tr>
<tr><th></th><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><th>difference</th><td></td><td>1</td><td>1</td><td>1</td><td>1</td><td>4</td></tr>
<tr><th>difference modulo 2</th><td></td><td>1</td><td>1</td><td>1</td><td>1</td><td>0</td></tr>
<tr><th>value</th><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>9</td></tr>
<tr><th>result</th><td></td><td>3</td><td>8</td><td>15</td><td>24</td><td>65</td></tr>
<tr><th>modulo value great</th><td></td><td>1</td><td>2</td><td>3</td><td>4</td><td>2</td></tr>
<tr><th>modulo 2</th><td></td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td></tr></table>