Pertanyaan
Diberikan satu set angka 9 m[]
,, yang hanya berisi angka 1 hingga 9 dalam urutan acak, tanpa dua angka sama, buat program dalam bahasa apa pun yang mengatur ulang angka menjadi dalam urutan angka (1, 2, 3, dll. dll) dengan hanya beralih dua angka yang bersebelahan (mis. 1, 3, 2 → 1, 2, 3).
Aturan
- Anda hanya dapat memodifikasi set dengan mengganti dua angka yang bersebelahan
- Angka akhir (urutan 1 hingga 9) harus tercantum di
m[]
- Anda dapat menggunakan bahasa apa pun yang Anda inginkan
- Jawaban dengan jumlah byte terkecil menang
Edit:
Kode Anda tidak harus mencetak output, tetapi array yang disusun ulang harus dalam m[]
.
code-golf
array-manipulation
sorting
Meow Mix
sumber
sumber
Jawaban:
CJam, 15 byte
Bagaimana itu bekerja:
Cobalah online di sini
sumber
Mathematica, 38 byte
Ini adalah fungsi yang tidak disebutkan namanya mengambil array, yang menerapkan aturan penggantian sampai pola tidak dapat ditemukan lagi. Pola adalah daftar yang memiliki dua elemen berurutan
b
dan dic
manab > c
, dan aturannya mengatakan untuk menukarb
danc
tetapi membiarkan array tidak tersentuh.Ada banyak gula sintaksis di sini, tetapi kode ini sebenarnya sangat mudah dibaca jika Anda tahu sedikit tentang Mathematica:
sumber
Python 3, 72 byte
Pendekatan bogosort (semacam bodoh): menukar elemen tetangga secara acak sampai array akan diurutkan. Biasanya berjalan di bawah satu detik.
2 byte berkat @xnor.
sumber
Python 2, 45
Siklus di sekitar daftar, mengurutkan pasangan elemen berurutan. Indeks
i
berputar hingga0,1,2,3,4,5,6,7
delapan kali, yang menjamin semua elemen menggelembung dan daftar diurutkan.sumber
Pyth, 13 - 15 byte
Solusi yang melakukan swapping yang diminta, dan tidak menghasilkan output:
Solusi yang melakukan swapping yang diminta, dan mencetak status perantara daftar di setiap langkah:
Solusi yang melakukan swapping yang diminta, dan mencetak status akhir daftar:
Demonstrasi solusi tengah di atas.
Metode bertukar nilai yang berdekatan diambil dari jawaban @ Jakube.
Program menggunakan
#
, pernyataan loop hingga kesalahan, untuk menukar pasangan elemen yang berdekatan yang tidak berurutan hingga tidak ada pasangan yang demikian, pada titik manah
, fungsi kepala, melempar kesalahan, mengakhiri program.sumber
Retina ,
9593 byteTidak terlalu kompetitif (dan mungkin masih golf), tapi di sini kita mulai ...
Di mana
<empty>
seharusnya ada baris kosong.Karena semua angka adalah digit tunggal, ini hanya mengharapkan string dengan semua 9 digit sebagai input dan akan dicetak
123456789
setelah berhasil mengurutkannya. Setiap tahap melakukan satu swap dan)1`
menunjukkan bahwa semua kecuali tahap terakhir harus diulang sampai hasilnya berhenti berubah.Tahap kosong pada akhirnya diperlukan, karena jika tidak kita akan mendapatkan hasil antara setiap kali
98
tahap diproses.Berikut adalah semua hasil antara (setiap kali itu berubah) untuk menjalankan contoh:
(Saya memperoleh ini dengan menambahkan
:
opsi ke setiap tahap, dan menyingkirkan duplikat berturut-turut secara manual.)sumber
Pyth, 17 byte
Berpindah item dalam daftar benar-benar mahal di Pyth. Jadi, inilah solusi yang menyenangkan, yang sedikit meregangkan aturan. Itu mungkin tidak valid.
Cobalah secara online: Pyth Compiler / Executor
Penjelasan
Pertama-tama, kompleksitas waktu kode saya adalah
O(n^3)
. Tapi ini bukan bagian yang menarik. Pertanyaannya tidak mengatakan apa pun tentang kerumitannya.Bagian penting adalah, bagaimana saya mengganti dua elemen dalam daftar. Katakanlah saya ingin mengganti elemen
m[3]
danm[4]
. Saya tidak peduli dengan indeks3
dan4
sama sekali. Saya cukup membuat daftar kedua, yang menggantikan setiap elemen samam[3]
dengan angkam[4]
dan setiap angka samam[4]
dengan nilaim[3]
. Karena daftar tidak mengandung duplikat, ini mensimulasikan beralih dua nilai ini. Jika ada duplikat, seperti pada input[1, 3, 2, 2]
, hasilnya akan menjadi[1, 2, 3, 3]
. Dan jika Anda memberi input[1, 2, 1]
, itu akan berakhir dalam loop yang tak terbatas. Saya tidak secara eksplisit membuat daftar kedua, itu hanya bagian dari implementasi Pyth tentang metode translate. Jika Anda mencetak daftar saat ini ( lihat di sini), ini memberikan nilai yang benar, yang Anda harapkan.sumber
JavaScript (ES6) 56
Fungsi rekursif yang mengatur ulang daftar yang diberikan di tempat.
Catatan
Di JS, untuk nilai numerik apa pun v: v> undefined == false, v <undefined == false. Jadi pergi ke luar batas array tidak menjadi masalah jika kita menggunakan perbandingan yang tepat
Ketika array pada akhirnya diurutkan, fungsi di dalam 'some' mengembalikan false dan rekursi berakhir
Nilai yang dikembalikan jika swap adalah array 2 elemen, dan nilainya selalu 'benar'. Itu berfungsi bahkan ketika satu atau lebih elemen array bernilai 0
Bahkan fungsinya bekerja dengan input numerik apa pun, tidak hanya digit tunggal dan tidak berulang. Tidak menemukan cara untuk mengambil keuntungan dari batasan OP ini.
Uji menggunakan snippet (di Firefox) - versi snippet menampilkan nilai daftar saat ini di setiap langkah.
sumber
Javascript ( ES6 ),
666153 byteBerkat aturan baru, saya dapat mengurangi lebih jauh :)
Berkomentar
sumber
C, 183
Itu belum golf, selain nama variabel.
sumber
Haskell, 59 byte
Fungsi
s
menempatkan elemene
di depan atau di tempat kedua daftar tergantung pada apakah itu kurang atau lebih besar dari elemen pertama daftar. Melipats
ke dalam daftar input memungkinkan gelembung elemen terkecil ke depan. Saya melipat ke dalam daftar yang berisi satu9
yang segera saya hapus setelahnyainit
, sehingga saya tidak perlu memeriksa daftar kosong dis
.iterate
mengulangi proses pelipatan selamanya untuk membuat daftar hasil antara. Hasil akhir adalah elemen ke-9 dari daftar ini.sumber
Perl, 68 byte
Kode tidak dikunci
sumber