Многоуровневая маркетинговая задача.
Пэр хочет получить вознаграждение. Таким образом, это привлекло N
инвесторов ( N>=1
), каждый i-й инвестор инвестировал x[i]
. Когда общая сумма превышает порог, x[0]+x[1]+...+x[N-1] >= T
партнер может быть вознагражден. Но только при соблюдении следующих условий:
- Минимальное количество инвесторов должно быть больше
M
, (M<=N
) - По крайней мере, для одного целого числа
k
, гдеk>=M
иk<=N
любыеk
инвесторы должны вкладывать, по крайней мере,T/k
каждое;
Учитывая, что N, x[], T, M
вы должны определить, генерируется ли вознаграждение пира или нет (логический результат, «да» или «нет»). Самый короткий код выигрывает.
Примеры:
N=5; M=3; T=10000
, чтобы получить вознаграждение пэра, должно быть выполнено одно из следующих условий:
- любые 3 инвестированы не менее 3334 каждый
- любые 4 инвестировали не менее 2500 каждый
- все 5 вложено не менее 2000 каждый
N=6; M=2; T=5000
:
- любые 2 инвестированы не менее 2500 каждый
- любые 3 инвестированы не менее 1667 каждый
- любые 4 инвестировали не менее 1250 каждый
- любые 5 вложено не менее 1000 каждый
- все 6 вложено не менее 834 каждый
обобщенно: для любого k
, где k>=M
и k<=N
:
- любой
k
изN
инвесторов вложил хотя быT/k
каждого
Тестовые случаи:
формат:
N, x[], T, M -> correct answer
6, [999, 999, 59, 0, 0, 0], 180, 3 -> 0
6, [0, 60, 0, 60, 60, 0], 180, 3 -> 1
6, [179, 89, 59, 44, 35, 29], 180, 3 -> 0
6, [179, 89, 59, 44, 35, 30], 180, 3 -> 1
6, [179, 89, 59, 44, 36, 29], 180, 3 -> 1
6, [179, 90, 59, 44, 35, 29], 180, 3 -> 0
6, [30, 30, 30, 30, 29, 30], 180, 3 -> 0
6, [30, 30, 30, 30, 30, 30], 180, 3 -> 1
code-golf
decision-problem
xakepp35
источник
источник
len(x)
будет короче, чем письмоN
. Это сделано потому, что для динамически размещаемого массиваx
в C нет прямойlen(x)
функции - поэтому вы всегда можете ссылаться на length какN
. Для удобства вы можете рассматривать все входные данныеN, x[], T, M
как некоторые внешне определенные константы или как встроенные в язык.true
и истинное значение дляfalse
?Ответы:
Желе ,
129 байтПолная программа, которая принимает
x T M
и печатает,0
если партнер вознагражден, и1
если нет.Попробуйте онлайн!
Как?
источник
0
если пэр вознагражден, а1
если нет». (то0
есть "да"). Это экономит 1 байт :)05AB1E , 9 байт
Попробуйте онлайн или проверьте все контрольные примеры .
Порт @JonathanAllan 's Jelly ответа , поэтому также принимает входы
x T M
и выходы0
для"yes"
и1
для"no"
. Если это не разрешено и должно быть инвертировано,_
можно добавить трейлинг .Объяснение:
Альтернатива для
.ssè
:Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
JavaScript,
5452 байтаПопробуйте онлайн
источник
[0, 60, 0, 60, 60, 0], 180, 3 -> true
похоже, не работает! 72 байтовых Bersion обрабатывает это нормально. Баг или фича?)Сетчатка , 79 байт
Попробуйте онлайн! Принимает ввод в формате
[x], T, M
. Ссылка включает в себя тестовые случаи. Объяснение:Преобразовать в одинарный.
Сортировка
[x]
по убыванию.Умножьте каждый элемент
[x]
на его индекс.Удалить первые
M-1
элементы[x]
.Проверьте, является ли какой-либо оставшийся элемент
[x]
больше или равенT
.источник
Perl 6 ,
46 3329 байтПопробуйте онлайн!
Блоки анонимного кода, которые принимают входные данные в форме
list, amount, length of list, minimum amount of investors
и возвращают соединение правда / ложьall
, где истина не удалась, а ложь удалась.Объяснение:
источник
05AB1E , 6 байтов
Входные данные принимаются в порядке
T
,N
,x[]
,M
Выход
0
за вознаграждение пэра и1
если неПопробуйте онлайн! или как тестовый набор
объяснение
источник
*
диапазона, чтобы неявно обрезать список!C # (.NET Core) ,
129, 89 байтРЕДАКТИРОВАТЬ: Спасибо Кевину Круйссену за то, что он играл в гольф с 40 байтами, объясняя механику почему!
Попробуйте онлайн!
источник
n
поскольку вы его нигде не используете; удалено,k
так как вы можете использоватьm
себя; добавили переменнуюl
для,q.Length
так как вы используете ее дважды; объединили переменные,int c=0,l=q.Length,j;
так что вам не нужно дополнительноеvar
; убрал лишние скобки, поместив все в тело цикла for; изменилc>=k
чек наc<k
; и изменено ,if(c>0)break;
чтобыm=c>0?l+1:m;
, так как цикл останавливается , еслиm<=l
, изменяя ,m
чтобыl+1
сэкономить байты надbreak
(и это также экономит на 2 скобок). :)m=c>0?l+1:m
Могут быть полностью удалены , а&c<1
проверка может быть добавлен к петле вместо этого. И, взяв вводn
снова, вам больше не нужноq.Length
, но вы можете использоватьn
вместо этого.C # (интерактивный компилятор Visual C #) с флагом
/u:System.Linq.Enumerable
, 69 байтовПопробуйте онлайн!
Без каких-либо флагов, 73 байта
Попробуйте онлайн!
источник
JavaScript, 72 байта
Код
Попробуйте онлайн!
Принимает ввод в формате (x [], T, M)
объяснение
источник
Python 3 , 136 байт
Просто проверьте условия, чтобы убедиться, что они выполнены. 1, если вознаграждение дано, 0, если нет.
Попробуйте онлайн!
источник
Python ,
7165 байтПопробуйте онлайн!
Безымянная функция; порт моего желе ответ. Как таковое «да» есть,
False
а «нет» естьTrue
. Здесь, однако, мы отбрасываем тест-кейсы как часть реверсирования и пользуемся возможностью инициироватьenumerate
подсчетM
. (min
также будет работать вместоall
)источник
R ,
4342 байта-1 байт, реализуя подход еще ближе
Попробуйте онлайн!
Простая R-реализация Jonathan's Jelly. Я перепробовал несколько вариантов, но это лучшее, что я мог придумать, на несколько байтов.
1 означает неудачу, 0 означает успех.
источник
Japt,
16141311 байтПопробуй это
источник
Java 8, 91 (или 89?) Байт
Порт ответа @Destroigo на C # .NET (после того, как я еще раз в нем поиграл), так что не забудьте его поддержать!
Принимает входы
N,x,T,M
и выходыtrue
/false
для"yes"
/"no"
соответственно.Поскольку задача специально запрашивает
boolean
результаты, я не могу вернуть1
/0
как есть, так как это недопустимые значения true / falsey в Java. Если вместо этого для этой задачи допустимы любые два различных выходных значения для"yes"
/"no"
, то>0
возвращаемый результат можно отбросить, чтобы сохранить два байта, и в этом случае он вернет1
/0
для"yes"
/"no"
соответственно.Попробуйте онлайн.
Объяснение:
источник
C # (интерактивный компилятор Visual C #) , 66 байт
Попробуйте онлайн!
Вдохновленный ответом @ EmbodimentOfIgnorance.
Я упоминал об этом раньше, но C # 8 имеет литерал диапазона, который может сделать этот ответ примерно таким:
Я видел ссылку на SharpLab с примером, но я не смог заставить его работать.
Одна вещь, которую я изменил, была
x
иt
значения являются десятичными. Это обрабатывает случай, когдаt
не делится наk
немного лучше.источник