Java、5208 5240 5306 6152
これは、5以内(多くの場合1ステップだけ)になったときの基本ケースを使用して、ターゲットに近づくエッジを持つ再帰関数です。
基本的には、シンプルなパターン(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);
}
}
正確なネクタイの可能性が低いイベントでのゴルフ(より)。