Desafio relacionado a marketing multinível.
Um colega quer ser recompensado. Por isso, atraiu N
investidores ( N>=1
), cada i-ésimo investidor x[i]
. Quando uma soma total excede o limite, x[0]+x[1]+...+x[N-1] >= T
um par pode ser recompensado. Mas somente se as seguintes condições forem atendidas:
- A quantidade mínima de investidores deve ser maior que
M
, (M<=N
) - Para pelo menos um número inteiro
k
, ondek>=M
ek<=N
, qualquerk
investidor deve investir pelo menosT/k
um;
Dado que N, x[], T, M
você deve determinar se a recompensa do par é gerada ou não (resultado booleano, "sim" ou "não"). O menor código vence.
Exemplos:
N=5; M=3; T=10000
, para gerar a recompensa do parceiro, um dos seguintes itens deve ser satisfeito:
- quaisquer 3 investiram pelo menos 3334 cada
- quaisquer 4 investiram pelo menos 2500 cada
- todos os 5 investiram pelo menos 2000 cada
N=6; M=2; T=5000
:
- quaisquer 2 investiram pelo menos 2500 cada
- quaisquer 3 investiram pelo menos 1667 cada
- quaisquer 4 investiram pelo menos 1250 cada
- quaisquer 5 investiram pelo menos 1000 cada
- todos os 6 investiram pelo menos 834 cada
generalizado: para qualquer k
, onde k>=M
e k<=N
:
- qualquer
k
dosN
investidores investiu pelo menosT/k
cada
Casos de teste:
formato:
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
fonte
fonte
len(x)
será mais curta que a escritaN
. Isso é feito, porque para a matriz alocada dinamicamentex
em C não hálen(x)
função direta - portanto, você sempre pode se referir ao comprimento comoN
. Por conveniência, você pode considerar todos os dados de entradaN, x[], T, M
como algumas constantes definidas externamente ou como alguns idiomas incorporados.true
e um valor de verdade parafalse
?Respostas:
Geléia ,
129 bytesUm programa completo que aceita
x T M
e imprime0
se o par é recompensado e1
se não.Experimente online!
Como?
fonte
0
se o par é recompensado e1
se não". (ou seja,0
é "sim"). Ele salva 1 byte :)05AB1E , 9 bytes
Experimente online ou verifique todos os casos de teste .
O porto da resposta Jelly de @JonathanAllan , também aceita as entradas
x T M
e saídas0
de"yes"
e1
para"no"
. Se isso não for permitido, e deve ser invertido,_
pode ser adicionado um final .Explicação:
Alternativa para
.ssè
:Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
JavaScript,
5452 bytesExperimente online
fonte
[0, 60, 0, 60, 60, 0], 180, 3 -> true
parece não estar funcionando! A bersão de 72 bytes lida com isso. Erro ou recurso?)Retina , 79 bytes
Experimente online! Recebe entrada no formato
[x], T, M
. O link inclui casos de teste. Explicação:Converta para unário.
Classifique
[x]
em ordem decrescente.Multiplique cada elemento de
[x]
pelo seu índice.Exclua os primeiros
M-1
elementos de[x]
.Teste se algum elemento restante de
[x]
é maior ou igual aT
.fonte
Perl 6 ,
46 3329 bytesExperimente online!
Blocos de código anônimo que
list, amount, length of list, minimum amount of investors
recebem entrada no formulário e retornam umaall
junção truthy / falsey , onde truthy falha e falsey é sucesso.Explicação:
fonte
05AB1E , 6 bytes
Entrada tomada no fim
T
,N
,x[]
,M
de saída é
0
para a recompensa pelos pares e1
se nãoExperimente online! ou como um conjunto de testes
Explicação
fonte
*
com o intervalo para cortar implicitamente a lista!C # (.NET Core) ,
129, 89 bytesEDIT: Obrigado a Kevin Cruijssen por jogar 40 bytes ao explicar a mecânica do porquê!
Experimente online!
fonte
n
pois você não a usa em lugar nenhum; removidok
desde que você possa se usarm
; adicionou uma variávell
poisq.Length
desde que você a usa duas vezes; combinou as variáveisint c=0,l=q.Length,j;
para que você não precise das adicionaisvar
; removeu os suportes desnecessários colocando tudo no corpo do loop for; alterou ac>=k
verificação parac<k
; e alterouif(c>0)break;
param=c>0?l+1:m;
, pois o loop para sem<=l
, mudandom
paral+1
salva um byte em excessobreak
(e também salva em dois colchetes). :)m=c>0?l+1:m
pode ser removido completamente e uma&c<1
verificação pode ser adicionada ao loop. E, ao receber a entradan
novamente, você não precisaq.Length
mais, mas pode usá-lan
.C # (compilador interativo do Visual C #) com sinalizador
/u:System.Linq.Enumerable
, 69 bytesExperimente online!
Sem nenhum sinalizador, 73 bytes
Experimente online!
fonte
JavaScript, 72 bytes
Código
Experimente online!
Aceita entrada no formato (x [], T, M)
Explicação
fonte
Python 3 , 136 bytes
Apenas testa as condições para garantir que elas sejam cumpridas. 1 se a recompensa for dada, 0 se não.
Experimente online!
fonte
Python ,
7165 bytesExperimente online!
Uma função sem nome; porta da minha resposta Jelly. Como tal, "sim" é
False
e "não" éTrue
. Aqui, no entanto, descartamos os casos de teste como parte da reversão e aproveitamos a capacidade de iniciar aenumerate
contagemM
. (min
também funcionaria no lugar deall
)fonte
R ,
43bytes 42-1 bytes implementando a abordagem ainda mais de perto
Experimente online!
Implementação R simples da abordagem de Jonathan's Jelly. Eu tentei um monte de variações, mas isso representa o melhor que pude pensar em alguns bytes.
1 implica falha, 0 implica sucesso.
fonte
Japt,
16141311 bytesTente
fonte
Bytes Java 8, 91 (ou 89?)
Porta da resposta C # .NET do @Destroigo (depois que eu joguei mais um pouco), por isso não deixe de vota-lo!
Toma entradas
N,x,T,M
e saídastrue
/false
para"yes"
/"no"
respectivamente.Como o desafio pede especificamente
boolean
resultados, não posso retornar o1
/0
como está, pois esses não são valores válidos de verdade / falsey em Java. Se quaisquer dois valores de saída distintos para"yes"
/"no"
forem válidos para esse desafio, o>0
retorno pode ser descartado para salvar dois bytes; nesse caso, ele retornará1
/0
para"yes"
/"no"
respectivamente.Experimente online.
Explicação:
fonte
C # (compilador interativo do Visual C #) , 66 bytes
Experimente online!
Inspirado na resposta de @ EmbodimentOfIgnorance.
Já mencionei isso antes, mas o C # 8 tem um intervalo literal que pode tornar essa resposta algo como isto:
Vi um link para o SharpLab com um exemplo, mas não consegui fazê-lo funcionar sozinho.
Uma coisa que mudei foi os valores
x
et
são decimais. Isso lida com o caso em quet
não é divisívelk
um pouco melhor.fonte