CodeIQ MAGAZINECodeIQ MAGAZINE

【謎解きプログラム】解像度に対応せよ!【dpi】解答と解説

2016.11.15 Category:CodeIQ問題解説・リーダーボード Tag: , ,

  • 4
  • このエントリーをはてなブックマークに追加
entry

言語不問で、プログラムにちなんだ謎を解く「謎解きプログラム」。

あなたは見事、謎を解けましたか? というわけで、出題者の柳井さんによる解答と解説をどうぞ!
by CodeIQ運営事務局

【謎解きプログラム】解像度に対応せよ!【dpi】

本問題は、「解像度に対応せよ!」というテーマで、プログラムにちなんだ謎を解くというものでした。

それでは以下、各問題とその解答を見ていきましょう。

問題のオープニング

ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。

「24時間以内にが解けない場合は、このPCのデータは消失する。

 は、あなたが真のプログラマーなら解けるものだ」

これは挑戦状ではなく脅迫状だ!

そこには、見たことのない謎が掲載されていた。

あなたは歴戦のプログラマーとして、データを救うために、この謎に挑むことになった。

説明

解像度に対応せよ!

画面には、画像ファイルについての情報が示されています。

dpiやピクセル数、実サイズなどを変えることで、他の値がどのように変わるかを当ててください。

問題1

提示情報
  ピクセル数:幅 640、高さ 480
  実サイズ(cm): 幅 5.42、高さ 4.06
  解像度(dpi):300
変更する値
  解像度(dpi):300  → 150
  (解像度を変更するだけなので、実サイズは変わらず)
求める値
  ピクセル数:幅 ?、高さ ?

// 選択肢
ピクセル数:幅 640、高さ 480
ピクセル数:幅 1280、高さ 960
ピクセル数:幅 320、高さ 240

解像度は、ディスプレイやビットマップ画像、プリンターやスキャナーで扱う画像の精細さです。この解像度は、画素(ドット、ピクセル)の数で表します。

dpiは、ドット・パー・インチの略です。1インチ(2.54cm)の中に、どれだけの画素があるかがdpiになり、この値が大きいほど精細になります。

以下、dpiの簡単な式を示します。全て、同じ式を変形したものです。

ピクセル数 / 解像度(dpi) = 実サイズ(インチ)

解像度(dpi) * 実サイズ(インチ) = ピクセル数

ピクセル数 / 実サイズ(インチ) = 解像度(dpi)

問題では、実サイズを変えずに、解像度を半分にしています。

解像度(半分)、実サイズ(固定)

「解像度 * 実サイズ = ピクセル数」なので、等式を成り立たせるためには、ピクセル数を半分にしなければなりません。

解像度(半分) * 実サイズ(固定) = ピクセル数(半分)

そのため、3番目の選択肢の『ピクセル数:幅 320、高さ 240』が答えになります。

Javaサンプル

以下、サンドボックス(言語は「Java8」)で、実行確認できるコードを示します。コード欄に、下記のコードをコピペして、INPUTは空で、RUNボタンを押してください。

// 参考コード
import java.lang.Math;

class Main{
    static final double inch = 2.54;

    // main
    public static void main(String[]args) throws Exception {
        // 提示情報
        double cmW = 5.42;
        double cmH = 4.06;

        // 計算
        int dpi = 150;
        int pxlW = (int)Math.round(cmW * dpi / inch);
        int pxlH = (int)Math.round(cmH * dpi / inch);

        // 出力
        System.out.println("pxlW : " + pxlW);
        System.out.println("pxlH : " + pxlH);
    }
}
// 出力
pxlW : 320
pxlH : 240

JavaScriptサンプル

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード

var inch = 2.54;

// 提示情報
var cmW = 5.42;
var cmH = 4.06;
var dpi = 150;

// 計算
var pxlW = Math.round(cmW * dpi / inch);
var pxlH = Math.round(cmH * dpi / inch);

// 出力
console.log("pxlW : " + pxlW);
console.log("pxlH : " + pxlH);
// 出力
pxlW : 320
pxlH : 240

問題2

提示情報
  ピクセル数:幅 900、高さ 300
  実サイズ(cm): 幅 7.62、高さ 2.54
  解像度(dpi):300
変更する値
  ピクセル数:幅 900、高さ 300 → 幅 300、高さ 100
  (ピクセル数を変更するだけで、実サイズは変更せず)
求める値
  解像度(dpi):?

// 選択肢
解像度(dpi):300
解像度(dpi):900
解像度(dpi):100

問題では、実サイズを変えずに、ピクセル数を1/3にしています。

ピクセル数(1/3)、実サイズ(固定)

「ピクセル数 / 実サイズ = 解像度」なので、等式を成り立たせるためには、解像度を1/3にしなければなりません。

ピクセル数(1/3) * 実サイズ(固定) = 解像度(1/3)

そのため、3番目の選択肢の『解像度(dpi):100』が答えになります。

Javaサンプル

以下、サンドボックス(言語は「Java8」)で、実行確認できるコードを示します。コード欄に、下記のコードをコピペして、INPUTは空で、RUNボタンを押してください。

// 参考コード
import java.lang.Math;

class Main{
    static final double inch = 2.54;

