アプリ版:「スタンプのみでお礼する」機能のリリースについて

0000 〜 9999 までの 10000 通りの配列から、
この各数列の中で、任意の数字を 1 つ決め、1 つ以上の同じ数字がある場合、
例えば 6 とします。その場合、6679 や 6669 、 6666 などなどを削除したい場合。
どのようなロジックを書けば良いですか ?

そもそも 10000 通りの配列って簡単に生成することはできますか ?

わかる方、教えてください !

A 回答 (4件)

https://qiita.com/s-katsumasa/items/7b8ce83df224 …

例えばこんな方法なんでしょうか?
⇒数学苦手ですが。

4桁なのでループはもう一つ追加になるかもですけど。
ただ数字の場合頭に0は無理でしょうから、連結させる際に文字列にするのかな?
⇒JSは苦手なので。
    • good
    • 0

こんにちは



>0000 〜 9999 までの 10000 通りの配列から
ゼロ埋めしているってことは、内容的には文字列ってことで良いのしょうか?
(ご質問の内容に限れば、数値でも結果的には同じとは思いますが・・)

>6679 や 6669 、 6666 などなどを削除したい場合。
文字列の中に’6’の文字が含まれるものを除くという意味でしょうか?
連続する文字列からなる配列を作成しておいて、filter()メソッドで抽出すれば、目的のものを得ることができるでしょう。

>そもそも 10000 通りの配列って簡単に生成することはできますか ?
 new Array(10000);
で、length=10000 の配列オブジェクトを作成可能です。
ただし、javascriptの配列は定義されていない要素は空なので、上記の配列は実態が無いので、若干注意が必要です。


まとめてやってしまえば、以下のような感じでも可能と思います。
(ひとまず、n = 100 にしてあります)
const n = 100;
let ary = [...new Array(n)].map((e, i)=> ('000' + i).slice(-4)).filter( e => e.indexOf ('6')<0 );
console.log( ary );
    • good
    • 0

>例えば 6 とします。

その場合、6679 や 6669 、 6666 などなどを削除したい場合。
なんとなく2つ以上という条件な気がするので、こんなのとか。WSHで実行。

Number.prototype.t0s = function(w){return ('000000000000000' + this.toString()).slice(-w)}
D = 6; n = 0;
for ( i = 0; i < 10000; i++ ){
s = i.t0s(4); a = s.split('');
mark = (a[0]==D ? 1 : 0)+(a[1]==D ? 1 : 0)+(a[2]==D ? 1 : 0)+(a[3]==D ? 1 : 0) >= 2 ? ' -> skip.' : '';
WScript.Echo( i.t0s(4) + mark );
if ( mark != '' ){ n += 1; }
}
WScript.Echo( '* ' + D + ' -> ' + n + ' skipped.' )
□実行例
0000
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
(略)
0065
0066 -> skip.
0067
(略)
9666 -> skip.
9667 -> skip.
9668 -> skip.
9669 -> skip.
9670
(略)
9999
* 6 -> 523 skipped.
    • good
    • 0
この回答へのお礼

Mac なので実行できず、、。残念です。

お礼日時:2022/05/03 23:47

> どのようなロジックを書けば良いですか ?



0000があるということは処理対象は数値ではなく4文字の数字からなる文字列ですね?
まず、出された問題のそこをしっかり確認ください。

で。
0000~9999までの4文字のデータが昇順(または降順)に並んだ10,000個のデータ配列はJavascriptではどのように持つのがよいかを考えます。

それが出来たら・・・

> この各数列の中で、任意の数字を 1 つ決め、1 つ以上の同じ数字がある場合、
> 例えば 6 とします。その場合、6679 や 6669 、 6666 などなどを削除

・・・を実現する処理手順を日本語で考えましょう。
Javascriptなどのプログラミング言語で考えるのではなく、日常生活で使用している言語を使って考えます。
日本語で考えられないものを他の言語(その一つがプログラミング言語の一種であるJavascript)で考えられるはずがありません。ましてやその言語に不慣れな初心者の方がです。

なお、処理手順は箇条書きやチャート図を使うとよいです。


> そもそも 10000 通りの配列って簡単に生成することはできますか ?

これは最初に書きました「0000~9999までの4文字のデータが昇順(または降順)に並んだ10,000個のデータ配列はJavascriptではどのように持つのがよいか」の結果に依存します。
そっれよって具体的なやりかたが異なるでしょう。
それに関する指定などは問題には何も書かれていないのですか?
もしくは授業(?)などでそれに関係する事柄を習ってはいないのでしょうか?

参考まで。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!