Apakah seseorang telah didefestrasi?

26

Defenestration adalah tindakan membuang seseorang atau sesuatu ke luar jendela.
- Wikipedia

Memasukkan

Input akan terdiri dari dua bagian:

  • Denah lantai dan seseorang di dalam rumah / bangunan.

    • v><^mewakili seseorang, menunjuk ke arah yang ditandai dengan panah. Input akan berisi tepat satu orang.

    • -dan |mewakili dinding, dan #mewakili sebuah jendela. adalah ruang kosong.

    Bagian input ini dapat diambil sebagai string tunggal, atau array / daftar / dll. garis. Tidak akan pernah ada spasi tambahan atau spasi, dan input akan selalu berbentuk persegi panjang.

    Contoh:

    -----###---
    |         |
    |     ^   |
    -----------
    
  • Integer ≥ 1 yang menandakan seberapa jauh (dalam karakter) orang tersebut bepergian.

Keluaran

Outputnya seharusnya

  • 1jika orang tersebut berakhir "dalam" jendela (yaitu setelah bergerak ke depan jarak yang ditentukan dalam input, orang tersebut di atas a #).

  • 2jika orang tersebut telah didefestrasi (bersentuhan dengan a #dan kemudian melanjutkan lebih jauh).

  • 3jika orang tersebut menabrak dinding (bersentuhan dengan -atau |. Begitu menabrak dinding, orang itu berhenti dan tidak melanjutkan melewatinya).

  • 0 jika tidak ada di atas yang benar (dan semua yang dilakukan orang adalah melakukan perjalanan melalui ruang kosong).

Asumsi

Semua hal berikut ini dapat dianggap benar:

  • Orang tersebut tidak akan pernah melakukan perjalanan "di luar batas" dari area input.

  • Setelah defenestrasi, orang tersebut tidak akan pernah melakukan kontak dengan orang lain #atau -/ |(jadi Anda tidak perlu khawatir jika 2 dan 1 atau 3keduanya benar).

Uji kasus

Untuk "denah lantai" berikut:

-----
|   |
|###|
|   |
| ^ |
In   Out
1    0
2    1
3    2

Untuk denah lantai ini:

> | # |
In   Out
1    0
2-99 3    * that is, any input 2-99 outputs 3

Untuk denah lantai ini:

||####|#|#|##|<
In   Out
any  3

Kasus ujian akhir:

|v|
|#|
| |
| |
| |
| |
In   Out
1    1
2-5  2  
Gagang pintu
sumber
7
Saya mengusulkan judul tantangan ini diubah menjadi pengujian Defenestration.
kucing
1
Pertanyaan tindak lanjut: Ini, kecuali dengan pit's.
Conor O'Brien
2
@CᴏɴᴏʀO'BʀɪᴇɴHas someone been for-sparta'd?
cat
Mengapa hasil edit saya ditolak):
cat
@cat Karena ini edit pada pertanyaan orang lain, mereka harus masukan.
Conor O'Brien

Jawaban:

10

JavaScript (ES6), 147 146 byte

(p,n)=>eval('l=p.search`\n`+1;m=p.match`[<>v^]`;for(r=d=i=0;i++<n&r<3;r-1?0:d=2)r=(c=p[m.index+i*({v:l,"<":-1,">":1}[m]||-l)])>"#"?3:c>" ";+r||d')

Disimpan 1 byte berkat @NinjaBearMonkey !

Penjelasan

Mengambil denah lantai sebagai string dan jumlah gerakan. Mengembalikan angka.

(p,n)=>                               // p = floor plan as string, n = number of moves
  eval(`                              // use eval to enable for loop without {} or return
    l=p.search\`\n\`+1;               // l = line length
    m=p.match\`[<>v^]\`;              // m = the position and orientation of the person
    for(
      r=                              // r = result at the current step
        d=                            // d = 2 if the person has been defenestrated
          i=0;                        // i = current step
      i++<n&r<3;                      // for each step while the person has not hit a wall
      r-1?0:d=2                       // set d to 2 once the person enters the window
    )
      r=(                             // r = 0 if on " ", 1 if on "#" or 3 if on "|" or "-"
        c=p[m.index+i*                // c = character after current step
          ({v:l,"<":-1,">":1}[m]||-l) // get the index offset of each step
        ]
      )>"#"?3:c>" ";
    +r||d                             // return the result of the current step or d
  `)

Uji

pengguna81655
sumber
3
Saya suka cuplikan pengujian Anda!
GamrCorps
ಠ_ಠ Saya baru saja memposting hal yang persis sama.
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Haha, saya tahu perasaan itu terlalu baik ...
user81655
Jawaban yang bagus, btw! Sangat cerdas.
Conor O'Brien