freeCodeCamp/guide/arabic/miscellaneous/algoritmo-mensaje-secreto/index.md

8.0 KiB

title localeTitle
Algoritmo Mensaje Secreto خوارزمية الرسائل السرية

التفسير:

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

فكرة: 1

يجب عليك أولاً التحويل من ثنائي إلى عشري ومن ثم ترجمتها إلى أحرف.

فكرة: 2

تكون الأمور أسهل إذا ركزت على أجزاء صغيرة ، وقم بتقسيم الرسالة إلى ما تتلقاه والتركيز على حرف واحد في كل مرة.

فكرة: 3

تأكد بعد تحويل الشفرة الثنائية إلى الحرف العشري لإعادة تعيين أي من المتغيرات التي استخدمتها لتنفيذ الترجمة. أيضا ، لا تنس أن تضع كل شيء مرة أخرى على سلسلة واحدة.

تنبيه المفسد!

علامة تحذير

الحل أدناه!

حل الرمز:

`function binaryAgent(str) { biString = str.split(' '); uniString = [];

// Utilizando el parámetro base en parseInt podemos convertir el número // binario a número decimal mientras simultáneamente lo convertimos a carácter.

for(i=0;i < biString.length;i++){ uniString.push(String.fromCharCode(parseInt(biString[i], 2))); } // Simplemente unimos la cadena. return uniString.join(''); }

// realizamos el test binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); `

:rocket: في REPL!

شرح الكود:

  • نحن نفصل السلسلة في صفيف من السلاسل المفصولة بفراغات.
  • نخلق متغيرًا سيكون ضروريًا على طول الطريق ، وهذا الاسم لا يحتاج إلى شرح.
  • نكرر من خلال المصفوفة الثنائية الجديدة.
  • نقوم بتحويلها إلى قيمة عشرية باستخدام parseInt ( binary ، 2) (مع المعلمة الثانية نخبرك على أي أساس لدينا أرقام حاليا)
  • في النهاية ، نعيد الرسالة المحولة.

الحل الثاني:

`function binaryAgent(str) { // Separamos el código binario por sus espacios. str = str.split(' '); var power; var decValue = 0; var sentence = '';

// Comprobamos cada número binario de la matriz. for (var s = 0; s < str.length; s++) { // Comprobamos cada bit del número binario. for (var t = 0; t < str[s].length; t++) { // Esto solo toma en consideración los activos. if (str[s][t] == 1) { // Esto es equivalente a 2 ** posición. power = Math.pow(2, +str[s].length - t - 1); decValue += power;

    // Guardamos el valor decimal sumándolo al anterior. 
  } 
} 

// Luego de que el número binario es convertido a decimal, lo convertimos en una cadena y lo guardamos. 
sentence += (String.fromCharCode(decValue)); 

// Reseteamos el valor decimal para el próximo número binario. 
decValue = 0; 

}

return sentence; }

// realizamos el test binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); `

:rocket: في REPL!

شرح الكود:

  • لكل سلسلة ثنائية نتحقق منها وتجاهل الأصفار.
  • لأولئك الذين هم واحد أو نشط نقوم بتحويلها إلى عشري. هذا يأخذ في الاعتبار الموقف والسلطة المناسبة التي يجب أن تكون مرتفعة.
  • نقوم بحفظ الطاقة في الطاقة المتغيرة مضيفًا إلى الطاقة السابقة في متغير القيمة decValue . سيستمر هذا المتغير في إضافة صلاحيات الأصول إلى نهاية الحلقة ثم إرجاع رقم عشري.
  • نقوم بتحويل الرقم العشري النهائي إلى ASCII وإضافته إلى متغير الجملة مع أي سلسلة نصية أخرى تم تحويلها وتخزينها بالفعل.
  • نقوم بإعادة تعيين قيمة متغير decValue لتجنب الأرقام العشرية الخاطئة قبل الاستمرار في الحلقة الخارجية.

الحل الثالث:

`function binaryAgent(str) { return String.fromCharCode(...str.split(" ").map(function(char){ return parseInt(char, 2); })); }

// realizamos el test binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); `

:rocket: في REPL!

شرح الكود:

  • أولاً نستخدم split() لكي نتمكن من عمل كل حرف كعنصر مصفوفة.
  • ثم نستخدم map() لمعالجة كل عنصر ثنائي إلى عشري باستخدام pareseInt()
  • وأخيرًا ، يمكننا استخدام String.fromCharCode() لتحويل كل رقم ASCII إلى الحرف المطابق له.
  • ومع ذلك ، يتوقع fromCharCode() سلسلة من الأرقام بدلاً من مصفوفة. يمكننا استخدام ES6 Spread Operator لتمرير مجموعة من الأرقام كأرقام فردية. مزيد من المعلومات: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

الحل الرابع:

`function binaryAgent(str) { var re = /(\d+)(\s?)/g; function convertToChar(match,p1,p2){ return String.fromCharCode(parseInt(p1, 2)); } return str.replace(re, convertToChar); }

// realizamos el test binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); `

:rocket: في REPL!

شرح الكود:

  • في هذا الحل نستخدم String.replace() للعثور على جميع الأرقام الثنائية وتحويلها إلى أحرف.
  • نستخدم أولاً تعبيرًا عاديًا للعثور على جميع الأرقام الثنائية والمساحات النهائية الاختيارية.
  • بعد ذلك ، نقوم بتعريف دالة تقوم بتحويل كل أول subcoincidence إلى رقم مع parseInt() ثم حرف مع String.fromCharCode() . عن طريق عدم استخدام subcoincidence الثاني نترك جانبا جميع المسافات التي بين كل رقم ثنائي.
  • وأخيرًا نستخدم تعبيرنا المعتاد والوظيفة المحددة كمعلمة من String.replace() .

ملاحظة: الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة محتوى ذي صلة إلى المقالة. (يرجى عدم إزالة أي اسم موجود).