質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

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

Q&A

解決済

3回答

1004閲覧

javascript 宝くじの問題

cal_1

総合スコア23

JavaScript

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

0グッド

1クリップ

投稿2022/01/05 02:54

編集2022/01/05 05:04

宝くじの当選番号を求める問題です
100000から199999の当選番号が渡されます。

1等:当選番号と一致する番号
前後賞:当選番号の ±1 の番号 当選番号100000の場合100001のみ、199999の場合199998のみになります。前後いずれかになります。
2等:当選番号と下 4 桁が一致する番号
3等:当選番号と下 3 桁が一致する番号

let lines = [ 当選番号, 宝くじ券の番号_1, 宝くじ券の番号_2, 宝くじ券の番号_n ]
というような形で配列に値が渡されます。

javascript

1コード 2 let lines = [ '111111', '111110', '121111', '122111', '111111',]; 3 let Numbers = lines.slice(1); 4 5 let SumUp = Number(lines[0]) + 1; 6 let SumDown = Number(lines[0]) - 1; 7 8 let First = lines[0]; 9 let Seconds = lines[0].slice(-4); 10 let Third = lines[0].slice(-3); 11 12 for (let i = 0; i < Numbers.length; i++) { 13 if (First === Numbers[i]) { 14 console.log('1等:' + Numbers[i]); 15 } else if (SumUp === Number(Numbers[i]) || SumDown === Number(Numbers[i])) { 16 console.log('前後賞:' + Numbers[i]); 17 } else if (Seconds === Numbers[i].slice(-4)) { 18 console.log('2等:' + Numbers[i]); 19 } else if(Third === Numbers[i].slice(-3)) { 20 console.log('3等:' + Numbers[i]); 21 } else { 22 console.log('外れ:' + Numbers[i]); 23 } 24 }

このコードで問題はなかったのですが、ここはこう書くべき、私はこう書く、現場ではこう書く等アドバイス頂きたいです。宜しくお願い致します。

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

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

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

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

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

cal_1

2022/01/05 04:41

ほぼ同じですが、2点違います。 組は渡されません。 100000の前後賞は100001のみ、199999は当たりになりません。 199999の前後賞も199998のみになります。
guest

回答3

0

ベストアンサー

当選判定は関数に分離したほうがいいですかね。

javascript

1let lines = [ '111111', '111110', '121111', '122111', '111111',]; 2let winningNumber = lines[0]; 3let numbers = lines.slice(1); 4 5for (let i = 0; i < numbers.length; i++) { 6 const winningOrder = GetWinningOrder(winningNumber, numbers[i]); 7 console.log(winningOrder + ':' + numbers[i]); 8} 9 10function GetWinningOrder(winningNumber, lotteryNumber) { 11 if (winningNumber === lotteryNumber) { 12 return '1等'; 13 } else if (Number(winningNumber) + 1 === Number(lotteryNumber) || Number(winningNumber) - 1 === Number(lotteryNumber)) { 14 return '前後賞'; 15 } else if (winningNumber.slice(-4) === lotteryNumber.slice(-4)) { 16 return '2等'; 17 } else if (winningNumber.slice(-3) === lotteryNumber.slice(-3)) { 18 return '3等'; 19 } else { 20 return '外れ'; 21 } 22}

投稿2022/01/05 06:45

ku__ra__ge

総合スコア4524

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

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

0

let Numbers = lines.slice(1);では?

また、一等、二等、三等が文字列なので、前後賞も文字列で保持した方が良いでしょう。

あとは、すでに指摘のあることくらいです。

投稿2022/01/05 04:55

otn

総合スコア85901

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

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

0

コードのロジックはとくに問題ないと思いますが、コード可読性の観点でいつくか。

let lines = [ 当選番号, 宝くじ券の番号_1, 宝くじ券の番号_2, 宝くじ券の番号_n ]

この仕様がわかりにくいので、let firstPrize = lines[0]; など説明変数を使うのがよいと思います。

JavaScriptでは、変数名を大文字で始めるのは一般的ではありません。

for (let i = 0; i < Numbers.length; i++) {

for (let number of Numbers) { とすれば、何度も Numbers[i] と書かずに number で済みます。

投稿2022/01/05 03:03

int32_t

総合スコア21695

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

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

cal_1

2022/01/05 05:53

変数名、for ofに関してご教示頂きありがとう御座います。参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問