Cho một chuỗi N, S, E và W, xuất ra một ổ trục (góc theo chiều kim đồng hồ từ Bắc tính theo độ), chính xác đến 5 chữ số thập phân.
Trong ký hiệu la bàn truyền thống , một chuỗi chỉ gồm 2 ký tự này (như NNW hoặc ESE). Tại đây, bạn cũng phải chấp nhận các chuỗi chứa cả 4 (như WNNNSE) . Chỉ sử dụng 2 biểu tượng cho phép con người hiểu trực giác về ý nghĩa. Cho phép 4 biểu tượng làm cho nó thật kinh khủng khi đọc, nhưng cho phép các cách ngắn hơn để mô tả một ổ trục với độ chính xác nhất định.
(Như đã chỉ ra trong ý kiến của user2357112 , nó quay ra bạn có thể chứng minh rằng đối với bất kỳ mang nhất định, chuỗi 4 biểu tượng sẽ được chính xác độ dài tương tự như chuỗi 2 biểu tượng, vì vậy tôi đã dựa thách thức này trên một giả định sai. Hy vọng rằng việc thiếu mục đích thực tế này sẽ không làm giảm sự thích thú của bạn đối với thử thách ...)
Phương pháp chính xác được mô tả dưới đây và tương đương với ký hiệu truyền thống (nó mở rộng trên đó thay vì thay đổi nó).
Đầu vào
- Đầu vào là một chuỗi duy nhất chỉ chứa các ký tự
NESW
. - Đầu vào có thể là một chuỗi các ký tự nếu bạn thích, miễn là điều này không bao gồm bất kỳ quá trình tiền xử lý nào. Ví dụ:
[N, [E, [S, [W]]]]
không được phép lấy danh sách lồng nhau để giúp xử lý thứ tự xử lý. - Lấy các ký tự khác nhau là không được phép. Bạn có thể không lấy một chuỗi
1234
thay vìNESW
.
Đầu ra
- Đầu ra phải là số thập phân hoặc biểu diễn chuỗi của một (không phải là số hữu tỷ / phần).
- Số không lưu trữ không cần phải được hiển thị. Nếu ổ trục là
9.00000
, thì đầu ra9
cũng được tính là chính xác đến 5 chữ số thập phân. - Đầu ra nằm trong phạm vi [0, 360). Đó là, bao gồm 0 nhưng không bao gồm 360.
- Độ chính xác được kiểm tra bằng cách làm tròn đầu ra đến 5 chữ số thập phân. Nếu ổ trục là 0,000005, vòng này đến 0,00001. Đầu ra 0,00001 và 0,000005 đều đúng.
- Đầu ra trong ký hiệu khoa học cho một số đầu vào là chấp nhận được. Ví dụ,
1e-5
thay vì0.00001
.
Chuyển đổi
- Các ký tự đơn la bàn điểm
N
,E
,S
, vàW
tương ứng với 0, 90, 180, và 270 độ tương ứng. - Chuẩn bị một trong những thứ này cho một chuỗi dẫn đến ổ trục chia đôi ổ đỡ của ký tự đơn và ổ trục của chuỗi gốc.
- Gần nhất trong hai vòng bi chia đôi có thể được chọn, sao cho NE đại diện cho 45 độ, không phải 225 độ.
- Điều này không rõ ràng trừ trường hợp góc bị cắt là 180 độ. Do đó
NS
,SN
,WE
, vàEW
tương ứng với ổ trục undefined, và đầu vào sẽ không bao giờ kết thúc trong bất kỳ trong số này. Tuy nhiên, chúng có thể xuất hiện ở bất kỳ nơi nào khác trong chuỗi đầu vào, vì điều này không gây ra sự mơ hồ. - Nếu hai ký tự cuối cùng giống hệt nhau, ký tự cuối cùng sẽ là dự phòng vì phép chia sẽ trả về cùng một mang. Vì điều này không thêm gì vào ký hiệu, mã của bạn không cần xử lý việc này. Do đó
NN
,EE
,SS
, vàWW
tương ứng với ổ trục undefined, và đầu vào sẽ không bao giờ kết thúc trong bất kỳ trong số này. Tuy nhiên, chúng có thể xuất hiện ở bất kỳ nơi nào khác trong chuỗi đầu vào.
Ví dụ
N: 0
E: 90
S: 180
SE: halfway between S and E: 135
NSE: halfway between N and SE: 67.5
NNSE: halfway between N and NSE: 33.75
NNNSE: halfway between N and NNSE: 16.875
NNNNSE: halfway between N and NNNSE: 8.4375
Các trường hợp thử nghiệm
Một đệ trình chỉ có hiệu lực nếu nó cung cấp đầu ra chính xác cho tất cả các trường hợp thử nghiệm. Lưu ý rằng các trường hợp thử nghiệm đẩy đến giới hạn của những gì có thể được xử lý với độ chính xác gấp đôi. Đối với các ngôn ngữ mặc định với độ chính xác đơn, có lẽ bạn sẽ cần phải sử dụng các byte để chỉ định độ chính xác kép để có được đầu ra chính xác.
Kết quả đầu ra của trường hợp thử nghiệm được hiển thị làm tròn đến 5 chữ số thập phân và độ chính xác tùy ý. Cả hai đều là đầu ra hợp lệ.
WNE 337.5 337.5
WEN 337.5 337.5
WEWEWEWEWEWEWEWEWEWEWEN 330.00001 330.000007152557373046875
NESWNESWNESWNESWNESWNESWNESW 90 89.99999932944774627685546875
NNNNNNNNNNNNNNNNNNNNNNNE 0.00001 0.0000107288360595703125
NNNNNNNNNNNNNNNNNNNNNNNW 359.99999 359.9999892711639404296875
SNNNNNNNNNNNNNNNNNNNNNNNE 90.00001 90.00000536441802978515625
SNNNNNNNNNNNNNNNNNNNNNNNW 269.99999 269.99999463558197021484375
Chấm điểm
Đây là mã golf . Điểm số là độ dài của mã nguồn tính bằng byte và chiến thắng ngắn nhất.
Nhà sư phạm
Tôi đã phạm sai lầm khi nghĩ rằng "North by North West" là một hướng la bàn hợp lệ. Một sai lầm hạnh phúc, vì nó đã dẫn đến một ý tưởng thách thức, nhưng sau đó tôi đã phát hiện ra từ trang Wikipedia :
"Tiêu đề của bộ phim Alfred Hitchcock 1959, North by Northwest, thực sự không phải là một hướng trên la bàn 32 gió, mà là bộ phim có liên quan đến hãng hàng không Tây Bắc. "
Nó cũng chỉ ra rằng phương pháp được sử dụng cho thử thách này chỉ phù hợp với các điểm la bàn truyền thống lên đến và bao gồm cả la bàn 16 điểm. La bàn 32 gió được mô tả trên trang đó rất khác biệt và tôi đã thuận tiện bỏ qua sự tồn tại của nó cho thử thách này.
Cuối cùng, đối với bất cứ ai nghĩ rằng tôi nên sử dụng "Đông Nam" thay vì "Đông Nam",.
WNNNSE
, đầu ra sẽ là 323.4375
. Xem phần ví dụ để biết hướng dẫn sẽ áp dụng theo cách tương tự cho trường hợp này.
f(N,N,N,S,E)
ổn không?
WNNNSE
<= Điều gì sẽ là đầu ra cho mục nhập ví dụ này khi bắt đầu bài viết của bạn? Nghe có vẻ không hợp lệ đối với tôi, nhưng thật khó để nói.