Напишите функцию или программу, которая выводит четверть-мнимое основание, отображаемое в виде двоичных цифр. Числовое основание равно 2 i , где i - квадратный корень из -1. См. Комплексный номер для более подробной информации о i . Каждая позиция цифры может изменяться от 0 до 3 (четвертичная), поскольку каждая действительная и мнимая части в -4 раза больше предыдущей действительной и мнимой части. Четвертичные цифры в двоичной системе следующим образом : 0: 00
, 1: 01
, 2: 10
и 3: 11
.
Разбивка позиций цифр:
re im 16 -8i -4 2i 1 -0.5i, etc.
4 0 1 0 3 0 0 (quaternary representation)
01 00 11 00 00 (binary representation)
Число 100110000
1x16 + 3x-4 = 16 + -12 = 4.
re im 16 -8i -4 2i 1 -0.5i, etc.
0 5 0 0 0 3 0 2 (quaternary representation)
00 00 00 11 00 .10 (binary representation)
Число 1100.1
3x2 i + 2x-0.5 i = 6 i + - i = 5 i .
Ваш код примет пару чисел, которые могут быть целыми числами или числами с плавающей запятой, и выведет комплексное число в виде строки двоичных цифр. Первое число будет действительным, второе введенное число будет мнимым значением. Двоичная точка должна быть напечатана, только если позиции с ненулевым числом меньше 1 (т. Е. Если любая из позиций для -0,5 i , -0,25, 0,125 i и т. Д. Имеет ненулевую цифру). Начальные и конечные нули не допускаются, за исключением одной нулевой цифры непосредственно перед двоичной точкой, если нет других цифр. Выход не должен начинаться с двоичной точки (* 00.1
- неправильно, 0.1
- правильно, * .1
- неправильно, * 0.10
- неправильно). Вы можете предположить, что все входные числа будут иметь конечные двоичные представления.
Тестовые номера:
re im output
0 0 0
1 0 1
2 0 10
3 0 11
4 0 100110000
-1 0 10011
-2 0 10010
-3 0 10001
0 1 100.1
0 2 100
0 3 1000.1
0 4 1000
0 -1 0.1
0 -2 1001100
0 -3 1001100.1
3 4 1011
4 3 100111000.1
6 -9 101110010.1
-6 9 10011100110.1
-9 -6 1110111
0.5 14.125 10011001101.001001
Примечание. Вывод всех целочисленных значений закончится, .1
если мнимая часть будет нечетной.
Стандартный код-гольф.
источник
0 → 00, 1 → 01, 2 → 10, 3 → 11
.Ответы:
JavaScript (ES6), 340 байт
f
преобразует число в основание-4
(с трейлингом,.
если число является целым числом).g
берет два базовых-4
числа, дополняет их на обоих концах до одинаковой длины и.
позиции, перетасовывает цифры вместе, преобразует все от основания4
к основанию2
, а затем, наконец, удаляет начальные и конечные нули.Пояснение: Чтобы представить данное комплексное число в модифицированном основании,
2i
нам нужно представить действительную часть и половину сложной части (то есть, разделив мнимую часть2i
) в базе2i²
(то есть-4
), перемешать цифры вместе, а затем преобразовать их из базы4
на базу2
. Чтобы представить действительное число в базе,-4
мы начнем с4
преобразования базы . Альтернативные цифры имеют правильный знак (в случае положительного числа это цифры в четных позициях; в случае отрицательного числа это цифры в нечетных позициях), но остальные цифры имеют неправильный знак и необходимо применить коррекцию. Примеры:Как видите, коррекция
8
минус исходная цифра, мод8
. Однако немного более удобным вычислением является исходная цифра, плюс 3, xor 3 (действительно, в 32-разрядной целочисленной арифметике мы могли бы просто написать,+0xCCCCCCCC^0xCCCCCCCC
чтобы преобразовать все число за один раз). Наконец, поскольку исправление применяется к альтернативным цифрам, проще выполнить первоначальное преобразование в основание,16
которое автоматически подбирает пары базовых4
цифр, а затем исправить с использованием коэффициента, равного3
или0xC
подходящего. Осталось просто игнорировать-
знак.источник
Perl - 313 байт
Поскольку никто еще не опубликовал ответ, я подумал, что скину его сам.
Я уверен, что есть много возможностей для игры в гольф дальше.
источник