Guest User

Untitled

a guest
May 15th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. checkQuestion = (q) ->
  2.     if not q.question?
  3.         throw "Не задан текст вопроса!"
  4.  
  5.     if q.rightAnswerID == -1
  6.         throw "В вопросе '#{q.question}' не задан правильный вариант ответа!"
  7.  
  8.     if q.answers.length > 5
  9.         throw "В вопросе '#{q.question}' кол-во вариантов ответа превышает 5!"
  10.  
  11.     if q.answers.length < 2
  12.         throw "В вопросе '#{q.question}' кол-во вариантов ответа менее 2!"
  13.  
  14.     for a in q.answers
  15.         commas = a.answer.match(/,/ig) || []
  16.         if commas.length + 1 isnt q.omissionsCount
  17.             throw "В вопросе '#{q.question}' вариант ответа '#{a.answer}' не может заполнить все #{q.omissionsCount} плейсхолдеры в вопросе!"
  18.  
  19.     return q
  20.  
  21. parseAnswers = (answers) ->
  22.     _answers = []       # Варианты ответа на вопрос
  23.     rightAnswerID = -1  # Индекс в результирующем наборе списка вопросов
  24.  
  25.     for answer in answers
  26.         isRightAnswer = if /\+\s*$/.test(answer) then 'y' else 'n'
  27.         answer = $.trim answer.replace /\+\s*$/, ''
  28.         if answer.length > 0
  29.             rightAnswerID = _answers.length if isRightAnswer == 'y'
  30.             _answers.push
  31.                 answer: answer
  32.                 isRightAnswer: isRightAnswer
  33.  
  34.     return [rightAnswerID, _answers]
  35.  
  36. parseQuestion = (question) ->
  37.     q =
  38.         index: -1            # Индекс вопроса, если есть
  39.         question: undefined  # Текст вопроса
  40.         omissionsCount: 0    # Сколько пропусков для подстановки вариантов вопроса в вопросе
  41.         rightAnswerID: -1    # Идентификатор правильного варианта ответа
  42.         answers: []          # Варианты ответа
  43.  
  44.     lines = question.split '\n'
  45.     match = lines[0].match /^((\d+)\.\s)?(.+)$/i
  46.  
  47.     q.index = parseInt match[2], 10
  48.     q.question = $.trim(match[3]).replace /([^_])__[_]*/ig, '$1_____'
  49.     q.omissionsCount = omissions.length if (omissions = q.question.match(/_____/ig))?
  50.  
  51.     [q.rightAnswerID, q.answers] = parseAnswers lines[1...lines.length]
  52.     return q
  53.    
  54. parseTest = (testText) ->
  55.     test = $.trim(testText).split '\n\n'
  56.     checkQuestion parseQuestion question for question in test
  57.  
  58. $ -> console.log parseTest $('textarea').val()
Add Comment
Please, Sign In to add comment