Tantangan
Anda diberi representasi ASCII-art karakter di pesawat sebagai input dengan metode apa pun yang masuk akal. Ini hanya akan berisi:
[a-z]
mewakili karakter yang dapat dipindahkan. Setiap huruf akan muncul di papan paling banyak satu kali.#
mewakili dinding tak bergerak.
mewakili ruang kosong
Sebagai contoh:
abcdef.gh#..
.......ij.#.
#..#.......#
...#.#...###
.#.......#q#
.........###
Anda juga diberi string yang mewakili perubahan gravitasi. Ini hanya akan berisi:
>
mewakili perubahan gravitasi ke kanan<
mewakili perubahan gravitasi ke kiri^
mewakili perubahan gravitasi ke atasv
mewakili perubahan gravitasi ke bawah
Sebagai contoh:
v>^
Program Anda harus mensimulasikan setiap perubahan gravitasi secara berurutan sampai semua karakter berhenti bergerak (mereka menabrak dinding, atau karakter lain). Karakter yang "jatuh dari tepi peta" dihapus secara permanen, dan karakter dapat "menumpuk" di atas satu sama lain.
Dalam contoh ini, di awal ada gravitasi ke bawah ( v
), jadi c
, e
, g
, h
, i
, dan j
jatuh dari bawah peta. Semua karakter lain meluncur ke bawah hingga menabrak dinding, meninggalkan peta seperti ini:
.........#..
a..d......#.
#..#.f.....#
.b.#.#...###
.#.......#q#
.........###
Lalu, kita beralih ke gravitasi ke kanan ( >
), yang meninggalkan kita dengan ini: Perhatikan bagaimana a
tumpukan di sebelah d
.
.........#..
........ad#.
#..#......f#
..b#.#...###
.#.......#q#
.........###
Akhirnya, kami mensimulasikan gravitasi ke atas ( ^
), di mana a
dan b
jatuhnya peta.
.........#..
.........d#.
#..#......f#
...#.#...###
.#.......#q#
.........###
Tugas Anda adalah menampilkan karakter yang tersisa setelah perubahan gravitasi. Mereka dapat diberikan dalam urutan apa pun. Untuk contoh ini, Anda dapat menampilkan permutasi dari dfq
.
Testcases
Untuk peta berikut:
abcde
.....
##.##
v = abde
v> = <nothing>
Untuk peta berikut:
######
#....#
abcdef
#.gh..
######
> = <nothing>
< = gh
^> = bcde
v< = bghef
Jawaban:
JavaScript (ES6),
251233 byteSunting: Disimpan 18 byte berkat @WashingtonGuedes.
Bekerja dengan memutar kisi-kisi input empat kali untuk setiap karakter directional, tetapi pada arah di mana karakter directional cocok dengan karakter loop, kita melakukan hal gravitasi kiri. Kodesemu:
sumber
JavaScript (ES6), 199
Algortihm yang sama dari jawaban @ Neil. Grid diputar empat kali untuk setiap karakter directional, ketika di posisi yang tepat gravitasi bergeser ke kiri diterapkan ke setiap baris.
sumber
Pyth, 143 byte
(Apakah kita benar-benar membutuhkan banyak byte?)
Cobalah online!
Bagaimana itu bekerja
Kami mendefinisikan fungsi
left
yang melakukan gravitasi kiri.Kemudian, arah lain diimplementasikan dengan mengacaukan array sehingga arah yang diinginkan adalah ke kiri, lalu lakukan
left
.Algoritma
left
ada di sini:".X"
dengan"X."
, di manaX
merupakan surat.Seluruh program dibagi menjadi 6 bagian berikut:
Bagian pertama
Bagian kedua
Bagian ketiga
Bagian keempat
Bagian kelima
Bagian keenam
sumber
Ruby, 306 byte
Fungsi anonim. Teknik yang cukup berputar yang mungkin bisa dioptimalkan.
sumber