Às vezes, quando estou realmente entediado, gosto de pegar a soma de uma matriz de números inteiros não negativos. Eu apenas tomo a soma de matrizes de comprimentos que são potências de dois. Infelizmente, muitas vezes eu cometo erros. Felizmente, acompanho meu trabalho conforme passo a seguir:
Eu adiciono pares de números adjacentes até sobrar apenas um. Por exemplo:
6 + 18 + 9 + 6 + 6 + 3 + 8 + 10
= 24 + 15 + 9 + 18
= 39 + 27
= 66
Seu trabalho é determinar se cometi um erro em algum lugar. Você pode passar a entrada para sua função ou ler a partir da entrada padrão. A saída pode ser impressa ou retornada.
Entrada: Uma matriz / lista / etc. de números inteiros não negativos e, possivelmente, também o comprimento dessa matriz, se o seu idioma exigir. Essa matriz será todos os números lidos da esquerda para a direita e de cima para baixo. Por exemplo, a matriz acima se tornaria:
[[6, 18, 9, 6, 6, 3, 8, 10], [24, 15, 9, 18], [39, 27], [66]]
ou
[6, 18, 9, 6, 6, 3, 8, 10, 24, 15, 9, 18, 39, 27, 66]
se você preferir.
Saída: um único booleano representando se um erro foi cometido ou não. O booleano pode ser representado usando qualquer mapeamento, desde que todas as entradas em que um erro seja cometido retornem / imprimam um resultado idêntico e todas as entradas que não contenham erros retornem / imprimam um resultado idêntico. Isso deve ser óbvio, mas essas duas saídas não podem ser as mesmas.
Alguns exemplos de somatórios corretos:
6
5+6
=11
3 + 2 + 4 + 5
= 5 + 9
= 14
[0, 1, 2, 3, 1, 5, 6]
[[1, 2, 4, 8], [3, 12], [15]]
Alguns exemplos de soma incorreta:
5+4
=8
4 + 4 + 4 + 4
= 9 + 7
= 16
[[1, 2, 3, 4], [7, 3], [10]]
[3, 4, 5, 6, 7, 8, 9]
Lembre-se de que eu posso cometer erros e ainda assim obter a resposta certa. Se eu cometer algum erro, isso nunca resultará em um número extra ou um número ausente na matriz final, apenas um número errado.
As brechas padrão são proibidas. A resposta mais curta em cada idioma é um vencedor. A resposta mais antiga vencerá em caso de empate. Eu tenho o direito de decidir qual é a "mesma linguagem", mas direi de antemão que um ponto não pode ser conquistado no Python 2 e no Python 3.
[0,1,2,3,1,5,6]
é inválido porque "Entrada: uma matriz / lista / etc. De números inteiros positivos".Respostas:
Gelatina , 6 bytes
Experimente online!
Como funciona
fonte
Python 2 , 51 bytes
Experimente online! Obrigado a Rod pelos casos de teste.
Torna a lista inteira plana como entrada. Agrupa elementos em pares adjacentes usando o truque zip / iter , pega a soma dos pares e verifica se o resultado é igual à segunda metade da lista.
Um método recursivo chegou perto de 55 bytes:
Isso usou que os números inteiros de entrada são positivos, que foram alterados nas especificações.
fonte
[0,0,1,1,1,1,1]
.Röda , 40 bytes
Experimente online!
É uma função anônima que retorna
0
se não houver erros e nada se houver erros.Explicação:
Aqui está uma versão mais curta (35 bytes), mas contra as regras (eu acho):
Experimente online!
É uma função anônima que lê valores do fluxo e empurra
TRUE
ouFALSE
para cada linha correta.Não tenho certeza se isso (vários valores de retorno) é aceito nas regras. Aqui está minha defesa: em Röda, condições
if
ewhile
blocos não são valores booleanos, mas fluxos. Um fluxo "verdade" está vazio ou contém apenasTRUE
s, e um fluxo "falso" contém um ou maisFALSE
s. Dessa maneira, essa função retorna um valor "booleano". E pode ser usado como condição de umaif
declaração sem operações de redução, etc.fonte
0
. Não sei exatamente como Röda lida com isso, mas não é algo inédito.if
condicional. Se é assim que o Röda funciona, ele cumpre nossas regras, a menos que a especificação do desafio substitua os padrões explicitamente.Python 2 ,
6965 bytesExperimente online!
Retorna:
lista vazia como
Falsy
soma total como
Truthy
fonte
Mathematica, 36 bytes
Função pura, tendo uma lista aninhada como entrada e retornando
True
ouFalse
. A funçãoTr/@#~Partition~2&
obtém as somas em pares de uma lista, que são então aplicadas (/@#
) a cada sub-lista da lista de entrada. O primeiro, segundo, ... sublista na lista resultante deve ser igual ao segundo, terceiro, ... sublista na entrada original;Most[...]==Rest@#
testes para essa propriedade.fonte
Python 2 , 80 bytes
Experimente online!
Não é tão bom quanto a outra resposta python, mas eu queria postá-la de qualquer maneira. Isso só mostra porque eu não sou tão bom no golfe em idiomas regulares .
fonte
JavaScript (ES6), 54 bytes
Toma uma matriz achatada.
fonte
05AB1E ,
1512 bytesExperimente online!
Explicação
fonte
Haskell ,
827965 bytes-14 bytes graças a nimi!
Funciona comparando a soma de cada par de elementos com o elemento correspondente na próxima linha abaixo. É provável que alguns bytes possam ser alterados
f
, mas não consigo descobrir de onde.fonte
p
:p(x:y:z)=x+y:p z
e então usarzipWith(==)
em vez dezip
e combinar a lista deBool
comand
:f x=and.zipWith(==)(drop(length x`div`2+1)x)$p x
.Python 3 ,
6968 bytesEu sei que já existem duas outras respostas em python ... mas essa é em python 3, então é exótico.
Isso funciona em uma entrada achatada.
Saída :
False
se não houver erro,True
se houver um erro.fonte
Ruby, 50 bytes
Invertendo a matriz, qualquer elemento da primeira metade (posição n) deve ser a soma dos elementos na posição n * 2 en * 2 + 1.
fonte
Braquilog ,
1613 bytesExperimente online!
Isso é terrivelmente longo! Deve haver alguma maneira de não aninhar predicados em linha aqui.
O predicado será bem-sucedido (imprimindo
true.
como um programa) se nenhum erro for cometido e falhar (imprimindofalse.
como um programa) caso contrário.fonte
Python 2 , 64 bytes
Experimente online!
Uma função sem nome que pega uma lista de listas (uma por linha de trabalho como se fosse) e retorna True se nenhum erro foi cometido e False caso contrário.
Ele funciona usando a entrada sem a última entrada,,
a[:-1]
para formar qual deve ser a entrada sem a primeira entrada e verificando se foi a entrada==a[1:]
.Essa formação é alcançada através do mapeamento da função de adição do tipo inteiro
int.__add__
, sobre os pares de números gerados por duas "fatias", sendo uma fatia todos os outros itens começando no 0º índice,x[::2]
e a outra fatia sendo todos os outros itens começando no 1º índicex[1::2]
,.fonte
Pip ,
2019 bytesEsta é uma função anônima que recebe um argumento, uma lista de listas (por exemplo
[[1 2 3 4] [3 7] [10]]
). Verifique todos os casos de teste: Experimente online!Explicação
Em uma função Pip, os dois primeiros argumentos são atribuídos a
a
eb
.Por exemplo:
fonte
PHP,
9695 bytes:usando builtins:
funções recursivas retornam
true
oufalse
.repartição da primeira função:
soluções mais antigas (96 bytes cada) usando loops:
repartição da última função:
trechos iterativos, 81 bytes
assumir matriz predefinida em
$a
; sai com erro se estiver incorreto.fonte
C, 54 bytes:
Ungolfed:
Teste com
Como você vê,
f()
retorna true para entradas inválidas e false (= 0) para entradas válidas.Como sempre, a recursão é menos bytes que a iteração, portanto
f()
é recursiva, mesmo que use dois iteradores como argumentos. Ele funciona comparando repetidamente a soma de dois números inteiros ems
um número inteiro eme
, ignorando os limites do nível e continuando até que os dois iteradores se encontrem. Também usei um zen booleano juntamente com o fato de que qualquer valor inteiro diferente de zero é considerado verdadeiro em C para reduzir ainda mais o código.fonte
R,
9277 bytesFunção anônima que recebe uma sequência plana de números como entrada. Retorna
TRUE
ouFALSE
conforme apropriado. Usa a mesma abordagem conceitualmente que a resposta python do xnor.Solução anterior, usando a
rollapply
função dozoo
pacote, e tendo a entrada como uma lista, por exemplolist(c(6, 18, 9, 6, 6, 3, 8, 10), c(24, 15, 9, 18), c(39, 27), c(66))
:fonte
JavaScript (ES6),
4644 bytesRecebe a entrada como uma matriz nivelada. Retorna
NaN
para válido ou0
inválido.Teste
Mostrar snippet de código
fonte
PHP, 102 bytes
parâmetro de entrada e URL neste formato,
?0=[1,2,3]&1=[3,3]&2=[6]
use esta entrada[[int,int],[int]]
Demolir
fonte
Japonês, 10 bytes
Recebe a entrada como uma matriz 2-D.
Tente
fonte