September Morn Update
This commit is contained in:
parent
4e2d22a71d
commit
aac6731f2c
6856 changed files with 141342 additions and 21127 deletions
1
Task/Move-to-front-algorithm/00META.yaml
Normal file
1
Task/Move-to-front-algorithm/00META.yaml
Normal file
|
|
@ -0,0 +1 @@
|
|||
--- {}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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@
|
||||
|
|
@ -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()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue