From 42d6571bcd7135ab609ba9d2c5912fc1fab8b348 Mon Sep 17 00:00:00 2001 From: Michael Kapelko Date: Thu, 5 Sep 2019 11:47:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=A0=D0=B0=D1=81=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D1=83?= =?UTF-8?q?=20=D0=BE=D1=82=202109-08-16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + Раскладка_2019-08-16.js | 117 +++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 .gitignore create mode 100644 Раскладка_2019-08-16.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3587989 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Временные файлы VIM. +*.swp diff --git a/Раскладка_2019-08-16.js b/Раскладка_2019-08-16.js new file mode 100644 index 0000000..b8a1c74 --- /dev/null +++ b/Раскладка_2019-08-16.js @@ -0,0 +1,117 @@ +function Раскладка() +{ + this.версия = ""; + this.ширина = 0; + this.высота = 0; + this.глубина = 0; + this.позиции = []; + + // Для внутреннего пользования. + this.поля = []; +}; +Раскладка.prototype.разобратьСлужебнуюИнформацию = function(содержимое) +{ + const ключи = { + "версия": "kmahjongg-layout-v", + "комментарий": "#", + "ширина": "w", + "высота": "h", + "глубина": "d" + }; + + // ВНИМАНИЕ Версия 1.0 предполагает заданные заранее ширину и высоту. + this.версия = ""; + this.глубина = 0; + this.ширина = 32; + this.высота = 16; + this.поля = []; + + var поле = []; + var строки = содержимое.split("\n"); + for (var номер in строки) + { + var строка = строки[номер].trim(); + + // Пропуск. + if (строка.startsWith(ключи.комментарий)) + { + continue; + } + + // Служебная информация. + if (строка.startsWith(ключи.версия)) + { + this.версия = строка.split(ключи.версия)[1]; + } + else if (строка.startsWith(ключи.ширина)) + { + this.ширина = строка.split(ключи.ширина)[1]; + } + else if (строка.startsWith(ключи.высота)) + { + this.высота = строка.split(ключи.высота)[1]; + } + else if (строка.startsWith(ключи.глубина)) + { + this.глубина = строка.split(ключи.глубина)[1]; + } + // Поле. + else + { + поле.push(строка); + if (поле.length >= this.высота) + { + this.поля.push(поле.slice()); + поле = []; + } + } + } + + if (this.глубина == 0) + { + this.глубина = this.поля.length; + } +} +Раскладка.prototype.разобратьПозиции = function() +{ + this.позиции = []; + for (var номер in this.поля) + { + var поле = this.поля[номер]; + for (var строка = 0; строка < this.высота - 1; ++строка) + { + for (var столбец = 0; столбец < this.ширина - 1; ++столбец) + { + if ( + поле[строка][столбец] == "1" && + поле[строка][столбец + 1] == "2" && + поле[строка + 1][столбец] == "4" && + поле[строка + 1][столбец + 1] == "3" + ) { + this.позиции.push([номер, строка, столбец]); + } + } + } + } +} +Раскладка.prototype.разобрать = function(содержимое) +{ + this.разобратьСлужебнуюИнформацию(содержимое); + this.разобратьПозиции(); +} +Раскладка.prototype.отладка = function() +{ + var о = ""; + о += "Отладочная информация о раскладке:\n"; + о += " версия: '" + this.версия + "'\n"; + о += " ширина: '" + this.ширина + "'\n"; + о += " высота: '" + this.высота + "'\n"; + о += " глубина: '" + this.глубина + "'\n"; + о += " позиции:\n"; + for (var номер in this.позиции) + { + var п = this.позиции[номер]; + о += " п(" + номер + "): '" + п[0] + ", " + п[1] + ", " + п[2] + "'\n"; + } + return о; +}