AT_wn2017_1_a Satellite data compression

Description

[problemUrl]: https://atcoder.jp/contests/wn2017_1/tasks/wn2017_1_a アメリカ大陸の一部を $ 5 $ 分おきに観測したデータが $ 4 $ 観測分あります。 データは光の波長によってデータが別れていて $ 16 $ チャネルあるので、合計で $ 64 $ 個の衛星データファイルがあります。 このデータ全てを可能な限り圧縮するプログラムと、解凍を行うプログラムを、同一のソースコードで作成しなさい。

Input Format

入力は、圧縮と解凍の2つのパターンが連続して与えられる。 圧縮フェーズでは、入力は以下の形式で与えられる。 > encode $ UserEncodingFileName $ $ DirectoryName $ $ N $ $ file_1 $ $ fileSize_1 $ $ file_2 $ $ fileSize_2 $ : $ file_N $ $ fileSize_N $ 解凍フェーズでは、入力は以下の形式で与えられる。 > decode $ UserEncodingFileName $ $ UnzipDirectoryName $

Output Format

圧縮フェーズでは、指定されたファイル名の圧縮ファイルを $ 1 $ つだけ出力してください。 別名のファイルなどを作成した場合、採点は行われますが、後日、手動でのチェックにて削除されます。 誤って別ファイルを生成するプログラムを作成してしまった場合は、このコンテストの質問ページよりご連絡ください。 解凍フェーズでは、指定されたフォルダに、圧縮された全てのファイルを解凍しなさい。

Explanation/Hint

