Just another update
This commit is contained in:
parent
a25938f123
commit
00a190b0a6
6591 changed files with 94363 additions and 23227 deletions
|
|
@ -1,21 +1,21 @@
|
|||
import std.stdio, std.algorithm, std.typecons, std.container,std.array;
|
||||
import std.stdio, std.algorithm, std.typecons, std.container, std.array;
|
||||
|
||||
auto encode(T)(Group!("a == b", T[]) sf) {
|
||||
auto encode(alias eq, R)(Group!(eq, R) sf) /*pure nothrow @safe*/ {
|
||||
auto heap = sf.map!(s => tuple(s[1], [tuple(s[0], "")]))
|
||||
.array.heapify!q{b < a};
|
||||
|
||||
while (heap.length > 1) {
|
||||
auto lo = heap.front; heap.removeFront;
|
||||
auto hi = heap.front; heap.removeFront;
|
||||
foreach (ref pair; lo[1]) pair[1] = '0' ~ pair[1];
|
||||
foreach (ref pair; hi[1]) pair[1] = '1' ~ pair[1];
|
||||
lo[1].each!((ref pair) => pair[1] = '0' ~ pair[1]);
|
||||
hi[1].each!((ref pair) => pair[1] = '1' ~ pair[1]);
|
||||
heap.insert(tuple(lo[0] + hi[0], lo[1] ~ hi[1]));
|
||||
}
|
||||
return heap.front[1].schwartzSort!q{tuple(a[1].length, a[0])};
|
||||
return heap.front[1].schwartzSort!q{ tuple(a[1].length, a[0]) };
|
||||
}
|
||||
|
||||
void main() {
|
||||
auto s = "this is an example for huffman encoding"d;
|
||||
foreach (p; s.dup.sort().release.group.encode)
|
||||
void main() /*@safe*/ {
|
||||
immutable s = "this is an example for huffman encoding"d;
|
||||
foreach (const p; s.dup.sort().group.encode)
|
||||
writefln("'%s' %s", p[]);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue