atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
frostar@wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
frostar@wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
frostar@wiki
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • frostar@wiki
  • CodeIQ:Bits

frostar@wiki

CodeIQ:Bits

最終更新:2013年02月11日 20:19

frostar

- view
管理者のみ編集可
http://www.hyuki.com/codeiq/:問題1
問題概要
法則性を見つけて文字化けしたデータを復元する。

データの先頭の一部
?0??0?0???0?000100000?11??00?0100?0??1??000001?100?0010??000?1000?001100?0001101

解法
1)区切る
ビットの羅列から法則性を見つけるのは難しいので一定個数で区切ります。
個数はビット列ということでとりあえず8bit(1バイト)で区切ってみると
?0??0?0?
??0?0001
00000?11
??00?010
0?0??1??
000001?1
00?0010?
?000?100
0?001100
?0001101
とりあえず切りよく区切れたのでこのまま進めてみることに
2)法則を見る
見ると、下に行くほど上位のビットに1が出現することが多くなっているように思えるので、このことから0からの8bitの2進数という仮定を立てます。
そこで、実際の2進数と比較すると
?0??0?0?:00000000 ○
??0?0001:00000001 ○
00000?11:00000010 ×
??00?010:00000011 ×
0?0??1??:00000100 ○
000001?1:00000101 ○
00?0010?:00000110 ×
?000?100:00000111 ×
0?001100:00001000 ×
?0001101:00001001 ×
このように当てはまらないパターンがいくつか出現するため、仮定は間違いであるとわかります。
ただし、(わかっている範囲での)最上位bitの位置が左右で一致していることから仮定と答えが近いのではないかと考えられます。
そこでとりあえず最上位の1よりも上位にある?を0にしてみます。
00000000
00000001
00000011
00000010
000001??
000001?1
0000010?
00000100
00001100
00001101
だいぶそれっぽくなってきたんじゃないでしょうか?
残るは
000001??
000001?1
0000010?
この3つですね。
最初から4つのパターンは
00000000
00000001
00000011
00000010
であるため、00→01→11→10と変化すると考えられます。
6bit目と7bit目に適用すると
0000011?
00000111
0000010?
となります。
同じものが2度出現しないことから
00000110
00000111
00000101
と決定されるため、結果は
00000000
00000001
00000011
00000010
00000110
00000111
00000101
00000100
00001100
00001101
となります。
ここまでくればあとはすべてに同じ法則を適用するだけです。
基本的には
00000000
00000001
00000011
00000010
00000110
00000111
00000101
00000100
ここまでの法則を使って上位ビットまで拡大していけばOKです。
ちなみにこれはグレイコードという2進数表記法で隣接する値のハミング距離(異なる文字の数)が常に1になるようなものです。
私は元々知ってたので上述の手順の途中で気づいてからプログラムで書き出しました。
以下がそのコードです。

