Escreva um programa ou função que use uma matriz de números inteiros não negativos como entrada e produza um conjunto de vetores / matrizes com os elementos da matriz de entrada em ordem, divida para que cada vetor totalize até 15. Se a soma do primeiro N elementos não "atingem 15", então o número que fez passar 15 deve ser cortado e o restante será o primeiro elemento do próximo vetor. Isso continua até você chegar ao final da matriz de entrada. Se a soma do vetor final for menor que 15, um número deverá ser adicionado no final para aumentar a soma.
Eu acho que as regras são mais facilmente entendidas olhando os exemplos:
Input: 3 7 5 10
Output:
3 7 5 <- Sum is 15
10 5 <- 5 is added to make the sum 15
Input: 2 4 5 9 2 3 5 0 2 4 5 0 3
Output:
2 4 5 4 <- Sum 15. 9 is split in two.
5 2 3 5 <- The first 5 is the remainder of 9
0 2 4 5 0 3 1 <- The last number is added to make the sum 15
Input: 1 1 1
Output:
1 1 1 12 <- The number 12 is added to make the sum 15
Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Output:
1 2 3 4 5
6 7 2 <- 2 is the first part of 8
6 9 <- 6 is the remainder of 8
10 5 <- 5 is first part of 11
6 9 <- 6 is remainder of 11. 9 is first part of 12
3 12 <- 3 is remainder of 12. 12 is first part of 13
1 14 <- 1 is remainder of 13. 14 is 14
15
15 <- 15 is first part of 16
1 14 <- 1 is remainder of 16. 14 is first part of 17
3 12 <- 3 is remainder of 17. 12 is added to make the sum 15
Input: 20 20
Output:
15
5 10 <- 5 is remainder from the first 20
10 5 <- 10 is remainder from second 20. 5 is added to make the sum = 15.
O formato de entrada e saída é opcional. O que há de melhor no seu idioma.
O código mais curto em bytes vence.
Entre os melhores
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
fonte
[[3, 7, 5], [10, 5]]
seria uma saída válida para o primeiro caso de teste?Input: 100 Output: 15; 15; 15; 15; 15; 15; 10 5
Respostas:
Pitão, 37 bytes
Explicado
Esta foi a minha primeira vez, então fique à vontade para sugerir melhorias.
Exemplo:
Entrada
Saída
Nota: Muito obrigado a Isaacg por vários bytes de conselhos sobre redução de tamanho e criação de pyth em primeiro lugar! Voto por favor seus comentários abaixo :)
fonte
.?
vez deE
, mas eu esqueci de atualizar os documentos. Me desculpe por isso.=Z+ZN
e=+ZN
são as mesmas. É um pouco como o Python+=
. Likewiese,=Z-ZK
->=-ZK
. Além disso, você não precisa)
do final - ele é preenchido automaticamente. Finalmente,FNQ
eVQ
são os mesmos.I>Z0
porIZ
-Z
não pode ser negativo; portanto, você está apenas verificando seZ
não é zero e zero é falso, enquanto todos os outros números são verdadeiros.Java -
229200192181172170168 bytesJá havia começado, não pela vitória, mas pela diversão :)
Qualquer sugestão é bem-vinda.
Economizou 8 bytes graças a @ThomasKwa
Economizou 20 bytes graças a @corsiKa
Economizou 2 bytes graças a @Ypnypn
Economizou 2 bytes graças a @ user902383
170 bytes
172 bytes
181 bytes
192 bytes
200 bytes
229 bytes
fonte
Python 3 - 1̶7̶7̶ 1̶3̶8̶ 1̶6̶6̶ 1̶3̶3̶ 113
Editar 5 Verdadeiramente jogado graças a @poke * quebras de linha removidas etc.
Editar 4 Impressão com alias e substituiu a = por a - = para salvar um byte. Graças a @poke e @elzell. Também moveu eval de entrada para o loop for para economizar 2 bytes da atribuição
Edit 3 Economias encontradas em diferentes OO dentro de segundos se
Edit 2 Fixed bug
Edit 1 Alterou a entrada para o formato '[1,2,3,4,5 ...]' e implementou os dois primeiros comentários, muito obrigado a @Morgan Thrapp
Pôster da primeira vez aqui. Entrada é linha de comando com entradas separadas por espaços, saída é entrada por linha, com uma nova linha entre agrupamentos.
fonte
print
com tanta frequência, você deve salvá-lo como uma variável:p=print
. Economiza mais 14 caracteres.if s>i:s-=i;p(e-s);p();e=s
para a segunda. Isso economiza quebras de linha e caracteres de indentação.Haskell,
126107102100 bytesExemplo de uso:
(#[]).(++[14]) $ [1..17]
->[[1,2,3,4,5],[6,7,2],[6,9],[10,5],[6,9],[3,12],[1,14],[15],[15],[1,14],[3,12]]
Edit: @Stewie Griffin me ajudou a economizar 19 bytes. Obrigado!
fonte
CJam, 39 bytes
Teste aqui.
Isso parece muito abaixo do ideal, mas até agora todas as minhas tentativas de uma solução mais curta foram frustradas pela presença de zeros na entrada.
fonte
Python2 desenvolvido com RegEx :
158155 bytesFeito em python com amor e quase sem matemática.
Ou Regex Math, se preferir, matemática unária.
A matemática 'real' usada apenas para 'corrigir' o último requisito:
Codegolfed:
A maneira como isso funciona é convertendo cada número N em uma sequência de comprimento N ( x escolhido como o caractere para preencher a sequência) e juntando todos eles em um espaço separado
string
. A sequência resultante é dividida via RegEx BLACK MAGIC em algo como:para uma entrada como:
f([1, 2, 3, 4, 5, 6, 7, 8, 10])
Isso é dividido novamente, e o comprimento de
x
es consecutivos é usado para criar os números novamente, tudo bem embalado em uma compreensão de lista.Ungolfed:
Saída:
Nota: não havia mágica suficiente para os 0s, então esta entrada desqualifica
fonte
Sério, 88 bytes
Experimente online
É a minha primeira resposta a sério! Agora estou intimamente familiarizado com todas as deficiências da linguagem!
Hex Dump:
Explicação:
fonte
Javascript,
138128 bytesCom espaço em branco:
Exemplo:
Atribua a função a uma variável
Então avalie da seguinte maneira:
Histórico de Revisão:
03/12/2015 00:02 - Graças ao usuário81655 (+1 nos comentários) pela melhoria de 10 bytes
02/12/2015 21:44 - Comutado para usar o estilo funcional para reduzir o tamanho.
fonte
f=
não é necessário de acordo com as regras do site, remova os parênteses de(i)
, envolva comeval
para que você não precisereturn
ou entre parênteses e substitua-oif
por um ternário para queo
seja retornado e mude'\n'
para`\n`
, fundirt+=...
comt>=m
para remover para colchetes. Aqui está sua solução em 127 bytes com todas essas melhorias:i=>eval("for(o=z=n='',m=15,t=q=0;q<i.length;q++)(t+=c=+i[q])>=m?(t-=m,z+=c-t,o+=z+`\n`,z=t>0?t+' ':n):z+=c+' ';t<m?o+z+(m-t):o")
o+
no final da linha. Excluao+=z
e escreva novamente e funcionará. : P\n
faz qualquer diferença`\n`
? Não funcionará sem ele porque o código está dentro"..."
por causa doeval
.Python 3: 139 bytes
Abordagem ligeiramente diferente da outra resposta. Produz a saída real da pergunta, porque eu assumi inicialmente que era um requisito.
Exemplo de uso:
fonte
Perl, 86 bytes
Contando o shebang como três, a entrada é retirada de stdin, com espaço separado.
Uso da amostra
fonte
R, 155 bytes
Com recuos e quebras de linha:
Uso:
fonte
Python 2, 117 bytes
Toma entrada como lista:
fonte
Perl, 76 bytes
Inclui +3 para
-p
(normalmente +1, mas +3 para jogar limpo com a outra solução perl)Execute com a entrada STDIN (a nova linha final na entrada é opcional, mas DEVE estar ausente para a entrada vazia)
sum15.pl
:Olha ma, sem cálculos ...
fonte
0
s são bastante complicados nesta solução (representada por espaços extras) e eu tenho que ter muito cuidado para lidar adequadamente com espaços para manter o número de0
s correto. Em particular, considere entradas onde uma soma parcial é exatamente 15, como1 14 2 13
. Julgá-los sem a `` e ver o que acontece?Java -
158155 bytesVersão lambda de https://codegolf.stackexchange.com/a/65590/46866 por yassin-hajaj , Não tenho certeza se um envio válido, mas não possui representante suficiente para adicionar um comentário à resposta vinculada. Contado usando http://meta.codegolf.stackexchange.com/questions/4944/byte-counter-snippet
158 bytes
Ungolfed
pode ser usado como
fonte