Anda harus menulis sebuah program atau fungsi yang memberikan urutan awal bilangan bulat positif satu digit dan panjang lintasan sebagai input output atau mengembalikan urutan selesai angka.
Input [5,1,2,6,7] and 14
mendefinisikan perlombaan berikut:
--------------
76215 ->
--------------
Aturan lomba
- Lintasan membungkus dan angka bisa beberapa putaran.
- Urutan langkah bersifat siklik dan berdasarkan pada posisi awal. Dalam contoh kita
5 1 2 6 7 5 1 2 ...
. - Tidak ada beberapa digit di posisi yang sama.
Setiap digit memiliki kecepatan
digit_value
sel per langkah. Melampaui satu digit atau satu blok digit yang terus menerus membutuhkan satu langkah ekstra. Jika digit tidak memiliki kecepatan yang diperlukan untuk itu akan berhenti sebelum (blok) digit. Contoh:[41 ] => [ 1 4 ] 4 overtakes 1 [2 1 ] => [ 21 ] 2 can only move 1 as it can't move 3 to overtake 1 [4 12 ] => [ 412 ] 4 can only move 1 as it can't move 5 to overtake 12 [ 3 ] => [ 3 ] 3 starting a new lap
Setiap digit harus melewati
digit_value
putaran sebelum selesai. Lap selesai ketika sel terakhir dari trek ditinggalkan. Digit yang sudah selesai dihapus dari trek.- Perhatikan bahwa digit mungkin mencapai posisi awal beberapa kali melalui langkah dan menyelesaikan beberapa putaran.
Memasukkan
- Daftar bilangan bulat positif satu digit yang berbeda (
1..9
) dengan setidaknya satu elemen dan satu bilangan bulat positif, lebih besar dari panjang daftar, panjang trek.
Keluaran
- Daftar digit dalam urutan yang mereka selesaikan dalam format apa pun yang tidak ambigu.
Contohnya
Contoh langkah demi langkah visual untuk input starting_order = [5,9,2] and length = 6
295 | Start position
29 5| digit 5 moves
2 9 5| digit 9 moves, finishing lap #1
29 5| digit 2 moves
529 | digit 5 moves, finishing lap #1
52 9| digit 9 moves, finishing lap #2
5 29| digit 2 moves
529| digit 5 moves
9 52 | digit 9 moves, finishing laps #3 and #4
29 5 | digit 2 moves, finishing lap #1
29 5| digit 5 moves
2 9 5| digit 9 moves, finishing lap #5
29 5| digit 2 moves
529 | digit 5 moves, finishing lap #2
52 9| digit 9 moves, finishing lap #6
5 29| digit 2 moves
529| digit 5 moves
9 52 | digit 9 moves, finishing laps #7 and #8
9 5 | digit 2 moves, finishing lap #2 --> remove 2 from the track
59 | digit 5 moves, finishing lap #3
5 | digit 9 moves, finishing lap #9 --> remove 9 from the track
5| digit 5 moves
5 | digit 5 moves, finishing lap #4
| digit 5 moves, finishing lap #5 --> remove 5 from the track
------
Finish order: 2 9 5
Contoh dalam format Input => Output
[3], 2 => [3]
[9, 5], 3 => [9, 5]
[5, 9, 2], 6 => [2, 9, 5]
[5, 9, 2], 10 => [5, 9, 2]
[5, 7, 8, 1, 2], 10 => [1, 5, 7, 8, 2]
[5, 1, 6, 8, 3, 2], 17 => [1, 6, 8, 2, 3, 5]
[1, 2, 3, 7, 8, 9], 15 => [1, 7, 8, 9, 2, 3]
[9, 8, 7, 3, 2, 1], 15 => [8, 7, 9, 1, 2, 3]
[1, 2, 3, 4, 5, 6, 7, 8, 9], 20 => [1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1], 20 => [8, 7, 5, 9, 6, 1, 2, 4, 3]
Ini adalah kode-golf sehingga entri terpendek menang.
sumber
Jawaban:
Ruby 229
236Ini adalah fungsi yang mengambil dua parameter: array yang mewakili digit dan int yang mewakili panjang trek. Ini mengembalikan array, mewakili urutan digit menyelesaikan balapan.
Uji secara online: http://ideone.com/KyX5Yu
Sunting: Menemukan beberapa trik untuk menghemat lebih banyak karakter.
Versi tidak disatukan:
sumber
Python 2, 345 byte
Sayang sekali itu tidak lebih pendek dari @ w0lf, tetapi whatev. (Perhatikan bahwa indentasi besar adalah tab, yang diterjemahkan menjadi 4 spasi ketika saya memposting.)
sumber
di sini adalah kode empuk ajaib saya
C (
457430b)Catatan : perlu lebih banyak perbaikan ...
EDIT: kode disingkat ... - sizeof (int) = 4, function = v, masih ada beberapa variabel yang harus diganti.
sumber
sizeof
sepertinya bisa digantikan dengan angka ajaib. Mungkin itu tidak akan seperti portabel, tapi hei - ini kode golf.v(int*M,int m){e=32;f=48;u=0;l=m;char a,
... Juga, hampir semua spasi putih itu tidak perlu;,V[m];for(i=0;
...)printf(
...);getch();}
.