766 buzz=766 Name: Anonymous 2021-01-20 3:00 nextperm=20210123000
💑 🂽 💛 💘 💚 die +0m #150 fizz=ThreeFive inhour=3 inday=60 prime=863 💚 💘 💛 🂽 💑
gcd = 2 = (-28)*766 + 143*150
fib = 6161314747715278029583501626149
e ~ 854328256748876 / 314289801669749 = 2.7182818284590452353602874713_15949022391644386202079029556367
Added a processing step
>>115 to upgrade one of the tokens into a link to successive photos/rms-working images for the 362
>>8 "die" posts.
https://dis.tinychan.net/read/prog/1582047203 Currently the "die" post counter becomes the link. [parsetime, buttonnum, rmslinks, timedelta, count, rmsimages, fizzbuzz, hourdaily, primes, hearts, gcd, fibonacci, broccoli, nextperm]
posts code in /prog/
(processors => Array.from (document.querySelectorAll ("div.post > div.body")).filter (e => "die" == e.innerText).forEach (e => (elemstate => processors.forEach (p => p (e, elemstate))) ({}))) ([
(e, estate) => (m => { estate['posttime'] = m [0]; estate['day'] = parseInt (m [1], 10); estate['hour'] = parseInt (m [2], 10); estate['min'] = parseInt (m [3], 10); }) (e.parentNode.querySelector ('span.post_time').innerText.match (/^2021-01-(\d+) (\d+):(\d+)$/)),
(e, estate) => (btn => { estate['button'] = btn; estate['buttonnum'] = parseInt (btn.innerText, 10); }) (e.parentNode.querySelector ('button.num')),
(rmsarray => (e, estate) => { e.innerHTML = "<a class='die-link' href='#" + rmsarray [Math.floor (rmsarray.length * Math.random ())].parentNode.getAttribute ("id") + "'>" + e.innerHTML.trim () + "</a>"; }) (Array.from (document.querySelectorAll ("div.post > div.body")).filter (e => /https?:\/\/(www[.])?stallman[.]org\/archives\//.test (e.innerHTML))),
(procstate => (e, estate) => ((t, last) => { if (last >= 0) { ((h, m) => { e.innerHTML += ' +' + (h > 0 ? h + 'h' : '') + m + 'm'; }) ((t - last - (t - last) % 60) / 60, (t - last) % 60); } procstate['last'] = t; }) ((estate['day'] * 24 + estate['hour']) * 60 + estate['min'], procstate['last'])) ({last: -1}),
(procstate => (e, estate) => { e.innerHTML += ' #' + (estate['diecount'] = (++procstate['count'])); }) ({count: 0}),
((makelink, mod) => (e, estate) => { e.innerHTML = e.innerHTML.replace (/ (\S+)$/, makelink (estate['diecount'], mod)); }) ((count, mod) => (match, p1) => [' <a class="image-link" target="_blank" href="https://www.stallman.org/photos/rms-working/pages/', ((count - 1) % mod) + 1, '.html">', p1, '</a>'].join (''), 149),
((cycle, fbval, spec) => ((fb, fbn) => (e, estate) => { e.innerHTML += ' fizz=' + fb.next ().value; estate['button'].innerHTML += ' buzz=' + fbn (estate['buttonnum']); }) (function* () { const gens = spec.map (cycle); for (let k = 1; ; k++) { yield fbval (k, gens.map (g => g.next ().value)); } } (), n => fbval (n, spec.map (([div, s]) => n % div == 0 ? s : "")))) (function* ([n, s]) { for (;;) { for (let k = 1; k < n; k++) { yield ""; } yield s; } }, (n, vals) => { const s = vals.join (""); return s === "" ? n.toString () : s; }, [[3, "Three"], [5, "Five"], [7, "Seven"], [11, "Eleven"]]),
((procstate, spec) => (e, estate) => { e.innerHTML += spec.map (([label, keyfun]) => (key => (count => { procstate[key] = count + 1; return ' ' + label + '=' + (count + 1); }) (procstate[key] ?? 0)) (keyfun (estate))).join (''); }) ({}, [['inhour', estate => 'd' + estate['day'] + 'h' + estate['hour']], ['inday', estate => 'd' + estate['day']]]),
((base, filter, hasmod) => (primes => (e, estate) => { e.innerHTML += ' prime=' + primes.next ().value; }) (function* () { for (let p = base (2), x = p.next ().value; ; p = filter (hasmod (x), p), x = p.next ().value) { yield x; } } ())) (function* (start) { for (let x = start; ; x++) { yield x; } }, function* (pred, iter) { for (let x = iter.next (); !x.done; x = iter.next ()) { if (pred (x.value)) { yield x.value; } } }, div => x => x % div != 0),
((chars, n) => (narray => (e, estate) => (pick => { e.innerHTML = pick.join (' ') + ' ' + e.innerHTML + ' ' + pick.reverse ().join (' '); }) (narray.map (k => chars [Math.floor (chars.length * Math.random ())]).map (s => '&#x' + s + ';'))) (Array.from (Array (n).keys ()))) ('2619 2661 2665 2763 2764 2765 2766 2767 2E96 2E97 2F3C 1F0B1 1F0B2 1F0B3 1F0B4 1F0B5 1F0B6 1F0B7 1F0B8 1F0B9 1F0BA 1F0BB 1F0BC 1F0BD 1F0BE 1F394 1F491 1F493 1F494 1F495 1F496 1F497 1F498 1F499 1F49A 1F49B 1F49C 1F49D 1F49E 1F49F 1F5A4 1F60D 1F63B'.split (' '), 5),
((step, paren) => ((gcd, show) => (e, estate) => ((a, b) => { e.innerHTML += '<br/>' + show (a, b, gcd (a, b)); }) (estate['buttonnum'], estate['diecount'])) ((a, b) => { const state = [a, b, 1, 0, 0, 1]; while (state[1] != 0) { step (state); } return [state[0], state[2], state[3]]; }, (a, b, [g, x, y]) => ['gcd = ', g, ' = ', paren (x), '*', a, ' + ', paren (y), '*', b].join (''))) (state => { const [a, b, fa, fb, ga, gb] = state; const m = a % b, d = (a - m) / b; state[0] = b; state[1] = m; state[2] = ga; state[3] = gb; state[4] = fa - d * ga; state[5] = fb - d * gb; }, a => a < 0 ? '(' + a + ')' : a.toString ()),
(fibs => (e, estate) => { e.innerHTML += '<br/>fib = ' + fibs.next ().value; }) (function* () { let a = BigInt (0), b = BigInt (1); yield a; yield b; for (;;) { [a, b] = [b, a + b]; yield b; } } ()),
(procstate => ((tobig, matmul, tofrac, show1, show2, diff, marker, lr4e) => ((S, L, R) => (mstream => (estream => (e, estate) => ((prev, tfnow) => (snow => { e.innerHTML += '<br/>e ~ ' + show1 (tfnow) + (prev === '' ? snow : marker (snow, diff (prev, snow))); procstate['prev'] = snow; }) (show2 (tfnow))) (procstate['prev'], tofrac (estream.next ().value))) (mstream (lr4e ()))) (function* (lrstream) { let m = S; for (let x = lrstream.next ().value; ; x = lrstream.next ().value) { m = matmul (m, x == 'L' ? L : R); yield m; } })) (tobig ([0, 1, 1, 0]), tobig ([1, 1, 0, 1]), tobig ([1, 0, 1, 1]))) (m => m.map (x => BigInt (x)), (m1, m2) => [m1 [0] * m2 [0] + m1 [1] * m2 [2], m1 [0] * m2 [1] + m1 [1] * m2 [3], m1 [2] * m2 [0] + m1 [3] * m2 [2], m1 [2] * m2 [1] + m1 [3] * m2 [3]], m => [m [0] + m [1], m [2] + m [3]], ([a, b]) => a.toString () + ' / ' + b.toString () + ' = ', (digits => (power => ([a, b]) => (a / b).toString () + '.' + (a % b * power / b).toString ().padStart (digits, '0')) (BigInt (10) ** BigInt (digits))) (60), (s1, s2) => { let n = Math.min (s1.length, s2.length); for (let k = 0; k < n; k++) { if (s1 [k] !== s2 [k]) { return k; } } return n < s2.length ? n : -1; }, (s, pos) => pos < 0 ? s : (s.substring (0, pos) + '_' + s.substring (pos)), function* () { let count = 0; yield 'R'; for (;;) { count += 2; yield* 'RL'; yield* 'R'.repeat (count); count += 2; yield* 'LR'; yield* 'L'.repeat (count); } })) ({prev: ''}),
((sortend, minover, swap) => (next => (e, estate) => { e.parentNode.children [0].innerHTML += ' nextperm=' + next (Array.from (estate['posttime'].replace (/\D/g, ''))).join (''); }) (arr => { if (arr.length < 2) { return arr; } for (let k = arr.length - 2; k >= 0; k--) { let over = minover (arr, k); if (over >= 0) { return sortend (swap (arr, k, over + k + 1), k + 1); } } return arr.sort (); })) ((arr, pos) => { arr.splice (pos, arr.length - pos, ...arr.slice (pos).sort ()); return arr; }, (arr, pos) => arr.slice (pos + 1).reduce ((acc, item, idx, sli) => (arr [pos] < item) && ((acc < 0) || (item < sli [acc])) ? idx : acc, -1), (arr, a, b) => { let x = arr [a]; arr [a] = arr [b]; arr [b] = x; return arr; }),
])