Сокращение длинного числа

10

При работе с длинными числами при игре в гольф код может быть затруднен, поэтому есть ли у вас какие-либо советы, как сделать число короче и проще в управлении?

Например, следующий код Pyth выводит «Hello world», но на 44 байтах, что неудовлетворительно:

Vcjkj85942000775441864767076 2 7=k+kCiN2)k

Так как бы я сократил длинный номер 85942000775441864767076?

Бета распад
источник

Ответы:

10

Идеальное время для этого вопроса. @isaacg только что добавил новую функцию, которая позволяет значительно сократить такие числа.

Основной метод - преобразовать число в базовое 256 и преобразовать его в символы. Вы можете сделать это с помощью кода ++NsCMjQ256N. Затем вы можете использовать результирующую строку в сочетании с C, что в точности наоборот (конвертирует символы в int и интерпретирует результат как число base-256). Таким образом, вы получите 13 символов C"2ìÙ½}ü¶d". Некоторые из символов непечатаемые.

Но обратите внимание, что я сказал 13 символов, а не байтов. Если я скопирую символы и посчитаю с помощью https://mothereff.in/byte-counter , то будет написано 13 символов и 18 байтов. Это связано с кодировкой символов символов, по умолчанию UTF-8. И UTF-8 допускает только 2 ^ 7 различных 1-байтовых символов. Каждый символ cс ord(c) > 127фактически хранится с использованием двух байтов вместо одного.

И вот в игру вступила новая функция @ isaacg . Он изменил формат кода по умолчанию с UTF-8 на iso-8859-1. iso-8859 может представлять 256 символов с одним байтом. Так что теперь вы можете достичь 13 байтов. Это возможно только со стандартным компилятором, однако, он не работает в онлайн-компиляторе.

Сначала вы хотите , чтобы преобразовать число в шестнадцатеричные значения с помощью этого скрипта: jdm.[2.Hd"0"jQ256. Это дает вам 12 32 ec d9 bd 07 7d fc b6 64. Затем скопируйте эти числа в ваш кодовый файл с помощью hex-редактора (например, hexedit для linux).

шестнадцатеричная демонстрация

Примечание:

  • Очевидно, вы удаляете "в конце, если строка является последней частью кода.
  • Это работает только в том случае, если в представлении base-256 ваших чисел нет 34(байт 22), так как это "символ и будет конец строки. Побег работает, хотя ( 5C 22).
  • Кстати, когда вы откроете файл с помощью hex-редактора, вы, скорее всего, увидите байт 0Aили 0d 0aконец, который вы можете удалить. Это только указывает на конец строки.
Jakube
источник
Мне придется установить переводчик на мою машину, но это великолепно, спасибо! :)
бета-распад
1
Строка также не может содержать нулевой байт значения 00. Кроме того, \байту 5cможет или не может потребоваться экранирование с другим ``, ​​в зависимости от байта после него.
Исаак