September Morn Update

This commit is contained in:
Ingy döt Net 2019-09-12 10:33:56 -07:00
parent 4e2d22a71d
commit aac6731f2c
6856 changed files with 141342 additions and 21127 deletions

View file

@ -0,0 +1 @@
--- {}

View file

@ -1,13 +1,13 @@
text
decode(list l)
{
integer c, e, i;
text al, s;
integer c, e;
data al, s;
al = "abcdefghijklmnopqrstuvwxyz";
for (i, e in l) {
s = insert(s, -1, c = al[e]);
al = insert(delete(al, e), 0, c);
for (, e in l) {
s.append(c = al[e]);
al.delete(e).insert(0, c);
}
s;
@ -17,14 +17,13 @@ list
encode(text s)
{
integer c, e;
text al;
data al;
list l;
al = "abcdefghijklmnopqrstuvwxyz";
while (c = initial(s)) {
s = delete(s, 0);
l.append(e = place(al, c));
al = insert(delete(al, e), 0, c);
for (, c in b_draft(s)) {
l.append(e = al.place(c));
al.delete(e).insert(0, c);
}
l;
@ -33,10 +32,7 @@ encode(text s)
integer
main(void)
{
integer i;
text s;
for (i, s in list("broood", "bananaaa", "hiphophiphop")) {
for (, text s in list("broood", "bananaaa", "hiphophiphop")) {
list l;
l = encode(s);

View file

@ -0,0 +1,18 @@
USING: formatting kernel locals make sequences ;
: to-front ( elt seq -- seq' ) over [ remove ] dip prefix ;
: encode ( symbols msg -- indices )
[ [ swap 2dup index , to-front ] each ] { } make nip ;
: decode ( symbols indices -- msg )
[ [ swap [ nth ] keep over , to-front ] each ] "" make nip ;
:: round-trip ( msg symbols -- )
symbols msg encode :> encoded
symbols encoded decode :> decoded
msg decoded assert=
msg encoded decoded "%s -> %u -> %s\n" printf ;
"broood" "bananaaa" "hiphophiphop"
[ "abcdefghijklmnopqrstuvwxyz" round-trip ] tri@

View file

@ -0,0 +1,44 @@
fn main() {
let examples = vec!["broood", "bananaaa", "hiphophiphop"];
for example in examples {
let encoded = encode(example);
let decoded = decode(&encoded);
println!(
"{} encodes to {:?} decodes to {}",
example, encoded, decoded
);
}
}
fn get_symbols() -> Vec<u8> {
(b'a'..b'z').collect()
}
fn encode(input: &str) -> Vec<usize> {
input
.as_bytes()
.iter()
.fold((Vec::new(), get_symbols()), |(mut o, mut s), x| {
let i = s.iter().position(|c| c == x).unwrap();
let c = s.remove(i);
s.insert(0, c);
o.push(i);
(o, s)
})
.0
}
fn decode(input: &[usize]) -> String {
input
.iter()
.fold((Vec::new(), get_symbols()), |(mut o, mut s), x| {
o.push(s[*x]);
let c = s.remove(*x);
s.insert(0, c);
(o, s)
})
.0
.into_iter()
.map(|c| c as char)
.collect()
}