Referans açısını bulun


17

Bu oldukça basit bir soru. Bulduğum bu rastgele web sitesine göre - Web Arşivi , referans açısı the acute angle formed by the terminal side of the given angle and the x-axis.Bunları bulmak için bir program yazmak zorunda.

Cebir 2'den hiçbir şey hatırlamıyorum, bu ne anlama geliyor?

Açılar genellikle açının bir tarafını yerleştirerek ve diğer tarafa saat yönünün tersine ölçerek ölçülen standart biçimde verilir :

Standart biçim

Bu sizin girdiniz olacak. Çıktınız bunun referans açısı olacaktır. Bunu temel olarak terminal tarafından x eksenine olan en küçük mesafe olarak düşünebilirsiniz. Dışında bir açı değil, bir açı. İşte bazı örnekler:

Dörtlü 2 ref Dörtlü 1 ref

Dörtlü 3 ref Dörtlü 4 referans

Açıklamalar

  • Girişler ve gönderilerdeki tüm varsayılanlar.
  • Açılar derece cinsindendir .
  • Negatif açılar, tamsayı olmayan açılar ve> 360 derece açılar kullanılabilir .
  • Form olarak çıktı 60 deg.
  • Bu , bayt en kısa kod kazanır!

Başka bir yararlı bağlantı .

Test Durumları

70      ->  70 deg
135     ->  45 deg
210     ->  30 deg
-60     ->  60 deg
91      ->  89 deg
610     ->  70 deg
-1000   ->  80 deg

1
90 girdisinde ne yapıyoruz?
lirtosiast

2
@ThomasKwa her iki yönden de 90 olurdu.
Maltysen

1
Kısa bir çözüm, abs(arcsin(sin(input)))+" deg"hangi dilin kazanacağını bilmiyorum (dereceleri ve dize işlemlerini desteklemesi gerekecek).
lirtosiast

Giriş her zaman bir tamsayı mıdır?
lirtosiast

6
Tamsayı olmayan açılara izin verildiğinden, test senaryolarına bir tane eklemelisiniz.
Dennis

Yanıtlar:




5

Python 2, 34 bayt

lambda x:`90-abs(x%180-90)`+' deg'

"%d deg"Dize biçimlendirmesinin kullanılması , gerekli parantez nedeniyle daha uzun olur.



4

dc, 25

90?90+d*v180%-d*vn[ deg]p

Not dc, _yerine -ve işareti olarak kullanır -.

Test çıktısı:

$ for test in 70 135 210 _60 91 610 _1000; do dc -e'90?90+d*v180%-d*vn[ deg]p' <<< $test ; done
70 deg
45 deg
30 deg
60 deg
89 deg
70 deg
80 deg
$

3

Mathematica, 22 31

ToString@Abs@Mod[#,180,-90]deg&

1
@ LegionMammal978 Sadece çarpma bunun tarafından ise deg, 0 degolacak 0.
alephalpha

1
Çıktı türünü umursamadığınız için, 2 baytı şu şekilde kaydedebilirsiniz:Row@{Abs@Mod[#,180,-90],deg}&
LegionMammal978

3

Python 2, 35

lambda x:`min(x%180,-x%180)`+' deg'

Açı ve negatif modulo daha küçük 180. Açıyı 0 ila 180 aralığına etkili bir şekilde dönüştürür ve uç noktaların yakınına olan mesafeyi alır. -x%180Gruplar olarak unutmayın (-x)%180.

Python 3 için dize biçimlendirmesiyle aynı uzunluk:

lambda x:'%d deg'%min(x%180,-x%180)

3

Pyth 25 30 bayt

Trig fonksiyonlarını kullanarak ağrısız yaratıcı çözüm. kalıcı

+.R.t.a.t.t.tQ7Z3 6?%Q1Q0" deg

Herhangi bir öneri bekliyoruz.


1
.tÇağrıları alarak ve bir kat koyarak +.R.t.a.tF[Q7Z3)6?%Q1Q0" deg
28'e indi

Temiz. Ben bir kayan nokta girişi ile çalışmak gibi görünmüyor fark ettim 90.5 => 90.0 deg, ama.
Winny

Çünkü sizinkiler de aşağıdakilerden biri değil: pyth.herokuapp.com/…
Maltysen

İlginç yakalama. Girdi ile -60.5 => 60.5 degama ile 60.5 => 60.0 deg. Pyth ile ilgili bir sorun gibi görünüyor - pyth / macros.py kullanan örnek
Winny

1

JavaScript (ES6), 43 bayt

Sp3000'in cevabına benzer şekilde , modulo JavaScript'teki davranış nedeniyle oldukça uzundur .

f=x=>90-Math.abs((x%180+180)%180-90)+' deg'

gösteri

Tarayıcı uyumluluğu için kod ES5'te yeniden yazılmıştır:

function f(x){return 90-Math.abs((x%180+180)%180-90)+' deg'}

// Snippet stuff
console.log = function(x){document.body.innerHTML += x + '<br>'};
[70,135,210,-60,91,610,-1000].map(function(v){console.log(f(v))});

CoffeeScript, 45 bayt

f=(x)->90-Math.abs((x%180+180)%180-90)+' deg'

5
PDP donanım mühendisi tarafından, birkaç on yıl sonra hala %mantıklı bir şekilde uygulanan çok az dile sahip olmamızdan sorumlu bir tasarım kararı olduğunu düşünüyorum .
Peter Taylor

İlk 180 ile (t=180)değiştirmek ve ardından aşağıdaki
180'leri

@ vihan1086 Aynı
rink.attendant.6


1

Matlab, 44

Anonim bir işlev kullanma:

f=@(x)[num2str(min(mod([x -x],180))) ' deg']

Misal:

>> f=@(x)[num2str(min(mod([x -x],180))) ' deg']
f = 
    @(x)[num2str(min(mod([x,-x],180))),' deg']

>> f(70)
ans =
70 deg

>> f(210)
ans =
30 deg

>> f(-1000)
ans =
80 deg

4
Bu sonunda 'deg' eklemez. (İndirmedim.)
Legendre

@Legendre Hata. Teşekkürler! Düzeltildi
Luis Mendo



-1

PHP, 44 bayt

Bir komut satırı parametresi alır. PHP yine JavaScript ile aynı sorundan muzdarip .

<?=90-abs(($argv[1]%180+180)%180-90)+' deg';

Standart çözümü kullanmak 53 bayt gerektirir (derece ve radyan dönüşümü çok fazla karakter alır):

<?=rad2deg(abs(asin(sin(deg2rad($argv[1])))))+' deg';

1
PHP .birleştirme için kullanmıyor mu?
Downgoat

@ vihan1086 Evet, PHP kullanıyor .. Düzeltilene kadar indirildi
Ismael Miguel
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.