ค้นหามุมอ้างอิง


17

นี่เป็นคำถามที่ค่อนข้างง่าย ตามเว็บไซต์สุ่มนี้ที่ฉันพบ - Web Archiveมุมอ้างอิงคือthe acute angle formed by the terminal side of the given angle and the x-axis.คุณต้องเขียนโปรแกรมเพื่อค้นหาสิ่งเหล่านี้

ฉันจำอะไรไม่ได้จากพีชคณิต 2 นี่แปลว่าอะไร?

มุมมักจะได้รับในรูปแบบมาตรฐานซึ่งวัดได้โดยการวางมุมด้านหนึ่งของมุมแล้ววัดไปอีกด้านทวนเข็มนาฬิกาดังนี้:

แบบฟอร์มมาตรฐาน

นี่จะเป็นข้อมูลที่คุณป้อน ผลลัพธ์ของคุณจะเป็นมุมอ้างอิงของสิ่งนี้ คุณสามารถคิดได้ว่านี่เป็นระยะทางที่เล็กที่สุดจากฝั่งเทอร์มินัลไปจนถึงแกน x ยกเว้นมันเป็นมุมไม่ใช่ระยะทาง นี่คือตัวอย่างบางส่วน:

อ้างอิง Quad 2 อ้างอิง Quad 1

อ้างอิง Quad 3 อ้างอิง Quad 4

ชี้แจง

  • ค่าเริ่มต้นทั้งหมดในอินพุตและการส่ง
  • มุมที่อยู่ในองศา
  • มุมลบมุมที่ไม่ใช่จำนวนเต็มและมุม> 360 องศาจะได้รับอนุญาต
  • 60 degการส่งออกในรูปแบบ
  • นี่คือดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ!

อีกประการหนึ่งการเชื่อมโยงที่เป็นประโยชน์

กรณีทดสอบ

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

1
เราทำอะไรกับอินพุท 90
lirtosiast

2
@ThomasKwa มันจะเป็น 90 จากทั้งสองทิศทาง
Maltysen

1
วิธีแก้ปัญหาสั้น ๆ คือabs(arcsin(sin(input)))+" deg"ถึงแม้ว่าฉันไม่รู้ว่าภาษาใดจะชนะ
lirtosiast

อินพุตเป็นจำนวนเต็มเสมอหรือไม่?
lirtosiast

6
เนื่องจากอนุญาตให้มีมุมที่ไม่ใช่จำนวนเต็มคุณควรรวมมุมในการทดสอบ
Dennis

คำตอบ:




5

Python 2, 34 ไบต์

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

การใช้การ"%d deg"จัดรูปแบบสตริงจะนานขึ้นเนื่องจากวงเล็บที่ต้องการ




3

Mathematica, 22 31

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

1
@ LegionMammal978 ถ้าฉันเพียงแค่คูณด้วยdeg, จะกลายเป็น0 deg 0
alephalpha

1
เนื่องจากคุณไม่สนใจประเภทเอาต์พุตคุณสามารถบันทึก 2 ไบต์เช่นนี้:Row@{Abs@Mod[#,180,-90],deg}&
LegionMammal978

3

Python 2, 35

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

มุมเล็กลงและโมดูโลล180บ แปลงมุมอย่างมีประสิทธิภาพเป็นช่วงตั้งแต่ 0 ถึง 180 และใช้ระยะทางไปใกล้จุดสิ้นสุด โปรดทราบว่ากลุ่ม-x%180(-x)%180

ความยาวเท่ากันกับการจัดรูปแบบสตริงสำหรับ Python 3:

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

3

Pyth 25 30 ไบต์

วิธีแก้ปัญหาที่ไม่สร้างสรรค์อย่างเจ็บปวดโดยใช้ฟังก์ชั่นตรีโกณมิติ Permalink

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

ข้อเสนอแนะใด ๆ ยินดีต้อนรับ


1
รับได้ถึง 28 โดยการ.tโทรและวางไว้ใน:+.R.t.a.tF[Q7Z3)6?%Q1Q0" deg
Maltysen

เรียบร้อย ฉันสังเกตว่ามันไม่ทำงานกับอินพุตจุดลอยตัว: 90.5 => 90.0 degแม้ว่า
Winny

นั่นเป็นเพราะคุณไม่ได้เป็นเช่นนั้น: pyth.herokuapp.com/ …
Maltysen

จับที่น่าสนใจ ด้วยอินพุตแต่มี-60.5 => 60.5 deg 60.5 => 60.0 degดูเหมือนปัญหากับPyth
Winny

1

JavaScript (ES6), 43 ไบต์

คล้ายกับคำตอบ SP3000 ของแม้ว่าโมดูโลคือมีความยาวค่อนข้างเนื่องจากพฤติกรรมในจาวาสคริปต์

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

การสาธิต

รหัสถูกเขียนใหม่ใน ES5 สำหรับความเข้ากันได้ของเบราว์เซอร์:

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 ไบต์

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

5
ฉันคิดว่ามันเป็นการตัดสินใจออกแบบโดยวิศวกรฮาร์ดแวร์ PDP ซึ่งรับผิดชอบต่อความจริงที่ว่าหลายทศวรรษต่อมาเรายังมีภาษาที่ใช้งาน%ได้น้อยมาก
Peter Taylor

การแทนที่ 180 ตัวแรกด้วยการ(t=180)แทนที่ 180s ต่อไปนี้ด้วย t อาจจะช่วยประหยัดได้ไม่กี่ไบต์
Downgoat

@ vihan1086 มันเหมือนกัน
rink.attendant.6


1

Matlab, 44

ใช้ฟังก์ชั่นที่ไม่ระบุชื่อ:

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

ตัวอย่าง:

>> 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
สิ่งนี้ไม่ได้ผนวก 'deg' ในตอนท้าย (ไม่ได้ลงคะแนนเลย)
Legendre

@Legendre โอ๊ะโอ ขอบคุณ! แก้ไขแล้ว
Luis Mendo



-1

PHP, 44 ไบต์

รับพารามิเตอร์บรรทัดคำสั่งหนึ่งรายการ อีกครั้งPHP ทนทุกข์ทรมานจากปัญหาเช่นเดียวกับ JavaScript

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

การใช้โซลูชันที่ยอมรับต้องใช้ 53 ไบต์ (การแปลงองศาและเรเดียนใช้อักขระจำนวนมาก):

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

1
PHP ใช้.สำหรับการเรียงต่อกันหรือไม่?
Downgoat

@ vihan1086 .ใช่ใช้ ลงคะแนนจนกว่าจะได้รับการแก้ไข
Ismael Miguel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.