Ide ini terutama dari BIO 2017 q1 . Saya mendapat ide untuk memposting tantangan ini dari tantangan Binary Sequences saya , karena banyak orang sepertinya menyukainya.
Juga, ini adalah tantangan pertama yang saya posting tanpa memposting di sandbox. Saya akan menghapusnya jika tidak ada yang menyukainya.
Aturan
Ambil dalam urutan digit dalam ternary (basis 3); ini bisa berupa string, array atau nilai numerik bersama dengan jumlah nol sebelumnya.
Untuk setiap baris dalam segitiga, baris di bawah ini dihasilkan hingga hanya ada satu digit di baris terakhir. Untuk menemukan digit di bawah dua digit lainnya, digit tersebut akan sama dengan dua di atasnya jika dua digit lainnya di atas sama. Kalau tidak, itu akan menjadi digit yang tidak sama dengan salah satu dari mereka. Berikut ini sebuah contoh:
0 0 1 2 0 1 2 2
0 2 0 1 2 0 2
1 1 2 0 1 1
1 0 1 2 1
2 2 0 0
2 1 0
0 2
1
Anda hanya diharapkan untuk mengembalikan baris terakhir.
Buat kode Anda singkat.
Uji Kasus
0 -> 0
11 -> 1
10 -> 2
000 -> 0
012 -> 1
21102 -> 2
201021 -> 1
111111 -> 1
1020202020 -> 2
0212121210 -> 0
3&(|2+/\-)~<:@#
3|((2<.#)-@+/\])^:_
- milik Anda sangat bagus.Batch, 122 byte
Menggunakan ekspansi binomial. Seperti yang ditunjukkan oleh @MartinEnder, jumlah harus dinegasikan (modulo 3) jika jumlah nilai (yang dihitung dalam loop pertama) genap, sehingga
n
diatur ke salah satu1
atau2
sesuai. Loop kedua kemudian menghitung jumlah melalui koefisien binomial.sumber
APL (Dyalog) , 17 byte
Cobalah online!
Bagaimana?
2+/⍵
- jumlah masing-masing dua item yang berdekatan3-
- kurangi vektor dari tiga3|
- modulo vektor oleh tiga⍣
- ulangi sampai...1=≢⍺
- hanya satu item yang tersisasumber
APL + WIN,
3028 byte2 byte disimpan berkat Uriel.
Penjelasan:
Ini adalah salah satu cara penulisan kode pengulangan dalam APL pada satu baris.
sumber
3|
Javascript (ES6), 58 byte
sumber