кредит
Я благодарю основанный на письме вопрос Рэнда Аль'Тора за вдохновение для этого соревнования по коду-гольфу.
Фон
Природа этого вызова основана на алгоритме, упомянутом Рэндом в его «Треугольнике, составленном из трех букв»:
- Начните с последовательности из 10 букв, каждая из которых X, Y или Z.
- Под каждым рядом постройте следующий ряд следующим образом. Если две соседние буквы совпадают, напишите одну и ту же букву под ними; если они разные, напишите третье письмо под ними.
Затем вы повторяете предыдущий шаг, пока в десятой строке не появится одна буква.
Вызов
Мы собираемся поместить математический спин в вышеупомянутый алгоритм:
- Давайте начнем с последовательности из 10 цифр, каждая из которых разделена пробелом, и каждая из которых равна 1, 2 или 3.
- Под каждым рядом постройте следующий ряд следующим образом. Если две соседние цифры совпадают, напишите одну и ту же цифру под ними; если они разные, напишите третью цифру под ними.
- Повторяйте предыдущий шаг, пока не получите одно окончательное число.
Итак, следуя этому алгоритму, если 1 2 3 3 1 3 1 3 1 2
, например, начиная со строки , генерируется следующий треугольник:
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
Мне также любопытно узнать сумму всех цифр в треугольнике чисел, поэтому добавьте все эти цифры и поместите эту сумму в одиннадцатый ряд, выровненный по правому краю до последней цифры в первом ряду. Итак, наш числовой треугольник будет выглядеть примерно так (пробелы в моем примере представлены .
символом для отображения форматирования).
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
Ваша задача - написать код, который может начинаться с введенной строки / массива / и т. Д. из десяти цифр, как в моем примере, а затем примените алгоритм для генерации десяти строк, которые бы создали числовой треугольник, за которым следует 11-я строка, которая будет отображать сумму всех цифр с выравниванием по правому краю.
тестирование
Тестирование этой строки может быть выполнено со случайно сгенерированной строкой из десяти цифр по вашему выбору или сгенерированной из фрагмента ниже ...
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.
правила
- Применяются правила Code-Golf, поэтому наименьшее количество байтов выигрывает. В случае, если есть две записи с одинаковым низким баллом, победитель будет награжден в зависимости от количества голосов "за".
- То, что мы в основном получаем, это 11 строк по 19 символов в длину ... То, как вы будете выводить окончательный результат, полностью зависит от вас: массив, консоль, вывод файла, STDOUT и т. Д., Поэтому, пожалуйста, используйте любой метод вывода, который вам нравится. работать в ваших интересах. Единственное правило в выводе - у нас 11 строк по 19 символов в каждой строке в формате, аналогичном приведенному выше ...
- Если это помогает вашему коду, используйте любой разделитель для цифр ... Просто помните, что удобочитаемость может быть фактором.
- Никаких глупых лазеек .
- Жесткое кодирование ввода не допускается. Цели этого кода таковы, что его можно использовать для получения разных результатов каждый раз с различными данными. Жесткое кодирование,
1 1 1 1 1 1 1 1 1 1
например, полностью сводит на нет весь смысл алгоритма.
С нетерпением ждем, что вы все можете придумать!