مضى على الشبكة و يوم من العطاء.

الثقوب في الأحرف

shadowshadow is verified member.

{ | مشرف قسم لغات البرمجة | }
.:: طاقم المشرفين ::.
.:: كاتب تقني ::.

السمعة:

السلام عليكم ورحمه الله وبركاته
نحتاج بعض الأحيان لضغط البيانات لكثير من الأسباب ومن إحدى طرق ضغط البيانات طريقة RLE وهي إختصار ل Run length encoding

وهذه الطريقة مفيدة في الرسائل عند تكرار الأحرف، يكون مبدئها عند تكرار الحرف على التوالي ثلاث مرات أو أكثر فإنه يقوم بطباعة الحرف وبجانبه عدد تكرارات ذلك الحرف


مثال على ذلك سنقوم الان بإدخال نص :


سيكون الناتج هكذا
[COLOR=08FFFF]بالتوفيق[/COLOR]
 
كود:
let RLE=(  (str)=>{
    let j=1;
    let char="";
    for(let i=0;i<str.length;i++){
        
        if(str[i]===str[i+1]){
            j++;
        }
        
        else{
            
         if (j <=2) {
             let  k=j;
               for (let k = 0; k < j; k++) {
                    char += str[i];
                }
          
            }
            else {
                char += str[i] + j;
              }
            j = 1;
        
    }
}   
    return char;
})
console.log(RLE("AAABBBBAARDDDD"))
 
Using Built-in functions

JavaScript:
function RLE(input) {
    return input
      .split('') 
      .reduce((acc, curr, index, array) => {
      
        if (curr === array[index - 1]) {
          
          acc[acc.length - 1].count++;
        } else {
        
          acc.push({ curr: curr, count: 1 });
        }
        return acc;
      }, [])
      .map(({ curr, count }) => (count > 2 ? curr + count : curr.repeat(count)))
      .join('');
  }
 
 
  console.log(RLE("AAABBBBAARDDDD"));
  console.log(RLE("AABBCC"));
 
Python:
def append_segment(current_char, count):
    if count <= 2:
        return current_char * count
    else:
        return f'{current_char}{count}'

def RLE_encode(data):
    count = 1
    current_char = data[0]
    data = data[1 : ]
    result = ''
    for char in data:
        if char != current_char[0]:
            result += append_segment(current_char, count)
            current_char = char
            count = 1
        else:
            count += 1
            
    return result + append_segment(current_char, count)

text = input('Enter text : ')
encoded_text = RLE_encode(text)
print(encoded_text)
 

آخر المشاركات

عودة
أعلى