В iOS 11 есть ошибка, которая делает результат 1 + 2 + 3 равным 24 . Это связано со скоростью анимации, но в любом случае:
Задача сделать 1 + 2 + 3 == 24
. Но только это. Таким образом, вы должны предоставить функцию, которая правильно суммирует большинство последовательностей, но возвращает, 24
когда аргументы есть 1
, 2
и 3
в любом порядке.
Пример входных данных:
1 2 => 3
3 4 => 7
1 2 3 4 5 6 7 8 9 => 45
3 2 1 => 24
2 1 3 => 24
1 1 => 2
1 2 3 => 24
40 2 => 42
1 2 2 4 => 9
1 2 3 4 1 2 3 => 16
1 => 1
1 23 => 24
0 1 2 => 3
3 2 3 => 8
Ввод может быть в любом формате, если ваш код принимает любое количество аргументов.
- Поддержка отрицательных чисел не требуется (для работы требуются все неотрицательные числа, включая 0)
- Мы предполагаем правильный ввод
Отличия от другого подобного вопроса: «Что вы получаете, когда умножаете 6 на 9? (42)» :
- В этом случае ваша функция должна принимать любое количество аргументов. Старый вопрос указывает ровно 2.
- В этом случае порядок не имеет значения, в то время как старый вопрос указывал, что порядок
6 9
является обязательным и9 6
должен оцениваться правильно.
Ответы:
MATL ,
1110 байтПопробуйте онлайн! или проверьте все тесты
объяснение
источник
05AB1E , 9 байтов
Объяснение:
Попробуйте онлайн!
источник
Ява 8,
1091061019075747166 байт-12 байт благодаря @ OlivierGrégoire .
-31 байт благодаря @Nevay .
Объяснение:
Попробуй это здесь.
(Неэффективное) доказательство того, что только
[1,2,3]
(в любом порядке) будут возможные результаты, когдаp
is0b1110
(p==14
) и сумма меньше 6 или ниже (s<7
): попробуйте здесь.Старый 71 байт ответ:
Доказательство того, что для любых трех заданных ненулевых натуральных чисел только
[1,2,3]
(в любом порядке) будет иметь сумму, равную ее произведению (1+2+3 == 1*2*3
) (с положительной суммой):Когда сумма равна произведению , Leo Kurlandchik & Andrzej Nowicki
(Неэффективное) доказательство того, что только
[1,2,3]
(в любом порядке) и[0,0,0]
будут возможные результаты с неотрицательными числами и длиной 3: попробуйте здесь.Так
s*4
будет и6*4 = 24
для[1,2,3]
, и0*4 = 0
для[0,0,0]
.источник
Желе , 8 байт
Попробуйте онлайн!
источник
MATL , 13 байт
Попробуйте онлайн!
Он на два байта длиннее, чем другой ответ MATL, но в нем используется совершенно другой (и IMO более интересный) подход, поэтому я решил, что его стоит опубликовать.
Объяснение:
Это решение использует тот факт, что:
Он принимает входные данные, вычисляет сумму
s
и дублирует ееt
. Затем он проверяет, равна ли сумма произведениюGp=
. Мы умножаем логическое значение1/0
на 1818*
и проверяем, есть ли в векторе неидентичные значенияda*
(опять же, умножаем на логическое значениеany(diff(x))
. Затем умножаем эти два, добавляем последнее число к исходной сумме.Пошаговое объяснение:
Предположим, что вход
[1, 2, 3]
:источник
Python 2 , 39 байт
Попробуйте онлайн!
Использует альтернативный метод добавления 18, если отсортированный ввод
[1, 2, 3]
превосходит другой ответ Python на один байт.источник
sorted(a)==[1,2,3]
может статьset(a)=={1,2,3}
экономить 3 байта.[1, 2, 3, 3]
Haskell , 37 байт
Попробуйте онлайн!
Мы используем сопоставление с образцом, чтобы поймать исключительный случай.
Haskell не имеет встроенной сортировки. Равенство
2^a+2^b+2^c==14
выполняется только[a,b,c]
перестановкой из[1,2,3]
неотрицательных целых чисел. Корочеa+b+c=a*b*c
почти работает, но удовлетворен[0,0,0]
, и добавление проверки,a>0
делает его на 1 байт длиннее.источник
Октава , 34 байта
Попробуйте онлайн!
или
Попробуйте онлайн!
или
Это короче, чем подход, используемый другими
@(x){24,sum(x)}{2-isequal(sort(x),1:3)}
.Объяснение:
Он берет сумму вектора и добавляет 18, если отсортированный вектор равен
1,2,3
. Это даст,6+18=24
если вектор является перестановкой1,2,3
, и просто сумму вектора, если нет.источник
PHP, 116 байт
Это моя первая попытка поиграть в гольф, и это PHP, язык, который явно отстой в гольфе, так как я редко вижу его здесь, так что ... хм, я пробовал?
Примечание: я не включил комментарий в bytecount.
Ungolfed
Ничего особенного
Если вы хотите проверить это в PHPFiddle, а не в консоли, вы, очевидно, можете заменить
$i
на что угодно.Спасибо Оливье Грегуару, который ознакомил меня с комбинацией строк,
[0,3,3]
которая возвращалась 24 ранее, а также помог мне сэкономить несколько символов, сохранивarray_sum
и вернув их вместо повторного запуска функции.источник
[0, 3, 3]
? Кроме того, вы не можете сохранить результатarray_sum($a)
в переменной и использовать его повторно?R,
47 байтов34 байта36 байтовПопробуйте онлайн!
Суммируйте входные данные и добавьте 18, если входной набор равен 1: 3.
Спасибо @mlt за удаление 11 байтов. Спасибо @ Ayb4btu за выявление ошибки в коде с чрезмерным перетеканием
источник
Javascript ES6, 39 байт
Спасибо @Herman Lauenstein
Предыдущий ответ
Javascript ES6, 66 байт
Попытайся
источник
a=>(Array.sort(a).join()=="1,2,3"?24:a.reduce((x,y)=>x+y))
a.sort()=="1,2,3"
работает.a=>a.sort()=="1,2,3"?24:eval(a.joinBT+BT)
(замените BT на кавычки)Swift, 67 байт
Может сделать это до 27 байт с расширениями на [Int], но это будет обманом :(
источник
func z(i:[Int]){print(i.sorted()==[1,2,3] ?24:i.reduce(0,+))}
.{$0.sorted()==[1,2,3] ?24:$0.reduce(0,+)}as([Int])->Int
анонимные функции разрешены нашими стандартными правилами. Вы можете увидеть, как это работает здесь .as
:)Mathematica, 28 байт
Попробуйте онлайн!
источник
J, 17 байт
-6 байт благодаря Frowny Frog
Суммируйте все числа
+/
и умножьте результат на (псевдокод)1 + 3*(is123 ? 1 : 0)
. То есть возвращать результаты без изменений, если только в отсортированном списке1 2 3
мы не умножим результат на 4.Попробуйте онлайн!
оригинальный ответ
Проверьте, является ли отсортированный ввод
1 2 3
- если да, вызовите функцию константы 24 (24"_
); если нет, верните сумму+/
Попробуйте онлайн!
источник
1 2 3
→i.3
?i.3
производит0 1 2
, так что вам нужно сделать,1+i.3
что не экономит символов, но менее ясно.[:+/8"0^:(1 2 3-:/:~)
+/@,[*3*1 2 3-:/:~
C # (.NET Core) , 57 + 18 = 75 байт
Попробуйте онлайн!
+18 за
using System.Linq;
источник
Lua ,
11681 байт-7 байт благодаря Джонатану
Принимает ввод как аргументы командной строки
Попробуйте онлайн!
Объяснение:
Работает путем создания разреженного массива
S
и добавления нулей в индексах, соответствующих входным значениям. Если параметры имеют3, 4, 7
разреженный массив, в этих индексах будут только числа. С этим массивом мы получаем его длину с оператором,#
который считает от индекса1
до более высокого индекса, который имеет значение в нем, если эта длина точно3
, это означает, что в позиции были элементы1
,2
и3
это то, что мы находясь в поиске. Длина разреженного массива всегда будет между0
иN
гдеN
число параметров. Поэтому нам просто нужно проверить, равна ли длина как массива параметров, так и разреженного массива3
.источник
#args
в Lua слишком тяжелая? В этом случае вы можете откатиться до своего 90-R ,
55455449575448 байтовСохранено много
байтов иБлагодаря Ayb4btu неверных решений.Сохранено
39 байт благодаря Джузеппе. Я продолжаю изучать новые способы злоупотребления тем фактомF==0
.Попробуйте онлайн!
Другой ответ R выиграл в конце.
источник
[0,0,0]
: возвращает24
вместо0
.c(1,1,2,3)
возвращается28
вместо7
x=scan();s=sum(x);"if"(s-prod(x)|s-6|length(x)-3,s,24)
составляет 54 байта, меняя условие и используя|
вместо того,&
чтобы мы могли вычесть.C (gcc) ,
1361311259791 байтПопробуйте онлайн!
источник
Сетчатка , 21 байт
Попробуйте онлайн!
Входные данные разделены переводом строки, но для удобства набор тестов использует разделение запятыми.
объяснение
Сортировка число (лексический, на самом деле, но мы только заботиться о том случае, когда входы
1
,2
,3
в определенном порядке, где это не делает разницы).Если ввод
1,2,3
(в некотором порядке), заменить его на 24.Перевести все числа в одинарные.
Подсчитайте число
1
s, которое добавляет унарные числа и преобразует их обратно в десятичное число.источник
1
в данном случае все s). Retina всегда делает это для единственной заключительной строки? Или же можно посчитать все1
s где-то посередине, а затем продолжить с результатом, чтобы сделать что-то еще (который снова использует две строки для замены действий)? Кроме того, еще один связанный с этим вопрос: какие функции в Retina требуют только одну строку? Сортировка (O`
) является одним из них, а также другими функциями; а какой другой? Просто пытаюсь понять Retina немного больше. :)M`
. Только в том случае, если есть единственнаяM
конечная строка, Retina по умолчанию ставит atch вместоR
eplace.AGMTS
все этапы однолинейные,R
это две линии,O
иD
одна или две линии , в зависимости от того ,$
используется вариант (который превращает их в своего рода / deduplicate- на этапах). Не стесняйтесь пинговать меня в чате Retina, если у вас есть дополнительные вопросы: chat.stackexchange.com/rooms/41525/retinaHaskell , 44 байта
Попробуйте онлайн!
Перестановки
[1,2,3]
являются единственными разделами,6
чей продукт6
, кроме6
самого себя. (Предполагается, что входные данные неотрицательны, что, по-видимому, относится ко всем контрольным случаям ... Я спросил об этом OP).источник
PL / SQL -
135123 байтаПредполагая, что я как целочисленный массив ввода любого размера:
источник
C ++ 17,
5654 байтаПопробуйте онлайн!
Обратите внимание, что созданный объект функции можно использовать во время компиляции, поэтому тесты выполняются компилятором без запуска программы.
Объяснение:
Доказательство того , что только неотрицательное ,
i...
для которых(-i&...)
равен -4 и(~i*...)
равен -24 являются перестановками1, 2, 3
:Сначала мы заметим, что так как
-0
=0
, если естьi
=,0
то(-i&...) = 0
мы заключаем, что всеi
являются положительными.Теперь обратите внимание, что в дополнении 2,
-i
эквивалентно~(i - 1)
, и~i
эквивалентно-(i + 1)
. Применяя правило де Моргана, мы находим, что(-i & ...)
=~((i - 1) | ...)
=-(((i - 1) | ...) + 1)
, так((i - 1) | ...) = 3
; аналогично,-1 ** n * ((i + 1) * ...) = -24
такn
странно и((i + 1) * ...) = 24
.Первичные множители 24 равны 2 ** 3 * 3, поэтому
n
<= 4. Еслиn
= 1, мы имеемi - 1 = 3
иi + 1 = 24
, следовательно,n
= 3. Запишитеi
wlog какa <= b <= c
, тогда ясноa
= 1 как иначе(a + 1)(b + 1)(c + 1)
> = 27. Такжеc
<= 4 как в противном случае(a - 1)|(b - 1)|(c - 1)
> = 4.c
не может быть 4, так как 5 не является коэффициентом 24, поэтомуc
<= 3. Тогда для удовлетворения(a - 1)|(b - 1)|(c - 1) = 3
c = 3, b = 2, как требуется.источник
Шелуха , 9 байт
Попробуйте онлайн!
объяснение
Предыдущее решение
Дает неправильный результат [2,2] и, возможно, другим входам, но это было более интересно.
Попробуйте онлайн!
источник
Напористый , 12 байт
Попробуйте онлайн!
Это работает путем сортировки входных данных и, если оно равно
[1, 2, 3]
, добавлением 18. Затем сумма вычисляется и печатается, после чего добавляется 24, равное 18, и в противном случае получается нормальный ответ.источник
Pyth , 9 байт
Проверьте все контрольные примеры.
источник
Python 2 ,
4139 байт-1 байт благодаря caird
-1 по вдохновению от ответа FlipTack
Попробуйте онлайн!
Альтернативное 39-байтовое решение
источник
Желе ,
109 байтПопробуйте онлайн!
-1 байт благодаря Эрику
Альтернатива ( Mr. Xcoder ), также для 9 байтов:
Попробуйте онлайн!
Как это работает
источник
Ṣ24S⁼?3R¤
для 9 байтов.3R⁼Ṣ×18+S
для 9 байтов тоже.Pyth , 9 байт
Отличный подход от другого ответа Пита.
Объяснение:
Порт из моего ответа Python
Попробуйте онлайн!
источник
PowerShell , 44 байта
Попробуйте онлайн!
Аналогичен алгоритму Python и JavaScript. Принимает ввод как буквенный массив
$a
. Потом сразу суммы$a
, что образует левый оператор+
.Правая рука - это
diff
(псевдоним дляCompare-Object
)1,2,3
и$a
- это либо пустой массив, если они равны, либо непустой массив различных элементов, если они не равны, - заключенный в логическое значение-not. Таким образом, если они равны, это делает пустой массив (значение Фолси) в$true
.Это затем умножается на то,
18
что неявно приводит$true
к1
и$false
к0
. Так что правая часть будет,18
если массивы одинаковые, а в0
противном случае. Это дает правильный результат,24
если входной массив находится1,2,3
в любой перестановке, и суммирование входного массива в противном случае.источник
Котлин ,
4644 байтаПопробуйте онлайн!
Правки
источник
listOf(1,2,3)
чтобы сохранить 2 байта? Я не знаю Котлина, поэтому я не уверен.