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
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:
@@ -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,
|
||||
|
||||
16
lib/ocaml/baseline/xor_cipher.ml
Normal file
16
lib/ocaml/baseline/xor_cipher.ml
Normal 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)
|
||||
@@ -407,6 +407,13 @@ _Newest first._
|
||||
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
|
||||
'a tree`) with insert + in-order traversal. Tests parametric ADT,
|
||||
recursive match, List.append, List.fold_left.
|
||||
- 2026-05-09 Phase 5.1 — xor_cipher.ml baseline (XOR roll-key
|
||||
encryption, round-trip → 601). For each character, XOR with the
|
||||
corresponding key char (key cycled via `i mod kn`). Encrypts
|
||||
"Hello!" with key "key", decrypts the result, and verifies the
|
||||
round-trip preserves both length (6) and equality. Tests
|
||||
Char.code + Char.chr round-trip + the iter-127 `lxor` operator
|
||||
+ Buffer.add_string + String.make 1. 90 baseline programs total.
|
||||
- 2026-05-09 Phase 5.1 — simpson_int.ml baseline (Simpson's rule
|
||||
numerical integration, ∫₀¹ x² dx ≈ 1/3, scaled = 10000). Composite
|
||||
Simpson's 1/3 rule with 100 panels. Coefficients 1-4-2-...-2-4-1
|
||||
|
||||
Reference in New Issue
Block a user