Có ai đó đã bị nói xấu?


26

Nói xấu là hành động ném ai đó hoặc thứ gì đó ra khỏi cửa sổ.
- Wikipedia

Đầu vào

Đầu vào sẽ bao gồm hai phần:

  • Một kế hoạch sàn và một người trong nhà / tòa nhà.

    • v><^đại diện cho một người, chỉ theo hướng được biểu thị bằng mũi tên. Đầu vào sẽ chứa chính xác một người.

    • -|đại diện cho các bức tường, và #đại diện cho một cửa sổ. là không gian trống.

    Phần đầu vào này có thể được lấy dưới dạng một chuỗi đơn hoặc một mảng / danh sách / v.v. của dòng. Sẽ không bao giờ có bất kỳ dấu vết hoặc khoảng trắng hàng đầu nào, và đầu vào sẽ luôn là một hình chữ nhật.

    Thí dụ:

    -----###---
    |         |
    |     ^   |
    -----------
    
  • Một số nguyên ≥ 1 biểu thị quãng đường (tính theo ký tự) mà người đó đi được.

Đầu ra

Đầu ra phải là

  • 1nếu người đó kết thúc "bên trong" một cửa sổ (tức là sau khi di chuyển về phía trước khoảng cách được chỉ định trong đầu vào, thì người đó ở trên đầu a #).

  • 2nếu người đó đã bị từ chối (tiếp xúc với a #và sau đó tiếp tục tiếp tục).

  • 3nếu người đó va vào tường (tiếp xúc với một -hoặc |. Sau khi va vào tường, người đó dừng lại và không tiếp tục đi qua nó).

  • 0 nếu không có điều nào ở trên là đúng (và tất cả những gì người đó đã làm là đi qua không gian trống).

Giả định

Tất cả những điều sau đây có thể được coi là đúng:

  • Người đó sẽ không bao giờ đi "ra khỏi giới hạn" của khu vực đầu vào.

  • Sau khi được defenestrated, người đó sẽ không bao giờ tiếp xúc với một #hoặc một -/ |(do đó bạn không cần phải lo lắng về việc nếu 2 1 hay 3đều đúng).

Các trường hợp thử nghiệm

Đối với "kế hoạch sàn" sau đây:

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

Đối với kế hoạch sàn này:

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

Đối với kế hoạch sàn này:

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

Trường hợp thử nghiệm cuối cùng:

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

7
Tôi đề nghị tiêu đề của thử thách này được đổi thành thử nghiệm Defenestration.
con mèo

1
Câu hỏi tiếp theo: Điều này, ngoại trừ với hố.
Conor O'Brien

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

Tại sao bản chỉnh sửa của tôi bị từ chối):
mèo

@cat Bởi vì đó là một chỉnh sửa về câu hỏi của người khác, rằng họ phải có đầu vào.
Conor O'Brien

Câu trả lời:


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

Đã lưu 1 byte nhờ @NinjaBearMonkey !

Giải trình

Lấy sơ đồ tầng như một chuỗi và số lần di chuyển. Trả về một số.

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

Kiểm tra


3
Tôi thích đoạn thử nghiệm của bạn!
GamrCorps

_ಠ Tôi vừa mới đăng bài khá giống nhau.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Haha, tôi biết cảm giác đó rất tốt ...
user81655

Câu trả lời hay, btw! Rất thông minh.
Conor O'Brien
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.