### 問題文補足 - 与えられるデータについての情報は、問題文下部の参考情報にて与えられます。 - 与えられる $ 64 $ 個のデータには関連があり、データの差分を利用して圧縮することで、データファイルが小さくなることが期待出来ます。 ### 提出プログラムの制約 - 可逆圧縮であり、採点データ以外の同条件の衛星データファイルも圧縮・解凍可能であること。 - アルゴリズムの利用にあたり、他の組織や人物に対して利用料を支払う必要がないこと。 - 圧縮フェーズと解凍フェーズを合わせて $ 600 $ 秒以内に実行が終わる必要がある。なお、採点プログラムの実行時間(およそ $ 16 $ 秒)もこれに含まれる。 ### 入力の制約 - ファイル数 $ N\ =\ 64 $ - 入力で与えられる、`encode`, `decode` は、それぞれそのままの文字列であり、圧縮フェーズ・解凍フェーズの判別に使用する。 - $ UserEncodingFileName $は、圧縮ファイルを出力するべきファイルの絶対パスを指し、アルファベットまたはスラッシュで $ 50 $ 文字以下の文字列であることが保証されている。 - $ DirectoryName $は、圧縮したいディレクトリの絶対パスを指し、アルファベットまたはスラッシュで $ 50 $ 文字以下であることが保証されている。 - $ file_i $ は圧縮すべきファイルのファイル名を表し、半角英数またはハイフン、アンダースコア、ドットで構成された $ 100 $ 文字以下の文字列であることが保証されている。 - $ fileSize_i\ ≦\ 120,000,000 $, $ filesize_i $ の合計は $ 1,200,000,000 $ 以下であることが保証されている。 - $ UnzipDirectoryName $は、解凍したいディレクトリの絶対パスを指し、アルファベットまたはスラッシュで $ 50 $ 文字以下の文字列であることが保証されている。 ### スコアの算出方法 正しく圧縮・解凍が行われていた場合、圧縮率を $ 1,000,000 $ 倍したものがスコアになり、その他の場合は $ 0 $ 点となります。 ### 補足説明: 12月19日更新 圧縮率の算出について補足します。 算出には以下の式を用います。 ``` 1 - 参加者のアルゴリズムで圧縮されたデータのサイズ / bz2によって圧縮されたデータのサイズ ``` ※ただしbz2圧縮は-9オプションを指定した際のサイズで、ジャッジに用いられているデータを圧縮した場合は507,803,245bです 上記の式を用いて圧縮率を計算し、最も圧縮率が高いアルゴリズムを提出した参加者のみを受賞者として賞金が支払われます。受賞者の賞金の算定はbz2圧縮より圧縮率が高い場合に30万円、圧縮率が1%上がる毎に1万円が加算され、最大で100万円の賞金が支払われます。 また、本コンテストは既存のライブラリなどを用いて圧縮方式を試行するコンテストではありません。システム上Acceptが出ますが、コンテスト終了後に最終審査の段階で審査員がソースコードを読みRejectしますのでご了承ください。 ### 衛星データについて GOES(Geostationary Operational Environmental Sattellite)はアメリカ合衆国の静止気象衛星で、NOAA(Natonal Oceanic and Atmospheric Administration:アメリカ海洋大気庁)が運用を行っています。GOESはアメリカ大陸の東西に1機ずつ配置され、GOES-16は東側を担当するGOES-Eastとして2017年12月からの運用が予定されています。 衛星はABI(Advanced Baseline Imager)を用いてイメージャー/サウンダー観測を行います。観測データは波長ごと16のバンドに分かれていて、バンドによって解像度が異なります。各バンドの詳細は表を参照してください。 バンド 波長(μm) 中心波長 解像度(km) 画素数(x \* y) 1 0.45-0.49 0.47 1 5000 \* 3000 2 0.59-0.69 0.64 0.5 10000 \* 6000 3 0.846-0.885 0.865 1 5000 \* 3000 4 1.371-1.386 1.378 2 2500 \* 1500 5 1.58-1.64 1.61 1 5000 \* 3000 6 2.225-2.275 2.25 2 2500 \* 1500 7 3.80-4.00 3.90 2 2500 \* 1500 8 5.77-6.6 6.19 2 2500 \* 1500 9 6.75-7.15 6.95 2 2500 \* 1500 10 7.24-7.44 7.34 2 2500 \* 1500 11 8.3-8.7 8.5 2 2500 \* 1500 12 9.42-9.8 9.61 2 2500 \* 1500 13 10.1-10.6 10.35 2 2500 \* 1500 14 10.8-11.6 11.2 2 2500 \* 1500 15 11.8-12.8 12.3 2 2500 \* 1500 16 13.0-13.6 13.3 2 2500 \* 1500 今回のコンテストではCONUS(Continental US)データを用います。このデータはアメリカ域の5000km \* 3000kmのエリアを5分毎に観測したデータです。4観測分のデータは約15分間のデータに相当します。 ### 参考情報 - [GOES-R ドキュメント](http://www.goes-r.gov/resources/docs.html) - [ヘッダ部を含まない衛星画像データ(ジャッジに用いられるバイナリデータ)](https://s3-ap-northeast-1.amazonaws.com/wni-pgcontest/ContestData/bin_4obs.tar.bz2) - [ヘッダ部を含む衛星画像データ(netCDFデータ)](https://s3-ap-northeast-1.amazonaws.com/wni-pgcontest/ContestData/original.tar.bz2) - [netCDFデータのビューア](https://www.giss.nasa.gov/tools/panoply/) ### Sample Explanation 1 \- 圧縮フェーズの入力です。`/AtCoder/Dir/fileA`, `/AtCoder/Dir/fileB`, `/AtCoder/Dir/fileC`の $ 3 $ つのファイルを圧縮し、`/AtCoder/ZipFile`というファイル名で出力してください。 ### Sample Explanation 2 \- 解凍フェーズの入力です。入力例1で与えられたファイルを解凍する場合、`/AtCoder/ZipFile`から、`/AtCoder/UnzipDir/fileA`, `/AtCoder/UnzipDir/fileB`, `/AtCoder/UnzipDir/fileC`の $ 3 $ つのファイルを出力してください。