Scrivi un programma o una funzione (o un insieme di programmi / funzioni) per crittografare e decrittografare i dati in base alle seguenti specifiche:
crittografia
Calcola un hash XOR dell'input XOR-ing ogni byte con l'altro.
XOR ogni byte dell'ingresso da questo hash.
Sposta il risultato di quattro bit rimanenti.
Riempi il lato sinistro con i primi quattro bit dell'hash XOR.
Riempi il lato destro con gli ultimi quattro bit dell'hash XOR.
Esempio
Dato input:
"G0lf"
(0x47306C66
)Calcola l'hash XOR:
0x47 ^ 0x30 ^ 0x6C ^ 0x66 = 0x7D
XOR ogni byte per hash:
0x3A4D111B
Risultato atteso (dopo shift e pad):
"s¤Ñ\x11½"
(0x73A4D111BD
)
Regole
Il tuo programma / funzione può inserire / emettere qualsiasi tipo abbia senso nella tua lingua di golf preferita (String, Byte Array, ecc.) Fintanto che l'input / output sono i byte effettivi. Ad esempio, non è possibile generare una stringa esadecimale.
La crittografia e la decrittografia possono essere separate in programmi separati (il punteggio sarà la loro dimensione combinata) o uno singolo. I singoli metodi possono sostenere un argomento per stabilire se crittografare o decrittografare.
Si prevede che l'input per la crittografia abbia una dimensione di almeno 1 byte.
È possibile prevedere che l'input per la decrittografia sia di almeno 2 byte.
I byte non stampabili non devono essere sottoposti a escape nell'output.