Introdução:
Alguns dias atrás, li este post com o mesmo título quando o encontrei no HNQ. Nesta questão, está sendo discutido se a reivindicação do candidato a presidente Bernie Sanders, que reivindicou o seguinte:
Hoje, os 26 bilionários mais ricos do mundo, 26, agora possuem tanta riqueza quanto os 3,8 bilhões de pessoas mais pobres do planeta, metade da população mundial.
Link para o vídeo
é verdade ou não. Por favor, vá para a pergunta em si para obter respostas e discussões lá.
Quanto ao desafio real com base nessa reivindicação:
Desafio:
Duas entradas: uma lista de números ordenada decrescente e um número (onde é ). Output: a maior sub-lista possível sufixo de para que a soma total é a soma dos primeiros valores na lista .L ≤ n L
Exemplo:
Entradas: = e .
Saída:[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]
Por quê?
Os primeiros valores da lista ( ) somam . Se pegarmos todos os sufixos dos números restantes, bem como suas somas:[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
O sufixo mais longo que tem uma soma menor ou igual a 700
é [125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
com uma soma de 643
, portanto esse é o nosso resultado.
Regras do desafio:
- Os valores no primeiro prefixo não são contados no sufixo de saída. Ou seja, as entradas = e resultariam em , e não .
[10,5,5,3]
[5,3]
[5,5,3]
- A E / S é flexível. Você pode inserir como uma lista / fluxo / array de números inteiros / decimais / strings, uma única string delimitada, uma a uma através de STDIN, etc. Você pode gerar como uma lista / stream / array de inteiros / decimais / strings imprima / retorne uma sequência delimitada, imprima um número em cada nova linha, etc. Sua ligação.
- A saída é garantida para não estar vazia. Então você não terá que lidar com casos de teste como = e , resultando em . n = 2
[-5,-10,-13]
[]
- Tanto (ou qualquer) a entrada e / ou saída também podem estar em ordem crescente, em vez de ordem decrescente, se você optar por isso.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
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]
en=2
resultando em[]
. " Além disso, a lista de entrada é garantida para ser descendente ordenada (ou ascendente se você optar por), portanto,[1,2,3]
não é uma lista de entrada válida para começar (a menos que você escolha entrada ascendente, nesse caso,[1,2]
seria o resultado).Respostas:
C # (Compilador interativo do Visual C #) ,
8881696863 bytes-4 bytes graças a LiefdeWen
Experimente online!
fonte
+b
aSkip
chamada; é redundante verificar a primeiran
lista, mas acho que ainda está correta.EXAPUNKS (2 EXAs, 30 instruções, arquivo de solução de 594 bytes)
Eu queria experimentar um desafio de código de golfe no EXAPUNKS por um tempo e você parecia o melhor ajuste que eu poderia encontrar, então parabéns!
Entrada via arquivos 200 e 201, para L e n, respectivamente. Saída através de um novo arquivo. L e a saída estão em ordem crescente.
Basicamente, XA soma os últimos n valores em L e os envia para XB. Em seguida, procura o início de L e envia cada valor um por um para XB. O XB primeiro recebe o total de XA e o armazena no registro X. Em seguida, recebe os valores um a um de XA, deduzindo o novo valor de X e gravando esses valores no arquivo de saída até X <0.
XA
XB
JavaScript para o nível aqui
fonte
Python 2 , 60 bytes
Experimente online!
Explicação:
Primeiro pega a soma dos primeiros
n
itens.Em seguida, a soma de cada sub-lista é comparada a essa soma. Assim que um não é maior, paramos.
Em seguida, a sublist (resultante) mais longa é impressa.
fonte
05AB1E ,
1412 bytesEconomizou 2 bytes graças ao Grimy
Experimente online!
Explicação
fonte
.$.sʒO²¹£O>‹}θ
. :)|
substituirlast-input
, interessante.|
aqui faz com que o resultado|
se torne a última entrada, em vez da última entrada.J , 18 bytes
Experimente online!
Explicação:
Um verbo diádico, tendo
n
como argumento à esquerda eL
- como argumento à direita.fonte
Ruby ,
4743 bytes-4 bytes lendo as especificações mais de perto.
Experimente online!
fonte
R , 53
55bytes@ Giuseppe me salvou 2 bytes mudando a maneira como a remoção foi feita
Experimente online! Leva a entrada como descendente e as saídas em ascensão, conforme permitido pela regra 4.
Y
é a rotaçãoL
com 1: n removido usando0:-n
Y
onde a soma acumulada é menor que igual à soma deL[X]
fonte
X
uso,-(1:n)
mas é claro que era do mesmo tamanho, então deixouJavaScript (ES6), 66 bytes
Recebe as entradas como
(a)(n)
na lista em ordem crescente.Experimente online!
Comentado
fonte
Python 2 , 59 bytes
Também compatível com Python 3
Experimente online!
Explicação
A soma do sufixo é comparada à metade da soma da lista inteira. Se a soma do sufixo for menor ou igual, o sufixo será retornado. Caso contrário, a função é chamada recursivamente com o primeiro item do sufixo exibido.
fonte
Pitão ,
1615 bytesExperimente online!
A lista de entrada deve ser classificada em ordem crescente, em vez de decrescente, como é usado nos exemplos.
É nessas horas que eu realmente desejo que o Pyth tenha um único operador de token para acessar a segunda entrada mais de uma vez (
E
avalia a próxima linha de entrada, mas chamadas repetidas descartam o valor anterior lido).Edit: economizou 1 byte graças ao MrXcoder
fonte
JavaScript, 64 bytes
Experimente online!
fonte
Stax , 12 bytes
Execute e depure-o em staxlang.xyz!
Versão melhor
Descompactado (14 bytes) e explicação:
Por consenso , posso deixar esse resultado na pilha. O Stax tentará uma impressão implícita, o que pode falhar, mas anexar um
m
ao programa descompactado permite que você veja a saída perfeitamente.Parece que
{ ... }j
é o mesmo que{ ... fh
. Hã. Edit: Esse não é bem o caso; o único que o primeiro irá parar quando obtiver um resultado verdadeiro, possivelmente evitando efeitos colaterais ou erros fatais mais tarde.fonte
APL + WIN, 27 bytes
Solicita a entrada de L e n.
Experimente online! Cortesia de Dyalog Classic
fonte
Japonês , 16 bytes
Tente
fonte
Geléia ,
1312 bytesExperimente online!
Obrigado a @ JonathanAllan por salvar um byte!
Explicação
fonte
ṫḊÐƤS>¥ÞḣS¥Ḣ
Gaia , 12 bytes
Experimente online!
Eu acho que há um byte que eu posso jogar se eu conseguir a pilha certa.
fonte
Haskell , 46 bytes
Desagradado com a aparência; Espero que eu esteja perdendo alguns tacos óbvios.
Experimente online!
Eu tentei obter o prefixo e sufixo usando
splitAt
correspondência de padrões em um guarda, mas isso resultou em 3 bytes a mais. Planejando tentar converter para uma função recursiva com guardas posteriormente para ver se isso reduz a contagem de bytes.Explicação
O que me refiro como "o prefixo" são os primeiros
n
elementos e "o sufixo" é o restante da lista.fonte
APL (Dyalog Unicode) ,
2321 bytes SBCSExperimente online!
{
}
⍺
⍵
⌽⍵
+\
soma prefixo desse(
…)<
Máscara booleana em que menos de:⍺↑⍵
+/
somar aqueles⊥⍨
contar verdades finais⍺⌈
⍵↓⍨
fonte
MATL ,
1312 bytes1 byte economizado graças a @ Giuseppe , com base na resposta de @MickyT .
A saída está em ordem crescente.
Experimente online! Ou verifique todos os casos de teste .
Explicação
Considere entradas
2
e[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]
.fonte
PowerShell ,
9997 bytesExperimente online!
Leva a lista em ordem crescente, a saída é decrescente (porque era mais fácil comparar com os casos de teste: ^))
Percorre a lista de
trás parafrente, comparando o acumulador com as últimasn
entradas adicionadas (colando-as com+
es e passando a sequência resultante parainvoke-expression
). O loop Até precisava de lógica adicional para lidar com a entrada no Bairro Rico, porque não pararia se ainda não fôssemos mais ricos que os Ricos até percorrermos a lista inteira.Desenrolado:
fonte
Retina 0.8.2 , 99 bytes
Experimente online! O link inclui apenas alguns casos de teste; Eu poderia fazê-lo funcionar em alguns casos com números negativos a um custo de 12 bytes (em particular, as primeiras
n
entradasL
ainda precisam ser positivas; teoricamente eu provavelmente só poderia exigir que a soma das primeirasn
entradas fosse positiva). Explicação:Converta para unário.
Insira um marcador no início de
L
.Mova para baixo na lista de
n
tempos, somando à medida que avançamos. Isso exclui,n
mas sua vírgula permanece.Crie uma entrada para cada sufixo de
L
.Substitua o meio por uma cópia do sufixo.
Soma a cópia do sufixo.
Tome a primeira entrada em que a soma do sufixo não exceda a soma do prefixo.
Exclua as somas.
Converta para decimal.
Exclua a vírgula à direita que veio antes
n
.fonte
r
opção, então agora a vinculei a alguns casos de teste.Carvão , 17 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Vermelho , 63 bytes
Experimente online!
fonte
PowerShell , 86 bytes
Experimente online!
Desenrolado:
fonte
MathGolf , 13 bytes
Experimente online!
Explicação
Aceita entrada como
n L
A razão pela qual isso funciona é que, na primeira etapa, dividimos a lista em duas partes sobrepostas. Como exemplo,
L = [4, 3, 2, 1], n = 2
dividirá a lista como[3, 2, 1]
e[4, 3]
. O motivo de ter um elemento extra na primeira lista é que, no loop, a primeira coisa que acontece é um descarte. Se um elemento extra não fosse anexado, os casos em que a saída deveria ser o resto da lista falhariam.fonte
Wolfram Language (Mathematica) , 40 bytes
Experimente online!
fonte
Clojure,
6675 bytesInfelizmente, não parece haver um idioma mais curto para a soma total de uma sequência.
Edit : Ah, ao adicionar exemplos ao Experimente online! notei que a resposta original dava resultados errados quando muitos números negativos estavam presentes.
O
doseq
uso de "chaves" é desestruturado, portanto deve ficar um pouco claro quais dados terminam em qual símbolo.#(...)
é uma função anônima, aqui estou vinculando-a ao símbolof
:Saída:
fonte
APL (NARS), 32 caracteres, 64 bytes
teste e comentários:
Eu relatei incorretamente o comprimento do byte ...
fonte
MS SQL Server 2017 , 271 bytes
Eu sei que usar uma tabela mais parecida com relação para armazenar os dados de entrada pode tornar o código mais conciso, mas usando o tipo de dados de caractere para armazenar a lista numérica e a
STRING_SPLIT
função, diminuo aBuild Schema
parte :)Versão mais legível:
Experimente no SQL Fiddle !
fonte
Python 3.8 (pré-lançamento) , 59 bytes
A saída está em ordem crescente
Experimente online!
fonte