Credito
I miei ringraziamenti alla domanda a lettere di Rand Al'Thor per l'ispirazione per questa sfida di code-golf.
sfondo
La natura di questa sfida si basa sull'algoritmo menzionato da Rand nel suo "Un triangolo formato da tre lettere":
- Inizia con una sequenza di 10 lettere ognuna delle quali è X, Y o Z.
- Sotto ogni riga, costruisci la riga successiva come segue. Se due lettere adiacenti sono uguali, scrivi la stessa lettera sotto di esse; se sono diversi, scrivi la terza lettera sotto di loro.
Dovresti quindi ripetere il passaggio precedente fino a quando non hai una lettera nella decima riga.
Sfida
Daremo un giro matematico all'algoritmo sopra:
- Cominciamo con una sequenza di 10 cifre, ognuna separata da uno spazio e ognuna delle quali è 1, 2 o 3.
- Sotto ogni riga, costruisci la riga successiva come segue. Se due cifre adiacenti sono uguali, scrivi la stessa cifra sotto di esse; se sono diversi, scrivi la terza cifra sotto di loro.
- Ripeti il passaggio precedente fino a quando non hai un numero finale.
Quindi, seguendo questo algoritmo, se si inizia con la riga 1 2 3 3 1 3 1 3 1 2
, ad esempio, viene generato il seguente triangolo:
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
Sono anche curioso di conoscere la somma di tutte le cifre nel triangolo numerico, quindi aggiungi tutte queste cifre e metti questo totale in undicesima riga, giustificato a destra fino all'ultima cifra della prima riga. Quindi, il nostro triangolo numerico sarà simile al seguente (gli spazi nel mio esempio sono rappresentati di seguito dal .
carattere per mostrare la formattazione).
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
La tua sfida è scrivere codice che può iniziare con una stringa / array / etc immessa. di dieci cifre, come nel mio esempio, e quindi applicare l'algoritmo per generare le dieci righe che creerebbero il triangolo numerico, seguite da un'undicesima riga che visualizzerebbe il totale di tutte le cifre con giustificazione a destra.
analisi
Il test di questa stringa può essere eseguito con una stringa generata in modo casuale di dieci cifre di tua scelta o una generata dallo snippet di seguito ...
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.
Regole
- Si applicano le regole del code-golf, quindi il numero più basso di byte vince la sfida. Nel caso in cui vi siano due voci con lo stesso punteggio basso, il vincitore verrà assegnato in base al numero di voti positivi.
- Ciò che stiamo sostanzialmente cercando è di 11 righe, 19 caratteri ... Il modo in cui esegui il rendering dell'output finale dipende interamente da te: array, console, output dei file, STDOUT, ecc., Quindi utilizza il metodo di output che preferisci lavorare a proprio vantaggio. L'unica regola nell'output è che abbiamo 11 righe con 19 caratteri in ogni riga in un formato simile a quello sopra ...
- Se aiuta il tuo codice, usa qualunque separatore per le cifre ... Ricorda solo che la leggibilità può essere un fattore che contribuisce.
- Nessuna scappatoia sciocca .
- La codifica hardware dell'ingresso non è consentita. Lo scopo di questo codice è tale che può essere utilizzato per produrre risultati diversi ogni volta con input variabili. La codifica hardware,
1 1 1 1 1 1 1 1 1 1
ad esempio, nega completamente l'intero punto dell'algoritmo.
Non vedo l'ora di vedere cosa riuscirai a inventare!