Gravity Guy adalah gim di mana satu-satunya input pengguna adalah kunci tunggal yang membalik arah gravitasi. Diberi tingkat seni ASCII, tentukan apakah Gravity Guy mungkin mencapai akhir.
Aturan
- Arah awal gravitasi sedang turun .
- Kolom pertama dari input akan selalu hanya berisi satu
#
, yang dimulai Gravity Guy di atas. - Setiap iterasi, ia bergerak ke karakter langsung di sebelah kanannya .
- Jika jalurnya diblokir dan dia pindah ke
#
, pemain kalah . - Setelah bergerak, pemain dapat secara opsional beralih gravitasi dari bawah ke atas, atau ke atas ke bawah.
- Gravity Guy kemudian jatuh ke yang berikutnya
#
(ke arah gravitasi saat ini). - Jika tidak ada
#
jatuh dan dia jatuh dari grid , pemain kalah . - Jika Gravity Guy bergerak dari sisi kanan grid input, pemain menang .
Contoh
Jika ini adalah kisi masukan:
###
# # #
###
Gravity Guy akan mulai di x
dan berada di posisi ini setelah setiap iterasi. ^
= beralih gravitasi ke atas dan v
= beralih gravitasi ke bawah.
v ^ v
-------------------------------------------------------------
### | ### | ### | ### | ### | ###
x | | x | x | x |
# # | #x # | # # | # # | # # | # # x
### # | ### # | ### # | ### # | ### # | ### #
Seperti yang Anda lihat, dengan beralih gravitasi pada saat ini Gravity Guy mencapai akhir, sehingga input ini akan mengembalikan nilai yang sebenarnya.
Spesifikasi
- Input grid dapat dalam format "grid" yang sesuai (string multiline yang diisi spasi, array string line, array array karakter, dll).
- Jika memungkinkan bagi pemain untuk memenangkan level, berikan
truthy
nilai. Jika tidak, keluarkanfalsey
nilai. - Lebar dan tinggi kisi akan menjadi
50
karakter paling banyak. - Ini adalah kode-golf , semoga kode terpendek dalam byte menang!
Uji Kasus
(setiap case dipisahkan oleh ----------
, setiap baris kosong juga harus diisi dengan spasi)
Benar
######### ######## ###### ######
# # # # # # #
### # # # # # # # # #
# ## # # ## # # # # # ##
# # # # # # # # # #######
# # # # # ### # #
# ## # ## # # # #
# # # # # #
# #################################### #
# #
#############################################
----------
###
----------
#####
####
----------
#####
# # #
# # #
#####
----------
############
###### ######
############
----------
### ###
# #
#### # ####
# #
# #
#
----------
######
#
##
#######
### #
# #
#####
----------
#####
# #
## #
#######
###
#
######
----------
###
# # #
###
----------
### ###
### ##
# #
#####
----------
#
# #
#
# # #
#
#
#
#
----------
##### ####
# # #
# # # ## #
# #
##### #### #
#
#########
----------
###########################
# # # # # # #
# # # # # # # # # #
# # # ######### ###########
# # # # # # # #
# # # ## ##### ### #
## # # # ## ###
# ##### #### ########### #
# # # # # ## #
# # ##### ### # # # # # #
# # # # ##
###########################
Salah
###
#
####
----------
### ###
----------
#
### ###
#### ###
#
----------
### ###
# # #
#### # # ####
# #
# #
# #
#
----------
#######
# #
## #####
### ######
# #
#######
----------
###########################
# # # # # # # #
# # # # # # # # # #
# # # ######### ###########
# # # # # # # #
# # # ## ##### ### #
## # # # ## ###
# ##### #### ########### #
# # # # # ## #
# # ##### ### # # # # # #
# # # # ##
###########################
code-golf
ascii-art
decision-problem
pengguna81655
sumber
sumber
column
jenis khusus , saya rasa tidak masalah untuk menggunakannya.#
kolom di kolom pertama berada di baris pertama?Jawaban:
Siput , 15 byte
Coba online?
0.
^
adalah opsi yang memerlukan pola untuk memulai di kiri atas.\
: ruang pertandingann
: Putar 90 derajat ke kedua arah\ ,
: ruang pertandingan nol atau lebih banyak kali=\#
periksa apakah ada#
di depan kitar
: atur arah ke kanan}+
: lakukan semua yang sebelumnya satu atau lebih kali~
cocok dengan sel yang berada di luar batas gridsumber
Perl,
93898177767574 byteTermasuk +2 untuk
-0p
Jalankan dengan pola input (dengan semua ruang spasi empuk dengan panjang yang sama) di STDIN:
gravity.pl
:Versi berbasis file ini membutuhkan baris terakhir, jadi itu benar-benar 75 byte. Tetapi versi berbasis baris perintah tidak memerlukan baris baru tambahan sehingga ini dianggap sebagai 74 byte:
Penjelasan:
Ini akan membangun string dengan
w
di setiap posisi yang bisa dijangkau oleh gravitasi pria. Jadi untuk contoh kebenaran kedua yang terakhir akan dibangun:Jadi pria gravitasi dapat membuatnya jika dan hanya jika ada
w
di kolom terakhir. Tali akan dibangun dengan mengganti satu ruang yang dapat dijangkau olehw
di setiap putaran.Setiap penggantian harus dalam bentuk
yang akan menuntut bahwa ruang didahului dengan awalan dan diikuti oleh postfix tetapi hanya mengganti ruang dengan
w
tanpa perlu banyak pengelompokan tingkat lanjut.Asumsikan
$n
berisi regex yang akan maju cukup sehingga sisi kiri dan kanan persis di bawah satu sama lain. Maka regex yang relevan adalah:Dengan begitu, program ini mudah:
sumber
JavaScript (ES6), 174 byte
Mengambil array horizontal string dan mengembalikan jumlah titik keluar. Transpos array membutuhkan biaya 29 byte. Tidak Disatukan:
sumber
Pip ,
85686259 + 1 = 60 byteMenggunakan
-r
bendera untuk membaca semua baris stdin.Cobalah online!
Penjelasan singkat
Strategi ini pada dasarnya adalah pencarian pertama yang luas. Kami memindahkan input dan loop di atas garis (kolom), menjaga daftar posisi-y yang dapat dijangkau pemain di kolom itu. Output setelah kolom terakhir adalah daftar yang tidak kosong jika pemain bisa menang, atau daftar kosong (yang dicetak hanya sebagai baris baru) jika pemain kalah.
Penjelasan lengkap
Built-in variabel yang digunakan dalam program ini:
i == 0
,l == []
,s == " "
.The
-r
bendera menempatkan daftar baris masukan ke dalamg
.FcZg{...}
ritsletingg
dan loop di atas setiap kolomc
. (UnaryZ
, ketika diterapkan pada daftar iterables, bertindak seperti Pythonzip(*g)
, mentransposisi array 2D dengan rapi.) Perhatikan bahwa ituc
akan menjadi daftar, bukan string.Di dalam loop kolom, kami mengatur ulang
y
ke daftar kosong denganY
penjelasanl
.Fxi
loop lebihi
. Dalam iterasi selanjutnya,i
akan menjadi daftar koordinat y yang dapat dijangkau pemain di kolom sebelumnya. Pertama kali lewat, kami ingin memulai dengan hanya0
(sudut kiri atas). Variabel diinisialisasi ke Skalar0
, bukan Daftar[0]
, tetapi Pip iterates baik-baik saja baik cara.Untuk setiap posisi yang valid di kolom terakhir,
Ic@xQs
periksa apakah ada ruang di posisi itu di kolom saat ini. Jika tidak, pemain hanya berlari ke tembok dan kami terus mencoba kemungkinan berikutnya. Jika demikian, maka kami ingin menemukan posisi pemain akan jatuh ke dalam kolom ini untuk setiap arah gravitasi, dan menambahkannya ke daftary
menggunakan operatorP
ASKB
ack.Gravitasi naik (kiri, dalam versi transposisi):
Gravitasi turun (kanan, dalam versi transposisi):
Jika pemain jatuh dari grid ke arah tertentu,
@?
operasi masing-masing tidak akan menemukan#
dan akan memberikan nol. Ini bukan indeks yang valid dan akan menghasilkan beberapa peringatan di iterasi berikutnya - yang, bagaimanapun, tidak terlihat tanpa-w
bendera. Untuk tujuan kami, kasus-kasus ini pada dasarnya dihilangkan dari pertimbangan.Setelah loop dalam,
i:UQy
ambil daftary
posisi yang telah kami buat, hapus duplikat, dan tetapkani
. (Menghilangkan duplikat diperlukan karena jika tidak, daftar balon secara eksponensial.) Kami kemudian pergi ke kolom berikutnya. Ketika kami telah mengulang semua kolom, jika ada jalur yang valid,i
akan ada daftar posisi kosong (benar); jika tidak, itu akan menjadi daftar kosong (falsey).sumber