Задача 2 от Поправката (Triathlon)?


1

Любопитно ми е защо решението не ми тръгва, някой може ли да ми каже къде е грешката ми.

Мисля, че грешката ми е в криптирането. Другите функции си работят правилно.

Нулевият тест ми минава, но имам 0 точки.

function solve(args) { var i, j, len; var result, compressText, encrypText, transformText, text = args[0], offset = args[1], CONSTANTS = { ALPHABET: 'abcdefghijklmnopqrstuvwxyz' } compressText = compression(text); encrypText = encryption(compressText, offset, CONSTANTS.ALPHABET); transformText = transform(encrypText) function compression(text) { var compress = ''; var count = 1; for (i = 1, len = text.length; i <= len; i += 1) { var prevSymbol = text[i - 1]; var currentSymbol = text[i]; if (currentSymbol == ' ') { continue; } if (currentSymbol == undefined) { currentSymbol = ''; } if (prevSymbol == currentSymbol) { count++; } else { // debugger; if (count > 2) { compress += count + prevSymbol; } else if (count == 2) { compress += prevSymbol + prevSymbol; } else { compress += prevSymbol; } count = 1; } } return compress; } function encryption(text, key, alphabet) { var kcount = 26 - key; var encryp = ''; for (var i = 0, len = text.length; i < len; i += 1) { var codeChar = text.charCodeAt(i); if (+text[i]) { encryp += text[i]; } else { var edit = codeChar ^ codeChar + kcount; encryp += edit; } } return encryp; } function transform(text) { var sum = 0, product = 1; var result = ''; for (var i = 0, len = text.length; i < len; i += 1) { var currentDigit = +text[i]; if (currentDigit % 2 == 0) { sum += currentDigit; } else { product *= currentDigit; } } result += sum + '\n' + product; return result; } result = transformText; return result; }




Отговори



4

Да там ти е грешката. Порбвах с различни случаи като например: 'abcdefg', 'zzzyyyyxxyyy' . докато накрая изкарам нещо смислено. Ето ккато направя функцията по този начин , се изкарват 75 точки в БГкодер.

по принцип имам друг вариант за решаване с готов масив от преместените букви с можеш да го разгледаш TYK.

function encryption(text, key, alphabet) { var kcount = 26 - key; var encryp = ''; var edit; for (var i = 0, len = text.length; i < len; i += 1) { var codeChar = text.charCodeAt(i); if (!isNaN(text[i])) { encryp += text[i]; } else { //console.log('charcode '+codeChar +' alpha ' + (codeChar - key) + ' z-ta ' + (123 - key + alphabet.indexOf(text[i])) ); if((codeChar - key) < 97){ edit = codeChar ^ (123 - key + alphabet.indexOf(text[i])); // z = 122; } else{ edit = codeChar ^ (codeChar - key); } //console.log('edit: ' + edit); encryp += edit; } } return encryp; }// Copy Code Snippet Here


от M.Yankov (1418 точки)


2
Благодаря ти колега, че си отделил време на решението ми. Учуди ме че нулевия тест ми минава, а имам нула точки, а на изпита нямах време да тествам с други случай. 

от kristian.face (871 точки)


1

Ето и моето решение за 75/75. Сега го оправих, че на изпита не ми стигна време и изкарах само 5. :/

Иначе трудно и аз пробвах като теб директно да смятам във encryption, но след няколко несполучливи опита опитах друг метод като за да намеря изместената буква използвам string със показаната в условието изместена азбука и взимам индекса на буквата от нормалната азбука CONSANTS.ALPHABET .

И аз съм ги описал като теб в отделни функции. Вместо да правиш различни променливи можеш направо да извикаш функция във функция.

result = transformation(encryption(compression(text), offset));

http://pastebin.com/CiUyEZpy