Crédito
Meus agradecimentos à pergunta baseada em cartas de Rand Al'Thor pela inspiração para este desafio do código-golfe.
fundo
A natureza desse desafio é baseada no algoritmo mencionado por Rand em "Um triângulo formado por três letras":
- Comece com uma sequência de 10 letras, cada uma das quais é X, Y ou Z.
- Sob cada linha, construa a próxima linha da seguinte maneira. Se duas letras adjacentes forem iguais, escreva a mesma letra abaixo delas; se forem diferentes, escreva a terceira letra abaixo deles.
Você repetiria a etapa anterior até ter uma letra na sua décima linha.
Desafio
Vamos colocar um giro matemático no algoritmo acima:
- Vamos começar com uma sequência de 10 dígitos, cada um separado por um espaço, e cada um dos quais é 1, 2 ou 3.
- Sob cada linha, construa a próxima linha da seguinte maneira. Se dois dígitos adjacentes forem iguais, escreva o mesmo dígito abaixo deles; se forem diferentes, escreva o terceiro dígito abaixo deles.
- Repita a etapa anterior até ter um número final.
Portanto, seguindo este algoritmo, se começar com a linha 1 2 3 3 1 3 1 3 1 2
, por exemplo, o seguinte triângulo é gerado:
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1 2 3 3 1 3 1 3 1 2
3 1 3 2 2 2 2 2 3
2 2 1 2 2 2 2 1
2 3 3 2 2 2 3
1 3 1 2 2 1
2 2 3 2 3
2 1 1 1
3 1 1
2 1
3
Também estou curioso para saber a soma de todos os dígitos no triângulo numérico, portanto, adicione todos esses dígitos e coloque esse total na décima primeira linha, justificada à direita para o último dígito na primeira linha. Portanto, nosso triângulo numérico será parecido com o seguinte (espaços no meu exemplo são representados abaixo pelo .
caractere para mostrar a formatação).
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1.2.3.3.1.3.1.3.1.2
.3.1.3.2.2.2.2.2.3.
..2.2.1.2.2.2.2.1..
...2.3.3.2.2.2.3...
....1.3.1.2.2.1....
.....2.2.3.2.3.....
......2.1.1.1......
.......3.1.1.......
........2.1........
.........3.........
................109
Seu desafio é escrever um código que possa começar com uma string / array / etc. de dez dígitos, como no meu exemplo, e aplique o algoritmo para gerar as dez linhas que criariam o triângulo numérico, seguidas por uma 11ª linha que exibirá o total de todos os dígitos com justificativa à direita.
Teste
O teste dessa string pode ser realizado com uma string gerada aleatoriamente com dez dígitos de sua escolha ou um gerado a partir do snippet abaixo ...
c1=()=>('1331123221'+(Math.random()*(1<<24)|0).toString(4)).replace(/0/g, "").slice(-10).split("").join(" ");
$("#btn").click(function(){
$("#str").val(c1());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="str"><button id="btn">Get numbers</button>
<br>
Please use this snippet to generate a starting row for testing your code. Alternatively, you can also use a string of your choice, so long as it's ten digits (ranging from 1 to 3), separated by single spaces.
Regras
- Aplicam-se as regras de código-golfe, portanto, o menor número de bytes vence o desafio. No caso de haver duas inscrições com a mesma pontuação baixa, o vencedor será premiado com base no número de votos positivos.
- Basicamente, procuramos 11 linhas, 19 caracteres ... Como você renderiza sua saída final: depende de você: matriz, console, saída de arquivo, STDOUT etc., portanto, use o método de saída que desejar. trabalhe a seu favor. A única regra na saída é que temos 11 linhas com 19 caracteres em cada linha em um formato semelhante ao anterior ...
- Se isso ajudar o seu código, use qualquer separador para os dígitos ... Lembre-se de que a legibilidade pode ser um fator que contribui.
- Sem brechas tolas .
- A codificação embutida da entrada não é permitida. Os propósitos deste código são tais que podem ser usados para produzir resultados diferentes a cada vez, com entradas variáveis. A codificação embutida,
1 1 1 1 1 1 1 1 1 1
por exemplo, nega completamente todo o ponto do algoritmo.
Ansiosos para ver o que todos vocês podem inventar!