3. AJAX Request Validator [JS Retake - 11 May 2016]
Здравейте, подхванах да решавам малко задачи от минали изпити и тази ме измъчва от вчера. Хващам 70/100 точки, а не са дадени тестовете. Ще съм благодарен ако някой може да помогне!
Ето го решението ми:
function ajaxRequestValidator(arr) {
let regexHashPattern = /(\d+)([a-zA-Z]{1})/g
let hashPattern = {
full: arr.pop(),
patterns: [],
matches: null
}
while((hashPattern.matches = regexHashPattern.exec(hashPattern.full)) !== null) {
hashPattern.patterns.push({
symbol: hashPattern.matches[2],
count: Number(hashPattern.matches[1])
})
}
let methodPattern = /Method: (GET|POST|PUT|DELETE)$/
let authPattern = /Credentials: (Bearer|Basic) ([a-zA-Z0-9]+)$/
let contentPattern = /Content: ([a-zA-Z0-9.]+)$/
let request = null
for (let i = 0; i < arr.length; i += 3) {
arr[i] = arr[i]
let methodMatches = methodPattern.exec(arr[i])
let authMatches = authPattern.exec(arr[i + 1])
let contentMatches = contentPattern.exec(arr[i + 2])
if(methodMatches === null || authMatches === null || contentMatches === null) {
console.log(`Response-Code:400`)
continue
}
request = {
method: methodMatches[1],
authType: authMatches[1],
authContent: authMatches[2]
}
if(request.method !== 'GET' && request.authType !== 'Bearer') {
console.log(`Response-Method:${request.method}&Code:401`)
continue
}
if(checkAuth(request)) {
console.log(`Response-Method:${request.method}&Code:200&Header:${request.authContent}`)
} else {
console.log(`Response-Method:${request.method}&Code:403`)
}
}
function checkAuth(request) {
for (let i = 0; i < hashPattern.patterns.length; i++) {
let patternSymbol = hashPattern.patterns[i].symbol.toLowerCase()
let patternCount = hashPattern.patterns[i].count
let symbolCount = 0
for (let j = 0; j < request.authContent.length; j++) {
if(patternSymbol === request.authContent[j].toLowerCase()) {
symbolCount++
}
}
if(symbolCount === patternCount) {
return true
}
}
return false
}
}
"Any input request that doesn’t follow the, specified above - format, is to be treated as invalid."
Valid Input:
Method: ...
Credentials: ...
Content: ...
Invalid input:
Method: ...
Credentials: ...
Content: ...
Надявам се да ти е достатъчен hint ... Извинявам се, че зверското ми творение (изпита по JavaScript) продължава да набира жертви :D Поздравления за ентусиазма и смелоста да се опиташ да го решиш :P.
Благодаря за hint-a, 100/100
Задачата не е много гадна ако си я пишеш на спокойствие... Този вариант с некоректните данни го бях предвидил, но не се сетих, че с моя pattern не хващам началото на стринга...
Здрасти понеже не исках да пускам цяла нова тема, реших направо тук да пиша ако го видиш това съобщение, би ли ми пратил инпута на 8-ми тест за тази прословута задача понеже само там ми дава incrrect answer и повече тестове не се сетих които да не минават....
Input
Output
Мерси за отговора, винаги неоткриваемия проблем е една точка или запетайка, до последно си мислех че инпута е грешен 100 пати сканирах кода цял ден изгубих за нищо :Д.
Поздрави и пак мерси за отговора :)