プチコンまとめWiki (初代/mkII)

Mame/圧縮の方法 の変更点

パンくずリスト


#title(圧縮の方法)
#contents

*概要 [#y3db7b2b]
様々な圧縮方法を紹介していきます。用途はセーブデータ圧縮、ネタバレ防止などです。&br;
詳細なデータを交えながら考察していきます。プログラムの圧縮ではありませんのでご注意下さい。&br;
複数の圧縮方法で圧縮する方法良い方法です。ここでいう圧縮とは可逆圧縮の事です。非可逆圧縮は扱いません。

*圧縮方法一覧 [#ne277009]
**HEX$()圧縮 [#s73447c9]
圧縮したい数が入った変数を&basic{A};、圧縮された数を入れる変数を&basic{B$};、展開された数を入れる変数を&basic{C};とすると、

圧縮方法
#basic{{
B$=HEX$(A)
}}
展開方法
#basic{{
C=VAL("&H"+B$)
}}
(圧縮前、圧縮後)=(10進数、16進数)である。

|>|~性能|
|文字列の圧縮|不可|
|正の整数の圧縮|可能|
|負の整数の圧縮|可能|
|小数の圧縮|不可|
|圧縮後の状態|文字列|
|圧縮後の文字数|1〜5|
|圧縮プログラムの行数|1|
|展開プログラムの行数|1|
|削減率|※-150%〜50%|

※詳細&br;
圧縮前が0〜9なら削減率は0%である。&br;
圧縮前が10〜15なら削減率は50%である。&br;
圧縮前が16〜99なら削減率は0%である。&br;
圧縮前が100〜255なら削減率は33.33%である。&br;
圧縮前が256〜999なら削減率は0%である。&br;
圧縮前が1000〜4095なら削減率は25%である。&br;
圧縮前が4096〜9999なら削減率は0%である。&br;
圧縮前が10000〜65536なら削減率は20%である。&br;
圧縮前が65536〜99999なら削減率は0%である。&br;
圧縮前が100000〜524287なら削減率は16.66%である。&br;
圧縮前が-1〜-9なら削減率は-150%である。&br;
圧縮前が-10〜-99なら削減率は-66.66%である。&br;
圧縮前が-100〜-999なら削減率は-25%である。&br;
圧縮前が-1000〜-9999なら削減率は0%である。&br;
圧縮前が-10000〜-99999なら削減率は16.66%である。&br;
圧縮前が-100000〜-524287なら削減率は28.57%である。&br;


欠点は削減率が0%以下になる場合がある事です。負の整数を使っていないときはそのような事はありません。

**CHR$()圧縮 [#m6a0c0d1]
圧縮したい数が入った変数を&basic{A};、圧縮された数を入れる変数を&basic{B$};、展開された数を入れる変数を&basic{C};とすると、

圧縮方法
#basic{{
B$=CHR$(A)
}}
展開方法
#basic{{
C=ASC(B$)
}}
(圧縮前、圧縮後)=(文字コード、文字)です。

|>|~性能|
|文字列の圧縮|不可|
|正の整数の圧縮|0〜255のみ可能|
|負の整数の圧縮|不可|
|小数の圧縮|不可|
|圧縮後の状態|文字列|
|圧縮後の文字数|1|
|圧縮プログラムの行数|1|
|展開プログラムの行数|1|
|削減率|※0%〜50%|

※詳細&br;
圧縮前が0〜9なら削減率は0%である。&br;
圧縮前が10〜99なら削減率は50%である。&br;
圧縮前が100〜255なら削減率は33.33%である。

欠点は圧縮できる範囲が狭いことです。削減率はそこそこですが削減できる文字じたいは0〜2文字です。&br;
圧縮後は全て1文字なので複数のデータを一つにまとめるのが容易です。

*圧縮のための変換 [#vad4dddb]
**小数と小数点無し表記の変換 [#m9ad5da1]
これにより小数も整数のように圧縮することが出来ます。&br;
例)145.5⇔1451、87.39⇔87392、0.002⇔23

アルゴリズムについて&br;
例)12.1*10⇔12.1*10^1⇔121,1⇔1211&br;
例)1.38*100⇔1.38*10^2⇔138,2⇔1382&br;
例)36.287*1000⇔36.287*10^3⇔36287,3⇔362873&br;
例)5.2127*10000⇔5.2127*10^4⇔52127,4⇔521274&br;
のような感じです。

変換したい数が入った変数を&basic{A};、変換された数を入れる変数を&basic{B};とすると、

小数→小数点無し
#basic{{
I=0:B=A
@START
 IF B==FLOOR(B) GOTO@ENDER
 D=INSTR(STR$(B),".")
 E$=MID$(STR$(B),0,D)
 F$=MID$(STR$(B),D+1,1)
 G=LEN(STR$(B))-D
 H$=MID$(STR$(B),D+2,G)
 B=VAL(B$):I=I+1
GOTO@START
@ENDER
B=VAL(STR$(B)+STR$(I))
}}
変換したい数が入った変数を&basic{B};、変換された数を入れる変数を&basic{C};とすると、

小数点無し→小数
#basic{{
B$=STR$(B)
C=VAL(LEFT$(B$,LEN(B$)-1))
FOR I=1 TO VAL(RIGHT$(B$,1))
 C=C/10
NEXT
}}

/////////////////////////////////

* CHECKER FLAG (ひとことコメント) [#y7e6aa7e]
コメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は[[掲示板>Board]]へ)

#comment

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.006 秒 | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30