明らかに、この課題は関数とライブラリを分離することで簡単になるため、許可されません。
コードはECMAscript仕様に準拠する必要があります(どの仕様でも同じです)ので、ブラウザー固有の回答はありません。
配列は、インスタンス化後にアクセスできる必要があります。
私は今のところ差し控える答えがあります。
注: javascriptで多次元配列を作成するのは不便であるため、この課題はjavascriptに固有のものです。
[10]
[[10]]か?
明らかに、この課題は関数とライブラリを分離することで簡単になるため、許可されません。
コードはECMAscript仕様に準拠する必要があります(どの仕様でも同じです)ので、ブラウザー固有の回答はありません。
配列は、インスタンス化後にアクセスできる必要があります。
私は今のところ差し控える答えがあります。
注: javascriptで多次元配列を作成するのは不便であるため、この課題はjavascriptに固有のものです。
[10]
[[10]]か?
回答:
(x=i=>Array(10).fill(i))(x(1))
ES6の動作:)
for(r=[b=[i=10]];i--;r[i]=b)b[i]=1
参照によって行を等しくすることは明らかに問題ないので、その事実に依存することは明らかに問題ないと思います。これは、行と同時にテーブルを作成することにより、1つのforループを削減するのに役立ちます。それで、ここに私の新しい出場者がいます。
r[0]とb[0]はループ中に上書きされるため、ゴミを含む可能性があります。これにより、コンマを削除するための別の無料の実行スロットが得られます。悲しいことに、r=b=[]それは、by-refに等しいので、しません。
また、それはうまくスケーリングし(99x99はまだ34バイト)、ES5を必要としません(とにかく新しい関数はひどく長い名前を持ちます)、そしてボーナスとして、それは読めません:-)
c=[b=[i=10]];while(i--)b[i]=c,c[i]=1。知っておくべき!!!
x=(y=[..."1111111111"]).map(x=>y)
「1」の10x10配列を出力します。
これは、文字列 "1111111111"が配列であるかのように処理する必要なすべてのプロパティを持っているという事実を悪用するため、スプレッド演算子...を使用して文字の配列に変換し、次に配列のコピーにマッピングできます「オリジナル」を参照する各要素。
または、1つの変数名のみ(35文字の場合):
x=(x=x=>[..."1111111111"])().map(x)
または追加の混乱のため(ただし45文字)
x=[];x[9]=x;x=[...x].map(y=>[...x].map(x=>1))
または(43文字)
y=y=>[...x].map(x=>y);x=[];x[9]=x;x=y(y(1))
...オペレーターのいい虐待!
for(a=[i=10];i;)a[--i]=[1,1,1,1,1,1,1,1,1,1]
前のバージョン:
for(a=i=[];i^10;)a[i++]=[1,1,1,1,1,1,1,1,1,1]
^のために!=
x=[a=[1,1,1,1,1,1,1,1,1,1],a,a,a,a,a,a,a,a,a]
各要素は同じ配列を指しますが、仕様にはそれについて何も言及されていません!
x=冒頭に
これまでのところ最高です。(まだやっています)。
x=[];while(x.push([1,1,1,1,1,1,1,1,1,1])-10);
短い(mellamokbに感謝!)
for(x=[];x.push([1,1,1,1,1,1,1,1,1,1])-10;);
forをするwhileときよりも、ほとんど常に好ましいことに注意してください。基本的なステートメントは同じ長さ(while()vs for(;;))forですが、より柔軟性があります。この場合、x=[]の初期化子を入れて、for1文字を保存できます。
私の元の解決策が破られたので、今それを投稿します。
for(a=[],i=10;i--;a[i]='1111111111'.split(''));
残念ながら、0x3FF.toString(2)文字列をリストするだけでは効率的ではありません。静的に配列を宣言するほど効率的ではありません。
この方法で1つのキャラクターを削ることができます(46):
for(a=[],i=10;i--;a[i]=[1,1,1,1,1,1,1,1,1,1]);
次のようにさらに2文字を保存できます:(44)
for(a=[i=10];i--;)a[i]=[1,1,1,1,1,1,1,1,1,1]
JS 1.8関数式クロージャーを使用する別の44バイトソリューション(FFのみatm):
x=(x=[1,1,1,1,1,1,1,1,1,1]).map(function()x)
iにa、このような:a=[i=10]
r=eval("["+(A=Array(11)).join("["+A.join("1,")+"],")+"]")
ゴルフの前に:
a=Array(11).join("1,");
b=Array(11).join("["+a+"],")
c=eval("["+b+"]")
注:これにはES5が必要なので、IEにあまり期待しないでください。
eval('a=['+(b=Array(11)).join('['+b.join("1,")+'],')+']')。別の引用符とeval内の変数を持っていることを除いて、これらはまったく同じです
a=eval("["+Array(11).join("[1,1,1,1,1,1,1,1,1,1],")+"]")56
(a=[b=[]]).fill(b.fill(a[9]=b[9]=1))
私のブラウザー(Ubuntu上のFirefox)およびCodecademy Javascriptインタープリターでテスト済み
それは最短ではありませんが、私はすでにここにあるものへの別のアプローチに行くと思いました。
a=(''+{}).split('').slice(0,10).map(_=>a.map(_=>1))
オブジェクトを文字列にキャストします文字列を文字に
"[object Object]"
分割します["["、 "o"、 "b"、... "]"]
わずか10個のスライスを取得します
1のマッピング結果を初期スライスにマッピングします
aそのバージョンはすでに機能しているように見えたため、いくつかの括弧を逃していました。更新されたバージョンは、FFおよびノードで--harmonyフラグを使用して動作するはずです。
for(var a=b=[],i=100;i-->0;b[i%10]=1)if(i%10==0){a[i/10]=b;b=[]}
for(var a=b=[i=100];i-->0;b[i%10]=1)if(i%10==0){a[i/10]=b;b=[]}
配列内の反復子を非表示にすることで保存された1文字。
for(a=b=[1],i=100;i--;b[i%10]=1)if(i%10==0){a[i/10]=b;b=[]}
Jansの提案でいくつかの文字を保存しました。
読み取り可能なバージョン:
for(var a = b = [i = 100]; i-- > 0; b[i % 10] = 1) {
if(i % 10 == 0) {
a[i / 10] = b;
b = [];
}
}
はい、これは最短のソリューションではなく、既成の[1,1,1,1,1,1,1,1,1,1]アレイを使用しない別のアプローチです。
i-->0しi--ます。「downto」演算子は便利ですが、必ずしも必要ではありません。==0同様に2ビット削り取ることができます。また、省いてくださいvar。通常は有用ですが、4つの無駄なバイトはここでは受け入れられません。