12
\$\begingroup\$

The golfing language Jelly has a very complex and clever string compression system which I'm not going to go into depth about here. You can find a very good explanation here.

Basically, Jelly's string literals are represented as “...», where ... is a string of characters from Jelly's codepage that is decoded into a base-250 integer before being decoded into a string which can contain both words and printable ASCII characters.

Your challenge is to find a string that, when decompressed in Jelly, represents itself. For example, if xxx is your string, “xxx» must return xxx to be valid.

You can test ideas here, or just download Jelly and use the sss function.

Scoring

The shortest submission in bytes (not counting and ») wins. I'll happily accept a proof of impossibility, although it seems unlikely.

I've tested that there are no 1-or-2-byters, but there might still be a trivial one that is a single word.

Tips, notes and ideas

  • Compressing ASCII characters is actually less effective than just using an ordinary string, so with enough, you'll have space to fit an extra word.
  • You'll have to use printable ASCII (+ newlines) because nothing decompresses into characters that aren't those.
  • There might be trivial solutions of 1-2 short words.

The empty string is not a valid solution. The string must be one single string - that is, you can't just escape the string and output it some other way.

\$\endgroup\$
3
  • \$\begingroup\$ You should probably specify that the "string" can't contain extra or », so answers don't just escape the string and write a normal quine \$\endgroup\$
    – pxeger
    Commented Sep 12, 2021 at 6:14
  • \$\begingroup\$ I suspect there is no such quine. xxx would have to contain only ascii characters + pilcrow, as non-ascii can't be compressed. As all the words in Jelly's dictionary are longer than the 2-2.5 bytes required to compress them, we can't have the string ever look up a word, it can only decompress as characters. It might be possible to find a string that decompresses to itself that only uses the characters, but I doubt it (I'll take a proper go at proving it doesn't later) \$\endgroup\$ Commented Sep 12, 2021 at 7:42
  • 6
    \$\begingroup\$ I’m also skeptical, but a simple length argument doesn’t suffice; there are strings that decompress to shorter strings, using the 2-letter words in the short dictionary with flags. \$\endgroup\$ Commented Sep 12, 2021 at 8:35

3 Answers 3

5
\$\begingroup\$

closest so far: 'xC~x9u1' from “xC~x9u+» and 'zC~x9u1' from “xC~x9u1»: 6/7, 85.7%

floor: above 33*250^9
ceiling: below 129×250^34

update from last time: no matches in 8 or 9 digits; my computer is too slow to find any more near misses. 9 digits alone took around 634 CPU hours (~26 days, split onto 4 cores), checking the same way for 10 digits would take over 6 CPU years on my computer. I recently thought of a new strategy for skipping a large percent of numbers but it means I also skip near misses as well; so any further digits I do will have yet another new definition for near miss. I also haven't figured out if it's guaranteed that it'll hit every match or if it has a chance to skip some, so I'm gonna do some more math before I figure out how to explain it here. if you know how to improve code performance, I'm still putting new iterations of my code as comments at the bottom of the gist linked in the comments, and I would love any suggestions you have. it's still in rust right now; but I have no idea what I'm doing when it comes to optimizations. there were quite a few near misses in the 7 digit range so I am rather disappointed that there were none in 8 or 9; if you spot a bug in my algorithm that'd be cool as well.

no other changes since last time:

no solution yet, but some preliminary results which may be helpful to others.

in the first step of decompression, you divmod by 3 to either select making a character or using one of the dictionaries. if you ignore the dictionary, this means it basically reduces to a base conversion problem where one side is base 1/288: (using the for when it would touch a dictionary and ¶ for a newline)

 ��!��"��#��$��%��&��'��(��)��*��+��,��-��.��/��0��1��2��3��4��5��6��7��8��9��:��;��<��=��>��?��@��A��B��C��D��E��F��G��H��I��J��K��L��M��N��O��P��Q��R��S��T��U��V��W��X��Y��Z��[��\��]��^��_��`��a��b��c��d��e��f��g��h��i��j��k��l��m��n��o��p��q��r��s��t��u��v��w��x��y��z��{��|��}��~��¶��

and the other side is bijective base 250:

¡¢£¤¥¦©¬®µ½¿€ÆÇÐÑ×ØŒÞßæçðıȷñ÷øœþ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¶°¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒɠɦƙɱɲƥʠɼʂƭʋȥẠḄḌẸḤỊḲḶṂṆỌṚṢṬỤṾẈỴẒȦḂĊḊĖḞĠḢİĿṀṄȮṖṘṠṪẆẊẎŻạḅḍẹḥịḳḷṃṇọṛṣṭ§Äẉỵẓȧḃċḋėḟġḣŀṁṅȯṗṙṡṫẇẋẏż

since the symbols have different values from each other I think it's just a matter of coincidence to get the same number to be represented with the same symbols.

