Как работает эта целочисленная кодировка? - PullRequest
1 голос
/ 14 июля 2010

В коде этого вопроса о гольфе , есть ответ Python , который кодирует длины всех целых чисел от 1 до 99 на английском языке в большое число:

7886778663788677866389978897746775667552677566755267756675527886778663788677866355644553301220112001

Чтобы получить длину n, вам просто нужно вычислить 3 + (the_big_number / (10**n)) % 10.Как это работает?

Ответы [ 2 ]

4 голосов
/ 14 июля 2010

(the_big_number / (10^n)) % 10 вытаскивает n младшую значащую цифру большого числа, поэтому длины просто сохраняются, начиная с длины «ноль» (1 + 3 = 4) в крайнем правом углу и после на длину «девяносто девять» (7 + 3 = 10) в крайнем левом углу.

Самые короткие английские числа состоят из трех букв («один», «два», «шесть», «десять»), поэтому каждая длина сохраняется со смещением три. Самыми длинными до 100 являются 9 + 3 = 12 букв (например, «семьдесят восемь»), поэтому каждое число может быть сохранено как одна цифра.

2 голосов
/ 14 июля 2010

Начиная справа:

  • первая цифра - сколько букв в нуле минус 3
  • вторая цифра - это количество букв в «одном», минус 3
  • третья цифра ...
  • ... цифра 100 th - это количество букв в «девяносто девять» минус три.

Обратите внимание, что самое длинное число "семьдесят семь" имеет только 12 букв, которые удобно помещаются в одну цифру после вычитания 3.

...