Компьютеры живут по бинарному. Все программисты знают двоичный код.
Но 2**x
базы часто пренебрегают как непрактичные, в то время как они имеют прекрасное отношение к бинарному.
Чтобы показать вам один пример такого прекрасного отношения, 19 будет моим свидетельством.
19 10011 103 23 13 j
19 - десятичное число, включенное для ясности.
10011 - это 19 в двоичном виде.
103, в базе 4 сделано, начиная с двоичного, таким образом:
- log2 (4) == 2, давайте вспомним два.
- Подушка 10011, чтобы она была кратна длине 2 -> 010011
Возьмите цифры 2 на 2 слева направо и рассматривайте их как 2-значные двоичные числа:
- 01 -> 1
- 00 -> 0
- 11 -> 3
Готово , 10011 в базе 4 - 103.
Для базы 8, сделайте то же самое, но 3 на 3, как log2 (8) = 3.
- Pad 010011
- 010 -> 2
011 -> 3
23, Готово .
Для базы 16 сделайте то же самое, но 4 на 4, как log2 (16) = 4.
- Pad 00010011
- 0001 -> 1
0011 -> 3
13, Готово .
задача
Учитывая максимальное число в качестве входных данных, вы должны вывести таблицу
base-ten-i base-two-i base-four-i base-eight-i base-sixteen-i base-thirtytwo-i
для меня это идет от 0 до п включительно. Двоичные числа являются воплощением абсолютного минимума, необходимого для работы, поэтому ваш код должен быть максимально коротким.
Ограничения и бонусы
Base-ten -> двоичные и двоичные -> Встроенные Base-ten рассматриваются как лазейки, как Base-a -> Base-b.
Если вы сгенерируете все
2**i
(для i> 2) базисов, используя вышеупомянутые отношения, вы получите*0.6
бонус, но общие преобразования баз (написанные вами) разрешены.
Пример таблицы
> 32
0 0 0 0 0 0
1 1 1 1 1 1
2 10 2 2 2 2
3 11 3 3 3 3
4 100 10 4 4 4
5 101 11 5 5 5
6 110 12 6 6 6
7 111 13 7 7 7
8 1000 20 10 8 8
9 1001 21 11 9 9
10 1010 22 12 a a
11 1011 23 13 b b
12 1100 30 14 c c
13 1101 31 15 d d
14 1110 32 16 e e
15 1111 33 17 f f
16 10000 100 20 10 g
17 10001 101 21 11 h
18 10010 102 22 12 i
19 10011 103 23 13 j
20 10100 110 24 14 k
21 10101 111 25 15 l
22 10110 112 26 16 m
23 10111 113 27 17 n
24 11000 120 30 18 o
25 11001 121 31 19 p
26 11010 122 32 1a q
27 11011 123 33 1b r
28 11100 130 34 1c s
29 11101 131 35 1d t
30 11110 132 36 1e u
31 11111 133 37 1f v
32 100000 200 40 20 10
Ответы:
CJam, 54 * 0,6 = 32,4 байта
Проверьте это здесь.
Для справки, вот более короткое решение, которое не может претендовать на бонус (в 39 байт):
источник
Pyth, 52 * 0,6 = 31,2 байта
Протестируйте это онлайн
Мой не бонусный ответ - 39 байт
источник
PHP,
232230233217 * 0,6 = 130,2нет шансов победить языки игры в гольф, но мне понравился вызов.
$n=32;
или заменить$n
на32
(или любое другое неотрицательное целое число); звоните через кли$n
на$_GET[n]
(+ 6 / + 3,6) и позвоните либо в браузере,либо в Cli с
php-cgi -f bases.php -n=32
<br>
или добавьте<pre>
для проверки в браузереУдалите E_NOTICE из error_reporting (prepend
error_reporting(0);
), чтобы подавить их.сломать:
основное редактирование:
74 байта, чтобы исправить десятичные 0 результатов после реконструкциине бонусная версия, 142 байта
PHP побеждает Python?
Даже если бы я добавил 6 (3,6) байтов, чтобы сделать фрагмент программы, я все равно побил бы Python (223 * 0,6 = 133,8 или 148 без бонусов против 158). Удивительно.
источник
for
ключевого слова во внешнем цикле for."\n"
-> физический разрыв строки.Ruby, 80 байт (не бонусная версия)
источник
Python3 -
189, 167, 166,150 байтСохранено 16 байт с помощью @ LeakyNun !
Бонусная версия -
296 * 0,6 = 177,6279 * 0,6 = 167,4 байтаЧуть более читаемая версия бонусной версии.
источник
"0123456789abcdefghijklmnopqrstuv"
корочеfrom string import* digits+ascii_lowercase
digits+ascii_lowercase
: D. Спасибо!for i in range(int(input())+1):f=lambda n=i,b,c="0123456789abcdefghijklmnopqrstuv":n<b and c[n]or f(n//b,b)+c[n%b];print(i,f(2),f(4),f(8),f(16),f(32))
(одна строка)