爪哇,5208 5240 5306 6152
这是一个递归函数,其边缘更接近目标,具有在5以内(通常仅一步)之内的基本情况。
基本上,你可以(a*b)+(a/2)
为(a+b)*2
一个简单的模式棍子。如果a
为奇数,结果将为负,从而导致某些奇怪的逻辑。
2 31 -1大约需要一分钟,因此长度为185,367。但是,它几乎可以在所有测试用例中立即起作用。4*(sqrt|n|)
平均得分。最长的单个测试用例是9730
,这将导致397长的木棍堆栈:
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||-|||||||||||||||||||||-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|--------------------------------------------------------------------------------------------------|-
更新:
找到了一种简单的方法来添加/减去基本模式。回到领先(现在)!
带有线束和测试用例:
import static java.lang.Math.*;
public class StickStacker {
public static void main(String[] args){
StickStacker stacker = new StickStacker();
int tests[] = {-8607,-6615,-6439,-4596,-4195,-1285,-72,12,254,1331,3366,3956,5075,5518,5971,7184,7639,8630,9201,9730};
int sum = 0;
for(int test : tests){
String sticks = stacker.stickStack3(test);
sum += sticks.length();
System.out.println("In: " + test + "\t\tLength: " + sticks.length());
System.out.println(sticks+"\n");
}
System.out.println("\n\nTotal: "+sum);
}
String stickStack3(int n){return"|"+k(n);}
String k(int n){
String o="";
int q=(int)sqrt(abs(n)),a,b,d=1,e=0,c=1<<30,
z[]={232,170,42,10,2,0,12,210,52,844,212};
a=n>0?q:-q;
a-=n>0?a%2<1?0:1:a%2<0?0:-1;
for(b=0;b<abs(a)+10;b++)
if(abs(n-(a*b+a/2-(n>0?0:1)))<abs(a)&&abs(a)+b<c){
c=abs(a)+b;
d=a;e=b;
}
for(a=0;a++<e;)o+="-|";
for(a=0;a++<abs(d);)o="|"+o+"-";
c=n-(d*e+d/2-(n>0?0:1));
if(c>0&&c<abs(d)){
if(c%2==0)
o=o.substring(0,c)+"-|"+o.substring(c);
else
o=o.substring(0,c+1)+"-|"+o.substring(c+1)+"|-";
c=0;
}else if(c<0&-c<abs(d)){
if(c%2!=0)
o=o.substring(0,-c)+"-|"+o.substring(-c);
else
o=o.substring(0,-c-1)+"-|"+o.substring(-c-1)+"|-";
c=0;
}
return n==0?"":n<6&&n>-6?
Long.toBinaryString(z[n+5])
.replaceAll("0","-")
.replaceAll("1","|"):
o+k(c);
}
}
在出现平局的情况下,高尔夫会(更多)打高尔夫球。