JavaScript (Node.js) で AtCoderの問題を解いていて困ったが、現時点で日本語の情報がなかったので後学者のためのメモ。
そもそもJavaScriptでAtCoderやってる人自体少ないので需要はあまりなさそうですが、興味ある人だけ読んでください。
例えば a = [[0, 0], [0, 0]]
というArrayを作って、a[0][0] = 1
とupdateしたいとする。
まずは失敗例
vara=newArray(2).fill(newArray(2).fill(0));a[0][0]=1;console.log(a);// [ [ 1, 0 ], [ 1, 0 ] ]// a[0], a[1] は呼び出すメモリ上でidが"完全に同じ"なので、a[0][0]とa[1][0]も単に"値が等しいのではなく全く同じもの"になる。
これは Python3でいうところの
a=[[0]*2]*2
と同じ。
これを解決するには、
a[0], a[1]をそれぞれ別に作成する必要がある。
Python3だと、
a=[[0]*2for_inrange(2)]
と書けばよかったが、JavaScriptだとちょっと大変。
いろいろ試して、一応以下のように書くと良いことが解った。
vara=newArray(2);for(vari=0;i<2;i++){a[i]=newArray(2).fill(0);}a[0][0]=1;console.log(a);// [ [ 1, 0 ], [ 0, 0 ] ]