Bir N, S, E ve W dizisi verildiğinde, 5 ondalık basamağa kadar bir yatak (saat yönünde Kuzey yönünde saat yönünde) verin.
Gelen geleneksel pusula gösterimde , bir dize sadece 2 (KKB veya ESE gibi) bu karakterlerin oluşur. Burada 4'ün tümünü içeren dizeleri de kabul etmelisiniz (WNNNSE gibi) . Sadece 2 sembol kullanmak, insanların anlamlarını sezgisel olarak anlamalarını sağlar. 4 sembole izin vermek okumayı zorlaştırır, ancak bir rulmanı belirli bir hassasiyetle tanımlamanın daha kısa yollarına izin verir.
( User2357112 tarafından yapılan yorumlarda belirtildiği gibi , verilen herhangi bir yatak için, 4 simge dizisinin tam olarak 2 simge dizgesiyle aynı uzunlukta olacağını kanıtlayabiliyorsunuz, bu yüzden bu zorluğu yanlış bir varsayıma dayandırdım. Umarım bu pratik bir amaç eksikliği, bu zorluktan zevk almanıza engel değildir ...)
Kesin yöntem aşağıda açıklanmıştır ve geleneksel gösterime eşdeğerdir (değiştirmek yerine üzerinde genişler).
Giriş
- Giriş, yalnızca karakterleri içeren tek bir dizedir
NESW
. - Bu, herhangi bir ön işleme içermemesi koşuluyla, tercih ederseniz, giriş bir karakter dizisi olabilir. Örneğin,
[N, [E, [S, [W]]]]
işlem sırasına yardımcı olmak için yuvalanmış bir listeye alınmasına izin verilmez. - Farklı karakterler almak yasaktır. Bunun
1234
yerine bir dize alamazsınızNESW
.
Çıktı
- Çıktı, bir ondalık sayı veya bir dize gösterimi olmalıdır (rasyonel / kesir değil).
- Sondaki sıfırların görüntülenmesine gerek yoktur. Eğer yatak ise
9.00000
, o zaman da çıkış9
5 ondalık basamağa kadar doğru sayılır. - Çıkış, [0, 360) aralığındadır. Yani, 0 dahil ancak 360 hariç.
- Doğrulama, çıkışı 5 ondalık basamağa yuvarlayarak kontrol edilir. Yatak 0.000005 ise, bu 0.00001'e yuvarlanır. 0.00001 ve 0.000005 çıkışlarının her ikisi de doğrudur.
- Bazı girdiler için bilimsel gösterimde çıktı kabul edilebilir. Örneğin,
1e-5
yerine0.00001
.
dönüştürme
- Tek karakter pusula noktası
N
,E
,S
veW
tekabül 0, 90, 180, ve 270 derece, sırasıyla. - Bunlardan birinin bir dizeye hazırlanması, tek karakterin yatağını ve orijinal dizinin yatağını ikiye ayıran yatakla sonuçlanır.
- İki olası yataklama mekanizmasına en yakın olanı seçilmiştir, böylece NE 225 dereceyi değil 45 dereceyi temsil eder.
- İkiye ayrılacak açının 180 derece olması haricinde bu kesin değildir. Bu nedenle
NS
,SN
,WE
veEW
tanımsız rulmanlar karşılıklıdır ve giriş bunlardan herhangi birinde hiç bitmeyecek. Ancak giriş dizesinde başka bir yerde görünebilirler, çünkü bu belirsizlik yaratmaz. - Eğer son iki karakter aynıysa, ibreler aynı yatağı geri getireceğinden, son karakter gereksiz olacaktır. Bu, notasyona bir şey eklemediğinden, kodunuzun bununla başa çıkması gerekmez. Bu nedenle
NN
,EE
,SS
veWW
tanımsız rulmanlar karşılıklıdır ve giriş bunlardan herhangi birinde hiç bitmeyecek. Ancak giriş dizesinde başka bir yerde görünebilirler.
Örnekler
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
Test durumları
Bir başvuru, yalnızca tüm test durumları için doğru çıktı verirse geçerlidir. Test durumlarının, çift hassasiyetle ele alınabilecek sınırlarını zorladığını unutmayın. Tek kesinliğe varsayılan diller için, doğru çıktılar alabilmek için büyük olasılıkla çift duyarlık belirtmek için bayt harcamalısınız.
Test senaryosu çıktıları, 5 ondalık basamağa ve ayrıca isteğe bağlı kesinliğe yuvarlatılmış olarak gösterilir. Her ikisi de geçerli çıktılar.
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
puanlama
Bu kod golfü . Skor kaynak kodun bayt cinsinden uzunluğu ve en az kazanılan puandır.
bilgiçlik taslama
"Kuzeyden Kuzeye doğru Kuzey" in geçerli bir pusula yönü olduğunu düşünerek hata yaptım. Mutlu bir hata, çünkü bu zor bir fikir doğurdu, fakat daha sonra Wikipedia sayfasından keşfettim :
"Kuzeybatı tarafından Kuzey’de bulunan Alfred Hitchcock 1959 filminin ismi aslında 32 rüzgar pusulasındaki bir yön noktası değil, ama film, Northwest Airlines'a bir referans içeriyor. "
Ayrıca, bu zorluk için kullanılan yöntemin yalnızca 16 nokta pusulayı da içeren geleneksel pusula noktaları ile tutarlı olduğu ortaya çıktı. Bu sayfada tarif edilen 32 rüzgar pusulası çok farklı ve bu zorluk için varlığını rahatlıkla gözden kaçırdım.
Son olarak, "Güney Doğu" yerine "Güneydoğu" yu kullanmam gerektiğini düşünenler için.
WNNNSE
için çıktı olacaktır 323.4375
. Bu durumda aynı şekilde uygulanacak bir örnek için örnek bölüme bakın.
f(N,N,N,S,E)
tamam mı?
WNNNSE
<= yayınınızın başlangıcındaki bu örnek girdi için çıktı ne olur? benim için geçersiz gibi geliyor, ama anlatması zor.