Libraryless. Click here for Pure Java version (13580L/86K).
/* (up to date version of the text is on discord) "Recognition By Compression" Components: -INPUT DATA - e. g. an image to compress -It is a SEARCH for the best COMPRESSOR of the INPUT DATA -a CURRENT BEST COMPRESSED VERSION of the input data [possibly updated when improvements are made] -a COMPRESSED VERSION of data x is a PIECE OF CODE computing x -a COMPRESSED LOSSY VERSION of data x is a PIECE OF CODE computing y with diff(x, y) small -SEARCH STRATEGIES (generators of ever improving scored compressed versions for some input data) -Compression SCORERS (let's say simply by the size of the compressed version; this is for losslesss compressors) (LOSSY compressions are difficult to score, TBD) Later: -SEMANTIC LINKERS that make sense of a compressed version of an image */ sclass RecognitionByCompression_v1 extends Meta { interface CompressionRegime<A> { byte[] decompressorToBytes(A decompressor); A decompressorFromBytes(byte[] compressed); byte[] runDecompressor(A a); default byte[] decompress(byte[] compressed) { ret runDecompressor(decompressorFromBytes(compressed)); } } class CompressionRegime_GZEval implements CompressionRegime<S> { public byte[] decompressorToBytes(S decompressor) { ret gzipBytes(toUtf8(decompressor)); } public S decompressorFromBytes(byte[] compressed) { ret fromUtf8(gunzipBytes(compressed)); } public byte[] runDecompressor(S code) { ret toByteArray(dm_javaEval(code)); } } class CompressorSearch<A> { class Submission { void setDecompressor(A decompressor) { this.decompressor_cache = decompressor; } simplyCached byte[] compressed() { ret decompressor_cache == null ?: regime.decompressorToBytes(decompressor_cache); } simplyCached A decompressor() { ret compressed_cache == null ?: regime.decompressorFromBytes(compressed_cache); } int compressedSize() { ret l(compressed()); } simplyCached double score() { ret doubleRatio(inputDataSize(), compressedSize()); } simplyCached Bool correct() { ret byteArraysEqual(regime.runDecompressor(decompressor()), inputData); } } CompressionRegime<A> regime; byte[] inputData; new Best<Submission> best; *(CompressionRegime<A> *regime) {} *(CompressionRegime<A> *regime, byte[] *inputData) {} int inputDataSize() { ret l(inputData); } // can submit concurrently! void submit(A compression) { if (compression == null) ret; new Submission s; s.setDecompressor(compression); if (s.score() > best.score()) if (!s.correct()) warn("Compressor didn't verify"); else best.put(s, s.score()); } } }
download show line numbers debug dex old transpilations
Travelled to 2 computer(s): bhatertpkbcr, mqqgnosmbjvj
No comments. add comment
| Snippet ID: | #1033064 |
| Snippet name: | RecognitionByCompression_v1 |
| Eternal ID of this version: | #1033064/23 |
| Text MD5: | 7bd00f6c97a4427d2ea7d89c2d805891 |
| Transpilation MD5: | 9c2bf0840d4f8d80b91a66438c6d52c7 |
| Author: | stefan |
| Category: | javax / compression /pattern recognition |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2021-10-12 23:11:43 |
| Source code size: | 2945 bytes / 93 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 389 / 515 |
| Version history: | 22 change(s) |
| Referenced in: | -