what this means is that until one of them out-bases the other, there may be a number that matches somewhere. (after 250^40 [roughly 8.27e95 or 2^318.7], base250 will always take more digits and you'd have to use the dictionaries to pad the output; but past ~129x250^34 [roughly 4.37e83 or 2^277.8] every base250 number the same length as the corresponding base288 number will start with a digit greater than so it will never be ascii-only anymore). what I'm calling a 'near miss' in this first section is when an n-1 long string of digits are the same in both bases. this was found with slow python code; but the 'near miss' qualification was different so I'll leave the results in the answer.

near misses at one digit: [“/» = '0'(2 off) and “2» = '1'(1 off)]
near misses at two digits: [“-Ñ» = '¶-'(111 off) jumps to “/_» = ' .'(303 off)]

'"*'   “S*»    8,793
'),'   “[,»   10,545
'0.'   “c.»   12,297
'70'   “k0»   14,049
'>2'   “s2»   15,801
'E4'   “{4»   17,553
'c='   “"=»   25,062
'j?'   “*?»   26,814
'qA'   “2A»   28,566
'xC'   “:C»   30,318
'¶E'   “BE»   32,070
also spotted “y©» = 'yC' which I thought was funny since the c is just circled

near misses at three digits: [“+B>» = '¶B+'(65 off) jumps to “+D⁽» = ' C+'(349 off)]

'/D,'   “eD,»   3,017,295
';J/'   “*J/»   3,768,798
';Jb'   “;J/»   3,768,849
'G2 '   “EG2»   4,512,783
'G2#'   “FG2»   4,512,786
'G2&'   “GG2»   4,512,789
'G2)'   “HG2»   4,512,792
'G2,'   “IG2»   4,512,795
'G2/'   “JG2»   4,512,798
'G22'   “KG2»   4,512,801
'G25'   “LG2»   4,512,804
'G28'   “MG2»   4,512,807
'G2;'   “NG2»   4,512,810
'G2>'   “OG2»   4,512,813
'G2A'   “PG2»   4,512,816
'G2D'   “QG2»   4,512,819
'G2G'   “RG2»   4,512,822
'G2J'   “SG2»   4,512,825
'G2M'   “TG2»   4,512,828
'G2P'   “UG2»   4,512,831
'G2S'   “VG2»   4,512,834 [ it's so close to ]
'G2V'   “WG2»   4,512,837 [ being an anagram ]
'G2Y'   “XG2»   4,512,840 [ ...just needs to ]
'G2\'   “YG2»   4,512,843 [ shift a tiny bit ]
'G2_'   “ZG2»   4,512,846
'G2b'   “[G2»   4,512,849
'G2e'   “\G2»   4,512,852
'G2h'   “]G2»   4,512,855
'G2k'   “^G2»   4,512,858
'G2n'   “_G2»   4,512,861
'G2q'   “`G2»   4,512,864
'G2t'   “aG2»   4,512,867
'G2w'   “bG2»   4,512,870
'G2z'   “cG2»   4,512,873
'G2}'   “dG2»   4,512,876
'WW6'   “mW6»   5,522,055
'[Y<'   “[Y7»   5,772,561
'c]9'   “2]9»   6,273,558
'¶j@'   “uj@»   8,026,815
'¶j^'   “¶j@»   8,026,845

near misses at four digits: [“)f⁸ȧ» = '¶¶g)' jumps to “)i4Ḣ» = ' h)']

'-I;*'   “-I;V»     723,390,087
'`G]5'   “`G]K»   1,520,148,576

near misses at five digits: [didn't calculate crossing point]

'^)L75'   “n^)L7»   435,080,769,306
'f>-A8'   “~f>-A»   497,707,074,066

this section is now from much faster rust code; but as is the nature of exponentials it only gets a bit farther. every ascii-only, non-dictionary, number 8 digits or under has now been checked. after some more optimizations, the 8-digit check only took around 4 hours. there's a couple more optimizations I'm going to implement, but then I'm going to start it on 9 digits, which is projected to finish in only 16 days.
if you want to steal the code and run it on your computer as well you can see the gist linked in the comments from @pan. as for how it works: most numbers are either not ascii-jelly or not dictionary-free, meaning once you've built one of the strings and you find out there's a non-ascii somewhere in the other one all the work you spent making those strings is wasted. we start with the jelly side; writing a for loop that runs through the combinatorial product of n ascii digits. we then put it through an if that checks it's a non-dictionary decompressed string. since we now know that all numbers used are valid, we construct both vectors, and it prints it if there's n-1 digits with the same chars in the same indices. (the more optimized version that finished 8 digits in 4 hours is basically the same except it also realizes that most invalid numbers tend to follow each other, so it jumps to the next valid number instead of trying every single invalid number)

'"*'        “S*»                        8,793
'),'        “[,»                       10,545
'0.'        “c.»                       12,297
'70'        “k0»                       14,049
'>2'        “s2»                       15,801
'E4'        “{4»                       17,553
'c='        “"=»                       25,062
'j?'        “*?»                       26,814
'qA'        “2A»                       28,566
'xC'        “:C»                       30,318
'¶E'        “BE»                       32,070
2 digits
'/D,'       “eD,»                   3,017,295
'/_,'       “/L,»                   3,024,045
';J/'       “*J/»                   3,768,798
';Jb'       “;J/»                   3,768,849
'WB6'       “WQ6»                   5,516,805
'WW6'       “mW6»                   5,522,055
'[Y<'       “[Y7»                   5,772,561
'c]9'       “2]9»                   6,273,558
'¶%@'       “¶V@»                   8,009,565
'¶j@'       “uj@»                   8,026,815
'¶j^'       “¶j@»                   8,026,845
3 digits
'-I;V'      “-I;*»                723,390,087
'7iw,'      “7Rw,»                881,655,045
'`G]K'      “`G]5»              1,520,148,576
4 digits               
')L]<('     “)L]"(»           165,271,515,291
5 digits              
6 digits              
'"^zHf-%'   “"*zHf-%»   8,638,176,928,324,038
')`K0/-&'   “)`Kh/-&»  10,348,931,331,136,539
'jURA9~/'   “jtRA9~/»  26,237,629,941,156,798
'xC~x9u1'   “xC~x9u+»  29,607,919,863,029,544
'zC~x9u1'   “xC~x9u1»  29,607,919,863,029,550
7 digits
8 digits
9 digits
\$\endgroup\$
2
  • \$\begingroup\$ (rust being workshopped at this stack overflow question) \$\endgroup\$
    – guest4308
    Commented Dec 13, 2023 at 3:56
  • 1
    \$\begingroup\$ Hey, I modified your code a bit in order to parallelize it, hope it helps. \$\endgroup\$
    – pan
    Commented Dec 19, 2023 at 7:51
3
\$\begingroup\$

No solution without the dictionary using at most 9 characters

Using meet-in-the-middle, we can check that there are no solutions without the dictionary using under 9 characters with the following code:

import itertools
import tqdm


code_page  = '''¡¢£¤¥¦©¬®µ½¿€ÆÇÐÑ×ØŒÞßæçðıȷñ÷øœþ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¶'''
code_page += '''°¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒɠɦƙɱɲƥʠɼʂƭʋȥẠḄḌẸḤỊḲḶṂṆỌṚṢṬỤṾẈỴẒȦḂĊḊĖḞĠḢİĿṀṄȮṖṘṠṪẆẊẎŻạḅḍẹḥịḳḷṃṇọṛṣṭ§Äẉỵẓȧḃċḋėḟġḣŀṁṅȯṗṙṡṫẇẋẏż«»‘’“”'''

pos = code_page[32:96+32]

rev = {a: 3*(code_page.index(a) - 32) for a in pos}
ver = {a: code_page.find(a) + 1 for a in pos}


n = 9
poss = []
for i in range(n):
    spos = []
    for c in pos:
        spos.append(ver[c] * 250**(n-1-i) - rev[c] * 228**i)
    poss.append(spos)

print(poss)

v1 = {sum(x) for x in tqdm.tqdm(itertools.product(*poss[:n//2]), total=96**(n//2))}

for x in tqdm.tqdm(itertools.product(*poss[n//2:]), total=96**((n+1)//2)):
    if -sum(x) in v1:
        print(x, sum(x))
        exit(0)

Projecting from the runtime for 9 characters, running it for 10 characters would either take a lot of memory (128GB might be enough) and a couple of hours, or around 1GB and a few days.

\$\endgroup\$
2
\$\begingroup\$

no new best yet, but if you're interested in doing the coding bit I did some mathy stuff

it's been a year since I last looked at this, so I decided to give it another look.
last time, we found that we have two 'numbers' that we're converting between, a 'compressed' number which is written in bijective base 250 using most of the jelly code page, and an 'uncompressed' number written in base 1/288 using digit/3rd printable ascii. using this information, I made some code that only looks at numbers which have digits in the ascii range in base 250 and digits divisible by three in base 1/288, and was able to compare all numbers with 9 or fewer digits.

however, this is not the only information that we can use. I called it 'basically random', but there is still enough information tied up in the fact that must both have the same value and representation that we can make things more efficient. as an example, let's look at a comparison between base 12 and base 1/16. last time, I only skipped invalid numbers, which is basically like looking through this block:

b12   b1/16   value
194    001    256
195    101    257
196    201    258
197    301    259
198    401    260
199    501    261
19a    601    262
19b    701    263
1a0    801    264
1a1    901    265
1a2    a01    266
1a3    b01    267
1a4    c01    268
1a5    d01    269
1a6    e01    270
1a7    f01    271
1a8    011    272
1a9    111    273
1aa    211    274
1ab    311    275
1b0    411    276
1b1    511    277
1b2    611    278
1b3    711    279
1b4    811    280
1b5    911    281
1b6    a11    282
1b7    b11    283
1b8    c11    284
1b9    d11    285
1ba    e11    286
1bb    f11    287
200    021    288
201    121    289
202    221    290
203    321    291
204    421    292
205    521    293
206    621    294
207    721    295
208    821    296
209    921    297
20a    a21    298
20b    b21    299
210    c21    300
211    d21    301
212    e21    302
213    f21    303
214    031    304
215    131    305
216    231    306
217    331    307
218    431    308
219    531    309
21a    631    310
21b    731    311
220    831    312
221    931    313
222    a31    314
223    b31    315
224    c31    316
225    d31    317
226    e31    318
227    f31    319
228    041    320
229    141    321
22a    241    322
22b    341    323
230    441    324
231    541    325
232    641    326
233    741    327
234    841    328
235    941    329
236    a41    330
237    b41    331
238    c41    332
239    d41    333
23a    e41    334
23b    f41    335
240    051    336
241    151    337
242    251    338
243    351    339
244    451    340
245    551    341
246    651    342
247    751    343
248    851    344
249    951    345
24a    a51    346
24b    b51    347
250    c51    348
251    d51    349
252    e51    350
253    f51    351
254    061    352
255    161    353
256    261    354
257    361    355
258    461    356
259    561    357
25a    661    358
25b    761    359
260    861    360
261    961    361
262    a61    362
263    b61    363
264    c61    364
265    d61    365
266    e61    366
267    f61    367
268    071    368
269    171    369
26a    271    370
26b    371    371
270    471    372
271    571    373
272    671    374
273    771    375
274    871    376
275    971    377
276    a71    378
277    b71    379
278    c71    380
279    d71    381
27a    e71    382
27b    f71    383
280    081    384
281    181    385
282    281    386
283    381    387
284    481    388
285    581    389
286    681    390
287    781    391
288    881    392
289    981    393
28a    a81    394
28b    b81    395
290    c81    396
291    d81    397
292    e81    398
293    f81    399
294    091    400
295    191    401
296    291    402
297    391    403
298    491    404
299    591    405
29a    691    406
29b    791    407
2a0    891    408
2a1    991    409
2a2    a91    410
2a3    b91    411
2a4    c91    412
2a5    d91    413
2a6    e91    414
2a7    f91    415
2a8    0a1    416
2a9    1a1    417
2aa    2a1    418
2ab    3a1    419
2b0    4a1    420
2b1    5a1    421
2b2    6a1    422
2b3    7a1    423
2b4    8a1    424
2b5    9a1    425
2b6    aa1    426
2b7    ba1    427
2b8    ca1    428
2b9    da1    429
2ba    ea1    430
2bb    fa1    431
300    0b1    432
301    1b1    433
302    2b1    434
303    3b1    435
304    4b1    436
305    5b1    437
306    6b1    438
307    7b1    439
308    8b1    440
309    9b1    441
30a    ab1    442
30b    bb1    443
310    cb1    444
311    db1    445
312    eb1    446
313    fb1    447
314    0c1    448
315    1c1    449
316    2c1    450
317    3c1    451
318    4c1    452
319    5c1    453
31a    6c1    454
31b    7c1    455
320    8c1    456
321    9c1    457
322    ac1    458
323    bc1    459
324    cc1    460
325    dc1    461
326    ec1    462
327    fc1    463
328    0d1    464
329    1d1    465
32a    2d1    466
32b    3d1    467
330    4d1    468
331    5d1    469
332    6d1    470
333    7d1    471
334    8d1    472
335    9d1    473
336    ad1    474
337    bd1    475
338    cd1    476
339    dd1    477
33a    ed1    478
33b    fd1    479
340    0e1    480
341    1e1    481
342    2e1    482
343    3e1    483
344    4e1    484
345    5e1    485
346    6e1    486
347    7e1    487
348    8e1    488
349    9e1    489
34a    ae1    490
34b    be1    491
350    ce1    492
351    de1    493
352    ee1    494
353    fe1    495
354    0f1    496
355    1f1    497
356    2f1    498
357    3f1    499
358    4f1    500
359    5f1    501
35a    6f1    502
35b    7f1    503
360    8f1    504
361    9f1    505
362    af1    506
363    bf1    507
364    cf1    508
365    df1    509
366    ef1    510
367    ff1    511
368    002    512
369    102    513
36a    202    514
36b    302    515
370    402    516
371    502    517
372    602    518
373    702    519
374    802    520
375    902    521
376    a02    522
377    b02    523
378    c02    524
379    d02    525
37a    e02    526
37b    f02    527
380    012    528
381    112    529
382    212    530
383    312    531
384    412    532
385    512    533
386    612    534
387    712    535
388    812    536
389    912    537
38a    a12    538
38b    b12    539
390    c12    540
391    d12    541
392    e12    542
393    f12    543
394    022    544
395    122    545
396    222    546
397    322    547
398    422    548
399    522    549
39a    622    550
39b    722    551
3a0    822    552
3a1    922    553
3a2    a22    554
3a3    b22    555
3a4    c22    556
3a5    d22    557
3a6    e22    558
3a7    f22    559
3a8    032    560
3a9    132    561
3aa    232    562
3ab    332    563
3b0    432    564
3b1    532    565
3b2    632    566
3b3    732    567
3b4    832    568
3b5    932    569
3b6    a32    570
3b7    b32    571
3b8    c32    572
3b9    d32    573
3ba    e32    574
3bb    f32    575
400    042    576
401    142    577
402    242    578
403    342    579
404    442    580
405    542    581
406    642    582
407    742    583
408    842    584
409    942    585
40a    a42    586
40b    b42    587
410    c42    588
411    d42    589
412    e42    590
413    f42    591
414    052    592
415    152    593
416    252    594
417    352    595
418    452    596
419    552    597
41a    652    598
41b    752    599
420    852    600
421    952    601
422    a52    602
423    b52    603
424    c52    604
425    d52    605
426    e52    606
427    f52    607
428    062    608
429    162    609
42a    262    610
42b    362    611
430    462    612
431    562    613
432    662    614
433    762    615
434    862    616
435    962    617
436    a62    618
437    b62    619
438    c62    620
439    d62    621
43a    e62    622
43b    f62    623
440    072    624
441    172    625
442    272    626
443    372    627
444    472    628
445    572    629
446    672    630
447    772    631
448    872    632
449    972    633
44a    a72    634
44b    b72    635
450    c72    636
451    d72    637
452    e72    638
453    f72    639
454    082    640
455    182    641
456    282    642
457    382    643
458    482    644
459    582    645
45a    682    646
45b    782    647
460    882    648
461    982    649
462    a82    650
463    b82    651
464    c82    652
465    d82    653
466    e82    654
467    f82    655
468    092    656
469    192    657
46a    292    658
46b    392    659
470    492    660
471    592    661
472    692    662
473    792    663
474    892    664
475    992    665
476    a92    666
477    b92    667
478    c92    668
479    d92    669
47a    e92    670
47b    f92    671
480    0a2    672
481    1a2    673
482    2a2    674
483    3a2    675
484    4a2    676
485    5a2    677
486    6a2    678
487    7a2    679
488    8a2    680
489    9a2    681
48a    aa2    682
48b    ba2    683
490    ca2    684
491    da2    685
492    ea2    686
493    fa2    687
494    0b2    688
495    1b2    689
496    2b2    690
497    3b2    691
498    4b2    692
499    5b2    693
49a    6b2    694
49b    7b2    695
4a0    8b2    696
4a1    9b2    697
4a2    ab2    698
4a3    bb2    699
4a4    cb2    700
4a5    db2    701
4a6    eb2    702
4a7    fb2    703
4a8    0c2    704
4a9    1c2    705
4aa    2c2    706
4ab    3c2    707
4b0    4c2    708
4b1    5c2    709
4b2    6c2    710
4b3    7c2    711
4b4    8c2    712
4b5    9c2    713
4b6    ac2    714
4b7    bc2    715
4b8    cc2    716
4b9    dc2    717
4ba    ec2    718
4bb    fc2    719
500    0d2    720
501    1d2    721
502    2d2    722
503    3d2    723
504    4d2    724
505    5d2    725
506    6d2    726
507    7d2    727
508    8d2    728
509    9d2    729
50a    ad2    730
50b    bd2    731
510    cd2    732
511    dd2    733
512    ed2    734
513    fd2    735
514    0e2    736
515    1e2    737
516    2e2    738
517    3e2    739
518    4e2    740
519    5e2    741
51a    6e2    742
51b    7e2    743
520    8e2    744
521    9e2    745
522    ae2    746
523    be2    747
524    ce2    748
525    de2    749
526    ee2    750
527    fe2    751
528    0f2    752
529    1f2    753
52a    2f2    754
52b    3f2    755
530    4f2    756
531    5f2    757
532    6f2    758
533    7f2    759
534    8f2    760
535    9f2    761
536    af2    762
537    bf2    763
538    cf2    764
539    df2    765
53a    ef2    766
53b    ff2    767
540    003    768
541    103    769
542    203    770
543    303    771
544    403    772
545    503    773
546    603    774
547    703    775
548    803    776
549    903    777
54a    a03    778
54b    b03    779
550    c03    780
551    d03    781
552    e03    782
553    f03    783
554    013    784
555    113    785
556    213    786
557    313    787
558    413    788
559    513    789
55a    613    790
55b    713    791
560    813    792
561    913    793
562    a13    794
563    b13    795
564    c13    796
565    d13    797
566    e13    798
567    f13    799
568    023    800
569    123    801
56a    223    802
56b    323    803
570    423    804
571    523    805
572    623    806
573    723    807
574    823    808
575    923    809
576    a23    810
577    b23    811
578    c23    812
579    d23    813
57a    e23    814
57b    f23    815
580    033    816
581    133    817
582    233    818
583    333    819
584    433    820
585    533    821
586    633    822
587    733    823
588    833    824
589    933    825
58a    a33    826
58b    b33    827
590    c33    828
591    d33    829
592    e33    830
593    f33    831
594    043    832
595    143    833
596    243    834
597    343    835
598    443    836
599    543    837
59a    643    838
59b    743    839
5a0    843    840
5a1    943    841
5a2    a43    842
5a3    b43    843
5a4    c43    844
5a5    d43    845
5a6    e43    846
5a7    f43    847
5a8    053    848
5a9    153    849
5aa    253    850
5ab    353    851
5b0    453    852
5b1    553    853
5b2    653    854
5b3    753    855
5b4    853    856
5b5    953    857
5b6    a53    858
5b7    b53    859
5b8    c53    860
5b9    d53    861
5ba    e53    862
5bb    f53    863
600    063    864
601    163    865
602    263    866
603    363    867
604    463    868
605    563    869
606    663    870
607    763    871
608    863    872
609    963    873
60a    a63    874
60b    b63    875
610    c63    876
611    d63    877
612    e63    878
613    f63    879
614    073    880
615    173    881
616    273    882
617    373    883
618    473    884
619    573    885
61a    673    886
61b    773    887
620    873    888
621    973    889
622    a73    890
623    b73    891
624    c73    892
625    d73    893
626    e73    894
627    f73    895
628    083    896
629    183    897
62a    283    898
62b    383    899
630    483    900
631    583    901
632    683    902
633    783    903
634    883    904
635    983    905
636    a83    906
637    b83    907
638    c83    908
639    d83    909
63a    e83    910
63b    f83    911
640    093    912
641    193    913
642    293    914
643    393    915
644    493    916
645    593    917
646    693    918
647    793    919
648    893    920
649    993    921
64a    a93    922
64b    b93    923
650    c93    924
651    d93    925
652    e93    926
653    f93    927
654    0a3    928
655    1a3    929
656    2a3    930
657    3a3    931
658    4a3    932
659    5a3    933
65a    6a3    934
65b    7a3    935
660    8a3    936
661    9a3    937
662    aa3    938
663    ba3    939
664    ca3    940
665    da3    941
666    ea3    942
667    fa3    943
668    0b3    944
669    1b3    945
66a    2b3    946
66b    3b3    947
670    4b3    948
671    5b3    949
672    6b3    950
673    7b3    951
674    8b3    952
675    9b3    953
676    ab3    954
677    bb3    955
678    cb3    956
679    db3    957
67a    eb3    958
67b    fb3    959
680    0c3    960
681    1c3    961
682    2c3    962
683    3c3    963
684    4c3    964
685    5c3    965
686    6c3    966
687    7c3    967
688    8c3    968
689    9c3    969
68a    ac3    970
68b    bc3    971
690    cc3    972
691    dc3    973
692    ec3    974
693    fc3    975
694    0d3    976
695    1d3    977
696    2d3    978
697    3d3    979
698    4d3    980
699    5d3    981
69a    6d3    982
69b    7d3    983
6a0    8d3    984
6a1    9d3    985
6a2    ad3    986
6a3    bd3    987
6a4    cd3    988
6a5    dd3    989
6a6    ed3    990
6a7    fd3    991
6a8    0e3    992
6a9    1e3    993
6aa    2e3    994
6ab    3e3    995
6b0    4e3    996
6b1    5e3    997
6b2    6e3    998
6b3    7e3    999
6b4    8e3    1000
6b5    9e3    1001
6b6    ae3    1002
6b7    be3    1003
6b8    ce3    1004
6b9    de3    1005
6ba    ee3    1006
6bb    fe3    1007
700    0f3    1008
701    1f3    1009
702    2f3    1010
703    3f3    1011
704    4f3    1012
705    5f3    1013
706    6f3    1014
707    7f3    1015
708    8f3    1016
709    9f3    1017
70a    af3    1018
70b    bf3    1019
710    cf3    1020
711    df3    1021
712    ef3    1022
713    ff3    1023
714    004    1024
715    104    1025
716    204    1026
717    304    1027
718    404    1028
719    504    1029
71a    604    1030
71b    704    1031
720    804    1032
721    904    1033
722    a04    1034
723    b04    1035
724    c04    1036
725    d04    1037
726    e04    1038
727    f04    1039
728    014    1040
729    114    1041
72a    214    1042
72b    314    1043
730    414    1044
731    514    1045
732    614    1046
733    714    1047
734    814    1048
735    914    1049
736    a14    1050
737    b14    1051
738    c14    1052
739    d14    1053
73a    e14    1054
73b    f14    1055
740    024    1056
741    124    1057
742    224    1058
743    324    1059
744    424    1060
745    524    1061
746    624    1062
747    724    1063
748    824    1064
749    924    1065
74a    a24    1066
74b    b24    1067
750    c24    1068
751    d24    1069
752    e24    1070
753    f24    1071
754    034    1072
755    134    1073
756    234    1074
757    334    1075
758    434    1076
759    534    1077
75a    634    1078
75b    734    1079
760    834    1080
761    934    1081
762    a34    1082
763    b34    1083
764    c34    1084
765    d34    1085
766    e34    1086
767    f34    1087
768    044    1088
769    144    1089
76a    244    1090
76b    344    1091
770    444    1092
771    544    1093
772    644    1094
773    744    1095
774    844    1096
775    944    1097
776    a44    1098
777    b44    1099
778    c44    1100
779    d44    1101
77a    e44    1102
77b    f44    1103
780    054    1104
781    154    1105
782    254    1106
783    354    1107
784    454    1108
785    554    1109
786    654    1110
787    754    1111
788    854    1112
789    954    1113
78a    a54    1114
78b    b54    1115
790    c54    1116
791    d54    1117
792    e54    1118
793    f54    1119
794    064    1120
795    164    1121
796    264    1122
797    364    1123
798    464    1124
799    564    1125
79a    664    1126
79b    764    1127
7a0    864    1128
7a1    964    1129
7a2    a64    1130
7a3    b64    1131
7a4    c64    1132
7a5    d64    1133
7a6    e64    1134
7a7    f64    1135
7a8    074    1136
7a9    174    1137
7aa    274    1138
7ab    374    1139
7b0    474    1140
7b1    574    1141
7b2    674    1142
7b3    774    1143
7b4    874    1144
7b5    974    1145
7b6    a74    1146
7b7    b74    1147
7b8    c74    1148
7b9    d74    1149
7ba    e74    1150
7bb    f74    1151
800    084    1152
801    184    1153
802    284    1154
803    384    1155
804    484    1156
805    584    1157
806    684    1158
807    784    1159
808    884    1160
809    984    1161
80a    a84    1162
80b    b84    1163
810    c84    1164
811    d84    1165
812    e84    1166
813    f84    1167
814    094    1168
815    194    1169
816    294    1170
817    394    1171
818    494    1172
819    594    1173
81a    694    1174
81b    794    1175
820    894    1176
821    994    1177
822    a94    1178
823    b94    1179
824    c94    1180
825    d94    1181
826    e94    1182
827    f94    1183
828    0a4    1184
829    1a4    1185
82a    2a4    1186
82b    3a4    1187
830    4a4    1188
831    5a4    1189
832    6a4    1190
833    7a4    1191
834    8a4    1192
835    9a4    1193
836    aa4    1194
837    ba4    1195
838    ca4    1196
839    da4    1197
83a    ea4    1198
83b    fa4    1199
840    0b4    1200
841    1b4    1201
842    2b4    1202
843    3b4    1203
844    4b4    1204
845    5b4    1205
846    6b4    1206
847    7b4    1207
848    8b4    1208
849    9b4    1209
84a    ab4    1210
84b    bb4    1211
850    cb4    1212
851    db4    1213
852    eb4    1214
853    fb4    1215
854    0c4    1216
855    1c4    1217
856    2c4    1218
857    3c4    1219
858    4c4    1220
859    5c4    1221
85a    6c4    1222
85b    7c4    1223
860    8c4    1224
861    9c4    1225
862    ac4    1226
863    bc4    1227
864    cc4    1228
865    dc4    1229
866    ec4    1230
867    fc4    1231
868    0d4    1232
869    1d4    1233
86a    2d4    1234
86b    3d4    1235
870    4d4    1236
871    5d4    1237
872    6d4    1238
873    7d4    1239
874    8d4    1240
875    9d4    1241
876    ad4    1242
877    bd4    1243
878    cd4    1244
879    dd4    1245
87a    ed4    1246
87b    fd4    1247
880    0e4    1248
881    1e4    1249
882    2e4    1250
883    3e4    1251
884    4e4    1252
885    5e4    1253
886    6e4    1254
887    7e4    1255
888    8e4    1256
889    9e4    1257
88a    ae4    1258
88b    be4    1259
890    ce4    1260
891    de4    1261
892    ee4    1262
893    fe4    1263
894    0f4    1264
895    1f4    1265
896    2f4    1266
897    3f4    1267
898    4f4    1268
899    5f4    1269
89a    6f4    1270
89b    7f4    1271
8a0    8f4    1272
8a1    9f4    1273
8a2    af4    1274
8a3    bf4    1275
8a4    cf4    1276
8a5    df4    1277
8a6    ef4    1278
8a7    ff4    1279
8a8    005    1280
8a9    105    1281
8aa    205    1282
8ab    305    1283
8b0    405    1284
8b1    505    1285
8b2    605    1286
8b3    705    1287
8b4    805    1288
8b5    905    1289
8b6    a05    1290
8b7    b05    1291
8b8    c05    1292
8b9    d05    1293
8ba    e05    1294
8bb    f05    1295
900    015    1296
901    115    1297
902    215    1298
903    315    1299
904    415    1300
905    515    1301
906    615    1302
907    715    1303
908    815    1304
909    915    1305
90a    a15    1306
90b    b15    1307
910    c15    1308
911    d15    1309
912    e15    1310
913    f15    1311
914    025    1312
915    125    1313
916    225    1314
917    325    1315
918    425    1316
919    525    1317
91a    625    1318
91b    725    1319
920    825    1320
921    925    1321
922    a25    1322
923    b25    1323
924    c25    1324
925    d25    1325
926    e25    1326
927    f25    1327
928    035    1328
929    135    1329
92a    235    1330
92b    335    1331
930    435    1332
931    535    1333
932    635    1334
933    735    1335
934    835    1336
935    935    1337
936    a35    1338
937    b35    1339
938    c35    1340
939    d35    1341
93a    e35    1342
93b    f35    1343
940    045    1344
941    145    1345
942    245    1346
943    345    1347
944    445    1348
945    545    1349
946    645    1350
947    745    1351
948    845    1352
949    945    1353
94a    a45    1354
94b    b45    1355
950    c45    1356
951    d45    1357
952    e45    1358
953    f45    1359
954    055    1360
955    155    1361
956    255    1362
957    355    1363
958    455    1364
959    555    1365
95a    655    1366
95b    755    1367
960    855    1368
961    955    1369
962    a55    1370
963    b55    1371
964    c55    1372
965    d55    1373
966    e55    1374
967    f55    1375
968    065    1376
969    165    1377
96a    265    1378
96b    365    1379
970    465    1380
971    565    1381
972    665    1382
973    765    1383
974    865    1384
975    965    1385
976    a65    1386
977    b65    1387
978    c65    1388
979    d65    1389
97a    e65    1390
97b    f65    1391
980    075    1392
981    175    1393
982    275    1394
983    375    1395
984    475    1396
985    575    1397
986    675    1398
987    775    1399
988    875    1400
989    975    1401
98a    a75    1402
98b    b75    1403
990    c75    1404
991    d75    1405
992    e75    1406
993    f75    1407
994    085    1408
995    185    1409
996    285    1410
997    385    1411
998    485    1412
999    585    1413
99a    685    1414
99b    785    1415
9a0    885    1416
9a1    985    1417
9a2    a85    1418
9a3    b85    1419
9a4    c85    1420
9a5    d85    1421
9a6    e85    1422
9a7    f85    1423
9a8    095    1424
9a9    195    1425
9aa    295    1426
9ab    395    1427
9b0    495    1428
9b1    595    1429
9b2    695    1430
9b3    795    1431
9b4    895    1432
9b5    995    1433
9b6    a95    1434
9b7    b95    1435
9b8    c95    1436
9b9    d95    1437
9ba    e95    1438
9bb    f95    1439
a00    0a5    1440
a01    1a5    1441
a02    2a5    1442
a03    3a5    1443
a04    4a5    1444
a05    5a5    1445
a06    6a5    1446
a07    7a5    1447
a08    8a5    1448
a09    9a5    1449
a0a    aa5    1450
a0b    ba5    1451
a10    ca5    1452
a11    da5    1453
a12    ea5    1454
a13    fa5    1455
a14    0b5    1456
a15    1b5    1457
a16    2b5    1458
a17    3b5    1459
a18    4b5    1460
a19    5b5    1461
a1a    6b5    1462
a1b    7b5    1463
a20    8b5    1464
a21    9b5    1465
a22    ab5    1466
a23    bb5    1467
a24    cb5    1468
a25    db5    1469
a26    eb5    1470
a27    fb5    1471
a28    0c5    1472
a29    1c5    1473
a2a    2c5    1474
a2b    3c5    1475
a30    4c5    1476
a31    5c5    1477
a32    6c5    1478
a33    7c5    1479
a34    8c5    1480
a35    9c5    1481
a36    ac5    1482
a37    bc5    1483
a38    cc5    1484
a39    dc5    1485
a3a    ec5    1486
a3b    fc5    1487
a40    0d5    1488
a41    1d5    1489
a42    2d5    1490
a43    3d5    1491
a44    4d5    1492
a45    5d5    1493
a46    6d5    1494
a47    7d5    1495
a48    8d5    1496
a49    9d5    1497
a4a    ad5    1498
a4b    bd5    1499
a50    cd5    1500
a51    dd5    1501
a52    ed5    1502
a53    fd5    1503
a54    0e5    1504
a55    1e5    1505
a56    2e5    1506
a57    3e5    1507
a58    4e5    1508
a59    5e5    1509
a5a    6e5    1510
a5b    7e5    1511
a60    8e5    1512
a61    9e5    1513
a62    ae5    1514
a63    be5    1515
a64    ce5    1516
a65    de5    1517
a66    ee5    1518
a67    fe5    1519
a68    0f5    1520
a69    1f5    1521
a6a    2f5    1522
a6b    3f5    1523
a70    4f5    1524
a71    5f5    1525
a72    6f5    1526
a73    7f5    1527
a74    8f5    1528
a75    9f5    1529
a76    af5    1530
a77    bf5    1531
a78    cf5    1532
a79    df5    1533
a7a    ef5    1534
a7b    ff5    1535
a80    006    1536
a81    106    1537
a82    206    1538
a83    306    1539
a84    406    1540
a85    506    1541
a86    606    1542
a87    706    1543
a88    806    1544
a89    906    1545
a8a    a06    1546
a8b    b06    1547
a90    c06    1548
a91    d06    1549
a92    e06    1550
a93    f06    1551
a94    016    1552
a95    116    1553
a96    216    1554
a97    316    1555
a98    416    1556
a99    516    1557
a9a    616    1558
a9b    716    1559
aa0    816    1560
aa1    916    1561
aa2    a16    1562
aa3    b16    1563
aa4    c16    1564
aa5    d16    1565
aa6    e16    1566
aa7    f16    1567
aa8    026    1568
aa9    126    1569
aaa    226    1570
aab    326    1571
ab0    426    1572
ab1    526    1573
ab2    626    1574
ab3    726    1575
ab4    826    1576
ab5    926    1577
ab6    a26    1578
ab7    b26    1579
ab8    c26    1580
ab9    d26    1581
aba    e26    1582
abb    f26    1583
b00    036    1584
b01    136    1585
b02    236    1586
b03    336    1587
b04    436    1588
b05    536    1589
b06    636    1590
b07    736    1591
b08    836    1592
b09    936    1593
b0a    a36    1594
b0b    b36    1595
b10    c36    1596
b11    d36    1597
b12    e36    1598
b13    f36    1599
b14    046    1600
b15    146    1601
b16    246    1602
b17    346    1603
b18    446    1604
b19    546    1605
b1a    646    1606
b1b    746    1607
b20    846    1608
b21    946    1609
b22    a46    1610
b23    b46    1611
b24    c46    1612
b25    d46    1613
b26    e46    1614
b27    f46    1615
b28    056    1616
b29    156    1617
b2a    256    1618
b2b    356    1619
b30    456    1620
b31    556    1621
b32    656    1622
b33    756    1623
b34    856    1624
b35    956    1625
b36    a56    1626
b37    b56    1627
b38    c56    1628
b39    d56    1629
b3a    e56    1630
b3b    f56    1631
b40    066    1632
b41    166    1633
b42    266    1634
b43    366    1635
b44    466    1636
b45    566    1637
b46    666    1638
b47    766    1639
b48    866    1640
b49    966    1641
b4a    a66    1642
b4b    b66    1643
b50    c66    1644
b51    d66    1645
b52    e66    1646
b53    f66    1647
b54    076    1648
b55    176    1649
b56    276    1650
b57    376    1651
b58    476    1652
b59    576    1653
b5a    676    1654
b5b    776    1655
b60    876    1656
b61    976    1657
b62    a76    1658
b63    b76    1659
b64    c76    1660
b65    d76    1661
b66    e76    1662
b67    f76    1663
b68    086    1664
b69    186    1665
b6a    286    1666
b6b    386    1667
b70    486    1668
b71    586    1669
b72    686    1670
b73    786    1671
b74    886    1672
b75    986    1673
b76    a86    1674
b77    b86    1675
b78    c86    1676
b79    d86    1677
b7a    e86    1678
b7b    f86    1679
b80    096    1680
b81    196    1681
b82    296    1682
b83    396    1683
b84    496    1684
b85    596    1685
b86    696    1686
b87    796    1687
b88    896    1688
b89    996    1689
b8a    a96    1690
b8b    b96    1691
b90    c96    1692
b91    d96    1693
b92    e96    1694
b93    f96    1695
b94    0a6    1696
b95    1a6    1697
b96    2a6    1698
b97    3a6    1699
b98    4a6    1700
b99    5a6    1701
b9a    6a6    1702
b9b    7a6    1703
ba0    8a6    1704
ba1    9a6    1705
ba2    aa6    1706
ba3    ba6    1707
ba4    ca6    1708
ba5    da6    1709
ba6    ea6    1710
ba7    fa6    1711
ba8    0b6    1712
ba9    1b6    1713
baa    2b6    1714
bab    3b6    1715
bb0    4b6    1716
bb1    5b6    1717
bb2    6b6    1718
bb3    7b6    1719
bb4    8b6    1720
bb5    9b6    1721
bb6    ab6    1722
bb7    bb6    1723
bb8    cb6    1724
bb9    db6    1725
bba    eb6    1726
bbb    fb6    1727

if you spend a lot of time looking at this, you will quickly realize that there are some patterns you can use to skip a lot of numbers when you're looking for a number with the same representation. for example, if instead of incrementing the value by one, you move it up to the next time one side of the number could potentially match, you get lists looking more like this:

left match:     right match:
dec  b12 1/16   b12 16⁻ dec
256  194 001    194 001 256
257  195 101    1a1 901 265
273  1a9 111    1b1 511 277
289  201 121    201 121 289
290  202 221    211 d21 301
306  216 231    221 931 313
322  22a 241    231 541 325
338  242 251    241 151 337
354  256 261    251 d51 349
370  26a 271    261 961 361
386  282 281    271 571 373
402  296 291    281 181 385
418  2aa 2a1    291 d81 397
434  302 2b1    2a1 991 409
435  303 3b1    2b1 5a1 421
451  317 3c1    301 1b1 433
467  32b 3d1    311 db1 445
483  343 3e1    321 9c1 457
499  357 3f1    331 5d1 469
515  36b 302    341 1e1 481
531  383 312    351 de1 493
547  397 322    361 9f1 505
563  3ab 332    371 502 517
579  403 342    372 602 518
580  404 442    382 212 530
596  418 452    392 e12 542
612  430 462    3a2 a22 554
628  444 472    3b2 632 566
644  458 482    402 242 578
660  470 492    412 e42 590
676  484 4a2    422 a52 602
692  498 4b2    432 662 614
708  4b0 4c2    442 272 626
724  504 4d2    452 e72 638
725  505 5d2    462 a82 650
741  519 5e2    472 692 662
757  531 5f2    482 2a2 674
773  545 503    492 ea2 686
789  559 513    4a2 ab2 698
805  571 523    4b2 6c2 710
821  585 533    502 2d2 722
837  599 543    512 ed2 734
853  5b1 553    522 ae2 746
869  605 563    532 6f2 758
870  606 663    543 303 771
886  61a 673    553 f03 783
902  632 683    563 b13 795
918  646 693    573 723 807
934  65a 6a3    583 333 819
950  672 6b3    593 f33 831
966  686 6c3    5a3 b43 843
982  69a 6d3    5b3 753 855
998  6b2 6e3    603 363 867
1014 706 6f3    613 f63 879
1015 707 7f3    623 b73 891
1031 71b 704    633 783 903
1047 733 714    643 393 915
1063 747 724    653 f93 927
1079 75b 734    663 ba3 939
1095 773 744    673 7b3 951
1111 787 754    683 3c3 963
1127 79b 764    693 fc3 975
1143 7b3 774    6a3 bd3 987
1159 807 784    6b3 7e3 999
1160 808 884    703 3f3 1011
1176 820 894    713 ff3 1023
1192 834 8a4    714 004 1024
1208 848 8b4    724 c04 1036
1224 860 8c4    734 814 1048
1240 874 8d4    744 424 1060
1256 888 8e4    754 034 1072
1272 8a0 8f4    764 c34 1084
1288 8b4 805    774 844 1096
1304 908 815    784 454 1108
1305 909 915    794 064 1120
1321 921 925    7a4 c64 1132
1337 935 935    7b4 874 1144
1353 949 945    804 484 1156
1369 961 955    814 094 1168
1385 975 965    824 c94 1180
1401 989 975    834 8a4 1192
1417 9a1 985    844 4b4 1204
1433 9b5 995    854 0c4 1216
1449 a09 9a5    864 cc4 1228
1450 a0a aa5    874 8d4 1240
1466 a22 ab5    884 4e4 1252
1482 a36 ac5    894 0f4 1264
1498 a4a ad5    8a4 cf4 1276
1514 a62 ae5    8b4 805 1288
1530 a76 af5    8b5 905 1289
1546 a8a a06    905 515 1301
1562 aa2 a16    915 125 1313
1578 ab6 a26    925 d25 1325
1594 b0a a36    935 935 1337
1595 b0b b36    945 545 1349
1611 b23 b46    955 155 1361
1627 b37 b56    965 d55 1373
1643 b4b b66    975 965 1385
1659 b63 b76    985 575 1397
1675 b77 b86    995 185 1409
1691 b8b b96    9a5 d85 1421
1707 ba3 ba6    9b5 995 1433
1723 bb7 bb6    a05 5a5 1445
                a15 1b5 1457
                a25 db5 1469
                a35 9c5 1481
                a45 5d5 1493
                a55 1e5 1505
                a65 de5 1517
                a75 9f5 1529
                a85 506 1541
                a86 606 1542
                a96 216 1554
                aa6 e16 1566
                ab6 a26 1578
                b06 636 1590
                b16 246 1602
                b26 e46 1614
                b36 a56 1626
                b46 666 1638
                b56 276 1650
                b66 e76 1662
                b76 a86 1674
                b86 696 1686
                b96 2a6 1698
                ba6 ea6 1710
                bb6 ab6 1722

I'm sure someone more clever than me could find a way to combine this information to look through the intersection of these lists rather than the union, which is short enough to easily spot the answer in this example case:

201 121 289
834 8a4 1192
874 8d4 1240
8b4 805 1288
935 935 1337
975 965 1385
9b5 995 1433
ab6 a26 1578

but even the union of the two sets is much, much faster to look through than the original combinatorial product. after some test runs, is looking like I'll be able to check up to 15 digits with this; but it's not looking great. in the 8-11 range I'm only getting results with at least two digits off, and past that so far I have only gotten answers with three digits wrong. I'm still debugging my code and should have some time to finish it around new years', but until then I'll at least share the code that's mostly working:

const LEN:usize = 8; //note: raw can only be u128 up to LEN 16. for 17 or more, you'll need a bigger type.
const ERR:usize = 2;
const LEFT:bool = true;
use std::process;
type Num = [u8; LEN];

fn from250(b250: Num, curr: Num) -> (Num,bool) {
    let mut raw:u128 = 0;
    for i in 0..LEN {raw += b250[i] as u128 * 250u128.pow(i as u32);}
    // let tmp = raw;
    let mut b288:Num = [0u8; LEN];
    for i in (0..LEN).rev() {
        if raw % 3 == 0 {
            b288[i] = (raw%288/3) as u8;
            raw /= 288;
        } else {
            for j in i..LEN { b288[j] = 0; }
            b288[i] = (raw%288/3+1) as u8;
            if b288[i] == 96 { b288[i] = 0; raw += 288 /* *3? */ ; }
            raw /= 288;
        }
    }
    // let test: String = b288.map(|x| (x+32) as char).iter().rev().collect();
    // println!("\t\t'{test}'\t{tmp}");
    (b288, b288 != curr)
}

fn from288(b288: Num) -> Num {
    let mut raw:u128 = 0;
    for i in 0..LEN {raw += b288[i] as u128 * 3u128 * 288u128.pow((LEN-i-1) as u32);}
    // let tmp = raw;
    let mut b250:Num = [0u8; LEN];
    for i in 0..LEN { b250[i] = (raw%250) as u8; raw /= 250; }
    for i in (0..LEN).rev() {
        if b250[i] < 33 {
            for j in 0..=i { b250[j] = 33; }
            break;
        } else if b250[i] > 128 {
            if i == LEN-1 {process::exit(0);}
            b250[i+1] += 1;
            for j in 0..=i { b250[j] = 33; }
            break;
        }
    }
    // let test: String = b250.map(|x| (x-1) as char).iter().rev().collect();
    // println!("“{test}»\t\t\t{tmp}");
    b250
}

fn similar(b288: Num, b250: Num) {
    let mut count = 0;
    for i in 0..LEN { if b250[i] == b288[i] + 33 { count += 1; } }
    if count >= LEN-ERR {
        const ASCII: &str = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~¶";
        let mut s250: [char; LEN] = ['a'; LEN];
        let mut s288: [char; LEN] = ['a'; LEN];
        for i in 0..LEN { s250[i] = ASCII.chars().collect::<Vec <char>>()[b250[i] as usize - 33]; }
        for i in 0..LEN { s288[i] = ASCII.chars().collect::<Vec <char>>()[b288[i] as usize]; }
        let s250: String = s250.iter().rev().collect();
        let s288: String = s288.iter().rev().collect();
        let mut raw = 0u128;
        for i in 0..LEN {raw += b288[i] as u128 * 3 * 288u128.pow((LEN-i-1).try_into().unwrap()); }
        println!("“{s250}»\t'{s288}'\t{raw}\t{count}");
    }
}

fn main() {
    let mut bool = true;
    let mut b288 = [0u8; LEN];
    let mut b250 = [0u8; LEN];
    while b288[0] <= 95 {
        while bool { // finds the next valid pair of numbers
            b250 = from288(b288);
            (b288,bool) = from250(b250,b288);
        }
        similar(b288, b250);
        if LEFT { // pseudocode for fining next number
            //if left(b288) == left(b250) { center(b288) += 1; }
            //else if left(b288) < left(b250) { left(b288) = left(b250); }
            //else { more logic needs to be done here, but the first two should take care of most cases. digit rollover and the fact that we're skipping invalid numbers might come into play here. }
        } else { // the same thing but mirrored; right(b250) gets increased to right(288)
        }   // note that for even LENs, neither 'center' number is part of the left or right.
        bool = true;
        //incrementing by one:
        //b288[LEN] += 1;
    } // see also https://tio.run/##y0rNyan8//9Rw5ykQ7v///8PAA
}// and https://tio.run/##ARoA5f9qZWxsef//4biDw5jigbXhu4vDmEr///85OQ
// for checking answers. raw goes into the 'arguments' of the second link,
// and the output of that goes into the quotes in the first link

here's what the output looks like:

13 digits, 3 errors on the right side (might have missed some logic but should be pretty good):
“!OhKmG\9?=>A"»         '!OhKmG\9B=E;"' 2045731836094505183844722704035 3
“!PYR0k gRJn%"»         '!PYR0k gRFX;"' 2045955975333138041341022572035 3
“!k,rAK|egsL="»         '!k,rAK|e\87="' 2052350483952423195720567328035 3
“#3C[OrEHBauH&»         '#3C[OrEoBau\"' 2158230180060747141864819893289 3
“%-o<:0dh&*lW"»         '%-o<:0dh&k)¶"' 2276050801226770366363959959535 3
“%1#bnW1RL;t¶j»         '%1#bnWl|L;t¶"' 2276932142049450764950163594607 3
“4S|;F2|oVDvi#»         '4S|;F2|eJPvi#' 3179192772998138537450304339036 3
“C;4z`H;f4:?U$»         'C;4z`Hjf4:UO$' 4067471974903762307825144646537 3
“E;)45|B1nQ~r$»         'E;)45|BkAC~r$' 4186670506355302051216132966287 3
“R%b,igvnQ#n5=»         'R%b,igvnV#f5%' 4956340009405790880203694451062 3
“R{Y:*/5#fk{;]»         'R{Y:*/K#fkr;%' 4976835476580701695716539015094 3
“V=ZI-/W%IAg}%»         'V=ZI-/B%zA_}%' 5200473114718527381149475281538 3
“en;u1jO8L[g+&»         'en;u1jO!LMgh&' 6106195900732868708310037761039 3
“eo me'7* ]ih\»         'eo me'(* ]yh&' 6106408540377210979622569151343 3
“fGNK1O}o'I8fG»         'fGNK1O}('I8w&' 6156520180516388293126159838322 3
“r/-Ri4/{4&F('»         'r/-Ri4/i4sk('' 6866022428225902953332645072790 3
“s6=4MZ$BpU¶:z»         's6=4MZ$BHi¶:'' 6927311146978219548294320514873 3
“tTv.i?D(LM'1'»         'tTv.i?o(LM(N'' 6994122686100114542294190012540 3
“te¶e¶XfNl%$O'»         'te¶e¶XfTl.aO'' 6998184595159265946715439832540 3
“ttj[mWE(VWoI'»         'ttj[mWEmV!oP'' 7001740808263444864599038268540 3
“tu7(yHYzx=¶nU»         'tu7(yHTzx=¶P'' 7001930395085044065903320527836 3
“vd^LINEK-:tr'»         'vd^LIN!KZ4tr'' 7117123898686479566586866716290 3
“v~DN">qmo.N.'»         'v~DN">qmox@t'' 7123297993244229600047614324290 3

8 digits, 2 errors anywhere (pretty sure this is a complete list)
“ yT&;%J$»      '9yU&;%J$'      2044028473596143787
“!(dm>Eb$»      'aHdm>Eb$'      2085304141613774787
“!)?0F)b$»      '!)?01hb$'      2085511911268274787
“)sO{D,j%»      '@sp{D,j%'      2591875485455964288
“1dWb{Ge&»      '1dVW{Ge&'      3076502341785775539
“8hUa2q?'»      '80Ua%q?''      3504723039866516040
“Agg(=W`(»      'Acg(=)`('      4053812661130524291
“Q35/4-S*»      'Q3aD4-S*'      5017631047706021043
“QPe`>\M*»      'Q:e`>\W*'      5024758192396457043
“Z&d,6Rr+»      'Z&D,6=r+'      5563819512583341294
“`/^hpw)c»      '`/^&pw),'      5932222091616885600
“`RT;NL.,»      'URT;Ns.,'      5940757071551699295
“`RT;NL.M»      '`RT;Ns.,'      5940757071551699328
“ao'qPmV,»      'aoEqP/V,'      6008828571585021795
“h%8~x8u-»      '"%8~x8%-'      6418024912050467046
“hO0ad4+-»      'vO0a+4+-'      6428270892206448546
“hW?B@_,-»      'hW?h3_,-'      6430238543990386296
“hlCsm^/k»      'hlCss^/-'      6435369595474699608
“i_4P["Q-»      '*_4P="Q-'      6493216138158458046
“i{M=e$U:»      'i{¶=e$U-'      6500076415658584059
“qIc<@DK.»      'q;c<WDK.'      6976172114301206547
“x0Eg[B!/»      '00E,[B!/'      7397285563941696048
“x1{GEt!/»      'xB{1Et!/'      7397582313601071048
“x?b67o#/»      'x?be)o#/'      7400975801663259048
“xoHVr[*1»      'xoHVr>*/'      7412669286958885800
“z_!9V?>/»      'z_q9V?o/'      7530795149800890798
“z{iR6IR/»      'z{~R6Is/'      7537701496957770798
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.