Если задано неотрицательное целое число, вернуть абсолютную разницу между суммой его четных цифр и суммой его нечетных цифр.
Правила по умолчанию
Стандартные лазейки применяются.
Вы можете получить ввод и обеспечить вывод любым стандартным методом ввода / вывода.
Вы можете принять ввод как строку, как целое число или как список цифр.
Это код-гольф , поэтому выигрывает самый короткий код в байтах на каждом языке !
Тестовые случаи
Вход ~> Выход 0 ~> 0 (| 0-0 | = 0) 1 ~> 1 (| 1-0 | = 1) 12 ~> 1 (| 2-1 | = 1) 333 ~> 9 (| 0- (3 + 3 + 3) | = 9) 459 ~> 10 (| 4- (5 + 9) | = 10) 2469 ~> 3 (| (2 + 4 + 6) -9 | = 3) 1234 ~> 2 (| (2 + 4) - (1 + 3) | = 2)
code-golf
number
number-theory
Мистер Xcoder
источник
источник
Ответы:
Желе , 6 байт
Попробуйте онлайн!
Как это устроено
источник
Raise -1 to A's digits, yielding 1 for even digits and 0 for odd ones.
ммм, я думаю, что вы что-тоСценарии ввода-вывода SHENZHEN MCxxxx, 197 (126 + 71) байт
Микросхема 1 (MC6000):
Микросхема 2 (MC4000):
источник
<!-- -->
комментарий, чтобы получить код сразу после списка, а не текст-заполнитель. Или сделать отступ в коде с 4 пробелами.)Python 2, 39 байт
Принимает целое число как список. Попробуйте онлайн
-3 байта благодаря @ Mr.Xcoder
-1 байт благодаря @ovs
источник
[i,-i][i%2]
вместоi%2and i or -i
для 40 байт .(-1)**i*i
39 байтTI-Basic,
189 байтовобъяснение
Умножает каждую цифру в списке на -1 до ее степени, сводя к нулю каждую нечетную цифру, прежде чем их суммировать.
источник
C (gcc) ,
595857 байтПопробуйте онлайн!
источник
R,
3029 байтd = scan()
принимает входной номер на одну цифру за другой.-1 байт благодаря @Giuseppe!
источник
abs(sum((d=scan())-2*d*d%%2))
C #, 57 байт
Принимает ввод как
i
и суммирует целые числа, превращая шансы в минус.источник
namespace System.Linq{
и сделать фактическую функцию. См. Другой ответ C # для справкиMain
. Единственная причина, по которой я решил ответить. Ох, колодцы.Mathematica, 20 байтов
принимает в качестве входных данных список цифр
Отдельное спасибо @LLlAMnYP за сообщение о «новых правилах»
источник
*
.Japt , 8 байт
Проверьте это онлайн!
объяснение
источник
Нейм , 7 байт
Объяснение:
источник
APL, 8 байт
Попробуйте онлайн!
Как?
¯1*⊢
- -1 п дляn
в⍵
[
4 5 9
→1 ¯1 ¯1
]⊢+.×
- вертикованное умножение сo
, затем сумма[
+/ 4 5 9 × 1 ¯1 ¯1
→+/ 4 ¯5 ¯9
→¯10
]|
- абсолютная величинаисточник
|⊢+.ׯ1*⊢
с новой входной спецификацией.JavaScript (ES6),
4338 байтВводит в
виде строкимассив цифр.Контрольные примеры
Показать фрагмент кода
источник
РЕДАКТИРОВАТЬ: более ориентированный на гольф подход:
EXCEL,
423629 байтСохранено 6 байтов благодаря Magic Octopus Urn. Сохранено 7 байтов с использованием подхода Денниса -1 ^ (который, как я только что узнал, работает с массивами в Excel)
Принимает список целых чисел в столбце A для ввода. Вероятно, можно продолжить игру или использовать строковую версию, взяв строку в A1 для ввода.
EXCEL, 256 байт
источник
You may take input as a String, as an Integer or as a list of digits.
вашего 42-байтового ответа должен быть ответ, который вы используете.Юлия 0,5 , 19 байт
Попробуйте онлайн!
источник
Шелуха , 7 байт
Попробуйте онлайн!
Принимает список цифр в качестве ввода.
Все еще отсутствует встроенный "abs", но все равно хороший результат :)
объяснение
Ṡ!¡_
является функцией, которая принимает число,n
а затем применяетn-1
время, к которому функция_
(отрицание)n
. Это приводитn
к нечетнымn
или-n
четнымn
.ṁ
применяет функцию к каждому элементу списка и суммирует результаты.≠0
возвращает абсолютную разницу между числом и 0.источник
05AB1E , 6 байтов
Спасибо Деннису за трюк -1. Принимает ввод в виде списка цифр
Попробуйте онлайн!
объяснение
источник
È2*<*O
как с грязным случайным.PHP, 51 байт
добавляет цифру к
$s
если нечетное, вычитает если четное. Беги как труба с-nR
.или
используя трюк
-1
силы Денниса .источник
Mathematica, 67 байт
источник
PHP , 54 байта
Попробуйте онлайн!
PHP , 57 байт
хранить четные и нечетные суммы в массиве
Попробуйте онлайн!
PHP , 57 байт
хранить четные и нечетные суммы в двух переменных
Попробуйте онлайн!
источник
${1}
и четная сумма${0}
:while(~$n=$argn[$i++])${$n&1}+=$n;echo abs(${1}-${0});
for(;~$n=$argn[$i++];$s+=$n)$u+=($n&1)*$n;echo abs($s-2*$u);
иfor(;~$n=$argn[$i++];)$u+=(($n&1)-.5)*2*$n;echo abs($u);
интересным способомHaskell ,
474239382625 байт-1 спасибо Ними
-12 благодаря Брюсу
-1 спасибо xnor
Попробуйте онлайн!
источник
s
:((*)=<<((-1)^))
.(\x->x*(-1)^x)
.Perl 6 , 28 байт
Попробуйте онлайн!
Принимает список цифр в качестве ввода.
$_
является входным аргументом..map(* % 2 * 2 - 1)
отображает каждую цифру в одну1
или в-1
зависимости от того, является ли цифра нечетной или четной, соответственно.Z*
Сжатие исходного списка цифр с четным / нечетным списком с использованием умножения.источник
Брайнгольф , 18 байт
Попробуйте онлайн!
Вводит в виде списка цифр
объяснение
источник
R,
7243 байтаПервый,
d = scan()
принимает число в качестве входных данных, одну цифру за другой (благодаря комментарию @Giuseppe!).Затем
b = d %% 2 <1
ассоциируетсяb
со значениемTRUE
илиFALSE
в каждом индексе в зависимости от четности цифр. Таким образом,b
значенияTRUE
для четных чисел, и!b
являютсяTRUE
для нечетных значений.Наконец,
abs(sum(d[b]) - sum(d[!b]))
делает работу.источник
<1
на один байт короче==0
, но учтите, что вы также можете использовать ввод в качестве списка цифр.Баш
14113999 байтПопробуйте онлайн!
источник
Java (OpenJDK 8) , 55 байт
Попробуйте онлайн!
Наивная реализация.
источник
C #, 67 байт
источник
05AB1E , 7 байтов
Попробуйте онлайн!
источник
Машинный код x86-64, 30 байт
Приведенный выше код определяет функцию, которая принимает список / массив целочисленных цифр и возвращает абсолютную разницу между суммой четных цифр и суммой нечетных цифр.
Как в С , язык ассемблера не реализует списки или массивы как первоклассные типы, а скорее представляет их как комбинацию указателя и длины. Поэтому я организовал для этой функции прием двух параметров: первый - указатель на начало списка цифр, а второй - целое число, определяющее общую длину списка (общее количество цифр, одноиндексированное) ,
Функция соответствует соглашению о вызовах System64 AMD64 , стандартному для систем Gnu / UNIX. В частности, первый параметр (указатель на начало списка) передается
RDI
(так как это 64-разрядный код, это 64-разрядный указатель), а второй параметр (длина списка) передается вESI
( это всего лишь 32-битное значение, потому что для этого более чем достаточно цифр, и, естественно, предполагается, что оно ненулевое). Результат возвращается вEAX
регистр.Если это будет более понятным, это будет прототип C (и вы можете использовать это для вызова функции из C):
Неуправляемая сборка мнемоники:
Вот краткий обзор кода:
EAX
иEDX
регистры, которые будут использоваться для хранения сумм суммы четных и нечетных цифр.EAX
Регистр очищается отXOR
ING его с собой (2 байта), а затемEDX
регистр очищается от входа продлевая EAX в него (CDQ
1 байт).Затем мы идем в цикл, который перебирает все цифры, передаваемые в массиве. Он извлекает цифру, проверяет, является ли она четным или нечетным (проверяя младший значащий бит, который будет равен 0, если значение является четным, или 1, если он нечетный), а затем, соответственно, перепрыгивает или падает, добавляя, что значение для соответствующего аккумулятора. В нижней части цикла мы уменьшаем счетчик цифр (
ESI
) и продолжаем цикл до тех пор, пока он не равен нулю (т. Е. До тех пор, пока в списке осталось больше цифр, которые нужно извлечь).Единственная сложность здесь - это начальная инструкция MOV, которая использует наиболее сложный режим адресации, возможный на x86. * Он принимает
RDI
в качестве базового регистра (указатель на начало списка), масштабируетRSI
(счетчик длины, который служит индексом) на 4 (размер целого числа в байтах) и добавляет его к базе, и затем вычитает 4 из общей суммы (потому что счетчик длины основан на единице, и нам нужно, чтобы смещение было на основе нуля). Это дает адрес цифры в массиве, который затем загружается вECX
регистр.После завершения цикла мы делаем вычитание шансов из четных (
EAX -= EDX
).Наконец, мы вычисляем абсолютное значение, используя общий прием - тот же, который используется большинством компиляторов Си для
abs
функции. Я не буду вдаваться в подробности о том, как этот трюк работает здесь; см. комментарии к коду для подсказок или выполните поиск в Интернете.__
* Код можно переписать, чтобы использовать более простые режимы адресации, но это не делает его короче. Я смог придумать альтернативную реализацию, которая разыменовывала
RDI
и увеличивала его на 8 каждый раз в цикле, но, поскольку вам все еще нужно уменьшить счетчикESI
, это оказалось теми же 30 байтами. То, что изначально дало мне надежду, это то, чтоadd eax, DWORD PTR [rdi]
это всего 2 байта, то же самое, что добавить два зарегистрированных значения. Вот эта реализация, хотя бы для того, чтобы спасти любого, кто пытается переиграть меня :-)источник
TI-BASIC,
116 байтовПринимает ввод в виде списка.
i²^Ans
сохраняет два байта,(-1)^Ans
потому что нам не нужны скобки.источник
J, 14 байт
Попробуйте онлайн!
объяснение
источник