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  

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.