Commit 0299c626 by Иван Кубота

new tag based sequence generator

parent 2ea85a78
Pipeline #566 canceled with stage
......@@ -77,14 +77,14 @@ quizTypes.checkbox = [ ComponentsOfProduct = {
type: 'Select components of product',
products: {from: 2, to: 4},
minSimilarTags: 1,
from(log){
from(log, isTest){
const products = qB.randomProduct({
minComponents: 1,
amount: this.products,
connectedByTags: true,
minSimilarTags: this.minSimilarTags,
doNotTrim: true
}, log),
}, log, isTest),
componentsWithProducts = qB.getComponentsWithSharedProducts(products, 2);
......
......@@ -7,7 +7,7 @@ const qB = {
minSimilarTags,
doNotTrim,
withPhoto
}, log) {
}, log, isTest) {
let filtered = Object.values(dP.products);
......@@ -74,7 +74,7 @@ const qB = {
similarClusters = Object.keys(similarTags)
.map(k=>({k, v:similarTags[k]}))
.filter( a => a.v.length >= minAmount && a.v.filter(av=>av.use).length>0);
.filter( a => a.v.length >= minAmount && a.v.filter(isTest).length>0);
log.push(`Clusters that have >= ${minSimilarTags} similar tags: `+Object.values(similarClusters).length);
......@@ -89,7 +89,7 @@ const qB = {
let result;
if(single){
result = rand(filtered.filter(p=>p.use));
result = rand(filtered.filter(isTest));
log.push('Matched product: '+result.title);
}else{
......@@ -98,7 +98,7 @@ const qB = {
return false;
}
let used = rand(filtered.filter(p=>p.use)),
let used = rand(filtered.filter(isTest)),
other = filtered.slice();
other.splice(other.indexOf(used));
......@@ -192,11 +192,11 @@ const qB = {
prebuild: {
similarTaggedProductWithPhotoAndComponents: {
fn: function(log) {
fn: function(log, isTest) {
this.getEmAll = true;
this.products = {min: 2};
const possibilities = shuffle(
qB.prebuild.similarTaggedProductWithPhoto.fn.call(this, log)
qB.prebuild.similarTaggedProductWithPhoto.fn.call(this, log, isTest)
);
if(!possibilities || !possibilities.length)
return false;
......@@ -238,7 +238,7 @@ const qB = {
questionMinComponentsCount: Number,
products: {min: Number, max: Number},
fn: function(log) {
fn: function(log, isTest) {
let allProducts = Object.values(dP.products);
let products = Object.values(dP.products)
.filter(p=>p.image)
......@@ -251,7 +251,7 @@ const qB = {
}
const possibility = products.map(p=>{
if(!p.use)
if(!isTest(p))
return false;
const similar = qB.getProductsWithTags({
products: allProducts,
......@@ -285,20 +285,20 @@ const qB = {
// product similarity (minimal matched tags count)
minSimilarTags: 2,
fn(log){
fn(log, isTest){
let products = qB.randomProduct({
minComponents: this.questionCmpAmount,
amount: this.products,
connectedByTags: true,
minSimilarTags: this.minSimilarTags
}, log);
}, log, isTest);
for( let i = 0, _i = products.length; i < _i; i++ ){
const product = products[ i ];
/* if(this.withPhoto && !product.image)
continue;*/
if(!product.use)
if(!isTest(product))
continue;
const cmps = product
.getComponents()
......
......@@ -88,8 +88,8 @@ quizTypes.radio = [
question: ({product})=> `Выберите лишний ингредиент, НЕ входящий в продукт "${product.title}"`,
type: 'Do not contain',
from: (log)=>{
const product = qB.randomProduct({ minComponents: 2, single: true }, log);
from: (log, isTest)=>{
const product = qB.randomProduct({ minComponents: 2, single: true }, log, isTest);
return {baseProduct: product, product}
},
......
......@@ -81,10 +81,10 @@ const standardGenerator = function(random) {
log
};
};
const quizGenerator = function(type, photo, subType) {
return _quizGenerator(type, photo, subType);
const quizGenerator = function(type, photo, isTest, subType) {
return _quizGenerator(type, photo, isTest, subType);
},
_quizGenerator = function(type, photo, subType, attempt) {
_quizGenerator = function(type, photo, isTest, subType, attempt) {
attempt = attempt || 0;
const initialSeed = Math.random.seeded.getStringSeed();
let log;
......@@ -119,23 +119,23 @@ const quizGenerator = function(type, photo, subType) {
if(!cfg)
return {answers: [], log};
const source = cfg.from.call(cfg, log);
const source = cfg.from.call(cfg, log, isTest);
if(source === false){
// давай по новой
return _quizGenerator( type, photo, subType, attempt + 1 );
return _quizGenerator( type, photo, isTest, subType, attempt + 1 );
}
let answers = shuffle(cfg.answer.call(cfg, source, log));
let answers = shuffle(cfg.answer.call(cfg, source, log, isTest));
if(answers === false || answers.length === 1){
// давай по новой
return _quizGenerator( type, photo, subType, attempt + 1 );
return _quizGenerator( type, photo, isTest, subType, attempt + 1 );
}
return {
seed: initialSeed,
type,
categoryId: 1,
productId: source.baseProduct.id,
question: cfg.question.call(cfg, source, log),
question: cfg.question.call(cfg, source, log, isTest),
answers,
image: !photo?null:source.baseProduct.image,
......
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