Fannkuch adalah program benchmark klasik. Nama ini berasal dari bahasa Jerman "Pfannkuchen" - pancake- karena kemiripan algoritma untuk membalik tumpukan pancake. Urutan angka Fannkuch dibentuk sebagai berikut:
Ambil permutasi {1 ..... n}, misalnya: {4,2,1,5,3}. Ambil elemen pertama, di sini 4, dan membalikkan urutan 4 elemen pertama: {5,1,2,4,3}. Ulangi ini sampai elemen pertama adalah 1, jadi membalik tidak akan mengubah apa pun lagi: {3,4,2,1,5}, {2,4,3,1,5}, {4,2,3, 1,5}, {1,3,2,4,5}
Anda harus menulis program atau fungsi yang menghitung urutan seperti Fannkuch untuk string karakter alfabet. Alih-alih menggunakan angka untuk menunjukkan berapa banyak elemen daftar harus dibalik setiap kali, posisi huruf dalam alfabet harus digunakan. Sebagai contoh, sebuah lead c
akan menunjukkan bahwa Anda harus membalik urutan 3 elemen pertama, sementara sebuah lead a
menunjukkan bahwa urutannya selesai.
Memasukkan
Input akan diberikan sebagai string melalui stdin atau sebagai argumen fungsi. String akan berisi antara 1 dan 26 huruf kecil berbeda. String tidak akan berisi huruf yang indeks ekivalennya akan menyebabkan algoritma Fannkuch untuk membalik lebih banyak elemen daripada yang ada.
Keluaran
Program atau fungsi harus mengembalikan atau mencetak untuk mengetahui urutan istilah yang dihasilkan dengan menerapkan algoritma Fannkuch hingga ditemukan suatu pemimpin a
, termasuk string awal. Misalnya, jika inputnya adalah bca
, Anda dapat mencetak:
bca
cba
abc
Hasil cetak dapat menggunakan koma pemisah yang masuk akal, baris baru, dll. Setiap pilihan spasi putih dapat diterima.
Sebagai contoh lain, jika input eabdc
Anda, Anda mungkin kembali:
("eabdc"
"cdbae"
"bdcae"
"dbcae"
"acbde")
Aturan dan Penilaian
Ini adalah kode-golf - program terpendek yang menang. Celah Standar tidak diizinkan.
sumber
proc fcmp
di sini.Haskell, 78 byte
Penggunaan:
f "eabdc"
->["eabdc","cdbae","bdcae","dbcae","acbde"]
.sumber
splitAt
- Anda bisa mendapatkannya hingga 71 byte!K5, 21 byte
Disimpan 5 byte berkat @JohnE dan byte lain dengan mengatur ulang ekspresi.
Untuk pertama kalinya di bumi, saya pikir K telah mengalahkan CJam!
Versi 27 byte
sumber
a
, string tidak akan berubah.Haskell, 68
Taktik yang lebih rumit apa pun yang saya pikirkan mengambil lebih banyak byte.
sumber