Anerkennung
Mein Dank geht an Rand Al'Thor's Brief-basierte Frage für die Inspiration für diese Code-Golf-Herausforderung.
Hintergrund
Die Art dieser Herausforderung basiert auf dem Algorithmus, den Rand in seinem "Ein aus drei Buchstaben gebildetes Dreieck" erwähnt hat:
- Beginnen Sie mit einer Folge von 10 Buchstaben, von denen jeder X, Y oder Z ist.
- Konstruieren Sie unter jeder Zeile die nächste Zeile wie folgt. Wenn zwei benachbarte Buchstaben gleich sind, schreiben Sie denselben Buchstaben darunter. Wenn sie unterschiedlich sind, schreiben Sie den dritten Buchstaben darunter.
Sie würden dann den vorherigen Schritt wiederholen, bis Sie einen Buchstaben in Ihrer zehnten Zeile haben.
Herausforderung
Wir werden dem obigen Algorithmus eine mathematische Wendung geben:
- Beginnen wir mit einer Folge von 10 Ziffern, die jeweils durch ein Leerzeichen getrennt sind und jeweils 1, 2 oder 3 sind.
- Konstruieren Sie unter jeder Zeile die nächste Zeile wie folgt. Wenn zwei benachbarte Ziffern identisch sind, schreiben Sie dieselbe Ziffer darunter. Wenn sie unterschiedlich sind, schreiben Sie die dritte Ziffer darunter.
- Wiederholen Sie den vorherigen Schritt, bis Sie eine endgültige Nummer haben.
Wenn Sie also nach diesem Algorithmus mit der Zeile beginnen 1 2 3 3 1 3 1 3 1 2
, wird beispielsweise das folgende Dreieck generiert:
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
Ich bin auch neugierig, die Summe aller Ziffern im Zahlendreieck zu kennen. Addieren Sie also alle diese Ziffern und setzen Sie diese Summe in eine elfte Zeile, rechtsbündig zur letzten Ziffer in der ersten Zeile. Unser Zahlendreieck sieht also ungefähr so aus (Leerzeichen in meinem Beispiel werden unten durch das .
Zeichen dargestellt, um die Formatierung anzuzeigen.)
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
Ihre Herausforderung besteht darin, Code zu schreiben, der mit einem eingegebenen String / Array / etc. Beginnen kann. aus zehn Ziffern gemäß meinem Beispiel, und wenden Sie dann den Algorithmus an, um die zehn Zeilen zu generieren, die das Zahlendreieck erstellen würden, gefolgt von einer elften Zeile, in der die Summe aller Ziffern mit der richtigen Begründung angezeigt wird.
Testen
Das Testen dieser Zeichenfolge kann mit einer zufällig generierten Zeichenfolge mit zehn Ziffern Ihrer Wahl oder einer aus dem folgenden Snippet generierten Zeichenfolge durchgeführt werden ...
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.
Regeln
- Es gelten die Code-Golf-Regeln, sodass die niedrigste Anzahl von Bytes die Herausforderung gewinnt. Bei zwei Einsendungen mit derselben niedrigen Punktzahl wird der Gewinner anhand der Anzahl der Up-Votes vergeben.
- Was wir im Grunde suchen, sind 11 Zeilen, 19 Zeichen lang ... Wie Sie Ihre endgültige Ausgabe rendern, liegt ganz bei Ihnen: Array, Konsole, Dateiausgabe, STDOUT usw. Verwenden Sie also bitte eine beliebige Ausgabemethode arbeiten zu Ihrem Vorteil. Die einzige Regel in der Ausgabe ist, dass wir 11 Zeilen mit 19 Zeichen in jeder Zeile in einem ähnlichen Format wie oben haben ...
- Wenn es Ihrem Code hilft, verwenden Sie ein beliebiges Trennzeichen für die Ziffern ... Denken Sie daran, dass die Lesbarkeit möglicherweise einen Beitrag dazu leistet.
- Keine dummen Lücken .
- Eine Hardcodierung der Eingabe ist nicht zulässig. Der Zweck dieses Codes besteht darin, dass er verwendet werden kann, um jedes Mal unterschiedliche Ergebnisse mit unterschiedlichen Eingaben zu erzielen. Die Hardcodierung von
1 1 1 1 1 1 1 1 1 1
beispielsweise negiert den gesamten Punkt des Algorithmus vollständig.
Freuen Sie sich darauf zu sehen, was Sie sich alles einfallen lassen können!