diff --git a/js-core/homeworks/homework-14/index.html b/js-core/homeworks/homework-14/index.html
new file mode 100644
index 0000000..d383951
--- /dev/null
+++ b/js-core/homeworks/homework-14/index.html
@@ -0,0 +1,52 @@
+
+
+
+
+
+ test page
+
+
+
+
+
+
diff --git a/js-core/homeworks/homework-14/src/main.css b/js-core/homeworks/homework-14/src/main.css
new file mode 100644
index 0000000..b02a1c8
--- /dev/null
+++ b/js-core/homeworks/homework-14/src/main.css
@@ -0,0 +1,17 @@
+body{
+ font: 20px sans-serif
+}
+#main li{
+ list-style-type: none;
+ margin: 0 0 0 20px
+}
+#main li:first-child{
+ margin: 10px 0 0 20px
+}
+#main article>input{
+ margin: 0 0 0 150px;
+ font-size: 30px
+}
+#main ul{
+ margin: 0 0 20px 0
+}
\ No newline at end of file
diff --git a/js-core/homeworks/homework-14/src/main.js b/js-core/homeworks/homework-14/src/main.js
new file mode 100644
index 0000000..29e82a2
--- /dev/null
+++ b/js-core/homeworks/homework-14/src/main.js
@@ -0,0 +1,125 @@
+/*
+TASK 0. Найдите числа которые повторяются нечетное количество раз
+в массиве
+ solution([12, 23, 34, 12, 12, 23, 12, 45]) -> [34 45]
+ solution([4, 4, 100, 5000, 4, 4, 4, 4, 4, 100, 100,]) -> [4 100 5000]
+ solution([3, 3, 4, 6, 4, 5, 9, 9, 21, 9]) -> [6 5 9 21]
+ solution([4, 8, 15, 16, 23, 42, 4, 15, 42, 42]) -> [8 16 23 42]
+ solution([2, 2, 44, 44]) => []
+*/
+let solution1 = arr => {
+ let array = [];
+ let obj = {}
+ arr.forEach(elem => {
+ if (obj[elem]) {
+ obj[elem]++;
+ }
+ else{
+ obj[elem] = 1}
+ });
+ let keys = Object.keys(obj)
+ keys.map(elem => {
+ if(obj[elem] % 2 != 0){
+ array.push(elem)
+ }
+ })
+ return array
+ }
+console.log(solution1([12, 23, 34, 12, 12, 23, 12, 45]));
+console.log(solution1([4, 4, 100, 5000, 4, 4, 4, 4, 4, 100, 100,]))
+
+const someWebpackModule = `module.exports = {
+ context: %%HOMEDIR%,
+ entry: {
+ app: "%%HOMEDIR%%/%%APP_DIR%%/%%APPNAME%%.js"
+ },
+ output: {
+ path: %%HOMEDIR%% + '/app',
+ filename: "dist/[%%APPNAME%%].js",
+ library: '[%%APPNAME%%]'
+ }
+ }`;
+let regStr = (str,startValue, finalValue ) => {
+ var regexp = new RegExp(startValue, "g", "m", "i");
+ let newStr = str.replace(regexp, finalValue);
+ console.log(newStr);
+}
+regStr(someWebpackModule, '%%HOMEDIR%%', './JavaScript-Basic');
+regStr(someWebpackModule, '%%APP_DIR%%', 'fixtures/src');
+regStr(someWebpackModule, '%%APPNAME%%', 'app.js');
+
+/* TASK - 1
+Распарсите строку и замените
+ %%HOMEDIR%% -> './JavaScript-Basic'
+ %%APP_DIR%% -> 'fixtures/src'
+ %%APPNAME%% -> 'app.js'
+ Вам нужно написать функцию которая в зависимости от разных параметров
+ будет изменять заданные значения на необходимые вам
+ Сделайте несколько вызовов данной функции
+ *
+ * */
+
+
+
+/*
+ TASK - 2
+ Сделайте разметку как скриншоте используя HTML
+ вам необходимо использовать тэги(!)
+*/
+
+
+
+
+/*
+TASK 3
+ JavaScript =>
+ Создать объект с методами, которые будут динамически генерировать DOM
+ Это будет тест, который мы будем разрабатывать в следующих заданиях.
+ Сейчас вам нужно только динамически создать html,
+ методы должны храниться в одном объекте.
+ Изначально на странице должен быть только ,
+ вызывая методы объекта нужно создать dom-элементы
+*/
+let test = {
+ render(){
+ let main = document.createElement('main')
+ let section = document.createElement('section')
+ let h1 = document.createElement('h1')
+ let article = document.createElement('article')
+ let input = document.createElement('input')
+ main.setAttribute('id', 'main')
+ main.appendChild(section)
+ section.appendChild(h1)
+ h1.innerHTML = 'Тест по программированию'
+ section.appendChild(article)
+ let arrWithQustion = [
+ '1. Вопрос №1',
+ '2. Вопрос №2',
+ '3. Вопрос №3'
+ ]
+ let arrWithAnswers = [
+ 'Вариант ответа №1',
+ 'Вариант ответа №2',
+ 'Вариант ответа №3'
+ ]
+
+ arrWithQustion.forEach(elem=>{
+ let ul = document.createElement('ul')
+ ul.innerHTML = elem;
+ article.appendChild(ul)
+ arrWithAnswers.forEach(elem=>{
+ let li = document.createElement('li')
+ let input = document.createElement('input')
+ input.setAttribute('type', 'checkbox')
+ ul.appendChild(li)
+ li.appendChild(input)
+ input.innerHTML = elem;
+ })
+ })
+ article.appendChild(input)
+ input.setAttribute('type', 'submit')
+ input.setAttribute('value', 'Проверить результат')
+ document.body.appendChild(main)
+ }
+}
+test.render();
\ No newline at end of file