Кредит
Дякую письмовому питанню Ранда Аль'Тхора за натхнення для цього виклику коду-гольфу.
Фон
Природа цього виклику базується на алгоритмі, згаданому Рандом у його "Трикутнику, утвореному з трьох літер":
- Почніть з послідовності з 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.
Правила
- Діють правила кодового гольфу, тому найменша кількість байтів виграє виклик. У випадку, якщо є два записи з однаковим низьким балом, переможець буде присуджений виходячи з кількості голосів, що піднялися.
- Що ми в основному після - це 11 рядків, 19 символів завдовжки ... Як ви будете відображати свій остаточний висновок, повністю залежить від вас: масив, консоль, вихід файлів, STDOUT тощо, тому будь ласка, використовуйте будь-який метод виводу, який вам сподобається. працювати на вашу користь. Єдине правило на виході - це те, що у нас є 11 рядків з 19 символами в кожному рядку в аналогічному для вище формату форматі ...
- Якщо це допомагає вашому коду, використовуйте будь-який роздільник для цифр ... Просто пам’ятайте, що розбірливість може бути фактором, що сприяє.
- Ніяких дурних бійниць .
- Жорстке кодування вводу не дозволено. Цілі цього коду такі, що його можна використовувати для отримання різних результатів кожного разу з різним введенням.
1 1 1 1 1 1 1 1 1 1
Наприклад, жорстке кодування , повністю, заперечує всю точку алгоритму.
З нетерпінням чекаємо, що ви все можете придумати!