11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JavaScript 暗黒問題集

Last updated at Posted at 2020-07-12

あらすじ

最近 JavaScript を学び始めた知り合いが、JavaScript は暗黒の言語であるという話をどこかで聞いてきたらしい。

この言語を愛して止まない私としては「そうだね」以外の言葉が出てこなかったので、開き直って暗黒面を育む問題集をひっそりと作り始めたのであった。

想定対象

「JavaScript、だいたいわかります」という諸氏に遊んでいただければ幸い。

初学者にとっては混乱を招く内容にしかならないので、避けたほうが良いように思う。

前提条件

  • ES2020 (Standard ECMA-262 11th edition) に従う。
  • strict モード ("use strict" 指定) で実行される。
  • 組み込みのオブジェクトを変更してはならない。
  • ブラウザの機能等、環境依存の API を用いてはならない。

問題

全 10 問

時間制限はない

解は複数存在し得る

問1. 私は私ではない

以下の関数 q1true を返すような値 x を与えよ。

function q1(x) {
  return x !== x;
}

問2. 直観に反する

以下の関数 q2true を返すような値の組 a, b を与えよ。

function q2(a, b) {
  return a == b && a != b;
}

問3. さよなら推移律

以下の関数 q3true を返すような値の組 a, b, c を与えよ。

function q3(a, b, c) {
  return a == b && b == c && a != c;
}

問4. 同じトコロに違うモノ

以下の関数 q4true を返すような値 x を与えよ。

function q4(x) {
  const a = [0, 1];
  return x == x + x && a[x] != a[x + x];
}

問5. 実例の実例

以下の関数 q5true を返すような値 x を与えよ。

function q5(x) {
  return x instanceof x;
}

問6. 入ってます

以下の関数 q6true を返すような値 x を与えよ。

function q6(x) {
  return x in x;
}

問7. いちたりない

以下の関数 q7true を返すような値 x を与えよ。

function q7(x) {
  return Array.isArray(x) &&
    !Array.prototype.some.call(x, v => v) &&
    x.length === 7 &&
    new Set(x).size === 7 &&
    Array.prototype.reduce.call(x, i => i + 1, 0) === 6;
}

問8. おおきすぎる

以下の関数 q8 が、必ず true を返すような関数 f を与えよ。

function q8(f) {
  const n = 4294967297;
  const i = Math.floor(Math.random() * n);
  const x = f(n);
  return x[i] === i;
}

問9. 見慣れない構文

以下の関数 q9 が、必ず true を返すような値 each を与えよ。

function q9(each) {
  const array = new Array(10);
  for (let i = 0; i < 10; i++) {
    array[i] = Math.floor(Math.random() * 10);
  }

  const total = array.reduce((x, y) => x + y, 0);

  for (each.item of array);

  return each.sum === total; 
}

問10. 次の日は別の人

以下の非同期関数 q10 が、最終的に true を返すような関数 f を与えよ。

async function q10(f) {
  const x = await f();
  const y = await x;
  return !Object.is(x, y);
}

// q10(answer).then(value => console.log(value)); // true

解答例

(解答例) JavaScript 暗黒問題集 - Qiita

ネタバレになりそうなコメントは、解答記事の方にしていただけると助かります。

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?