102 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
/**
 | 
						|
 * @class Baquedano
 | 
						|
 * @constructor
 | 
						|
 * @returns {void}
 | 
						|
 * @access public
 | 
						|
 * @static
 | 
						|
 */
 | 
						|
const Baquedano = (function(){
 | 
						|
 | 
						|
    /**
 | 
						|
     * @callback cookies_click_callback
 | 
						|
     * @returns {void}
 | 
						|
     */
 | 
						|
 | 
						|
    /** 
 | 
						|
     * @constructs Baquedano
 | 
						|
     * @returns {void}
 | 
						|
     * @access private
 | 
						|
     * @static
 | 
						|
     */
 | 
						|
    const Baquedano = function(){};
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param {!string} i 
 | 
						|
     * @param {!Object.<string, string>} fixer 
 | 
						|
     * @param {!string} option 
 | 
						|
     * @returns {string}
 | 
						|
     * @access public
 | 
						|
     * @static
 | 
						|
     */
 | 
						|
    Baquedano.get_answer_key = (i, fixer, option) => fixer[i] == option ? "rights" : "wrongs";
 | 
						|
 | 
						|
    /**
 | 
						|
     * @returns {void}
 | 
						|
     * @access public
 | 
						|
     * @static
 | 
						|
     */
 | 
						|
    Baquedano.load_txt = () => {
 | 
						|
 | 
						|
        /** @type {string} */
 | 
						|
        const string = document.querySelector("body").innerText, 
 | 
						|
              /** @type {[string, string, string, string]} */
 | 
						|
              [_, data_string, test_block, fix_block] = string.split(/^\#{3}\s*(?:test|fix|cor+ec+i[oó]n|data)/im), 
 | 
						|
              /** @type {Object.<string, string>} */
 | 
						|
              fix_values = [...fix_block.matchAll(/^([0-9]+) *([a-d])/gmi)].concat(
 | 
						|
                  [...fix_block.matchAll(/^([a-d]) *([0-9]+)/gmi)].map(([_, right, question]) => [_, question, right])
 | 
						|
              ).reduce((values, [_, question, right]) => {
 | 
						|
              
 | 
						|
                  values[question] = right;
 | 
						|
              
 | 
						|
                  return values;
 | 
						|
              }, {}), 
 | 
						|
              /** @type {Object.<string, string|Array.<string|Object.<string, string|Array.<string>>>} */
 | 
						|
              data = JSON.parse(data_string.trim());
 | 
						|
        let i = -1, question = "", answer, option, number;
 | 
						|
 | 
						|
        data.queries = [...test_block.trim().split(/\n/)].reduce((queries, line) => {
 | 
						|
 | 
						|
            if(!line.trim()){
 | 
						|
                if(question){
 | 
						|
                    queries.push({
 | 
						|
                        question : question.trim(), 
 | 
						|
                        rights : [], 
 | 
						|
                        wrongs : []
 | 
						|
                    });
 | 
						|
                    i ++;
 | 
						|
                    question = "";
 | 
						|
                }else if(answer){
 | 
						|
                    queries[i][Baquedano.get_answer_key(number, fix_values, option)].push(answer.trim());
 | 
						|
                    answer = "";
 | 
						|
                };
 | 
						|
            }else if(question)
 | 
						|
                question += " " + line.trim();
 | 
						|
            else if(answer){
 | 
						|
                if(/^[a-d]\) */i.test(line)){
 | 
						|
                    queries[i][Baquedano.get_answer_key(number, fix_values, option)].push(answer.trim());
 | 
						|
                    option = line[0];
 | 
						|
                    answer = line.replace(/^[a-d]\) */i, "").trim();
 | 
						|
                }else 
 | 
						|
                    answer += " " + line.trim();
 | 
						|
            }else if(/^[0-9]+ +/.test(line)){
 | 
						|
                number = line.match(/^[0-9]+/)[0];
 | 
						|
                question = line.trim().replace(/^[0-9]+ +/, "");
 | 
						|
            }else if(/^[a-d]\) */i.test(line)){
 | 
						|
                option = line[0];
 | 
						|
                answer = line.replace(/^[a-d]\) */i, "").trim();
 | 
						|
            };
 | 
						|
 | 
						|
            return queries;
 | 
						|
        }, []);
 | 
						|
        data.queries[i][Baquedano.get_answer_key(number, fix_values, option)].push(answer.trim());
 | 
						|
 | 
						|
        console.log(JSON.stringify([data]));
 | 
						|
 | 
						|
    };
 | 
						|
 | 
						|
    return Baquedano;
 | 
						|
})();
 | 
						|
 | 
						|
Baquedano.load_txt(); |