BCD разница
Получив целое число n, преобразуйте его в BCD ( двоично-десятичное десятичное число ), заменив каждую десятичную цифру ее четырехзначным двоичным представлением
234 -> 0 0 1 0 0 0 1 1 0 1 0 0
Затем поверните список двоичных цифр, чтобы найти самые большие и самые маленькие числа, представляемые этим списком без других перестановок.
max: 1 1 0 1 0 0 0 0 1 0 0 0 (the entire list rotated left 6 times)
min: 0 0 0 0 1 0 0 0 1 1 0 1 (the entire list rotated right 2 times)
Преобразуйте эти числа обратно в десятичные, рассматривая список битов как обычный двоичный файл и вычитая наименьшее из наибольшего:
1 1 0 1 0 0 0 0 1 0 0 0 -> 3336
0 0 0 0 1 0 0 0 1 1 0 1 -> 141
3336 - 141 -> 3195
Выходными данными является разница самых больших и самых маленьких найденных чисел.
Тестовые случаи:
234 -> 3195
1234 -> 52155
12 -> 135
975831 -> 14996295
4390742 -> 235954919
9752348061 -> 1002931578825
источник
Max@#-Min@#&
сохраняет байт. право?Max@#-Min@#&[#~FromDigits~2&/@Partition[s=Join@@(i=IntegerDigits)[i@#,2,4],Tr[1^s],1,1]]&
89 байтов и эффективно. черт побери!1-9,10-99,100-999...
вот несколько разных масштабовЖеле , 13 байт
Попробуйте онлайн!
Как это устроено
источник
Python 3 ,
115108 байтспасибо Джонатану Фречу за -7 байт
Попробуйте онлайн!
источник
PowerShell , 153 байта
Попробуйте онлайн!
Глупые длинные .NET-вызовы для преобразования в / из двоичного кода действительно увеличивают длину здесь. ;-)
Мы принимаем входные данные как
$args
, заключаем их в строку, а затемchar
приводим их как -array. Мы перебираем каждуюconvert
цифруtoString
в базе2
(т.е. превращая цифру в двоичное число),.padLeft
чтобы затем сделать ее четырехзначным двоичным числом. Этот результирующий массив строк затем-join
преобразуется в одну строку иchar
передается в виде -array перед сохранением в$b
.Затем мы повторяем цикл
$b
, который просто гарантирует, что мы зациклимся достаточно раз, чтобы учесть каждый поворот. На каждой итерации мы удаляем первый символ,$x
а остальные символы -$y
используя множественное присваивание. Затем мы объединяем их вместе,$b=$y+$x
чтобы переместить первый элемент в конец, т. Е. Эффективно вращая массив на единицу. Это-join
превращается в строку, которая используется в качестве входных данных дляconvert
вызова, чтобы превратить строку из двоичной базы2
вInt64
. Затем мыsort
все эти результирующие числа и сохранить их в$c
. Наконец, мы берем самое большое[-1]
и вычитаем самое маленькое[0]
. Это осталось на конвейере и вывод неявный.источник
Ом v2 , 15 байт
Попробуйте онлайн!
Объяснение:
источник
JavaScript (ES6),
11810099 байтИзменить: Сохранено 11 байтов благодаря @RickHitchcock. Сохранено 1 байт благодаря @ETHproductions. Объяснение:
0x1
Префикс приводит к тому, что ввод переопределяется как шестнадцатеричное число, двоичное число которого совпадает с BCD исходного числа с префиксом 1 (я думаю, что это лучше, чем любой другой способ дополнения до числа, кратного 4 цифрам) , Исключая префикс, который изменяется с 1 на 0, результирующая строка затем поворачивается в каждой возможной позиции и преобразуется из двоичного обратно в десятичное. Наконец максимум и минимум вычитаются.источник
.join``
в этом случае вам нужны тройные обратные кавычки и т. Д.n=>(g=m=>Math[m](...[...s=(+`0x1${n}`).toString(2).slice(1)].map(_=>`0b${s=s.slice(1)+s[0]}`)))`max`-g`min`
slice
!m=>Math[m]
Трюк велик. Возможно изменить(+`0x1${n}`)
к('0x1'+n-0)
или подобное?Python 2 ,
115113 байтовПопробуйте онлайн!
источник
Pyth , 29 байт
Попробуй это здесь! или проверить набор тестов.
источник
Шелуха , 18 байт
Попробуйте онлайн!
Должен быть более короткий способ преобразования цифры в ее 4-битное двоичное представление ...
объяснение
источник
APL (Dyalog) , 31 байт
Полное тело программы. Запрашивает номер из STDIN. Печать результатов в STDOUT.
Попробуйте онлайн!
⍞
запросить строку текста из STDIN⍎¨
выполнить (оценить) каждого (персонажа)(
…)⊤
Кодировать (антибазис) в следующей системе счисления:4/2
четыре двоичных разряда⍉
транспонирования,
Равель (сплющить)b←
хранить вb
(для б )⊂
заключить (чтобы мы использовали весь этот список для каждого поворота)(
...)⌽¨
повернуть (влево) на каждую из следующих величин:≢b
длинаb
⍳
я думаю об этом2⊥¨
расшифровать каждый из базы-2.(
...)
применить следующую молчаливую функцию к этому⌈/
макс (-редукция)-
минус⌊/
мин (-снижение)источник
APL (Dyalog) ,
3734 байтаПопробуйте онлайн!
источник
Желе , 21 байт
Попробуйте онлайн!
источник
Рубин ,
9691 байтПопробуйте онлайн!
источник
Mathematica,
11099 байтПопробуйте онлайн!
источник
Python 3, 141 байт
Попробуйте онлайн
источник
Сетчатка ,
96-89 байтПопробуйте онлайн! Несколько медленный, поэтому ссылка включает в себя только небольшой тестовый пример. Редактировать: 7 байтов сохранено благодаря @MartinEnder. Объяснение:
Префикс три
@
с каждой цифрой. (Они представляют собой0
BCD, но являются игроками в гольф.)Замените
@
s на_
s (представляющий1
s BCD), где это необходимо.Исправьте последнюю цифру BCD.
Генерация всех поворотов.
Сортируйте их в порядке возрастания.
Перевести их в одинарные.
Вычтите первое из последнего числа, игнорируя промежуточные числа, и преобразуйте в десятичное число.
источник
%
для двоичного преобразования в унарное, и вы можете сохранить еще несколько байтов, используя другие символы, чем0
и1
для двоичного: tio.run/##K0otycxL/…Haskell , 130 байт
Попробуйте онлайн!
Объяснение / Ungolfed
Так как мы собираемся использовать
foldl1((+).(2*))
для преобразования из двоичной системы в десятичную, мы могли бы также использоватьmaximum
иminimum
аfoldl1 max
(или же сmin
соответственно) и использовать короткийr = foldr1
.Теперь давайте определим оператор
f#x
который конвертируетx
в BCD, генерирует все вращения, сокращает их, используяf
и преобразует в десятичную форму:Теперь это только вопрос использования этого оператора один раз
max
и один раз сmin
вычитанием их результатов:источник
PHP,
156153 байтаПопробуйте онлайн!
источник
Japt
-x
, 20 байтПопробуйте онлайн!
Ввод в виде массива цифр.
Объяснение:
источник
-x
флаг, чтобы сохранить 2 байта.Pyth, 24/26 байт
Принимает ввод в виде строки в кавычках. 26 байт, если нужно принять входные данные как целое число; добавить
dz
в этом случае.Тестовые случаи (ввод в виде строк, 24 байта)
Тестовые случаи (ввод в виде чисел, 26 байтов)
источник
J, 43 байта
Попробуйте онлайн!
Иногда молчаливый стиль усложняет ситуацию. Но, вероятно, есть способ сделать это молчаливым стилем, который намного более лаконичен, чем этот. Я думаю, что помню лучший способ разбить число на другие цифры,
"."0@":
но я не могу вспомнить это ...объяснение
Предварительное добавление и удаление 8 должно гарантировать наличие нужного числа нулей (J изменит свои массивы так, чтобы они соответствовали размеру их элемента максимальной длины, а 8 - это 4 цифры в двоичном виде, поэтому он используется).
источник
APL (NARS), 34 символа, 68 байтов
небольшой тест:
источник
Perl 5 ,
979189 + 2 (-F
) =999391 байтПопробуйте онлайн!
источник