Sua tarefa é criar um número natural usando o menor número possível de números e apenas os operadores +
ou -
. Por exemplo, o número sete pode ser escrito 1+1+1+1+1+1+1=7
, mas também pode ser escrito como 11-1-1-1-1=7
. O primeiro usa 7
uns, enquanto o último usa apenas 6
. Sua tarefa é retornar o número mínimo de unidades que podem ser usadas, dada a entrada de algum número natural n
,.
Este é o código golf, portanto o código válido mais curto em bytes vence.
Casos de teste
Entrada => Saída
0 => 2 (since 1-1=0)
7 => 6
121 => 6
72 => 15
1000 => 7
2016 => 21
code-golf
number-theory
codeputer
fonte
fonte
VALID OUTPUTS
. A escolha é sua, mas geralmente as pessoas gostam de negrito ou itálico em vez de LETRAS MAIÚSCULAS (elas fazem com que pareça gritar em vez de ênfase). Negrito é**bold text**
, e itálico é*italics text*
. Você também pode usar### Text
para texto em negrito. De qualquer forma, bem-vindo ao PPCG!Respostas:
JavaScript (ES6),
12712687 bytesDeve funcionar para cerca de 10
1415 , altura em que você começa a executar os limites inteiros do JavaScript. Explicação:Isso usa a
n*9
magia duas vezes; em primeiro lugar, fornece o comprimento da próxima repunit; em segundo lugar, se os dois primeiros dígitos den*9
são55
ou mais altos, precisamos subtrair an
partir da próxima repunit; caso contrário, precisamos subtrair a repunit anterior (que é calculada subtraindo 1 e dividindo por 10). Isso deve funcionar até 10 15 .fonte
Pitão,
1916 bytesSuíte de teste
Algoritmo de força bruta. As seqüências necessárias são geradas usando todas as listas cujos elementos têm
['+', '-', '']
comprimento igual ao número de 1s sendo testados, acrescentando um 1 a cada um e concatenando uma única sequência. Essas cadeias são então avaliadas e comparadas com a entrada. Isso é repetido até que uma sequência bem-sucedida seja encontrada.Algumas seqüências de caracteres com um líder
+
ou-
são testadas, mas isso não é um problema. Seria se a entrada fosse negativa.Pode atingir o comprimento 9 antes de ficar muito lento.
Explicação:
fonte
JavaScript (ES6), 92 bytes
Explicação
Função recursiva. Isto gera todas as permutações possíveis de
1
s separados por um ou outro+
,-
ou nada. Isso é feito incrementando um número base-3, transformando-o em uma matriz de dígitos, convertendo cada dígito0
em-
,1
para+
e2
para uma sequência vazia, juntando-os com1
s. A sequência resultante éeval
d como uma instrução JavaScript que retorna o resultado da equação.Como os operadores são unidos a
1
s no meio (como+1+1+1+
), existemlength - 1
1
s. O primeiro operador é ignorado (porque+1
=1
,<nothing>1
=1
e é um número, portanto nunca haverá um líder0
para-
) e o operador final também é ignorado (anexando.0
à equação).Versão de saída superior, 96 bytes
A outra versão não pode retornar saídas superiores a ~ 10 devido ao limite da pilha de chamadas de recursão. Esta versão usa um loop for em vez de recursão, para que possa retornar saídas até ~ 33. A quantidade de tempo necessária aumenta exponencialmente, portanto, não recomendo testá-lo.
fonte