Uses 9620K of libraries. Click here for Pure Java version (4853L/32K/107K).
1 | !752 |
2 | |
3 | static BWImage bw; |
4 | static Thread producer; |
5 | static Reproducing rp; |
6 | |
7 | !include #1004556 // class Reproducing |
8 | |
9 | static int luaMaxSteps = 1000*1000; |
10 | |
11 | p {
|
12 | rp = new Reproducing; |
13 | rendererMaker = func(S s) {
|
14 | if (startsWith(s, "lua ")) |
15 | ret luaRenderer(dropPrefix("lua ", s));
|
16 | null; // fallback to default (unstructure) |
17 | }; |
18 | |
19 | bw = rp.bw = loadBWImage("#1004576");
|
20 | rp.imageSurfaceToUpdateWithBest = showImage(bw.getBufferedImage()); |
21 | |
22 | rp.startProduction = r { produce() };
|
23 | |
24 | // Note: This doesn't terminate as it keeps looking for better |
25 | // solutions. It does write the shortest100.txt file in the mean |
26 | // time which is your real output. |
27 | rp.findShortest100_openEnd(); |
28 | } |
29 | |
30 | static void produce() {
|
31 | cancelThread(producer); |
32 | producer = new Thread(r {
|
33 | // STRATEGY! |
34 | |
35 | rp.push(fullGrab(bw)); |
36 | int w = 1; |
37 | while licensed {
|
38 | rp.push(new RandomSolid().reproduce(bw)); |
39 | S best = rp.bestDesc(); |
40 | if (best != null) |
41 | rp.push(varyFloat(best)); |
42 | if (w < bw.getWidth()) |
43 | rp.push(hrepeat(bw, w++)); |
44 | } |
45 | }, "Producer"); |
46 | producer.start(); |
47 | } |
48 | |
49 | static Renderer luaRenderer(final S code) {
|
50 | ret new Renderer {
|
51 | public BWImage render(int w, int h) {
|
52 | BWImage img = new BWImage(w, h); |
53 | Sandbox sandbox = makeSandbox(img); |
54 | luaMaxSteps(luaMaxSteps); |
55 | quickLua(sandbox, code); |
56 | ret img; |
57 | } |
58 | }; |
59 | } |
60 | |
61 | static Sandbox makeSandbox(final BWImage img) {
|
62 | Sandbox s = luaSandbox(); |
63 | |
64 | s.setOuter("w", Lua.value(img.getWidth()));
|
65 | s.setOuter("h", Lua.value(img.getHeight()));
|
66 | |
67 | s.setInner("set", new ThreeArgFunction() {
|
68 | public LuaValue call(LuaValue x, LuaValue y, LuaValue theByte) {
|
69 | img.setByte(x.toint(), y.toint(), (byte) theByte.toint()); |
70 | ret Lua.NIL; |
71 | } |
72 | }); |
73 | |
74 | ret s; |
75 | } |
Began life as a copy of #1004557
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, ddnzoavkxhuk, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1004577 |
| Snippet name: | Image Compressor ("go-basics.txt") |
| Eternal ID of this version: | #1004577/1 |
| Text MD5: | 52e96ccf0e6f668a991471c4f09a8f88 |
| Transpilation MD5: | 6af80c5a175a38e89d49da100eedd67f |
| Author: | stefan |
| Category: | javax / a.i. |
| Type: | JavaX source code |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2016-08-22 16:30:01 |
| Source code size: | 1862 bytes / 75 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 818 / 922 |
| Referenced in: | [show references] |