    // main
    public static void main(String[]args) throws Exception {
        // 提示情報
        double cmW = 7.62;

        // 計算
        int pxlW = 300;
        int dpi = (int)Math.round(pxlW / cmW * inch);

        // 出力
        System.out.println("dpi : " + dpi);
    }
}
// 出力
dpi : 100

JavaScriptサンプル

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード

var inch = 2.54;

// 提示情報
var cmW = 7.62;

// 計算
var pxlW = 300;
var dpi = Math.round(pxlW / cmW * inch);

// 出力
console.log("dpi : " + dpi);
// 出力
dpi : 100

問題3

提示情報
  ピクセル数:幅 640、高さ 480
  実サイズ(cm): 幅 5.42、高さ 4.06
  解像度(dpi):300
変更する値
  解像度(dpi):300  → 600
求める値
  ピクセル数:幅 ?、高さ ?
  実サイズ(cm): 幅 ?、高さ ?

// 選択肢
ピクセル数:幅 640、高さ 480 / 実サイズ(cm): 幅 10.84、高さ 8.12
ピクセル数:幅 1280、高さ 959 / 実サイズ(cm): 幅 10.84、高さ 8.12
ピクセル数:幅 1280、高さ 959 / 実サイズ(cm): 幅 5.42、高さ 4.06
ピクセル数:幅 320、高さ 240 / 実サイズ(cm): 幅 5.42、高さ 4.06

問題では、dpiを2倍にしています。この場合は、実サイズを固定してピクセル数を2倍にするか、実サイズを半分にしてピクセル数を固定にする必要があります。

解像度(2倍) * 実サイズ(固定) = ピクセル数(2倍)

解像度(2倍) * 実サイズ(半分) = ピクセル数(固定)

この条件に一致する選択肢を探します。

その結果、3番目の選択肢の『ピクセル数:幅 1280、高さ 959 / 実サイズ(cm): 幅 5.42、高さ 4.06』(ピクセル数を2倍、実サイズ固定)が答えになります。

以下に、各選択肢の解像度も計算しておきます。

ピクセル数:幅 640、高さ 480 / 実サイズ(cm): 幅 10.84、高さ 8.12
→ 解像度:640 / (10.84/2.54) = 約150dpi

ピクセル数:幅 1280、高さ 959 / 実サイズ(cm): 幅 10.84、高さ 8.12
→ 解像度:1280 / (10.84/2.54) = 約300dpi

ピクセル数:幅 1280、高さ 959 / 実サイズ(cm): 幅 5.42、高さ 4.06
→ 解像度:1280 / (5.42/2.54) = 約600dpi

ピクセル数:幅 320、高さ 240 / 実サイズ(cm): 幅 5.42、高さ 4.06
→ 解像度:320 / (5.42/2.54) = 約150dpi

Javaサンプル

以下、サンドボックス(言語は「Java8」)で、実行確認できるコードを示します。コード欄に、下記のコードをコピペして、INPUTは空で、RUNボタンを押してください。

// 参考コード
import java.lang.Math;

class Main{
    static final double inch = 2.54;

    // main
    public static void main(String[]args) throws Exception {
        // 提示情報
        double cmW = 5.42;
        double cmH = 4.06;

        // 各計算式の計算結果
        int dpi = 600;
        int pxlW = (int)Math.round(cmW * dpi / inch);
        int pxlH = (int)Math.round(cmH * dpi / inch);

        // 出力
        System.out.println("pxlW : " + pxlW);
        System.out.println("pxlH : " + pxlH);
    }
}
// 出力
pxlW : 1280
pxlH : 959

JavaScriptサンプル

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード

var inch = 2.54;

// 提示情報
var cmW = 5.42;
var cmH = 4.06;
var dpi = 600;

// 計算
var pxlW = Math.round(cmW * dpi / inch);
var pxlH = Math.round(cmH * dpi / inch);

// 出力
console.log("pxlW : " + pxlW);
console.log("pxlH : " + pxlH);
// 出力
pxlW : 1280
pxlH : 959

CodeIQ運営事務局より

柳井さん、ありがとうございました!
現在、柳井さんの最新問題が出題中です。
ぜひ挑戦してみてくださいね!

  • 4
  • このエントリーをはてなブックマークに追加

■関連記事

【謎解きプログラム】条件に当てはまる文字列は?【正規表現】解答と解説... 【謎解きプログラム】条件に当てはまる文字列は?【正規表現】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「2...
【謎解きプログラム】乱数で発生する数値は?【組み合わせ】解答と解説... 【謎解きプログラム】乱数で発生する数値は?【組み合わせ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24...
「放物線とマス目の関係」問題の解答と解説... table.nabe{ margin-left:30px; } .nabefloat{ float:right; } table.nabe td, table.nabe th{ padding:3px; } table.nabe th{ ...
【謎解きプログラム】データをバイナリで見てみよう【バイナリ】解答と解説... 【謎解きプログラム】データをバイナリで見てみよう【バイナリ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「...
【謎解きプログラム】データベースを扱ってみよう【SQLite】解答と解説... 【謎解きプログラム】データベースを扱ってみよう【SQLite】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 ...
【謎解きプログラム】弾幕の軌跡を作ってみよう【描画】解答と解説... 【謎解きプログラム】弾幕の軌跡を作ってみよう【描画】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