Crédito
Mi agradecimiento a la pregunta basada en cartas de Rand Al'Thor por la inspiración para este desafío de código de golf.
Antecedentes
La naturaleza de este desafío se basa en el algoritmo mencionado por Rand en su "Un triángulo formado por tres letras":
- Comience con una secuencia de 10 letras, cada una de las cuales es X, Y o Z.
- Debajo de cada fila, construya la siguiente fila de la siguiente manera. Si dos letras adyacentes son iguales, escriba la misma letra debajo de ellas; Si son diferentes, escriba la tercera letra debajo de ellos.
Luego repetirías el paso anterior hasta que tengas una letra en tu décima fila.
Desafío
Vamos a darle un giro matemático al algoritmo anterior:
- Comencemos con una secuencia de 10 dígitos, cada uno separado por un espacio, y cada uno de los cuales es 1, 2 o 3.
- Debajo de cada fila, construya la siguiente fila de la siguiente manera. Si dos dígitos adyacentes son iguales, escriba el mismo dígito debajo de ellos; si son diferentes, escriba el tercer dígito debajo de ellos.
- Repita el paso anterior hasta que tenga un número final.
Entonces, siguiendo este algoritmo, si comienza con la fila 1 2 3 3 1 3 1 3 1 2
, por ejemplo, se genera el siguiente triángulo:
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
También tengo curiosidad por saber la suma de todos los dígitos en el triángulo numérico, así que agregue todos estos dígitos y coloque este total en la undécima fila, justificada a la derecha hasta el último dígito en la primera fila. Entonces, nuestro triángulo numérico tendrá un aspecto similar al siguiente (los espacios en mi ejemplo están representados a continuación por el .
carácter para mostrar el formato).
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
Su desafío es escribir código que pueda comenzar con una cadena / matriz / etc. de diez dígitos, según mi ejemplo, y luego aplique el algoritmo para generar las diez filas que crearían el triángulo numérico, seguido de una fila 11 que mostrará el total de todos los dígitos con justificación a la derecha.
Pruebas
La prueba de esta cadena se puede realizar con una cadena generada aleatoriamente de diez dígitos de su elección, o una generada a partir del fragmento a continuación ...
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.
Reglas
- Se aplican las reglas de código de golf, por lo que el menor número de bytes gana el desafío. En el caso de que haya dos entradas con el mismo puntaje bajo, el ganador se otorgará en función del número de votos positivos.
- Básicamente, lo que buscamos son 11 filas, 19 caracteres de largo ... La forma en que renderiza su salida final depende completamente de usted: matriz, consola, salida de archivo, STDOUT, etc., así que use el método de salida que desee trabaja a tu favor. La única regla en el resultado es que tenemos 11 filas con 19 caracteres en cada fila en un formato similar al anterior ...
- Si ayuda a su código, use cualquier separador para los dígitos ... Solo recuerde que la legibilidad puede ser un factor contribuyente.
- No hay escapatorias tontas .
- La codificación rígida de la entrada no está permitida. El propósito de este código es tal que puede usarse para producir resultados diferentes cada vez con una entrada variable. La codificación rígida de,
1 1 1 1 1 1 1 1 1 1
por ejemplo, niega por completo el punto completo del algoritmo.
¡Esperamos ver lo que todos ustedes pueden inventar!