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

new tag based sequence generator

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