var questions = { "ex_4_1": { count: 1, type: "th", // text with hints variants: [ "Мы стояли на {улица|улице}.", "Мы стояли на {остановка|остановке}.", "Мы стояли на {станция|станции}.", "Мы стояли на {площадка|площадке}.", "В этой {книга|книге}.", "В этой {статья|статье}.", "В этой {песня|песне}.", "В этой {Конституция|Конституции}.", "В этой {энциклопедия|энциклопедии}.", "Она стала {певица|певицей}.", "Она стала {танцовщица|танцовщицей}.", "Она стала {врач|врачом}.", "Она стала {поэт|поэтом}.", "Она стала {продавщица|продавщицей}.", "Она стала {учительница|учительницей}.", "Самолёт летел над {Канада|Канадой}.", "Самолёт летел над {Польша|Польшей}.", "Самолёт летел над {Россия|Россией}.", "Самолёт летел над {Чехия|Чехией}.", "Самолёт летел над {Германия|Германией}.", "Самолёт летел над {Ангола|Анголой}.", "Самолёт летел над {Прага|Прагой}.", "Самолёт летел над {деревня|деревней}.", "Самолёт летел над {ратуша|ратушей}.", "Самолёт летел над {река|рекой}.", "В саду тянулись ряды {вишня|вишен}.", "В саду тянулись ряды {слива|слив}.", "В саду тянулись ряды {яблоня|яблонь}.", "В саду тянулись ряды {черешня|черешен}.", "В саду тянулись ряды {груша|груш}.", "В детстве я слушал много {песня|песен}.", "В детстве я слушал много {басня|басен}.", "В детстве я слушал много {сказка|сказок}.", "В московском Кремле много {башня|башен}.", "В московском Кремле много {статуя|статуй}.", "В московском Кремле много {картина|картин}.", "В московском Кремле много {икона|икон}.", "Дети любят всех {кошка|кошек}.", "Дети любят всех {собака|собак}.", ] }, "ex_4_2": { count: 1, type: "tff", // text with gaps to fill + feedback variants: [ "свеча – {свечой}|идти со свечой", "птица – {птицей}|с этой птицей", "волчица – {волчицей}|со старой волчицей", "столица – {столицей}|с новой столицей", "баржа – {баржей/баржой}|зависит от ударения: ба́ржа – ба́ржей, баржа́ – баржо́й; с огромной баржей/баржой", "овца – {овцой}|с чёрной овцой", "курица – {курицей}|с этой курицей", "свинья – {свиньёй}|с этой свиньёй", "лапша – {лапшой}|суп с лапшой", "крыша – {крышей}|дом с новой крышей", "граница – {границей}|с хорошо охраняемой границей", "умница – {умницей}|с этим умницей / с этой умницей", "кожа – {кожей}|с гладкой кожей", "ратуша – {ратушей}|со старинной ратушей", "дача – {дачей}|с загородной дачей", "встреча – {встречей}|с международной встречей", "задача – {задачей}|с трудной задачей", "юноша – {юношей}|с этим юношей", "Саша – {Сашей}|с другом Сашей", "Маша – {Машей}|с подругой Машей", "душа – {душой}|с открытой душой", "тысяча – {тысячей}|с тысячей жителей", "груша – {грушей}|со сладкой грушей", ] }, "ex_4_3": { count: 1, type: "th", // text with gaps to fill + feedback variants: [ "Сколько вы получили новогодних {открытки|открыток}?", "В этой делегации было несколько известных {спортсменки|спортсменок}.", "В его коллекции много прекрасных {бабочки|бабочек}.", "В его коллекции много прекрасных {марки|марок}.", "В больницах не хватает опытных {медсёстры|медсестёр}.", "В магазине большой выбор чайных {чашки|чашек}, {ложки|ложек}, а также серебряных {вилки|вилок}.", "В этом бутике много зимних {куртки|курток}.", "В подарок я купил пять {коробки конфет|коробок конфет}.", "Мало кто знает столько разных {шутки|шуток}.", "В лесу спилили немало сухих {сосна|сосен}. ", ] }, "ex_4_4": { count: 1, type: "th", // text with gaps to fill + feedback variants: [ "У него нет {семья|семьи}.", "У него нет {квартира|квартиры}.", "Я хочу купить несколько {серия|серий} юбилейных {марка|марок}.", "Нужно составить план летних {экскурсия|экскурсий}.", "Нужно составить план летних {поездка|поездок}.", "Нужно составить план летних {лекция|лекций}.", "Рядом с {кухня и спальня|кухней и спальней} была ванная.", "В нашем классе пять {левша|левшей} и двенадцать {правша|правшей}.", "У тебя много {тётя|тётей/тёть} и {дядя|дядей}?", "Я не хочу слушать этих {лгунья|лгуний}.", "Я не хочу слушать этих {колдунья|колдуний}.", "Я не хочу слушать этих {няня|нянь}.", "Я не хочу слушать этих {ворчунья|ворчуний}.", "У {дедушка|дедушки} болят {рука|руки}, а у {бабушка|бабушки} болят {нога|ноги}.", "В Сашином диктанте нет никаких {ошибка|ошибок}.", "Говорят, что в Праге свыше ста {башня|башен}.", ] }, "ex_3_5": { count: 1, type: "tf", // text with gaps to fill variants: [ "мой друг – два {друга}, все {друзья}", "купол – два {купола}, все {купола}", "сын – два {сына}, все {сыновья}", "собор – два {собора}, все {соборы}", "этот муж – два {мужа}, все {мужья}", "деревянный стул – два {деревянных стула}, все {деревянные стулья}", "музей – два {музея}, все {музеи}", "лист бумаги – два {листа бумаги}, все {листы бумаги}", "царь – два {царя}, все {цари}", "ковёр – два {ковра}, все {ковры}", "город – два {города}, все {города}", "камень – два {камня}, все {камни}", "старинный город – два {старинных города}, все {старинные города}", "край – два {края}, все {края}", "номер телефона – два {номера телефона}, все {номера телефона}", "берег – два {берега}, все {берега}", "ручей – два {ручья}, все {ручьи}", "мост – два {моста}, все {мосты}́", "гусь – два {гуся}, все {гуси}", "лебедь – два {лебедя}, все {лебеди}", "шкаф – два {шкафа}, все {шкафы}́", "игрок – два {игрока}, все {игроки}", "голубь – два {голубя}, все {голуби}", "олень – двa {оленя}, все {олени}", "заяц – два {зайца}, все {зайцы}", "упражнение – два {упражнения}, все {упражнения}", "здание – два {здания}, все {здания}", "задание – два {задания}, все {задания}", "блюдце – два {блюдца}, все {блюдца}", "яйцо – два {яйца}, все {яйца}", "полотенце – два {полотенца}, все {полотенца}", "море – два {моря}, все {моря}", "поле – два {поля}, все {поля}", "кольцо – два {кольца}, все {кольца}", "копьё – два {копья}, все {копья}", "ружьё – два {ружья}, все {ружья}", "платье – два {платья}, все {платья}", "пальто – два {пальто}, все {пальто}", "помещение – два {помещения}, все {помещения}", "яблоко – два {яблока}, все {яблоки}", "дерево – два {дерева}, все {деревья}", "крыло – два {крыла}, все {крылья}", "место – два {места}, все {места}", "государство – два {государства}, все {государства}", "лицо – два {лица}, все {лица}", "гнездо – два {гнезда}, все {гнёзда}", "весло – два {весла}, все {вёсла}", "ведро – два {ведра}, все {вёдра}", "окно – два {окна}, все {окна}", "очко – два {очка}, все {очки}", "кресло – два {кресла}, все {кресла}", ] }, "ex_3_6": { count: 1, type: "tf", // text with gaps to fill variants: [ "В Румынии живут {румыны}.", "В Испании живут {испанцы}.", "В Словакии живут {словаки}.", "В Австрии живут {австрийцы}.", "В Германии живут {немцы}.", "В Венгрии живут {венгры}.", "В Греции живут {греки}.", "В Грузии живут {грузины}.", "В Армении живут {армяне}.", "В Италии живут {итальянцы}.", "В Англии живут {англичане}.", "В США живут {американцы}.", "В Дании живут {датчане}.", "В Норвегии живут {норвежцы}.", "Во Франции живут {французы}.", "В Голландии живут {голландцы}.", "В Швеции живут {шведы}.", "В Финляндии живут {финны}.", "В Японии живут {японцы}.", "В Китае живут {китайцы}.", "В Сербии живут {сербы}.", "В Хорватии живут {хорваты}.", ] }, "ex_3_7": { count: 1, type: "th", // text with gaps to fill variants: [ "меня несколько {брат|братьев}. ", "Когда вы меня познакомите со своими {друг|друзьями}?", "Во время каникул я навестил своих {друг|друзей}. ", "У них трое {сын|сыновей}. ", "Все {сын|сыновья} ещё учатся в школе. ", "Я дружу с их {сын|сыновьями}. ", "Какие {стул|стулья} вы хотите купить? ", "На всех {стул|стульях} сидели почётные гости. ", "Я читала роман И. Ильфа и Е. Петрова «Двенадцать {стул|стульев}». ", "Поздней осенью на {дерево|деревьях} уже не бывает {лист|листьев}. ", "Все {лист|листья} опали, и в лесу было светло. ", "Мы набрали в лесу много сухих {сук|сучьев}. ", "Я умею плести корзины из {прут|прутьев}. ", "На всех {дерево|деревьях} висели спелые фрукты. ", "Бабушка жалуется, что у неё звенит в {ухо|ушах}. ", "Свадьбу невозможно представить без {гость|гостей} и обручальных {кольцо|колец}. ", "Ты такой талантливый, мы тебя превозносим до {небо|небес}! ", ] }, "ex_3_8": { count: 1, type: "tf", // text with gaps to fill variants: [ "младший брат – {младшие братья}", "длинный прут – {длинные прутья}", "широкий проспект – {широкие проспекты}", "пожилой господин – {пожилые господа}", "крутой берег – {крутые берега}", "коренной пражанин – {коренные пражане}", "шикарный отель – {шикарные отели}", "живописный остров – {живописные острова}", "весёлый ребёнок – {весёлые ребята}", "новый сосед – {новые соседи}", "страшный чёрт – {страшные черти}", "холодный цвет – {холодные цвета}", "лучший игрок – {лучшие игроки}", "хороший хозяин – {хорошие хозяева}", "бедный человек – {бедные люди}", "молодой человек – {молодые люди}", "родной край – {родные края}", "известный экономист – {известные экономисты}", "многоэтажный дом – {многоэтажные дома}", "длинное крыло – {длинные крылья}", "фруктовое дерево – {фруктовые деревья}", "весёлое новоселье – {весёлые новоселья}", "богатое застолье – {богатые застолья}", "зимнее пальто – {зимние пальто}", "чёрное платье – {чёрные платья}", "ежегодное соревнование – {ежегодные соревнования}", "финансовое учреждение – {финансовые учреждения}", "железное ведро – {железные вёдра}", "интересное произведение – {интересные произведения}", "пляжное полотенце – {пляжные полотенца}", "невероятное чудо – {невероятные чудеса}", "голубое небо – {голубые небеса}", "гнилое полено – {гнилые поленья}", "боевое судно – {боевые суда}", ] }, "ex_3_9": { count: 1, type: "translate", // text with gaps to fill variants: [ "{Seveřan – Seveřané|северянин – северяне}", "{Tatar – Tataři|татарин – татары}", "{Angličan – Angličané|англичанин – англичане}", "{Dán – Dánové|датчанин – датчане }", "{pán – pánové|господин – господа}", "{rolník – rolníci|крестьянин – крестьяне}", "{občan – občané|гражданин – граждане }", "{Slovan – Slované|славянин – славяне }", "{Armén – Arméni|армянин – армяне }", "{obyvatel města – obyvatelé města|1) горожанин – горожане, 2) житель города (городской житель) – жители города (городские жители)}", "{vlastník – vlastníci|хозяин – хозяева }", "{Gruzínec – Gruzínci|грузин – грузины }", "{Bulhar – Bulhaři|болгарин – болгары }", "{Maďar – Maďaři|венгр – венгры}", ] }, "ex_3_10": { count: 1, type: "th", // text with gaps to fill variants: [ "Завтра приедет группа {американец|американцев} и {швед|шведов}.", "Для {немец|немцев} была подготовлена специальная программа.", "Для {австриец|австрийцев} была подготовлена специальная программа.", "Для {китаец|китайцев} была подготовлена специальная программа.", "Для {итальянец|итальянцев} была подготовлена специальная программа.", "В этом фильме-фантастике была показана летающая тарелка с {инопланетянин|инопланетянами}.", "В нашей больнице не хватает {врач|врачей}.", "В нашей больнице не хватает {медбрат|медбратьев}.", "В нашей больнице не хватает {слесарь|слесарей}.", "Наши {сосед|соседи} – очень милые {человек|люди}.", "В зоопарке мы видели маленьких {медвежонок|медвежат}.", "В зоопарке мы видели маленьких {тигрёнок|тигрят}.", "В зоопарке мы видели маленьких {волчонок|волчат}.", "В зоопарке мы видели маленьких {зайчонок|зайчат}.", "В зоопарке мы видели маленьких {ослёнок|ослят}.", "Президент Российской Федерации в новогоднем приветствии обращается к своим {гражданин|гражданам} словами: «Дорогие {россиянин|россияне}!»" ] }, "ex_3_11": { count: 1, type: "th", // text with gaps to fill variants: [ "Несколько {том|томов}.", "Несколько {этаж|этажей}.", "Несколько {рубль|рублей}.", "Несколько {номер|номеров}.", "Несколько {стул|стульев}.", "Несколько {улей|ульев}.", "Несколько {платок|платков}.", "Посещение {планетарий|планетариев}.", "Посещение {театр|театров}.", "Посещение {музей|музеев}.", "Посещение {солярий|соляриев}.", "Посещение {концерт|концертов}.", "Посещение {спектакль|спектаклей}.", "Посещение {фестиваль|фестивалей}.", "Производство {ковёр|ковров}.", "Производство {часы|часов}.", "Производство {карандаш|карандашей}.", "Производство {мяч|мячей}.", "Производство {стол|столов}.", "Там нет никаких {отель|отелей}.", "Там нет никаких {банк|банков}.", "Там нет никаких {санаторий|санаториев}.", "Там нет никаких {гараж|гаражей}.", "Там нет никаких {медведь|медведей}.", "Там нет никаких {волк|волков}.", "Там нет никаких {соловей|соловьёв}.", "Там нет никаких {голубь|голубей}.", "Там нет никаких {лебедь|лебедей}.", "Там нет никаких {богач|богачей}.", "Там нет никаких {нотариус|нотариусов}.", "Там нет никаких {бомж|бомжей}.", "Там нет никаких {техникум|техникумов}.", "Там нет никаких {университет|университетов}.", "Там нет никаких {сад|садов}.", "Отзывы {зритель|зрителей}.", "Отзывы {критик|критиков}.", "Отзывы {читатель|читателей}.", "Отзывы {знаток|знатоков}.", "Отзывы {режиссёр|режиссёров}.", "Отзывы {профессор|профессоров}.", "Отзывы {оппонент|оппонентов}.", "У меня есть пара {чулок|чулок}.", "У меня есть пара {носок|носков}.", "У меня есть пара {сапог|сапог}.", "У меня есть пара {ботинок|ботинок}.", ] } } Array.prototype.shuffle = function(local){ var a = this; var newArray = typeof local === "boolean" && local ? this : []; for (var i = 0, newIdx, curr, next; i < a.length; i++){ newIdx = Math.floor(Math.random()*i); curr = a[i]; next = a[newIdx]; newArray[i] = next; newArray[newIdx] = curr; } return newArray; }; function initQuestions(evt) { for (var key in questions) { var container = document.getElementById(key); var question = questions[key]; if (!container || !question ) continue; initQuestion(question); var form = getNextVariants(question); container.querySelector(".content").innerHTML = form; } } function initQuestion(question) { question.variants = question.variants.shuffle(); question.position = -1; } function getNextVariants(question) { question.correct = []; question.correctAnswers = []; var out = []; for (var i = 0; i < question.count; i++) { var index = (++question.position % question.variants.length); var variant = question.variants[index]; if (question.type == "v" ) { var elems = variant.match(/\{([^}]+)\}/g); for (var j = 0; j < elems.length; j++) { var elem = elems[j] var vals = elem.substring(1, elem.length-1).trim().split(/\s*[,\|]\s*/); var text = ""; variant = variant.replace(elem, text); } out.push("
") out.push(variant); out.push("
"); } if (question.type == "th" ) { var elems = variant.match(/\{([^}]+)\}/g); for (var j = 0; j < elems.length; j++) { var elem = elems[j] var vals = elem.substring(1, elem.length-1).trim().split(/\s*\|\s*/); var textLength = "" + Math.ceil(vals[1].length*0.65) + "em"; var text = "(" + vals[0]+ ") "; var cors = vals[1].split(/\//); trimValues(cors); question.correct.push(cors); text += ""; variant = variant.replace(elem, text); } out.push("
") out.push(variant); out.push("
"); } if (question.type == "tf" ) { var elems = variant.match(/\{([^}]+)\}/g); for (var j = 0; j < elems.length; j++) { var elem = elems[j] var vals = elem.substring(1, elem.length-1).trim().split(/\s*\/\s*/); var textLength = "" + Math.ceil(vals[0].length*0.65) + "em"; var text = " "; trimValues(vals); question.correct.push(vals); text += ""; variant = variant.replace(elem, text); } out.push("
") out.push(variant); out.push("
"); } } out.push("

" + templates.checker + "

"); return out.join(""); } function trimValues(arr) { for (var k = 0; k < arr.length; k++) { arr[k] = arr[k].trim(); } } var templates = { "th": "

{CONTENT}
", "v": "
{CONTENT}
", checker: "", nexter: "" } function checkQuestion(checker) { var form = checker.parentNode.parentNode.parentNode; var qid = form.id; if (qid == "") return; var question = questions[qid]; switch (question.type) { case "v": var elems = form.querySelectorAll(".testelement"); for (var i = 0; i < elems.length; i++) { var elem = elems[i]; var sel = elem.querySelector("select"); var fb = elem.querySelector(".feedback"); sel.disabled = true; fb.innerHTML = ""; elem.classList.remove("correct"); elem.classList.remove("wrong"); if (sel.value == "---") continue; if (sel.value == question.correct[i]) { fb.innerHTML = "" elem.classList.add("correct"); } else { fb.innerHTML = " (*" + question.correctAnswers[i] + ")" elem.classList.add("wrong"); } } break; case "tf": case "th": var elems = form.querySelectorAll(".testelement"); for (var i = 0; i < elems.length; i++) { var elem = elems[i]; var input = elem.querySelector("input"); var fb = elem.querySelector(".feedback"); input.disabled = true; fb.innerHTML = ""; elem.classList.remove("correct"); elem.classList.remove("wrong"); if (input.value == "") continue; var isCorrect = false; for (var j = 0; j < question.correct[i].length; j++) { if (input.value == question.correct[i][j]) { isCorrect = true; } } if (isCorrect) { fb.innerHTML = "" elem.classList.add("correct"); } else { fb.innerHTML = " (*" + question.correct[i].join("/") + ")" elem.classList.add("wrong"); } } break; } var toolbar = form.querySelector(".toolbar"); if (toolbar) { toolbar.innerHTML = templates.nexter; } console.log(question.correct); } function createNextForm(nexter) { var content = nexter.parentNode.parentNode; var form = content.parentNode; var question = questions[form.id]; content.innerHTML = getNextVariants(question); } window.addEventListener("load", initQuestions);