Birisi davalı oldu mu?


26

Kötü muamele , birini veya bir şeyi pencereden atma eylemidir.
- Wikipedia

Giriş

Giriş iki bölümden oluşacaktır:

  • Bir kat planı ve evin / binanın içindeki bir kişi.

    • v><^okla gösterilen yönü gösteren bir kişiyi temsil eder. Giriş tam olarak bir kişi içerecektir.

    • -ve |duvarları temsil eder ve #bir pencereyi temsil eder. boş alan.

    Girişin bu kısmı tek bir dize veya bir dizi / liste / etc olarak alınabilir. Hatları Asla takip eden veya öndeki boşluklar olmayacak ve giriş her zaman bir dikdörtgen olacaktır.

    Örnek:

    -----###---
    |         |
    |     ^   |
    -----------
    
  • Kişinin ne kadar uzağa gittiğini (karakter olarak) belirten bir tam sayı ≥ 1.

Çıktı

Çıktı olmalıdır

  • 1eğer kişi bir pencerenin "içinde" bitiyorsa (yani girişte belirtilen mesafeyi ilerlettikten sonra, kişi a'nın üstündedir #).

  • 2Şahıs davalı olmuş ise (a ile temasa geçip #daha sonra da devam etmiş).

  • 3eğer kişi bir duvara çarptıysa ( -veya veya ile temas ederse |. Duvara çarptıktan sonra kişi durur ve içinden geçmez).

  • 0 Yukarıdakilerin hiçbiri doğru değilse (ve yaptığı tek şey boş uzayda yolculuk yapmaktır).

Varsayımlar

Aşağıdakilerin hepsinin doğru olduğu varsayılabilir:

  • Kişi hiçbir zaman giriş alanının “sınırları dışına” seyahat etmeyecektir.

  • Defenestrated sonra, kişi birbiriyle temas asla #veya -/ |(eğer endişe yaklaşık eğer gerek kalmaz 2 ve 1 ya 3ikisi de doğruysa).

Test durumları

Aşağıdaki "kat planı" için:

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

Bu kat planı için:

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

Bu kat planı için:

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

Son test durumu:

|v|
|#|
| |
| |
| |
| |
In   Out
1    1
2-5  2  

7
Bu zorluğun başlığının Defenestration testine
kedi

1
Takip eden soru: Bu, çukurlar hariç.
Conor O'Brien,

2
@ CᴏɴᴏʀO'BʀɪᴇɴHas someone been for-sparta'd?
kedi

Düzenlemem neden reddedildi?)
kedi,

@ catcat Başka birinin sorusuna yapılan bir düzenlemedir, üzerinde girdi olması gerekir.
Conor O'Brien,

Yanıtlar:


10

JavaScript (ES6), 147 146 bayt

(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')

@NinjaBearMonkey sayesinde 1 bayt kaydedildi !

açıklama

Dize olarak yer planını ve hareketlerin sayısını alır. Bir sayı döndürür.

(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
  `)

Ölçek


3
Test snippet'ini beğendim!
GamrCorps

ಠ_ಠ Hemen hemen aynı şeyi göndermek üzereydim.
Conor O'Brien,

@ C'O'Bʀɪᴇɴ Haha, bunun iyi hissettiğini biliyorum ...
user81655

Güzel cevap, btw! Çok zeki.
Conor O'Brien,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.