Avec WhatsApp/FB qui fait n'importe quoi avec nos données, il fallait qu'on trouve un moyen de communiquer de manière sécurisée une dernière fois.
Voici un compte-rendu du point Data Eng où on a mis le protocole Phantom en place.
Aga : On dirait que le fichier en input contient des nombres entre 0 et 999. Tiens, c'est pas un beau rectangle. Et si on reformait le rectangle ?
Jalil : Comment on connait la largeur ?
Bilal : On pourrait entraîner un modèle qui nous permettrait de la déterminer.
Jalil : Avec un petit Random Forest et les bons hyperparamètres, ça devrait être easy !
Moez : Bah avec le PGCD ? ou la décomposition en nombres premiers ?
X est le plus grand nombre premier composant le nombre d'éléments total.
Validation : Le nombre de lignes N est < 10.
Chacune de ces N lignes va désormais s'appeler un calque.
Pour chacun des calques, il n'y a qu'une dimension pour le moment (ex: 456 234 34 123
).
On va "étaler" le calque en rajoutant une dimension : en convertissant le nombre en
ternaire sur 6 trits et en imprimant chaque nombre sur une nouvelle ligne.
https://en.wikipedia.org/wiki/Ternary_numeral_system
Par ex: 456 donne 121220 en ternaire, 42 donne 001120
Exemple de calque obtenu à partir de la ligne 456 234 34 123
:
121220
022200
001021
011120
Sylvain : Ah mais on tient plus les calques dans le bon sens !
Dorra : Moez ! It's your time to shine !
Il faut tourner chaque calque de 90° dans le sens trigonométrique.
Validation: sur 2e ligne du 2e calque, le nombre de '2'
multiplié par le nombre de 1 donne 924.
David : Mais pourquoi on appelle ça des calques depuis le début ?
Andrew : Parce que des calques, ça peut se superposer et on voit toujours à travers. (Ratata!)
Le premier calque est celui qui va tout en haut de la pile.
Quand on regarde à travers tous les calques d'un coup, le résultat pixel par pixel va dépendre
des valeurs traversées:
- 0 : pixel noir opaque
- 1 : pixel blanc opaque
- 2 : pixel transparent.
Si pour un pixel, on traverse (dans l'ordre calque 1 -> dernier calque) : 2 2 1 0
,
la valeur du pixel sera 1
car le calque 1 est transparent, le 2e est transparent, le 3e est blanc
et le 4e est recouvert par le 3e calque.
Ex:
Calque 1:
2 1
2 0
Calque 2:
2 1
2 2
Calque 3:
0 1
2 0
Calque 4:
2 1
1 1
Le résultat de la pile de calque sera :
0 1
1 0
Quentin : Pas que j'aime pas ça mais y a des bits partout, je vois pas bien l'image.
Hicham : Je suis alternant mais je propose qu'on remplace par des caractères plus lisibles.
Remplacer les pixels blancs par "█" (code ASCII=9608) et les pixels noirs par " " (code ASCII=32)
En réduisant au max, le contenu de ma méthode de décodage fait 358 caractères !