Commit 435843c5 by Иван Кубота

switch to generator with components. proper products probability chooser

parent d01792c6
Pipeline #560 failed with stage
......@@ -66,7 +66,6 @@
1,108,"Десерт сывороточный ""Полба-злаки""",Десерт БЕЗ сахара. В качестве подсластителя используется экстракт стевии. Приготовлен на основе молочной сыворотки с добавлением сливок и молочного белка – протеина. В качестве наполнителя в десерт добавлены богатые клетчаткой пророщенные зерна полбы и злаки.,Сметаны,,0, /1/images/cards/108.jpg,108
1,113,Котлеты с кукурузой,"Нежные, воздушные котлетки из перемолотого филе куриной грудки с добавлением сливочного масла и консервированной кукурузы. За счет кукурузы котлеты приобретают сочность и необычный, слегка сладковатый вкус.",Котлеты,,1, /1/images/cards/113.jpg,113
1,114,Кусочки индейки сыровяленые,"В меру соленые и слегка островатые кусочки индейки отлично подойдут в качестве оригинальной закуски к пенному. Хорошая альтернатива чипсам и сухарикам. В составе только филе индейки, соевый соус и специи.",Мясная гастрономия,,1, /1/images/cards/114.jpg,114
1,51,Киноа,"Крупа инков. За богатый состав ее прозвали «божественным зерном» и «матерью всех злаков». Помимо комплекса витаминов и минералов, имеет идеальный баланс протеинов. Способна полностью компенсировать отсутствие мяса в рационе.",Рис,,0, /1/images/cards/48.jpg,51
1,120,Пельмени Калмыцкий дуэт,"Вкусный сытный обед для всей семьи или большой компании за 8 минут! Начинка из мясного дуэта — говядины и баранины — приправлена луком, солью и черным молотым перцем. Тесто тонкое и нежное, при варке сохраняет свою целостность и не портит вид блюда.",Замороженные полуфабрикаты,,1, /1/images/cards/120.jpg,120
1,124,"Ромашка для заваривания, в пакетиках","Заваренная ромашка помогает снять некоторые симптомы болезней, обладает успокаивающими свойствами, помогает от бессоницы, положительно влияет на работу печени, мягко очищая ее от токсинов. В сезон простуд ромашка для заваривания является прекрасным средством от симптомов ОРВИ и ОРЗ, также ее можно применять для профилактики. Напиток обладает приятным вкусом, душистым ненавязчивым ароматом. Для большего эффекта можно пить заваренную ромашку с медом и лимоном.",Чай. Травы. Кофе. Какао,,1, /1/images/cards/124.jpg,124
1,127,Сосиски Индейка-брынза-болгарский перец,"Сосиски с интересным составом, а главное, натуральным. Приятные, нежные, в меру соленые. Ярко выражен вкус брынзы и болгарского перца. Сосиски можно положить в морозильную камеру, и в какой-то момент они выручат вас и порадуют необычным сочетанием ингредиентов.",Колбасы. Ветчина,,1, /1/images/cards/127.jpg,127
......
......@@ -643,6 +643,27 @@ data = {tags:[], connections:[], more:[], standardQuestions: {}, standardAnswers
//git add .
// fs.writeFileSync('./data/tmp/full.json', JSON.stringify(data, null, 2))
data.after && data.after(data);
var tags = {},
max = 10;
console.log(JSON.stringify(Object.keys(data.products).reduce((s, n)=>{
var norm = normalizeText(data.products[n].title);
if(data.products[n].use || data.products[n].subcat){
if(!(data.products[n].subcat in tags)){
tags[data.products[n].subcat] = ++max;
}
if(norm in s){
console.error('alarma');
debugger
}
s[norm] = [tags[data.products[n].subcat]]
if(data.products[n].use)
s[norm].push(5)
}
return s
},{}),null,2));
})();
......
......@@ -58,6 +58,27 @@
let message = await response.text();
let data = JSON.parse( message );
for(var i in data.products){
data.products[i].image &&(
data.products[i].image =
(function(image) {
if(!image || image === 'null' || image === '0' || image === '' || image===null){
return null;
}else{
image = image.trim();
if(image.indexOf('http')===0)
return image;
if( image.indexOf( '/upload/resize' ) === 0 ){
image = 'https://vkusvill.ru' + image;
}else{
console.log(image)
image = image ? 'https://api.new.local.vkusvill.testin.ru/storage' + image.trim() : void 0;
}
}
return image;
})(data.products[i].image));
}
initDataProvider(data);init();
};
fn();
......
let ComponentsOfProduct;
quizTypes.checkbox = [ ComponentsOfProduct = {
probability: 0,//10,
probability: 5, //0,//10,
correct: {min: 2, max: 4},
wrong: {min: 1, max: 4},
answers: {min: 3, max: 6},
......@@ -41,7 +41,7 @@ quizTypes.checkbox = [ ComponentsOfProduct = {
}
},
Object.assign({}, ComponentsOfProduct, {
probability: 0,// 4,
probability: 2,//0,// 4,
correct: {min: 2, max: 4},
wrong: {min: 2, max: 4},
answers: {min: 4, max: 8},
......@@ -64,7 +64,7 @@ quizTypes.checkbox = [ ComponentsOfProduct = {
}
}),
{
probability: 0,//10,//10,
probability: 5,//0,//10,//10,
correct: {min: 2, max: 4},
wrong: {min: 1, max: 3},
answers: {min: 4, max: 6},
......
quizTypes.checkboxPhoto = [
{
questionMinComponentsCount: 2,
probability: 0,//8,
probability: 4,//0,//8,
type: 'What components are in it',
answers: {min: 3, max: 6},
......@@ -33,7 +33,7 @@ quizTypes.checkboxPhoto = [
},
{
questionMinComponentsCount: 2,
probability: 0,//3,
probability: 1.5,//0,//3,
type: 'What components are NOT in it',
answers: {min: 3, max: 6},
......
quizTypes.radio = [
{
questionCmpAmount: 4,
probability: 0,//10,
probability: 5, //10,
type: 'Product contains 4 components',
products: {from: 4, to: 8},
minSimilarTags: 1,
......@@ -17,7 +17,7 @@ quizTypes.radio = [
},
{
questionCmpAmount: 2,
probability: 0,//8,
probability: 4, // 8
type: 'Component in product',
products: {from: 4, to: 6},
minSimilarTags: 1,
......@@ -83,7 +83,7 @@ quizTypes.radio = [
}
},
{
probability: 0,//10,
probability: 5,//0,//10,
answers: {from: 3, to: 6},
question: ({product})=> `Выберите лишний ингредиент, НЕ входящий в продукт "${product.title}"`,
......
......@@ -33,7 +33,7 @@ quizTypes.radioPhoto = [
},
{
questionMinComponentsCount: 2,
probability: 0,//3,
probability: 1.5,//0,//3,
type: 'What component is in it',
answers: {min: 4, max: 6},
......
var hint = {
radio: { photo: false, multiple: false },
radioPhoto: { photo: true, multiple: false },
checkbox: { photo: false, multiple: true },
checkboxPhoto: { photo: true, multiple: true }
};
for(var i in hint){
for( var j = 0, _j = quizTypes[ i ].length; j < _j; j++ ){
var quizTypeElement = quizTypes[ i ][ j ];
Object.assign(quizTypeElement, hint[i]);
}
}
......@@ -23,7 +23,8 @@ const sources = [
"js/controller/quizBits/checkbox.js",
"js/controller/quizBits/checkboxPhoto.js",
"js/controller/quizBits/radio.js",
"js/controller/quizBits/radioPhoto.js"
"js/controller/quizBits/radioPhoto.js",
"js/controller/quizBits/seal.js"
];
const fs = require('fs'),
path = require('path');
......@@ -31,7 +32,7 @@ var js = sources.map(a=>path.join(__dirname,'../../public',a)).map(n=>fs.readFil
const data = require("../../db.js");
const body = 'const window = {}, localStorage = {getItem:()=>"{}"};'+js+'; return {quizGenerator, standardGenerator, initDataProvider, seeded: Math.random.seeded, rand, dP}';
const body = 'const window = {}, localStorage = {getItem:()=>"{}"};'+js+'; return {quizGenerator, standardGenerator, quizTypes, probabilityRand, initDataProvider, seeded: Math.random.seeded, rand, dP}';
var ctxCtor = new Function('',body);
......@@ -155,8 +156,10 @@ module.exports = {
let seed = args.seed || Math.random().toString(36).substr(2);
ctx.seeded.setStringSeed( seed );
let multiple = seeded() > 24 / ( 46 + 24 ),
photo = seeded() > 0.7,
let option = ctx.probabilityRand([].concat.apply([],Object.values(ctx.quizTypes)))
let multiple = option.multiple,//seeded() > 24 / ( 46 + 24 ),
photo = option.photo, //seeded() > 0.7,
result, attempts = 0;
while(!result){
......@@ -208,9 +211,15 @@ module.exports = {
if(args.count>100)args.count = 100;
while(generated<args.count && globalTries < globalMaxTries){
globalTries++;
let option = ctx.probabilityRand([].concat.apply([],Object.values(ctx.quizTypes)))
let multiple = option.multiple,//seeded() > 24 / ( 46 + 24 ),
photo = option.photo; //seeded() > 0.7
let cur = {
m: seeded() > 24 / ( 46 + 24 ),
p: seeded() > 0.7,
m: multiple,//seeded() > 24 / ( 46 + 24 ),
p: photo,//seeded() > 0.7,
c: 1
};
if( seeded() > 0.3 ){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment