2016-11-02 83 views
1

我的工作,它使用下面的腳本代碼的難題:功能(ASCII,A,B,C)ASCII碼拼圖

function(ascii,a,b,c) { 
     for(i=0;i<ascii.length;i++) { 
      if(i%3==0){ascii[i]=(ascii[i]+a)%256;} 
      if(i%3==1){ascii[i]=(ascii[i]+b)%256;} 
      if(i%3==2){ascii[i]=(ascii[i]+c)%256;} 
     } 
     return ascii; 
    } 

我覺得它說:「該消息中的每個字符(或者如果消息是數組,則對於數組中的每個元素i),計算其位置mod3,並根據結果將字符的ascii值添加a,b或c,然後返回該值mod 256。這是正確的解釋嗎?

+1

'ASCII [I]'將是字符,而不是ASCII值。假設'ascii'是一個字符串,就是。 – vlaz

+1

這隻有在ascii是一個數組而不是字符串時纔有意義。由於字符串是不可變的,因此ascii [i] = ascii [i] + a'不會改變字符串中的任何內容。所以我期望ascii是一個數組,可能是由'someWord.split('')'形成的,但我想這將是一個數字數組,代表每個字母的ascii值,因爲模256字符串也沒有意義。就像'[45,78,52,55,78,99]'? – Shilly

+0

@Shilly我已經對數組做了編輯 - 對於這個問題,我的解釋是否正確? – TMrtSmith

回答

1

它似乎是一個encoding function需要代表characters (0-255)array的數字。然後按照a,b, and c by modding by 3指定的長度移動字符。那麼輸出是modded by 255,所以它仍然是一個有效的字符值。最後返回結果編碼array of numbers representing characters

下面是代碼:

function encodeIt(ascii,a,b,c) { 
    for(i=0;i<ascii.length;i++) { 
     if(i%3==0){ascii[i]=(ascii[i]+a)%256;} 
     if(i%3==1){ascii[i]=(ascii[i]+b)%256;} 
     if(i%3==2){ascii[i]=(ascii[i]+c)%256;} 
    } 
    return ascii; 
} 

function encodeString(myString,myAdjustments) 
{ 
    var myArray = []; 
    for(var i=0;i<myString.length;i++) 
    { 
     myArray.push(myString.charCodeAt(i)); 
    } 
    var myArray = encodeIt(myArray,myAdjustments[0],myAdjustments[1],myAdjustments[2]); 
    var myEncodedString = ""; 
    for(var i=0;i<myArray.length;i++) 
    { 
     myEncodedString+=String.fromCharCode(myArray[i]); 
    } 
    return myEncodedString; 
} 

var encodedString = encodeString("Hello World!",[30,80,-13]); 
alert(encodedString); 
var decodedString = encodeString(encodedString,[-30,-80,13]); 
alert(decodedString); 

和提琴:

https://jsfiddle.net/3p79bxv2/

+0

等待你的小提琴! – TMrtSmith

+0

@TMrtSmith:發佈它......差不多完成了...... – Thalaivar

+0

@TMrtSmith:更新了帖子和小提琴... – Thalaivar