Giới thiệu liên quan đến trẻ em
Bất cứ khi nào tôi đưa con đến công viên giải trí, bọn trẻ càng lo lắng hơn khi chúng tôi đến gần công viên hơn, với đỉnh cao thần kinh khi chúng tôi ở trong bãi đậu xe và không tìm thấy chỗ đậu. Vì vậy, tôi đã quyết định tôi cần một phương pháp để tìm chỗ đỗ xe miễn phí gần nhất để giảm thiểu thời gian đỗ xe.
Giới thiệu kỹ thuật
Hãy tưởng tượng một đại diện của một bãi đậu xe như thế này:
*****************
* *
* ··CC··C··CC·· *
* ************* *
* ··CCCCCCCCC·· *
* *
**********E******
Trong đại diện này *
có nghĩa là một bức tường, một ·
chỗ đậu xe miễn phí, một E
điểm vào và C
một chiếc xe đã đậu. Mỗi khoảng trắng là một vị trí mà chiếc xe đang đỗ có thể sử dụng để di chuyển xung quanh bãi đậu xe. Bây giờ, hãy mở rộng khái niệm này sang 3D để tạo bãi đỗ xe đa cấp:
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
Các con số 1
, 2
và 3
đại diện cho các kết nối giữa các cấp. Các 1
từ sẽ kết nối sàn đầu tiên với 1
ở tầng thứ hai do đó, một chiếc xe bước vào 1
vị trí ở tầng đầu tiên xuất hiện trong 1
vị trí ở tầng thứ hai.
Thử thách
Đưa ra sơ đồ của một bãi đỗ xe như được hiển thị trước đó, hãy viết chương trình ngắn nhất để tính khoảng cách đến chỗ đỗ xe miễn phí gần nhất, theo như sau
Quy tắc
- Đầu vào sẽ là mảng char 3D hoặc mảng chuỗi 2D hoặc tương đương, và đầu ra sẽ là một số nguyên duy nhất biểu thị số bước mà xe phải thực hiện để đến chỗ đỗ xe miễn phí gần nhất. Nếu bạn nhận được một mảng char 3D, chỉ mục đầu tiên có thể đại diện cho số sàn và chỉ số thứ hai và thứ ba vị trí (x, y) cho mỗi tầng, nhưng điều này tùy thuộc vào bạn.
- Sẽ không có hơn 9 đường dốc, được đại diện bởi
[1-9]
. - Chiếc xe bắt đầu từ
E
vị trí (sẽ chỉ có một điểm vào trên mỗi bản đồ) và di chuyển xung quanh bằng cách sử dụng khoảng trắng theo một trong bốn hướng mỗi lần: lên, xuống, trái, phải. Chiếc xe cũng có thể bước vào·
vị trí và[1-9]
vị trí. - Mỗi thay đổi vị trí (bước) được tính là 1, và mỗi khi xe đi từ tầng này sang tầng khác thì tính là 3 vì xe phải đi dốc. Trong trường hợp này, chuyển động từ một khoảng trắng bên cạnh a
1
sang1
chính nó được tính là 3 bước, bởi vì kết quả của chuyển động này, chiếc xe xuất hiện ở1
vị trí trên tầng khác. - Chiếc xe không thể vượt quá giới hạn ma trận.
- Việc đếm sẽ kết thúc khi chiếc xe đang đỗ ở cùng vị trí với a
·
. Nếu không có chỗ đỗ xe miễn phí có thể tiếp cận, bạn có thể trả về 0, số nguyên âm, giá trị null hoặc lỗi.
Ví dụ
Trong ví dụ trên, kết quả sẽ là 32, vì rẻ hơn khi đi lên tầng bốn và đỗ xe ở chỗ đậu xe gần nhất 3
. Các chỗ đậu xe miễn phí gần nhất ở tầng ba nằm ở khoảng cách 33 và 34.
Những ví dụ khác:
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
Answer: 28 (now the parking space in the 2nd floor is closer)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 4 2 5 3 6 *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
4 * 5 1 6 2 * 3
**********E****** ***************** ***************** *****************
Answer: 24 (now it's better to go to ramp 4 and then to ramp 5 to the third floor)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * * * 3 * 2
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 3 * 2 * 1
**********E****** ***************** ***************** *****************
Answer: 16 (now the parking space in the 4th floor is closer)
1st floor 2nd floor 3rd floor 4th floor 5th floor
************ ************ ************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC 3 *·CCCCCCCC 4 *········C *
* * * * * * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2 *··CCCCCCC 3 *·······CC 4
************ ************ ************ ************ ************
Answer: 29 (both the nearest parking spaces at the 4th and 5th floors are at the same distance)
1st floor 2nd floor 3rd floor
************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC *
* * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2
************ ************ ************
Answer: -1 (no free parking space)
1st floor
************
* *
* *
* E*
************
Answer: -1 (no parking space at all)
1st floor
************
* ····· *
*· ****
* ····· * E
*********
Answer: -1 (the parking lot designer was a genius)
Lựa chọn thay thế
- Bạn có thể sử dụng bất kỳ ký tự nào bạn muốn để thể hiện bản đồ bãi đỗ xe, chỉ cần xác định trong câu trả lời của bạn là các ký tự bạn đã chọn và ý nghĩa của chúng.
Đây là môn đánh gôn , vì vậy có thể chương trình / phương pháp / lambda / bất cứ điều gì ngắn nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!
Nếu bạn cần trợ giúp với thuật toán, vui lòng kiểm tra triển khai (chưa được xử lý) của tôi trong C # .