クレジット
このコードゴルフの挑戦のインスピレーションについて、ランド・アル・トールの手紙ベースの質問に感謝します。
バックグラウンド
この課題の性質は、ランドが「3文字の三角形」で言及したアルゴリズムに基づいています。
- それぞれがX、Y、またはZである10文字のシーケンスで開始します。
- 各行の下に、次の行を作成します。隣接する2つの文字が同じ場合、それらの下に同じ文字を書きます。異なる場合は、その下に3番目の文字を書きます。
次に、10行目に1文字入力されるまで、前の手順を繰り返します。
チャレンジ
上記のアルゴリズムに数学的なスピンをかけます。
- まず、スペースで区切られた10桁のシーケンスから始めましょう。各シーケンスは1、2、または3です。
- 各行の下に、次の行を作成します。隣接する2つの数字が同じ場合、それらの下に同じ数字を書きます。異なる場合は、その下に3桁目を記入してください。
- 最終番号が1つになるまで、前の手順を繰り返します。
したがって、このアルゴリズムに従って1 2 3 3 1 3 1 3 1 2
、たとえばrow で始まる場合、次の三角形が生成されます。
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
また、数字の三角形のすべての数字の合計を知りたいので、これらすべての数字を追加し、この合計を11行目に入れて、最初の行の最後の桁に右揃えします。したがって、数値の三角形は次のようになります(この例のスペースは、.
書式設定を示す文字で表されています)。
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
あなたの挑戦は、入力された文字列/配列/などで始まることができるコードを書くことです。私の例では10桁の数字を使用し、アルゴリズムを適用して数字の三角形を作成する10行を生成し、11行目にすべての数字の合計を右揃えで表示します。
テスト中
この文字列のテストは、ランダムに生成された10桁の文字列、または以下のスニペットから生成された文字列で実行できます...
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.
ルール
- コードゴルフ規則が適用されるため、最小バイト数が課題に勝ちます。同じ低スコアのエントリが2つある場合、勝者はアップ投票の数に基づいて授与されます。
- 基本的には11行、19文字の長さです...最終出力のレンダリング方法は完全にあなた次第です:配列、コンソール、ファイル出力、STDOUTなどです。好きな出力方法を使用してくださいあなたの利益のために働きます。出力の唯一のルールは、上記と同様の形式で各行に19文字の11行があることです...
- コードに役立つ場合は、数字に区切り文字を使用します...読みやすさが要因になる可能性があることに注意してください。
- 愚かな抜け穴はありません。
- 入力のハードコーディングは許可されていません。このコードの目的は、さまざまな入力で毎回異なる結果を生成するために使用できるようにすることです。
1 1 1 1 1 1 1 1 1 1
たとえば、ハードコーディングは、アルゴリズムのポイント全体を完全に無効にします。
皆さんが何を思いつくことができるのか楽しみにしています!