ガジェット通信

見たことのないものを見に行こう

【選択式問題】相対URLパズル【言語不問】解答と解説

DATE:
  • ガジェット通信を≫

相対URLパズル

本問題は、仮想コードのルールに従った処理の結果を、選択肢から選ぶというものでした。

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

問題のオープニング

あなたは、相対URLの女神「レラ=ティブ」の神殿にやって来ました。

この神殿では、女神の出す問題に正解すれば富を約束され、間違うと死を約束されます。

あなたは、歴戦のプログラマーとして、女神の意図をくんで解答しなければなりません。

この神殿では、仮想コードが提示されます。その計算結果を、選択肢から選んでください。

// 仮想コードのルール
resolve(arg1, arg2) ……
 arg1は基準となる絶対URL、arg2は相対URLの指定。
 arg1に対するarg2を解決した絶対URLを出力する。

資料

相対URLの挙動については、W3CのURLrelative path state)を見るとよいでしょう。

日本語の文書だと、URIURIとファイルディレクトリなどが簡潔で分かりやすいと思います。より詳しく見たい場合は、Uniform Resource Identifier (URI): 一般的構文あたりも役に立つと思います。

問題1

// 問題
resolve(“http://ab.c/def/ghi/jkl/”, “..”);

// 選択肢

http://ab.c/def/ghi/jkl/
http://ab.c/def/ghi/
http://ab.c/def/
http://ab.c/

それでは問題の答えが、どのような値になるか、見ていきましょう。

// 仮想コードの処理
「http://ab.c/def/ghi/jkl/」のディレクトリは「http://ab.c/def/ghi/jkl/」。

そこから「..」で、1つ上のディレクトリに移動して「http://ab.c/def/ghi/」。

上記の通り、答えは2番目の選択肢の『http://ab.c/def/ghi/』になります。

Javaサンプル

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

// 参考コード
import java.net.URI;
class Main{
public static void main(String[]args) throws Exception {
// 問題
resolve(“http://ab.c/def/ghi/jkl/”, “..”);
}
// 関数
public static void resolve(String arg1, String arg2) throws Exception {
System.out.println(new URI(arg1).resolve(arg2));
}
}

// 出力結果

http://ab.c/def/ghi/

JavaScriptサンプル

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

// 参考コード

// 関数
var resolve = function(arg1, arg2) {
console.log(“” + new URL(arg2, arg1));
};

// 問題
resolve(“http://ab.c/def/ghi/jkl/”, “..”);

// 出力結果

http://ab.c/def/ghi/

問題2

// 問題
resolve(“http://ab.c/def/ghi/jkl.txt”, “..”);

// 選択肢

http://ab.c/def/ghi/jkl/
http://ab.c/def/ghi/
http://ab.c/def/
http://ab.c/

それでは問題の答えが、どのような値になるか、見ていきましょう。

// 仮想コードの処理
「http://ab.c/def/ghi/jkl.txt」のディレクトリは「http://ab.c/def/ghi/」。

そこから「..」で、1つ上のディレクトリに移動して「http://ab.c/def/」。

上記の通り、答えは3番目の選択肢の『http://ab.c/def/』になります。

Javaサンプル

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

// 参考コード
import java.net.URI;
class Main{
public static void main(String[]args) throws Exception {
// 問題
resolve(“http://ab.c/def/ghi/jkl.txt”, “..”);
}
// 関数
public static void resolve(String arg1, String arg2) throws Exception {
System.out.println(new URI(arg1).resolve(arg2));
}
}

// 出力結果

http://ab.c/def/

JavaScriptサンプル

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

// 参考コード

// 関数
var resolve = function(arg1, arg2) {
console.log(“” + new URL(arg2, arg1));
};

// 問題
resolve(“http://ab.c/def/ghi/jkl.txt”, “..”);

// 出力結果

http://ab.c/def/

問題3

// 問題
resolve(“http://ab.c/def/ghi/jkl.txt”, “../mno/jkl.txt”);

// 選択肢

http://ab.c/def/jkl.txt
http://ab.c/mno/jkl.txt
http://ab.c/def/mno/jkl.txt
http://ab.c/jkl.txt
http://ab.c/def/mno/
http://ab.c/mno/

それでは問題の答えが、どのような値になるか、見ていきましょう。

// 仮想コードの処理
「http://ab.c/def/ghi/jkl.txt」のディレクトリは「http://ab.c/def/ghi/」。

そこから「../mno/jkl.txt」で、1つ上のディレクトリに移動して「mno/jkl.txt」を足すので「http://ab.c/def/mno/jkl.txt」。

上記の通り、答えは3番目の選択肢の『http://ab.c/def/mno/jkl.txt』になります。

Javaサンプル

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

// 参考コード
import java.net.URI;
class Main{
public static void main(String[]args) throws Exception {
// 問題
resolve(“http://ab.c/def/ghi/jkl.txt”, “../mno/jkl.txt”);
}
// 関数
public static void resolve(String arg1, String arg2) throws Exception {
System.out.println(new URI(arg1).resolve(arg2));
}
}

// 出力結果

http://ab.c/def/mno/jkl.txt

JavaScriptサンプル

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

// 参考コード

// 関数
var resolve = function(arg1, arg2) {
console.log(“” + new URL(arg2, arg1));
};

// 問題
resolve(“http://ab.c/def/ghi/jkl.txt”, “../mno/jkl.txt”);

// 出力結果

http://ab.c/def/mno/jkl.txt

CodeIQ運営事務局より

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

カテゴリー : デジタル・IT タグ :
CodeIQ MAGAZINEの記事一覧をみる ▶
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。

TOP