Tugas:
Tugas Anda adalah membuat program yang, ketika diberi sejumlah helai dan jumlah iterasi dari jalinan, akan memberi tahu kemana setiap untai pergi. Aturannya adalah sebagai berikut:
- Jumlah helai akan selalu ganjil, dan antara 3 dan 6000 (termasuk)
- Ketika Anda mulai, untaian akan dibagi menjadi 2 (hampir) tandan yang sama,
left
danright
. Theleft
akan memiliki satu helai lebih ketika Anda mulai.
Untuk input 7:
/ / / / \ \ \
1 2 3 4 5 6 7
- Setiap iterasi, untaian sisi terluar dengan lebih banyak untaian akan diletakkan di tengah menghadap ke arah yang berlawanan. Pusat didefinisikan sebagai antara helai menghadapi berlawanan:
////middle\\\
.
1 iterasi input 7 (untai 1 dipindahkan ke tengah):
/ / / \ \ \ \
2 3 4 1 5 6 7
Contoh:
Memasukkan:
3 4
Perhitungan:
1 2 3
\
2 1 3
/
2 3 1
\
3 2 1
/
3 1 2
Keluaran:
3 1 2
Aturan:
- Anda tidak perlu menampilkan garis miring untuk arah untai, hanya angka.
- Anda hanya perlu menampilkan angka setelah iterasi terakhir.
- Output Anda akan menjadi id yang dibatasi ruang dari untaian
- Masukan akan dalam bentuk:
strands [space] iterations
- Jumlah untai selalu ganjil, dan 3 <= x <= 6000
- Ini kode-golf , jadi kode terpendek menang!
11 2
apa2345611178910
?123 -> 213 -> 231 -> 321 -> 312
.Jawaban:
GolfScript, 33 karakter
Masukan harus diberikan di stdin.
Contoh (Anda dapat menguji secara online ):
sumber
Python: 179
240, 152 karakterPertama, 179
Untuk
N
untaian dani
iterasi, jawaban ini menggunakanO(1)
ruang danO(N)
waktu. Saya hanya menghitung posisi akhir setiap untai, tidak pernah mengulangi posisi menengah!suntingan besar: mengubah jawaban ini dengan mengubah persyaratan menjadi aljabar boolean. Saya juga menulis penjelasan panjang lebar tentang cara kerjanya. TL; DR: pola rumus, pembagian modulo.
Sekarang 152
Ini lebih python golf. (sunting: terima kasih kepada Alex Thornton untuk mengedit dari 165 hingga 152)
sumber
l
danv
variabel dan mengubahinsert
ke tugas slice.Python 2 (109) / Python 3 (121)
Python 2
Python 3
Kode tersebut harus disuap oleh Python 2 untuk menampilkan keunggulan golfnya di atas Python 3: rentang menjadi daftar, pembagian membulatkan ke int, mencetak tidak memulai baris baru. Yang aneh
0-i%2
adalah karena-i%2
dinilai sebagai(-i)%2
.Mungkin ada pendekatan yang lebih efisien daripada iterasi, yaitu menghitung setiap hasil akhir secara langsung. Operasi menjalin memiliki periode 2 * s, sehingga tidak bisa rumit.
sumber
Ruby, 105
Hanya banyak mengatur manipulasi. Dorong, letuskan, balikkan dan geser! Saya mencoba tidak mengubah input ke integer, tetapi menambahkan sekitar 20 karakter.
l
danr
(left
danright
) adalah antrian "utas".right
terbalik sehingga kami mulai menarik dari luar.t
danf
(to
danfrom
) memulai sebagairight
danleft
, masing-masing, tetapi seiring berjalannya waktu kita terus menukar mereka sehingga kita selalu dapat menggeser "utas" terakhir darifrom
dan mendorongnya keto
(f,t=t<<f.shift,f
). Ini menghemat banyak ruang.Kemudian kita kembali lagi
right
pada bagian akhir.Changelog:
2.2 105 oh yeah, peta bisa mengambil proc
2.1 108 Dan sebenarnya, balikkan saja sebagai bagian dari manipulasi.
2.0 116 tidak menggunakan array sementara itu. Alih-alih menggunakan dua variabel pointer kita dapat memanipulasi dan terus menunjuk kembali. Maka hanya menampilkan akhirnya
1.0 123 ide awal
sumber
Jawa, 270 karakter
golf:
tidak golf:
Jalankan online
sumber