Super Mario Galaxy memiliki duaplanet * rhombicuboctahedron -shaped * dengan ubin yang menyusut ketika Mario melintas. Jika Mario jatuh ke dalam lubang segitiga atau celah yang ditinggalkan oleh ubin yang sebelumnya disentuh, ia akan dikonsumsi oleh lubang hitam di intinya. (Tonton: Galaksi Cepat-Gegas , Galaksi Geser Laut )
Gambar: MarioWiki.com
(Anda dapat menganggap planet ini sebagai kubus 2x2x2 yang wajahnya telah terlepas dan terhubung satu sama lain dengan 2x3 "jembatan".)
Sayangnya, karena pengontrol saya sangat rusak, Mario tidak bisa melompat dan terbatas pada empat arah mata angin. Selain itu, Mario bergerak sangat lambat dan tidak dapat melacak bahkan satu langkah tanpa terlebih dahulu platform di belakangnya menghilang.
Mari kita asumsikan kamera selalu di atas kepala Mario dan dia mulai di kanan bawah wajah 2x2:
■ ■
■ ■
■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ M ■ ■ ■
■ ■
■ ■
■ ■
Program Anda akan mengambil daftar atau serangkaian arah, U
D
L
R
(atas, bawah, kiri, kanan), yang mewakili perjalanan Mario mengelilingi planet sejauh serangkaian langkah. Program ini dapat menampilkan salah satu dari dua output yang berbeda: yang satu menyatakan bahwa Mario masih hidup dan berjalan, dan yang lain menyatakan bahwa di suatu tempat di sepanjang perjalanannya, Mario telah jatuh ke dalam Satelit Shrinking.
RR: ■ ■ RRD: ■ ■ RRL: ■ ■
■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ □ M ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ □ M □ ■
■ ■ \ ■ ■ M ■ ■ \
■ ■ Let's-a go! ■ ■ \ ■ ■ W-aaaaaaaaaahh!
■ ■ ■ ■ W-aaaaaaaaaahh! ■ ■
Tentu saja, tidak seperti diagram di atas, Anda harus memperhitungkan 3D. Berikut diagram yang mungkin membantu Anda memvisualisasikan skenario dengan lebih baik:
Top 2x2 face
<- clockwise anticlockwise ->
- ■ - ■ - ■ - ■ -
/ \ / \ / \ / \
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ Left and right
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ M ■ ■ ■ ■ ■ ■ ■ ■ ■ edges wrap around.
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
<- anticlockwise clockwise ->
Bottom 2x2 face
Jadi menurut diagram ini, UUUUURRRR
mungkin terlihat seperti ini:
- ■ - ■ - □ - ■ -
/ \ / \ / \ / \
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ M ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
Dan UUUUUUUUULURRRRRR
mungkin terlihat seperti ini:
- ■ - ■ - □ - □ -
/ \ / \ / \ / \
■ ■ ■ ■ □ ■ ■ □
■ ■ ■ ■ □ ■ ■ □
-> □ ■ ■ ■ □ ■ ■ □ ->
<- □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ M □ □ □ □ □ <-
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
Semoga program terpendek dalam byte w-aaaaaaaaaahh!
Uji Kasus
Output 1: Masih Hidup
DDDDDLUUUUU
- Mario berjalan melintasi jembatan dan kembali.
RRRRDDDDLLL
- Mario berjalan dalam segitiga.
LLLLLLUUUUUURRRRR
- Mario berjalan di segitiga yang lebih besar.
ULLDRDDDRU
- Mario menempatkan dirinya dalam bahaya.
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRR
- Mario mengambil rute yang tidak konvensional ... dan menempatkan dirinya dalam bahaya.
Mario melintasi setiap ubin tepat sekali.
DDDDLUUUULLLLDDDLUUULLLLDDDDLUUUULLLLDDDLUUULLLURRRUUURDDDRRRRUUURDDDRRRRUUURDDDRRRRUUUUURDDDDD
DLDRDLDLLLDRRRDDDDLLLLLLLLLDRRRRRRRRRDDDDLLLDRRRDDDRUUURRRRULLLLUUUURRRULLLUUUUURDRURDRUURULURU
Output 2: W-aaaaaaaaaahh!
LLR
- Mario mencoba menelusuri satu langkah dan jatuh.
UULDR
- Mario mencoba untuk melintasi ubin dua kali dan melangkah ke udara.
RRDDDDD
- Mario berjalan dari jembatan di D pertama (abaikan langkah-langkah berikut).
RRRRDDDDLLLL
- Mario berjalan dalam segitiga dan jatuh melalui ubin awal.
LLLLLLUUUUUURRRRRR
- Mario berjalan di segitiga yang lebih besar dan jatuh melalui ubin awal.
UUUUUUUUUUUUUUUUUUUU
- Mario berjalan sepanjang jalan di sekitar planet ini dan jatuh melalui ubin awal.
RURDRURDRDLDRDLDLDLULDLLUU
- Mario mengambil rute yang tidak konvensional dan menjadi bingung.
Mario, menyadari bahaya yang dia hadapi, dibiarkan tanpa pilihan.
ULLDRDDDRUUU
ULLDRDDDRUUL
ULLDRDDDRUUR
ULLDRDDDRUUD
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRR
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRU
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRL
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRD
Terakhir, salin semua test case dari "Mario melintasi setiap ubin tepat sekali" dan ubah atau tambahkan satu langkah secara acak. Mario harus jatuh. (Jika Anda menambahkan langkah ke akhir, Mario jatuh untuk meraih Power Star!)
* Cantellated cube akan menjadi istilah yang lebih benar karena beberapa wajah tidak persegi, tetapi Anda harus mengakui - "rhombicuboctahedron" mengalir lebih baik.
sumber
R
. Saya telah mengerjakan ini di atas kertas untuk memastikan kode saya benar.Jawaban:
Ruby, golf,
244230 byteTampaknya bekerja dengan baik, akan menguji lebih sedikit.
Ruby, versi pertama yang berfungsi, 260 byte
Cobalah online
Fungsi Lambda mengambil argumen string. Mengembalikan 4 untuk hidup, 0 untuk mati.
Penjelasan
Papan dibuka menjadi 6 strip ukuran 2x8, diwakili oleh
/\
danO
karakter di bawah ini. Ini dipetakan ke peta 2D 24 * 8, di mana x = (nomor strip) * 4 + (posisi horizontal pada strip) dan y = posisi vertikal pada strip.Ini disimpan dalam array 8 angka biner, jadi x meningkat ke kiri dan y meningkat turun.
Array disengaja dengan 8 salinan nomor
0x33333333
. Ini membentuk kotak yang diizinkan untuk diinjak Mario. Saat Mario bergerak di sekitar alun-alun dia berada diatur ke nol, dan alun-alun dia pindah ke diuji - dia hidup itu berisi 1, dan mati jika mengandung 0.Jika Mario berjalan dari atas atau bawah strip yang dia pakai, dia pindah ke strip lain. Jika dia berjalan dari sisi strip yang dia pakai, jika dia berada di bujur sangkar dengan y = 3 atau y = 4 dia pindah ke strip lain. Jika y bukan 3 atau 4, dia tidak pindah ke strip lain dan berakhir di kotak yang memiliki 0 di dalamnya sejak awal permainan, jadi dia mati.
Karena kamera selalu di atas kepala Mario, setiap kali Mario mengganti strip, referensi untuk arah harus diputar 90 derajat.
Tidak digabungkan dalam program uji
sumber