Сохранено!
Этот тестовый стенд более не актуален
"use strict";
// JavaScript ES6+
// последний Google Chrome

/**
 * JavaScript класс-стенд с академическими задачами.
 * Небходимо заполнить все пропуски в классе так, чтобы он
 * удовлетворял поставленным assert'ам.
 */
class JobSeeker {
	/**
	 * Assert #1
	 */
	buildArray(value) {
		let stack = [value];
		const out = value => {
			if (typeof value === '[[::arr-name1;value]]') {
				stack.push(value);
				return out;
			}

			return value.[[::arr-name2;someName]](stack);
		};

		return out;
	}

	/**
	 * Assert #2
	 * Не допускается ответ в виде вызова функции
	 * и вставка самого "бинарного" символа без преобразования
	 */
	[[::prop-name1;someName]] = [[::prop-name2;value]];

	/**
	 * Assert #3
	 * Пожалуйста, введите ваши реальные данные
	 */
	getCardElement() {
		let el = document.createElement('div');
		let data = {
			name: '[[::card-name;Ваше реальное имя]]',
			city: '[[::card-city;Где вы проживаете]]',
			age: '[[::card-age;Сколько вам лет]]',
		};
		let html = '[[::card-html;value]]';
		html = html.replace(/::(\w+)/g, (tmp, key) => data[key]);
		el.innerHTML = html;
		return el;
	}

	/**
	 * Assert #4
	 */
	isEqualStrings(str1, str2) {
		return new [[::eq-name1;someName]](
			[str1, str2]['[[::eq-name2;someName]]'](i => i['[[::eq-name3;someName]]']('NFKC'))
				.filter((v, i, a) => typeof v === 'string' && a.length === 2)
		).size === 1;
	}

	/**
	 * Assert #5
	 * Важно! Этот assert будет работать только в Google Chrome
	 */
	formatNumbers(...nums) {
		return [[::fn-name1;someName]](nums.join('_'))['[[::fn-name2;someName]]'](2 [[::fn-name3;operator]] 2);
	}

	/**
	 * Assert #6 (part 1)
	 */
	[[::new-name1;someName]]() {
		return [[::new-name2;value]];
	}

	/**
	 * Assert #6 (part 2)
	 */
	[[::new-name3;someName]]() {
		return [[::new-name4;someName]][0] ? [[::new-name5;value]] : void 0;
	}

	/**
	 * Assert #7
	 */
	modifyHtmlFragment(color, html) {
		let el = document.createElement('[[::html-name1;name]]');
		el.innerHTML = html;
		el = el.content;

		let p = el.querySelector('[[::html-selector1;value1]]');
		p.parentNode.insertBefore(p, p.previousElementSibling);
		p.parentNode.style.backgroundColor = color;

		p = el.querySelector('[[::html-selector2;value1]]');
		p.textContent = '6';

		el.querySelectorAll('[[::html-selector3;value1]]').forEach(el => el.parentElement.remove());

		return el;
	}

	/**
	 * Assert #8
	 */
	async findExit(labyrinth) {
		const map = Number('0b' + '[[::exit-map;map]]');
		const size = Math.abs([[::exit-value;value]]);
		const keys = '[[::exit-keys;value]]'.match(/\d+/g).map(Number);
		const threshold = 0x88 + 1;

		let img = new Image();
		await new Promise((resolve, reject) => {
			img.addEventListener('load', resolve);
			img.addEventListener('error', reject);
			img.src = labyrinth;
		});

		let c = document.createElement('canvas');
		let ctx = c.getContext('2d');
		c.width = img.naturalWidth;
		c.height = img.naturalHeight;
		ctx.drawImage(img, 0, 0);

		let decodeOffset = [0, 0, 0],
			imgData = ctx.getImageData(0, 0, c.width, c.height),
			rgb = imgData.data;

		for (let i = 0; i < rgb.length; i += 4) {
			for (let k = 0; k < 3; k++) {
				decodeOffset[k] += i % keys[k];
				rgb[i + k] = (rgb[i + k] + decodeOffset[k]) % 256;
			}
		}

		// теперь можно посмотреть картинку)
		// ctx.putImageData(imgData, 0, 0); document.body.appendChild(c);

		let step = 0, i = 0, limit = 1000;
		let directions = [-c.width, size, c.width, -size].map(x => x * 4);

		do {
			let key = ~~(rgb[i] / threshold) << 2
				| ~~(rgb[i + 1] / threshold) << 1
				| ~~(rgb[i + 2] / threshold);

			if (key === 0b0) {
				return false;
			}

			if (key === 0b110) {
				return true;
			}

			if (key !== [[::exit-road;value]]) {
				let dir = 9, i = 0;
				while ((7 & (map >> dir)) !== key && dir > -1) {
					dir -= 3;
					i++;
				}

				if (!directions[i]) {
					return false;
				}
				step = directions[i];
			}
			i += step;
		} while (i > 0 && i < rgb.length && --limit > 0);

		return false;
	}
}

Assert 0/0

console.assert(
	new JobSeeker().buildArray(1)(2)(3)(4)(function () {
		return this.filter(x => x & 1 === 1);
	}).join(",") === "1,3"
);
let inst = new JobSeeker();
let f = String.fromCharCode(0b101);
console.assert(
	inst[f]++ === ++inst[f]
	&& inst[f] - 1 === inst[f] / 15
);
let el = new JobSeeker().getCardElement();
console.assert(
	/^[А-Я][-а-я]+\s[А-Я]\.$/.test(
		el.querySelector('*:only-child > span:empty + my-name').textContent
	)
	&& /^[гдп]\.\s[А-Яа-я]+$/.test(
		el.querySelectorAll('.my-city')[1].dataset.cityName
	)
	&& parseInt(el.querySelector('[data-my-age]:out-of-range').value) > 18
);
let str1 = "Hello\xA0World";
let str2 = "Hello\x20World";
console.assert(
	str1 !== str2
	&& (new JobSeeker()).isEqualStrings(str1, str2)
);
let inst = new JobSeeker();
console.assert(
	inst.formatNumbers(1, 233, 3, 22) === "4550652"
	&& inst.formatNumbers(332, 12, 2) === "1210532"
	&& inst.formatNumbers(44, 232, 342, 1) === "3227250735"
);
let i;
console.assert(
	(i = new JobSeeker()) instanceof JobSeeker
	&& new new new new new JobSeeker(i--)(i--)(i--)(i--)(i--) instanceof JobSeeker
);
let mix = "<div><p>X</p><p>Y</p></div>".repeat(~~(Math.random() * 10));
console.assert(
	new JobSeeker().modifyHtmlFragment(
		"#224411ff",
		`${mix}<div><p>1</p></div>${mix}
		<div><p>2</p>,<p>3</p>,<p>4</p></div>${mix}<div><p>5</p></div>${mix}`
	).textContent.replace(/[\s,]/g, "") === "12436"
);
let labyrinth = "./img/frontend-2/7Ld31xjn5M.png";
new JobSeeker().findExit(labyrinth).then(
	res => console.assert(res),
	() => console.assert(false)
);

Проблема валидации

Подсвеченное в коде поле имеет недопустимое значение. Выполнить программу невозможно.

Уровень 1

Level