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

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

詳細はこちら
JavaScript

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

4回答

589閲覧

5件までは1行で6件以降は複数行の式(リストの作り方?)

qkz

総合スコア1

JavaScript

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/03/18 07:39

編集2021/03/18 08:12

前提・実現したいこと

flexbox で1行に最大5件 6件以降の場合は複数行にて表示するものを作ろうと思っているんですが、式が浮かばなくて教えて欲しいです。

やりたいこと例
5件
[12345]

6件
[123]
[456]

7件
[1234]
[567-]

8件
[1234]
[5678]

11件
[1234]
[5678]
[9⑩⑪-]
のようにできるだけ均一?にしたいです。

js で書いてますが、こういう式を使えば導き出せるという事だけでいいので教えて欲しいです。

追記
均一な方がいいですが、行数の少なさの方が重要です

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

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

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

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

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

FKM

2021/03/18 07:49

条件が曖昧ですね。たとえば12のときは6×2でも4×3でも3×4でも余りなしで作れます React以前にJavaScriptなどでそのようなアルゴリズムを築けるかという段階以前に、 要件定義をもっと固めたほうがいいと思います。
qkz

2021/03/18 07:51

1行最大5件で出来るだけ少ない行で考えていますなので、12件の場合は4x3とい結果が欲しいです。
guest

回答4

0

ベストアンサー

9件の時は3×3が欲しいのか5と4の2行なのか。。。
求める一番大きい列数から小さい列数までで、件数を割って、
割り切れるならその数字を、余りが出るなら余りが1番大きい数字をとか。
まどろっこしいでしょうか。。。

追記見ました。
そうすると、前述の条件がまた無視されることに。。。
もう少しどうしたいかをまとめたほうがよいかと思います。

投稿2021/03/18 08:09

編集2021/03/18 08:19
yo_u

総合スコア95

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

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

qkz

2021/03/18 08:24 編集

9件の際は5と4の2行の結果が欲しいです。 色々手元でやってみましたが、その方法が一番良さそうですかね… 回答ありがとうございます。
FKM

2021/03/18 08:39

7の場合だと 5,2でも4,3でも通りますよね?
qkz

2021/03/18 08:46

7 の場合は 5 のあまりが 2 、4 のあまりが 3 なので >余りが出るなら余りが1番大きい数字をとか。 上記当てはまるので 4,3 使う感じになりますね
guest

0

PHPだけど、こんなアルゴリズムを組めばいいのでしょうか(PHPでテストしたのは配列を見やすくするため)
あとはjsに直してみてください(変数を書き換えるだけでいけるかと)

PHP

1 $num = 0; //ここに任意の値を入れる 2 3 $array = square($num); 4 var_dump($array); //ここに行列の値ができる 5 6 function square($num){ 7 $row = 0; 8 //どの列数が適正かを判別 9 for($col = 5; $col > 2 ; $col--){ 10 if( ($num % $col == 0 || $num % $col > $col / 2) && $num >= $col){ 11 $row = $num / $col; 12 break; 13 } 14 } 15 echo $col; 16 $ar_number = []; 17 $ar_numbers = []; 18 19 for($x = 0; $x < $row; $x++ ){ 20 $ar_number = []; 21 for($y=1; $y <= $col; $y++){ 22 $i = ($col*$x)+$y; 23 if($i <= $num ) $ar_number[] = $i; 24 } 25 $ar_numbers[] = $ar_number; 26 } 27 return $ar_numbers; 28 } 29 30

投稿2021/03/18 09:06

編集2021/03/18 09:26
FKM

総合スコア3647

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

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

0

13件の場合
[12345]
[67890]
[123]

を想定していたらしいので、BA(yo_uさん)の方法で出来そうなので、〆ます。

ありがとうございました。

投稿2021/03/18 08:51

qkz

総合スコア1

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

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

0

個数を出せばいいのですか?

js

1 const rc = x => { 2 const r = Math.ceil(x / 5); 3 const c = Math.ceil(x / r); 4 return [r,c] 5 } 6 Array.from(Array(12),(...[_,i])=>i).map(rc); 7 8/* 9[ 10 [ 11 0, 12 null 13 ], 14 [ 15 1, 16 1 17 ], 18 [ 19 1, 20 2 21 ], 22 [ 23 1, 24 3 25 ], 26 [ 27 1, 28 4 29 ], 30 [ 31 1, 32 5 33 ], 34 [ 35 2, 36 3 37 ], 38 [ 39 2, 40 4 41 ], 42 [ 43 2, 44 4 45 ], 46 [ 47 2, 48 5 49 ], 50 [ 51 2, 52 5 53 ], 54 [ 55 3, 56 4 57 ] 58] 59 60​*/ 61

仕様が変わったとのこと、まことにご愁傷様ですがサンプルを作ってしまったので追記

サンプル

投稿2021/03/18 08:24

編集2021/03/18 08:57
Lhankor_Mhy

総合スコア36928

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問