Введение:
Несколько дней назад я прочитал этот пост с тем же названием, когда наткнулся на него в HNQ. В этом вопросе обсуждается ли иск кандидата в президенты Берни Сандерса, который утверждал следующее:
Сегодня 26 самых богатых в мире 26-миллиардеров сегодня владеют таким же богатством, как и 3,8 млрд. Самых бедных людей на планете, то есть половина населения мира.
Ссылка на видео
это правда или нет. Пожалуйста, перейдите к самому вопросу для ответов и обсуждения там.
Что касается фактической проблемы, основанной на этом требовании:
Вызов:
Два входа: отсортированный по убыванию список номеров и номер (где равно ). Выход: самый длинный возможный суффикс суб-список , для которых общая сумма суммы первых значений в списке .≤ n L
Пример:
Входы: = и .
Выход:[500,200,150,150,125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
[125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
Зачем?
Первые значения списка ( ) суммируются с . Если мы берем все суффиксы оставшихся чисел, а также их суммы:[500,200]
700
Suffix: Sum:
[-3] -3
[-2,-3] -5
[0,-2,-3] -5
[1,0,-2,-3] -4
[2,1,0,-2,-3] -2
[2,2,1,0,-2,-3] 0
[3,2,2,1,0,-2,-3] 3
[5,3,2,2,1,0,-2,-3] 8
[5,5,3,2,2,1,0,-2,-3] 13
[5,5,5,3,2,2,1,0,-2,-3] 18
[5,5,5,5,3,2,2,1,0,-2,-3] 23
[10,5,5,5,5,3,2,2,1,0,-2,-3] 33
[10,10,5,5,5,5,3,2,2,1,0,-2,-3] 43
[20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 63
[30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 93
[30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 123
[40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 163
[50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 213
[55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 268
[75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 343
[75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 418
[100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 518
[125,100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 643
[150,125,100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 793
[150,150,125,100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 943
Самый длинный суффикс , который имеет сумму меньше или равняться 700
есть [125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
с суммой 643
, так что это наш результат.
Правила соревнований:
- Значения в первом префиксе не учитываются в суффиксе вывода. Т.е. входы = и приведут , а нет .
[10,5,5,3]
[5,3]
[5,5,3]
- Ввод / вывод является гибким. Вы можете ввести в виде списка / потока / массива целых чисел / десятичных дробей / строк, одной строки с разделителями, один за другим через STDIN и т. Д. Вы также можете вывести в виде списка / потока / массива целых чисел / десятичных дробей / строк, распечатать / вернуть строку с разделителями, напечатать число на каждой новой строке и т. д. Ваш звонок.
- Выход гарантированно будет непустым. Таким образом, вам не придется иметь дело с тестовыми примерами, такими как = и n = 2, в результате чего .
[-5,-10,-13]
[]
- Оба (или оба) ввода и / или вывода также могут быть в порядке возрастания, а не в порядке убывания, если вы решите.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вам разрешено использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
Inputs: L=[500,200,150,150,125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3], n=2
Output: [125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
Inputs: L=[10,5,5,3], n=2
Output: [5,3]
Inputs: L=[7,2,1,-2,-4,-5,-10,-12], n=7
Output: [-12]
Inputs: L=[30,20,10,0,-10,-20,-30], n=1
Output: [20,10,0,-10,-20,-30]
Inputs: L=[100,35,25,15,5,5,5,5,5,5,5,5,5,5,5,5,5], n=1
Output: [15,5,5,5,5,5,5,5,5,5,5,5,5,5]
Inputs: L=[0,-5,-10,-15], n=2
Output: [-10,-15]
Inputs: L=[1000,999,998,900,800,766,525,525,400,340,120,110,80,77,33,12,0,-15,-45,-250], n=2
Output: [525,525,400,340,120,110,80,77,33,12,0,-15,-45,-250]
Inputs: L=[10,5,5], n=1
Output: [5,5]
[131000000000, 96500000000, 82500000000, 76000000000, (7.7 billion more entries)]
:: pL = [-5,-10,-13]
иn=2
приводящие к[]
. » Кроме того, список ввода гарантированно будет отсортирован по убыванию (или по возрастанию, если вы выберете), поэтому[1,2,3]
для начала недопустимый список ввода (если вы не выберете ввод по возрастанию, в этом случае[1,2]
будет результат).Ответы:
C # (интерактивный компилятор Visual C #) ,
8881696863 байта-4 байта благодаря LiefdeWen
Попробуйте онлайн!
источник
+b
изSkip
колла; Излишне проверять первыйn
список, но я думаю, что он все еще правильный.EXAPUNKS (2 EXAs, 30 инструкций, файл решения 594 байта)
Я хотел попробовать игру в гольф в EXAPUNKS какое-то время, и ты выглядел как лучший, который я смог найти, так что, поздравляю!
Ввод через файлы 200 и 201 для L и n соответственно. Вывод через новый файл. L и вывод в порядке возрастания.
По сути, XA суммирует последние n значений в L, а затем отправляет их в XB. Затем он ищет начало L и отправляет каждое значение по одному в XB. Сначала XB получает сумму от XA и сохраняет ее в регистре X. Затем он получает значения один за другим из XA, вычитая новое значение из X и записывая эти значения в выходной файл, пока X <0.
XA
XB
JavaScript для уровня здесь
источник
Python 2 , 60 байт
Попробуйте онлайн!
Объяснение:
Сначала берется сумма первых
n
предметов.Затем сумма каждого подсписка сравнивается с этой суммой. Как только мы не становимся больше, мы останавливаемся.
Затем полученный (самый длинный) подсписок печатается.
источник
05AB1E ,
1412 байтСохранено 2 байта благодаря Grimy
Попробуйте онлайн!
объяснение
источник
.$.sʒO²¹£O>‹}θ
. :)|
переписалlast-input
, интересно.|
здесь результат|
становится последним входом, а не последним.J , 18 байт
Попробуйте онлайн!
Объяснение:
Диадический глагол, принимающий в
n
качестве левого аргумента иL
- в качестве своего правого аргумента.источник
Руби ,
4743 байта-4 байта, читая спецификацию более внимательно.
Попробуйте онлайн!
источник
R , 53
55байт@Giuseppe спас мне 2 байта, изменив способ удаления
Попробуйте онлайн! Принимает входные данные в порядке убывания и выводит в порядке возрастания, как это разрешено правилом 4.
Y
это оборотL
с 1: n, удаленным, используя0:-n
Y
откуда накопленная сумма меньше, чем равна суммеL[X]
источник
X
использование,-(1:n)
но, конечно, это был тот же самый размер, поэтому оставил этоJavaScript (ES6), 66 байт
Принимает ввод как
(a)(n)
со списком в порядке возрастания.Попробуйте онлайн!
комментарии
источник
Python 2 , 59 байт
Также совместим с Python 3
Попробуйте онлайн!
объяснение
Сумма суффикса сравнивается с половиной суммы всего списка. Если сумма суффикса меньше или равна, суффикс возвращается. Если нет, функция вызывается рекурсивно, и первый элемент суффикса появляется.
источник
Pyth ,
1615 байтПопробуйте онлайн!
Предполагается, что входной список будет отсортирован по возрастанию, а не по убыванию, как это используется в примерах.
В такие моменты я действительно хочу, чтобы у Пайта был один токен-оператор для доступа ко второму входу более одного раза (
E
оценивает следующую строку ввода, но повторные вызовы отбрасывают предыдущее прочитанное значение).Редактировать: сохранено 1 байт благодаря MrXcoder
источник
JavaScript, 64 байта
Попробуйте онлайн!
источник
Stax , 12 байт
Запустите и отладьте его на staxlang.xyz!
Более хорошая версия
Распаковывается (14 байт) и объяснение:
По общему согласию , я могу оставить этот результат в стеке. Stax попытается выполнить неявную печать, которая может потерпеть неудачу, но при добавлении
m
в распакованную программу позволит вам хорошо увидеть результат.Похоже,
{ ... }j
это так же, как{ ... fh
. Да. Редактировать: это не совсем так; только первый прекратит работу, когда получит правдивый результат, возможно, избегая побочных эффектов или фатальной ошибки позже.источник
APL + WIN, 27 байт
Запрашивает ввод L, затем n.
Попробуйте онлайн! Предоставлено Dyalog Classic
источник
Japt , 16 байт
Попытайся
источник
Желе ,
1312 байтПопробуйте онлайн!
Спасибо @JonathanAllan за сохранение байта!
Диадическая ссылка со списком значенийL в качестве левого аргумента и числа N как правильно.
объяснение
источник
ṫḊÐƤS>¥ÞḣS¥Ḣ
Gaia , 12 байт
Попробуйте онлайн!
Я думаю, что есть байт, который я могу сыграть в гольф, если получу стек правильно.
источник
Haskell , 46 байтов
Недоволен тем, как это выглядит; надеюсь, я просто скучаю по некоторым очевидным гольфам.
Попробуйте онлайн!
Я попытался получить префикс и суффикс, используя
splitAt
и сопоставление с образцом в ограждении, но это оказалось на 3 байта больше. Планируете позже попытаться преобразовать в рекурсивную функцию с охраной, чтобы увидеть, уменьшает ли это число байтов.объяснение
То, что я называю «префиксом» - это первые
n
элементы, а «суффикс» - остальная часть списка.источник
APL (Dyalog Unicode) ,
2321 байт SBCSАнонимный префикс лямбда, принимаяN в качестве левого аргумента и L как правильный аргумент.
Попробуйте онлайн!
{
…}
"Дфн";⍺
(самая левая греческая буква) и⍵
(самая правая греческая буква):⌽⍵
обратный+\
префикс суммы этого(
…)<
Булева маска где меньше чем:⍺↑⍵
взять первый+/
суммировать те⊥⍨
считать истины⍺⌈
максимум⍵↓⍨
отбросьте столько элементов с фронтаисточник
MATL ,
1312 байт1 байт сохранен благодаря @Giuseppe , основанному на ответе @MickyT .
Выход в порядке возрастания.
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Рассмотрим входы
2
и[500,200,150,150,125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
.источник
PowerShell ,
9997 байтПопробуйте онлайн!
Принимает список в порядке возрастания, вывод идет по убыванию (потому что его было проще сравнить с контрольными примерами: ^))
Просматривает список в
обратном направлении, сравнивая аккумулятор с последнимиn
добавленными записями (склеивая их вместе с+
s и передавая полученную строкуinvoke-expression
). Цикл «До» нуждался в дополнительной логике, чтобы справиться с переходом в «Богатое соседство», потому что он не остановится, если мы все же не будем богаче, чем «Богатые парни», пока не пролистаем весь список.раскатали:
источник
Сетчатка 0.8.2 , 99 байт
Попробуйте онлайн! Ссылка включает только некоторые тестовые случаи; Я мог заставить его работать в некоторых случаях с отрицательными числами по стоимости 12 байт (в частности, первые
n
записиL
все еще должны быть положительными; теоретически я мог бы, вероятно, потребовать, чтобы сумма первыхn
записей была положительной). Объяснение:Преобразовать в одинарный.
Вставьте маркер в начале
L
.Переместите его вниз по списку
n
раз, суммируя по ходу дела. Это удаляет,n
но его запятая остается.Создайте запись для каждого суффикса
L
.Замените середину копией суффикса.
Суммируйте копию суффикса.
Возьмите первую запись, где сумма суффикса не превышает сумму префикса.
Удалить суммы.
Преобразовать в десятичную.
Удалите запятую, которая была раньше
n
.источник
r
опции, поэтому я связал ее с некоторыми тестовыми примерами.Древесный уголь , 17 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Красный , 63 байта
Попробуйте онлайн!
источник
PowerShell , 86 байт
Попробуйте онлайн!
раскатали:
источник
MathGolf , 13 байт
Попробуйте онлайн!
объяснение
Принимает вход как
n L
Причина, по которой это работает, заключается в том, что на первом этапе мы фактически делим список на две пересекающиеся части. Как пример,
L = [4, 3, 2, 1], n = 2
разделим список как[3, 2, 1]
и[4, 3]
. Причиной наличия дополнительного элемента в первом списке является то, что в цикле первое, что происходит, это сброс. Если дополнительный элемент не был добавлен, случаи, когда выходные данные должны составлять весь остальной список, потерпят неудачу.источник
Wolfram Language (Mathematica) , 40 байт
Попробуйте онлайн!
источник
Clojure,
6675 байтК сожалению, кажется, что нет более короткой идиомы для общей суммы последовательности.
Изменить : О при добавлении примеров в онлайн-пробную версию! ссылка Я заметил, что оригинальный ответ дал неправильные результаты, когда присутствовало много отрицательных чисел.
В
doseq
использует «ключи» деструктурирующие поэтому она должна быть несколько ясно торцы , какие данные в какой символ.#(...)
является анонимной функцией, здесь я связываю ее с символомf
:Выход:
источник
APL (NARS), 32 символа, 64 байта
тест и комментарии:
Я неверно сообщил длину байта ...
источник
MS SQL Server 2017 , 271 байт
Я знаю, что использование более реляционной таблицы для хранения входных данных может сделать код более кратким, но используя символьный тип данных для хранения числового списка и
STRING_SPLIT
функции, я получаю более короткуюBuild Schema
часть :)Более читаемая версия:
Попробуйте это на SQL Fiddle !
источник
Python 3.8 (предварительная версия) , 59 байт
Вывод в порядке возрастания
Попробуйте онлайн!
источник