Bayangkan diagram berikut ini sebagai kumpulan tabung silang vertikal.
1 2 1 2 1 2 3 4
\ / \ / \ / \ /
X | | |
/ \ / \ / \ / \
2 1 1 2 | X |
\ / \ /
X X
/ \ / \
3 1 4 2
Di diagram paling kiri, 1
dan 2
geser ke bawah garis miring masing-masing, silangkan di X
, dan keluar di sisi yang berlawanan dari tempat mereka mulai.
Itu ide yang sama di diagram tengah, tetapi |
menandakan bahwa jalur tidak bersilangan, jadi tidak ada yang berubah.
Diagram menunjukkan paling kanan tabung yang lebih kompleks routing yang yang permutes 1 2 3 4
menjadi 3 1 4 2
.
Tujuan
Tujuan Anda dalam tantangan golf kode ini adalah untuk menggambar "diagram rute tabung" ini dengan permutasi seperti 3 1 4 2
. Program terpendek dalam byte akan menang.
Detail
- Input berasal dari stdin karena permutasi angka dari 1 hingga n dipisahkan oleh spasi, di mana n adalah bilangan bulat positif. Anda dapat mengasumsikan semua input terbentuk dengan baik.
Output diagram perutean menuju ke stdout.
- "Menjatuhkan" angka 1 hingga n agar ke atas diagram akan menghasilkan permutasi input yang keluar di bagian bawah. (Atas dan bawah selalu merupakan lapisan garis miring.)
- Diagram tidak perlu kecil secara optimal. Mungkin level sebanyak yang diperlukan selama itu benar.
- Diagram hanya boleh berisi karakter
\/ X|
dan juga baris baru (tidak ada angka). |
harus selalu digunakan pada persimpangan terluar karena menggunakanX
tidak masuk akal.- Beberapa ruang awal atau akhir tidak apa-apa asalkan diagramnya disusun dengan benar.
Contohnya
Input dari 3 1 4 2
mungkin menghasilkan (sama seperti di atas)
\ / \ /
| |
/ \ / \
| X |
\ / \ /
X X
/ \ / \
Input dari 1
mungkin menghasilkan
\
|
/
|
\
|
/
Input dari 3 2 1
mungkin menghasilkan
\ / \
X |
/ \ /
| X
\ / \
X |
/ \ /
Input dari 2 1 3 4 6 5
mungkin menghasilkan
\ / \ / \ /
X | X
/ \ / \ / \
sumber
X
terhubung langsung dengan|
cara yang/
dilakukannya? Ke yang lainX
?row of slashes
,row of X's and |'s
,row of slashes
,row of X's and |'s
, ... Format.n
lebih besar dari 10?Jawaban:
Python 2, 218
219220222224227243247252259261264Saya mengambil pendekatan yang sedikit berbeda: Saya menemukan swap yang diperlukan untuk mengurutkan input, kemudian secara vertikal membalikkan itu untuk mendapatkan swap yang diperlukan untuk mengubah daftar yang diurutkan menjadi input. Sebagai bonus tambahan dari pendekatan ini, dapat mengambil daftar angka yang berubah-ubah dan memberikan jalur permutasi untuk mengubah jenis input menjadi input.
Contoh:
Perbaikan:
264 -> 261: Mengganti loop luar dari untuk sementara.
261 -> 259: Digunakan
f%2
sebagai ganti(c^m)
, karena dalam operator aritmatika python memiliki prioritas lebih tinggi daripada operator bitwise.259 -> 252: Mengganti loop dalam dari untuk sementara. Gabungan
i
danc
variabel.252 -> 247: Build yang diubah kemudian mundur menjadi hanya build dengan urutan terbalik.
247 -> 243: Menambahkan baris baru secara manual, alih-alih menggunakan gabungan.
243 -> 227: Metode grc yang diadopsi untuk generasi garis miring (terima kasih grc!) Dan ditambahkan s.
227 -> 224: Memindahkan generasi garis miring ke sebelum bagian dalam sementara loop untuk menghapus a
%4
dan menyimpan karakter dengan menggunakan irisan yang diperluas.224 -> 222: Dihapus m.
222 -> 220:
f%2+n%2
->f+n&1
220 -> 219:
| 1<n-1|
->|~i>-n|
(ruang terdepan dihapus)219 -> 218: Gabungan inisialisasi
o
dans
dan memindahkan slice ke ujung.sumber
Python, 290
Saya pergi untuk pendekatan yang cukup mendasar, tetapi ternyata sedikit lebih lama dari yang saya harapkan. Ini mempertimbangkan daftar berpasangan dan memutuskan apakah akan menukar masing-masing pasangan. Ini diulangi untuk setiap baris yang memotong sampai daftar cocok dengan input.
Contoh:
sumber
JavaScript HTML,
553419Terima kasih kepada @izlin dan @TomHart karena menunjukkan kesalahan saya.
Uji di sini: http://goo.gl/NRsXEj
sumber
Javascript - 395
378 jika saya tidak mencetak angka pada output saya, tetapi terlihat jauh lebih baik dan meningkatkan keterbacaan.
Uji di sini . (dengan versi yang tidak disunat) Versi golf
:
Penjelasan
Pertama, saya mengganti input dengan nomor indeks dan mengubah baris pertama dengan hasilnya. Sebagai contoh
Dengan substitusi ini saya dapat menggunakan algoritma bubble-sort untuk menyortir 2,4,1,3 ke 1,2,3,4 dan grafik akan menjadi yang sesingkat mungkin yang kami cari.
Jika Anda punya ide bagaimana saya bisa membuat kode lebih kecil hanya komentar :)
Contoh
sumber
<br>
tag dan textarea hanya di jsfiddle, karena terlihat jauh lebih baik. Lansiran tidak memiliki font monospasi sehingga hasilnya terlihat buruk. Dalam Versi golf saya, saya menggunakan lansiran dan \ n. Apakah halaman web Anda publik?Cobra - 334
344356360Ia bekerja dengan memindahkan setiap elemen ke tempatnya mulai dari kiri. Karena hal ini, seringkali akan dihasilkan path-map yang sangat besar (walaupun masih benar).
Contoh:
sumber