public class GrayCode {
	public static void main(String args[]){
		try {
			PrintStream ps;
			ps = new PrintStream("graycode.txt");
			PrintStream oldps = System.out;
			System.setOut(ps);
			for(int i=0;i<256;i++){
				String s = Integer.toBinaryString(i^i>>1);
				s = String.format("%8s", s);
				s = s.replaceAll(" ", "0");
				System.out.println(s);
			}
			System.setOut(oldps);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
このコードは縦に見たときのパターンからグレイコードを書き出していますので、縦のパターンから法則性に気づいた人もいるかもしれません。
ちなみに後から知ったんですが、ある2進数vからグレイコードへ変換するにはv ^ (v >> 1) をすればいいらしいです。
(^:排他的論理和、>>:ビットシフト)
「CodeIQ:Bits」をウィキ内検索
LINE
シェア
Tweet

[Amazon商品]


frostar@wiki
記事メニュー

メニュー

  • トップページ
  • プロフィール
  • コメント
    • 足跡
    • ツール
    • その他
  • 公開・更新状況について
作ったもの
  • 注意事項
  • TRPG支援ツール
    • SW2.0
      • キャラ管理ツールver2
      • 表出力ツール
      • 抽出ツール
    • でたとこサーガ
      • でたとこツール
    • 永い後日談のネクロニカ
      • キャラ管理ツール
    • その他
      • 2次元戦闘管理ツール
  • LimeChat2用マクロ
    • インストール・設定
    • 直線距離管理ツール
      • Reference
    • HPMPツール
      • Reference
    • 汎用ランダム出力ツール
      • Reference
    • 汎用デッキツール
      • Reference
  • ライブラリ
    • C++
      • ListViewEx

過去の遺物
  • ソフトの配布について
  • お手伝いについて
  • SW2.0
    • キャラ管理ツール
      • FAQ
    • GMツール
    • モンスターツール
  • DX3rd
    • キャラ管理ツール
  • 迷宮キングダム
    • キャラ管理ツール
    • まよきんダイス
  • それ以外
    • ADVスクリプタ
  • 作りたいもの
TRPG
  • コラム
    • コラムについて
    • TRPGとは
    • オンラインセッションについて
    • GM向け
      • GMを始める前に
      • シナリオの作り方
      • マスタリング
  • システム紹介
    • SW2.0
      • 基本ルールブック
      • データ系サプリメント
      • データ系サプリメント2
      • プレイヤーズハンドブック
      • シナリオ系サプリメント
      • ツアー系サプリメント
  • データ
    • SW2.0
      • モンスターデータ
プログラム
  • プログラムを始める人へ
  • プログラムメモ
    • データ構造
      • リスト構造
    • 時間計測
    • FPS管理
    • 数学関数
    • 文字列操作関数
      • strrep
    • 描画関数
      • TransparentAlphaBlt
      • RotateBlt
      • RotateTransparentAlphaBlt
      • 描画関数の時間比較
    • 知っておくと便利
    • コントロール
      • 色を変える
      • チェックボックス付きリストビュー
    • C++標準ライブラリ系
      • StringSplit
      • AccessIterator
      • Java風Iterator
    • winsock系
      • WebSocketサーバ
    • JavaScript系
      • JSONPででたとこのデータ取得
  • CodeIQ
    • 結城浩さんの問題
      • Bits
      • Nick
      • Scissors
    • Paiza Online Hackathon
      • 新人女子の書いたコードを直すやつ
リンク

自分関係

  • リンクについて
ここのページへのリンクについてはこちら
  • ブログ:幾星霜
TRPGのセッション記録とかメインのブログ
  • USTREAM:frostのプログラム雑談室
生配信チャンネル。プログラム<雑談
気が向いたときにやります
  • THE INTERVIEWS
個人的な質問に答えてます。

TRPG系

  • 月光華亭
お世話になっているオンラインセッションサイト
  • TRPG.NET
TRPGのことならここ!
IRCサーバなど、お世話になってます。
  • 屍少女たちの永い午睡(相互)
ネクロニカの支援サイトです。ツール開発やオンセもやっています。

プログラム系

  • 猫でもわかるプログラミング
初心者のためのプログラムのページ。WindowsSDKの方についても詳しく書いています。
  • 窓プログラミング
windowsSDKのテクニックがいろいろ書いてあります。
  • C/C++リファレンス
C++STL(標準テンプレートライブラリ)の日本語版リファレンスです。

@frost_star からのツイート

更新履歴

取得中です。


ここを編集
記事メニュー2
人気記事ランキング
  1. チェックボックス付きリストビュー
  2. HPMPツール
  3. GMツール
もっと見る
最近更新されたページ
  • 2014日前

    足跡
  • 3750日前

    JSONPででたとこのデータ取得
  • 3750日前

    メニュー
  • 3754日前

    でたとこサーガ支援ツール
  • 3754日前

    表出力ツール
  • 3756日前

    直線距離管理ツール
  • 3763日前

    直線距離管理ツール:Reference
  • 3763日前

    SW2.0キャラ管理ツールver2
  • 3842日前

    汎用ランダム出力ツール:Reference
  • 3842日前

    汎用デッキツール
もっと見る
人気記事ランキング
  1. チェックボックス付きリストビュー
  2. HPMPツール
  3. GMツール
もっと見る
最近更新されたページ
  • 2014日前

    足跡
  • 3750日前

    JSONPででたとこのデータ取得
  • 3750日前

    メニュー
  • 3754日前

    でたとこサーガ支援ツール
  • 3754日前

    表出力ツール
  • 3756日前

    直線距離管理ツール
  • 3763日前

    直線距離管理ツール:Reference
  • 3763日前

    SW2.0キャラ管理ツールver2
  • 3842日前

    汎用ランダム出力ツール:Reference
  • 3842日前

    汎用デッキツール
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. 鹿乃つの氏 周辺注意喚起@ウィキ
  2. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  3. MadTown GTA (Beta) まとめウィキ
  4. R.E.P.O. 日本語解説Wiki
  5. シュガードール情報まとめウィキ
  6. AviUtl2のWiki
  7. ソードランページ @ 非公式wiki
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. Dark War Survival攻略
  10. ありふれた職業で世界最強 リベリオンソウル @ ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 検索してはいけない言葉 @ ウィキ
  6. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  7. パタポン2 ドンチャカ♪@うぃき
  8. 発車メロディーwiki
  9. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  10. オレカバトル アプリ版 @ ウィキ
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. Trickster - ストグラ まとめ @ウィキ
  3. ガヴァイ アッカンマン - ストグラ まとめ @ウィキ
  4. 過去の行動&発言まとめ - 鹿乃つの氏 周辺注意喚起@ウィキ
  5. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  6. マイティーストライクフリーダムガンダム - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. コメント/雑談・質問 - マージマンション@wiki
  8. 機体一覧 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  9. 猗窩座(鬼滅の刃) - アニヲタWiki(仮)
  10. MOZU - ストグラ まとめ @ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.