Escreva um programa ou função para produzir a seguinte saída na ordem correta.
EDIT: Os símbolos não são matemáticos! Os números representam apenas dados únicos +
e -
podem ser quaisquer dois símbolos arbitrários.
Tome uma entrada inteira não negativa n. A primeira linha é sempre -
, mesmo para n = 0.
- Se a linha atual for
-
, a próxima linha será1+2+ ... (n-1)+n-
- n = 4:
-
=>1+2+3+4-
- n = 4:
- Se o último número inteiro for igual a n, remova todos os números inteiros do final imediatamente seguidos de a
-
e altere o último+
para um-
- n = 4:
1-2+3-4-
=>1-2-
- EDIT: Quando a string estiver cheia (todos os números inteiros de 1 a n estão incluídos), remova todos os números inteiros do final que são seguidos por a
-
até chegar a um número inteiro seguido por a+
. Deixe esse número inteiro, mas altere o seguinte+
para um-
- Usando o mesmo exemplo imediatamente acima (que não segue
-
), remova4-
, remova3-
, mude2+
para2-
.1-
não muda desde que paramos às2
. Resultado:1-2-
- n = 4:
- Se o último número inteiro é menos do que n, acrescentar os restantes números inteiros com um
+
depois de cada um, à excepção do número inteiro final, que deve ter um-
anexado- n = 4:
1+2-
=>1+2-3+4-
- EDIT: Se a cadeia atual não estiver cheia (não contém todos os números inteiros de 1 a n), adicione cada número inteiro ainda não incluído em ordem crescente até n-1 com um
+
após cada um e, em seguida, acrescente o último número inteiro n seguido por um-
- Se a linha atual for
1-
, acrescente2+
, acrescente3+
que é n-1 se n = 4. Depois acrescente4-
. Resultado:1-2+3+4-
- n = 4:
- Se a linha atual contiver todos os números inteiros e cada um for imediatamente seguido por a
-
, saia do código- n = 4:
1-2-3-4-
=> FIM
- n = 4:
Não deve haver espaços à esquerda ou à direita em nenhuma linha. Deve haver uma quebra de linha entre cada linha. Pode ou não haver uma quebra de linha na última linha.
EDITAR: você deve testar seu código até pelo menos n = 10 (mais de 1000 linhas de saída, então não posso incluí-lo aqui). Qualquer número que não faça com que seu código fique sem recursos deve (eventualmente!) Produzir a saída correta, mas você não precisa esperar que o universo termine!
Isso é código-golfe , então o código mais curto em bytes vence!
Entrada n = 0:
-
Entrada n = 1:
-
1-
Entrada n = 2:
-
1+2-
1-
1-2-
Entrada n = 4:
-
1+2+3+4-
1+2+3-
1+2+3-4-
1+2-
1+2-3+4-
1+2-3-
1+2-3-4-
1-
1-2+3+4-
1-2+3-
1-2+3-4-
1-2-
1-2-3+4-
1-2-3-
1-2-3-4-
s*=<condition>
Python 2 ,
136141133 bytesExperimente online!
O primeiro
-
(des) surpreendentemente adicionou alguns bytes justos ao código.fonte
-
linhas.Python 2 ,
150164159154146118 bytes115112 bytesExperimente online!
Editar: Opa! Tem que funcionar para números maiores que 4 também ... e depois se afastar ... até que eu percebi que estava pensando demais e salvou 28 bytes ... e mais 6 através de pequenos golfinhos.
fonte
Pitão, 23 bytes
Demonstração
A base deste programa é perceber que, além da inicial
-
, a sequência de mais e menos corresponde à sequência padrão de combinações de+
e-
com substituição, com todas as trilhas+
removidas.Explicação:
fonte
Python 2 , 73 bytes
Experimente online!
fonte
Haskell , 70 bytes
Experimente online!
fonte
Python 3 , 305 bytes
Experimente online!
fonte
<tab><space>
quando<space><space>
seria o mesmo número de bytes? Eu acho que talvez se você fizesse os pequenos recuos<space>
e o maior com<tab>
ele economizaria um byte ...q[-1]
paraq[0]
. BTW: misturar guias e espaços não funciona no Python 3; portanto, o código atual gera um erro.