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

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

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

Scratchは、MITメディアラボが開発した子ども向けプログラミング言語。コードを記述することなくブロックを組み合わせてプログラミングを行うビジュアルプログラミング言語です。Scratch2.0からは、Web上でのプログラミングも可能になっています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

511閲覧

数列の省略化(単純化)の方法、考え方

Ryusei.w

総合スコア44

Scratch

Scratchは、MITメディアラボが開発した子ども向けプログラミング言語。コードを記述することなくブロックを組み合わせてプログラミングを行うビジュアルプログラミング言語です。Scratch2.0からは、Web上でのプログラミングも可能になっています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2020/05/28 09:05

最初に

Unityでは、PlayerPlefs.GetInt(x,y);
などがあるので必要性は薄いですが、Scratchにおいてです。(Scratch知らない方でも大丈夫な内容です。)

課題について

セーブデータを出力する時、ある事情で数列で出さなければ行けません。
しかし、それをただただ連結するととんでもなく長くなってしまいます。

HP=100 x=10 y=150 ATK=999 etc……
単純に連結する場合
▶0100001001500999 16桁

この項目がさらに増えれば増えるほど、限界値がふえれば(今回は限界値4桁 55 ▶ 0055)長くなってしまいます。

自分なりの改善策

無駄な桁数を付けないために(0の数を増やさない為に)桁数を予め最初につけることを思いつきました。

改善例

HP=100 x=10 y=150 ATK=999 etc……
桁数を最初に入れる
▶310021031503999 15桁
(桁数が増えれば効果は現れると思う)

問題点

これだと桁数の違いが激しい時
(109 3桁、487171991729... 120桁)
のとき00310912048...
と桁数を表示するために0をまた多く使ってしまう。
そのため桁数を縮めるのには結局意味は無くなってしまう。
▶modなどをつかう手も考えましたが、方法が思いつきませんでした、計算力が膨大になって使い物にならなかった。

回答して欲しい、求めていること

要するに、桁数が多い数列を縮める方法が知りたいです。
Unity以外でも使うと考えてくれればなお嬉しいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

出現する数値に一定の偏りがあれば縮めることができる場合も考えられます。
ただ、出現率が低いはずの数値がたまたま集中すると、元の長さよりも長くなるので注意が必要です。
すべての場合において縮める方法は存在しないのではないでしょうか?

例1)出現率の高い桁が最大桁より十分小さい場合
数値を9進数に変換して区切り文字に「9」を使用する。
HP=100 x=10 y=150 ATK=999 etc……
▶121 9 11 9 176 9 1330 15桁
HP=1 x=1 y=1 ATK=1 etc……
▶1 9 1 9 1 9 1 7桁

※9進数にすることで元の桁数より5%程度増加し、さらに区切り分の(項目数-1)桁が増加するので、全体で見ると増加する。

例2)基準値との差が小さい桁で表せる場合
基準値は4桁、その他の数値の差が2桁に収まる。
HP=110 x=100 y=150 ATK=199 etc……
▶0100 10 00 50 99 12桁

例3)意図的に数値を補正して種類を減らす場合
4桁の数値で実際に入力されるデータを10の倍数だけに限定すれば1桁減らすことができる。
HP=100 x=10 y=150 ATK=990 etc……
▶010 001 015 099 12桁

投稿2020/05/28 12:35

etsuhisa

総合スコア416

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

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

Ryusei.w

2020/05/29 08:21 編集

なるほど、基準値を設定してその分だけ引くみたいな考え方ですね 解釈の仕方が間違ってなければ 1000が基準値で表記方法は 1000 50 90 00(元は1050,1090,1000) みたいな感じもあるということですね! 参考になりました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問