ocaml: phase 5.1 xor_cipher.ml baseline (XOR roll-key encryption, round-trip = 601)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 22s

For each character, XOR with the corresponding key char (key cycled
via 'i mod kn'):

  let xor_cipher key text =
    let buf = Buffer.create n in
    for i = 0 to n - 1 do
      let c = Char.code text.[i] in
      let k = Char.code key.[i mod kn] in
      Buffer.add_string buf (String.make 1 (Char.chr (c lxor k)))
    done;
    Buffer.contents buf

XOR is its own inverse, so encrypt + decrypt with the same key yields
the original. Test combines:
  - String.length decoded            = 6
  - decoded = 'Hello!'                  -> 1
  - 6 * 100 + 1                          = 601

Tests Char.code + Char.chr round-trip, the iter-127 lxor operator,
Buffer.add_string + String.make 1, and key-cycling via mod.

90 baseline programs total.
This commit is contained in:
2026-05-09 18:19:02 +00:00
parent eb621240d7
commit 60e3ce1c96
3 changed files with 24 additions and 0 deletions

View File

@@ -80,6 +80,7 @@
"subset_sum.ml": 8,
"tic_tac_toe.ml": 1,
"word_freq.ml": 8,
"xor_cipher.ml": 601,
"zigzag.ml": 55,
"zip_unzip.ml": 1000,
"sieve.ml": 15,

View File

@@ -0,0 +1,16 @@
let xor_cipher key text =
let n = String.length text in
let kn = String.length key in
let buf = Buffer.create n in
for i = 0 to n - 1 do
let c = Char.code text.[i] in
let k = Char.code key.[i mod kn] in
Buffer.add_string buf (String.make 1 (Char.chr (c lxor k)))
done;
Buffer.contents buf
;;
let encoded = xor_cipher "key" "Hello!" in
let decoded = xor_cipher "key" encoded in
String.length decoded * 100 + (if decoded = "Hello!" then 1 else 0)