Kredit
Terima kasih saya untuk pertanyaan berbasis surat Rand Al'Thor untuk inspirasi untuk tantangan golf kode ini.
Latar Belakang
Sifat tantangan ini didasarkan pada algoritma yang disebutkan oleh Rand dalam bukunya "A Triangle Formed of Three Letters":
- Mulailah dengan urutan 10 huruf yang masing-masing X, Y, atau Z.
- Di bawah setiap baris, buat baris berikutnya sebagai berikut. Jika dua huruf yang berdekatan adalah sama, tulis huruf yang sama di bawahnya; jika berbeda, tulis huruf ketiga di bawahnya.
Anda kemudian akan mengulangi langkah sebelumnya sampai Anda memiliki satu huruf di baris kesepuluh Anda.
Tantangan
Kita akan meletakkan putaran matematika pada algoritma di atas:
- Mari kita mulai dengan urutan 10 digit, masing-masing dipisahkan oleh spasi, dan masing-masing adalah 1, 2 atau 3.
- Di bawah setiap baris, buat baris berikutnya sebagai berikut. Jika dua digit yang berdekatan adalah sama, tulis angka yang sama di bawahnya; jika mereka berbeda, tulis angka ketiga di bawahnya.
- Ulangi langkah sebelumnya hingga Anda memiliki satu angka terakhir.
Jadi, mengikuti algoritma ini, jika dimulai dengan baris 1 2 3 3 1 3 1 3 1 2
, misalnya, segitiga berikut dihasilkan:
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
Saya juga ingin tahu mengetahui jumlah semua digit dalam segitiga angka, jadi tambahkan semua digit ini, dan letakkan total ini dalam baris kesebelas, dibenarkan dengan benar ke digit terakhir di baris pertama. Jadi, segitiga angka kita akan terlihat seperti berikut ini (spasi dalam contoh saya diwakili di bawah ini oleh .
karakter untuk menampilkan pemformatan.)
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
Tantangan Anda adalah menulis kode yang dapat dimulai dengan string / array / yang diinput. sepuluh digit, sesuai contoh saya, dan kemudian menerapkan algoritma untuk menghasilkan sepuluh baris yang akan membuat segitiga angka, diikuti oleh baris ke-11 yang akan menampilkan total semua digit dengan justifikasi-kanan.
Pengujian
Pengujian string ini dapat dilakukan dengan string sepuluh digit yang Anda pilih secara acak, atau yang dihasilkan dari snipet di bawah ...
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.
Aturan
- Aturan kode-golf berlaku, sehingga jumlah byte terendah memenangkan tantangan. Jika ada dua entri dengan skor rendah yang sama, pemenang akan diberikan berdasarkan jumlah suara terbanyak.
- Pada dasarnya yang kita kejar adalah 11 baris, panjang 19 karakter ... Bagaimana Anda membuat output akhir sepenuhnya terserah Anda: array, konsol, output file, STDOUT, dll., Jadi silakan gunakan metode output apa pun yang Anda suka yang akan bekerja untuk keuntungan Anda. Satu-satunya aturan dalam output adalah bahwa kita memiliki 11 baris dengan 19 karakter di setiap baris dalam format yang mirip dengan di atas ...
- Jika ini membantu kode Anda, gunakan pemisah apa pun untuk digit ... Ingatlah bahwa keterbacaan dapat menjadi faktor penyumbang.
- Tidak ada celah konyol .
- Pengkodean input tidak dibolehkan. Tujuan dari kode ini adalah sedemikian rupa sehingga dapat digunakan untuk menghasilkan hasil yang berbeda setiap kali dengan input yang bervariasi. Hard-coding
1 1 1 1 1 1 1 1 1 1
misalnya, sepenuhnya meniadakan seluruh titik algoritma.
Nantikan melihat apa yang Anda semua dapat lakukan!