Descrição
Consideramos um número inteiro com pelo menos três dígitos com balanceamento triplo se, quando divididos em três partes, os dígitos de cada parte somarem o mesmo número. Dividimos os números da seguinte forma:
abcdefghi - Standard case: the number of digits is divisable through 3:
abc def ghi
abcdefgh - Number % 3 == 2: The outer groups are both assigned another digit
abc de fgh (the inner group will have one digit less than both outer groups)
abcdefghij - Number % 3 == 1: The inner group is assigned the extra digit
abc defg hij (the inner group will have one digit more than the outer groups)
Desafio
Sua tarefa é escrever um programa que, dado um número inteiro com pelo menos três dígitos, determine se o número fornecido é triplo-balanceado e gera um valor verdadeiro ou falso com base no resultado.
Casos de teste
333 -> True
343 -> False
3123 -> True
34725 -> True
456456 -> False
123222321 -> True
Isso é código-golfe , então as brechas padrão se aplicam e pode ganhar a resposta mais curta em bytes!
code-golf
number
arithmetic
decision-problem
racer290
fonte
fonte
when split in three parts,
Respostas:
Python 2 ,
938886 bytes-4 bytes graças a @LeakyNun
-2 bytes graças a @ Mr.Xcoder
Experimente online!
fonte
Gelatina , 23 bytes
Experimente online!
Deve haver uma maneira mais curta que de alguma forma voou sobre minha cabeça ...
fonte
Retina , 89 bytes
Experimente online! O link inclui casos de teste. Explicação: O primeiro estágio adiciona novas linhas no início e no final da entrada. O segundo estágio tenta mover os dígitos pelas novas linhas em pares; no entanto, se não houver dígitos suficientes no meio, o terceiro estágio poderá movê-los para trás, fazendo com que o loop pare. O quarto estágio então converte cada dígito separadamente em unário, somando-o, enquanto o último estágio simplesmente verifica se as somas são iguais.
fonte
Mathematica, 142 bytes
fonte
Gelatina , 20 bytes
Experimente online!
Como funciona
fonte
MATL , 26 bytes
Experimente online! Ou verifique todos os casos de teste .
fonte
Javascript, 178 bytes
fonte
([...b],s=~b.length/3|0,f=(m,v)=>+m+ +v,y=b.splice(s).reduce(f))=>b.splice(-s).reduce(f)==y&y==b.reduce(f)
(tome cuidado ao copiar dos comentários, pois o Stack Exchange insere caracteres invisíveis).Java 8, 149 bytes
Toma a entrada como um
int[]
.Explicação:
Experimente aqui.
Aqui está uma visão geral das partes indexadas 0 (exclusivas) para cada comprimento:
a
nós loop do0
que(length + 1) / 3)
(esse valor agora está armazenado ems
);b
fazemos um loop des
paralength / 3 * 2 +
(0
se o comprimento modulo-3 for 0;1
se o comprimento módulo 3 for 1 ou 2) (esse valor agora é armazenado ems
);c
passamos des
paralength
.(todos os três loops são exclusivos indexados a 0)
fonte
Röda , 82 bytes
Experimente online!
Explicação:
fonte
JavaScript,
129, 104 bytesA função r corta a string com base nos parâmetros be, e depois soma os dígitos e retorna o valor.
Para cortar nos tamanhos corretos, dividimos o comprimento por 3 e arredondamos o resultado. Chamar fatia (0, resultado) nos dá o primeiro bloco, fatia (resultado, resultado) nos dá o segundo e fatia (resultado) nos dá o último. Devido à maneira como estou chamando fatia, usei fatia (resultado, resultado de 4 *) em vez da última, mas fornece o mesmo resultado.
Finalmente, comparo os resultados, mostrando que os valores são iguais.
Edit: mesmo princípio, melhor golfe
fonte
&&
para&
JavaScript? As duas verificações em segunda mão (&&z
e&&y[1]==y[2]
) não parecem modificar valores; portanto, se for possível, não deve afetar o resultado do que posso ver.