Tantangan ini terkait dengan Flipping Pancake .
Anda mungkin pernah mendengar tentang penyortiran pancake , di mana setumpuk pancake diurutkan berdasarkan ukuran dengan memasukkan spatula ke dalam tumpukan dan membalik semua pancake di atas spatula, sampai pancake diurutkan terkecil hingga terbesar di piring. Masalah pancake yang terbakar sedikit berbeda. Semua panekuk sekarang memiliki satu sisi yang terbakar, dan sisi yang terbakar dari masing-masing panekuk harus menghadap piring setelah penyortiran selesai.
Sebagai contoh, diberi tumpukan berikut (ukuran panekuk di sebelah kiri. 0
Artinya sisi terbakar sebelah bawah dan 1
berarti sisi sisi atas terbakar di sebelah kanan):
1 0
3 1
2 1
Anda dapat membalik seluruh tumpukan untuk mendapatkan 20 30 11
, membalik dua teratas untuk mendapatkan 31 21 11
dan membalik seluruh tumpukan lagi untuk mendapatkan 10 20 30
, tumpukan pancake bakaran yang diurutkan. Urutan gerakan ini, flip 3, flip 2, flip 3, dapat direpresentasikan sebagai 3 2 3
.
Tantangan
- Dengan serangkaian ukuran pancake (tidak harus unik) dan orientasinya, menampilkan urutan penyortiran pancake bakaran yang valid, yaitu, urutan flips yang mengarah ke tumpukan pancake yang diurutkan dari yang terkecil hingga terbesar dengan sisi yang terbakar ke bawah.
- Input dan output mungkin merupakan format waras dengan pemisah, tetapi harap tentukan format mana yang Anda gunakan dan nyatakan ujung mana dari format input Anda yang berada di atas tumpukan (TOS).
- Membalikkan nol pancake diperbolehkan.
- Mencampur pemisah dalam input / output diperbolehkan.
Uji kasus
Untuk semua kasus uji berikut, input adalah daftar dan output adalah string yang dipisahkan oleh spasi, dan TOS di sebelah kiri.
[[1, 0], [3, 1], [2, 1]]
"3 2 3"
[[5, 1], [3, 0], [4, 1], [2, 1], [1, 0]]
"5 3 4 1 3 2 1"
[[5, 1], [3, 0], [3, 0], [1, 1]]
"4 3 2 3"
Seperti biasa, jika ada yang tidak jelas atau salah, harap beri tahu saya di komentar. Semoga berhasil dan bermain golf dengan baik!
0
dalam daftar output diperbolehkan?CJam (37 byte)
Input adalah array dalam format CJam pada stdin; output adalah daftar panjang flip yang dipisahkan pada baris baru di stdout. Bagian atas tumpukan berada di indeks
0
;0
menunjukkan sisi yang terbakar ke atas, dan1
menunjukkan sisi yang terbakar ke bawah.Demo online
Pembedahan
Output selalu
3n
membalik panjang, di manan
jumlah pancake. Pertama, kita membalikkan pancake tersisa terbesar ke atas; maka jika sisi bakarnya terbakar ke bawah kita balikkan satu pancake itu; dan kemudian kita balikkan ke bawah dan ulangi seolah-olah tumpukan pancake lebih pendek.sumber
Ruby,
1019593 byteTidak terlalu golf, saya hanya ingin membuat varian bogo-sort. Ini adalah fungsi anonim yang mengambil array array dan mencetak membalik acak ke stdout sampai pancake diurutkan.
Misalnya, Anda dapat menetapkan
f
dan mengatakannyaf.call [[1, 0], [3, 1], [2, 1]]
-5 byte dari @Jordan dengan penggunaan brilian
rassoc
-2 byte dari @ Sherlock9
sumber
a.all?{...}
dengan!a.rassoc(1)
.r
)assoc
sebelumnya, tetapi memikirkannya, itu mungkin berguna dalam banyak masalah di situs ini - saya merasa harus masuk dalam posting tips golf Ruby. Bagaimanapun, terima kasih :) Saya juga mampu membunuh byte lain meskipun penerapan hukum deMorgans dan menggantiuntil
denganwhile
.b
hanya pernah0
atau1
,1-b
juga akan bekerja dan akan menghemat dua byte.