🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

548閲覧

二次元配列の操作がうまくいかない

nagi166

総合スコア23

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/16 02:36

編集2021/03/16 07:43

前提・実現したいこと

(h,w)の二次元配列を宣言して、falseで全て埋め、
入力が

4 5 (h行w列の配列) .*.*. *.... .*... .*..*

の時、*の位置をtrueにしたいです。
以下がそのコードなのですが、代入がうまくいっていません。
house[h_index][w_index]としてるので、1つだけtrueになることを期待しているのですが、複数変わってしまいます。

h行w列の二次元配列houseのh_index行 w_index列目をtrueにするにはどうすればよいですか?

javascript

1process.stdin.resume(); 2process.stdin.setEncoding("utf8"); 3const lines = []; 4const reader = require("readline").createInterface({ 5 input: process.stdin, 6 output: process.stdout, 7}); 8reader.on("line", (line) => { 9 lines.push(line); 10}); 11 12reader.on("close", () => { 13 // 初期化 14 const [h, w] = lines.shift().split(' ').map(e => Number(e)); 15 let house = new Array(h).fill(new Array(w).fill(false)) 16 17 console.log(house) 18 lines.forEach((line, h_index) => { 19 line.split('').forEach((e, w_index) => { 20 console.log('------------') 21 if(e === '*'){ 22 console.log('変更したよ') 23 house[h_index][w_index] = true 24 } 25 console.log('h = ' + h_index) 26 console.log('w = ' + w_index) 27 console.log(house) 28 }) 29 }); 30});

入力

4 5 2 2 .*.*. *.... .*... .*..*

出力

[ [ false, false, false, false, false ], [ false, false, false, false, false ], [ false, false, false, false, false ], [ false, false, false, false, false ] ] ------------ h = 0 w = 0 [ [ false, false, false, false, false ], [ false, false, false, false, false ], [ false, false, false, false, false ], [ false, false, false, false, false ] ] ------------ 変更したよ h = 0 w = 1 [ [ false, true, false, false, false ], [ false, true, false, false, false ], [ false, true, false, false, false ], [ false, true, false, false, false ] ] ------------ h = 0 w = 2 [ [ false, true, false, false, false ], [ false, true, false, false, false ], [ false, true, false, false, false ], [ false, true, false, false, false ] ] ------------ 変更したよ h = 0 w = 3 [ [ false, true, false, true, false ], [ false, true, false, true, false ], [ false, true, false, true, false ], [ false, true, false, true, false ] ] ------------ h = 0 w = 4 [ [ false, true, false, true, false ], [ false, true, false, true, false ], [ false, true, false, true, false ], [ false, true, false, true, false ] ] ------------ 変更したよ h = 1 w = 0 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ h = 1 w = 1 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ h = 1 w = 2 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ h = 1 w = 3 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ h = 1 w = 4 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ h = 2 w = 0 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ 変更したよ h = 2 w = 1 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ h = 2 w = 2 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ h = 2 w = 3 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ h = 2 w = 4 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ h = 3 w = 0 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ 変更したよ h = 3 w = 1 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ h = 3 w = 2 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ h = 3 w = 3 [ [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ], [ true, true, false, true, false ] ] ------------ 変更したよ h = 3 w = 4 [ [ true, true, false, true, true ], [ true, true, false, true, true ], [ true, true, false, true, true ], [ true, true, false, true, true ] ]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/03/16 02:52

第三者に聞いてしまっていいような種類の問題なのですか?
yambejp

2021/03/16 03:08

paizaの回答を教えるつもりはないですが、質問の意図がわかりません h*wの二次配列をfalseでうめて、新たに指定したhとwの値をtrueに するだけでいいのでしょうか?
退会済みユーザー

退会済みユーザー

2021/03/16 03:16

paizaの規約で「問題を公開するな」というのがあったと思うのですが… 代わりの問題を1つ用意するために掛かった費用を請求されることもありえますので、 回答が付く前に削除申請された方が良いかと思います。
hatena19

2021/03/16 04:00

https://paiza.jp/guide/kiyaku 第11条(禁止行為) (3)ブログ・SNS等の各種媒体(インターネット媒体に限られず、不特定多数が閲覧可能なものを全て含む。)上において、当社がpaizaで出題した問題の内容、当該問題に対する解答、解答へのヒント等の示唆およびカンニング等の不正を助長する内容等を掲載する行為。 完全にこれに該当しますね。
nagi166

2021/03/16 07:42

paizaのリンクを消しました。 paizaの回答を求めているわけではなく、配列操作で期待した動きをしなかったため、みなさんの知恵を貸していただきたく投稿しています。 警告していただきありがとうございます。 これでおそらくpaizaの規約に問題ないとは思うのですが、これでも問題がありそうなら削除することにします。
yambejp

2021/03/16 08:02

回答つけたとおり、躓いていると思われる箇所は特にteratailに 投稿しても問題ないご自身のソースだと思います new Arrayをfillすると参照箇所が同じになります
nagi166

2021/03/16 08:21

yambejpさん  > teratailに投稿しても問題ないご自身のソース 安心しました。ありがとうございます。回答もありがとうございます!
guest

回答1

0

ベストアンサー

外側のfillが参照する配列は同じメモリ領域です

javascript

1let house = new Array(h).fill(new Array(w).fill(false)) 2↓↓↓ 3let house = Array(h).fill(null).map(()=>Array(w).fill(false));

投稿2021/03/16 03:25

yambejp

総合スコア116694

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問