এই পর্বতটি কতটা আলোকিত? 🔥


62

একটি পর্বতকে লাইন বিভাগগুলির একটি সেট হিসাবে সংজ্ঞায়িত করা হয় যার প্রথম বিন্দুতে স্থানাঙ্ক রয়েছে (0,a)যেখানে a > 0, এবং যার শেষ বিন্দুতে স্থানাঙ্ক রয়েছে (b,0), কোথায় b > 0। সমস্ত মধ্যবর্তী পয়েন্টগুলির সাথে 0 এর চেয়ে y- সমন্বিত (অর্ডিনেট) থাকে এবং আপনাকে x- স্থানাঙ্কের (অ্যাবসিসি) ক্রমবর্ধমান ক্রমে সাজানো পর্বতের পয়েন্টগুলি দেওয়া হয়। নোট করুন যে দুটি পয়েন্টে একই x- সমন্বয় থাকতে পারে, যা পর্বতের উল্লম্ব অংশ তৈরি করে। যদি আপনাকে একই এক্স-কো-অর্ডিনেটের সাথে দুটি পয়েন্ট দেওয়া হয় তবে তাদের দেওয়া ক্রমের সাথে সেগুলি সংযুক্ত করা উচিত। এছাড়াও, পর্বতের অনুভূমিক বিভাগ থাকতে পারে এই অনুভূমিক অংশগুলি জ্বলিত হয় না, তা যাই হোক না কেন। সমস্ত স্থানাঙ্কগুলি হ'ল সংকেতসংখ্যা পূর্ণসংখ্যা।

প্রশ্ন: সূর্যটি পাহাড়ের ডানদিকে অবস্থিত আলোর একটি অসীম উল্লম্ব সমতল হিসাবে ধরে ধরে, পর্বতের মোট দৈর্ঘ্য কত? এই সংখ্যাটি গোল করার দরকার নেই, তবে এটি বৃত্তাকার হলে কমপক্ষে চার দশমিক স্থান অন্তর্ভুক্ত করুন আমি একটি ছবি অন্তর্ভুক্ত করেছি: পর্বত এখানে, সাহসী রেখাগুলি প্রজ্বলিত অংশগুলিকে উপস্থাপন করে। নোট করুন যে ইনপুটটিতে P টি Q এর আগে উপস্থিত হবে (PQ একটি উল্লম্ব রেখার অংশ) তাই পূর্ববর্তী পয়েন্টটি P এর সাথে সংযুক্ত থাকে এবং Q এর সাথে নয়।

আপনি তালিকার তালিকা, একক তালিকা, একটি স্ট্রিং ইত্যাদির মতো যেকোন যুক্তিসঙ্গত বিন্যাসে ইনপুট নিতে পারেন

পরীক্ষা ক্ষেত্রে:

(0,3000)
(500, 3500)
(2500, 1000)
(5000,5000)
(9000,2000)
(9000,3500)
(10200,0)

Output: 6200.0000

এই চিত্রটিতে প্রদর্শিত হিসাবে এখানে দুটি লিট-আপ বিভাগ রয়েছে: পরীক্ষার কেস পিক প্রথমটির দৈর্ঘ্য 5000/2 = 2500 এবং দ্বিতীয়টির দৈর্ঘ্য 3700 রয়েছে।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins


1
ইঙ্গিত: বিভাগটির দৈর্ঘ্য সন্ধান করার সময়, আপনাকে তিনটি পয়েন্ট বিবেচনা করতে হবে: দুটি সমাপ্তি এবং এটি "ব্লক" করছে এমন বিন্দু (২ য় ছবিতে, এটি হবে (9000,3500) যা দৈর্ঘ্য নির্ধারণ করে ২-৩-৩-২০ ভাগের মূল অংশটি মূল সেগমেন্টের দুটি পয়েন্ট হ'ল (x1, y1)এবং এটি (x2,y2)যে বিন্দুটি "অবরুদ্ধ" হচ্ছে তা হ'ল (x3, y3)ধরুন y2 <y3 <= y1। তারপর বিভাগটির দৈর্ঘ্য হবে is ((y1 - y3)/(y1 - y2))*sqrt((x1 - x2)^2 + (y1 - y2)^2)এটি মূলত দূরত্ব সূত্র, সেগমেন্টের ভগ্নাংশ যা আসলে ব্যবহার করা হয় দ্বারা গুন।
পাতানো

1
পর্বত অনুভূমিক হতে পারে?
ব্যবহারকারী 202729

হ্যাঁ, পর্বতে অনুভূমিক অংশ থাকতে পারে। তবে এটি কোনও সময়ে 0 এ যাবে।
22:55

1
তবে সেগুলো জ্বালানো উচিত?
ব্যবহারকারী 202729

তারা প্রজ্বলিত হয় না। আলো পুরোপুরি অনুভূমিক হওয়ার কারণে কেবল তাদের সাথে সমান্তরালভাবে চলতে পারে এবং তাদের কখনও আঘাত করতে পারে না। আমি এটি স্পষ্ট করতে সমস্যা সম্পাদনা করেছি।
কারচুপি করা হয়েছে

উত্তর:


14

পাইথন 2 ,  134 131 128 124 120 117 109  107 বাইট

p=input();s=0
for X,Y in p[1:]:x,y=p.pop(0);n=y-max(zip(*p)[1]);s+=n*(1+((X-x)/(y-Y))**2)**.5*(n>0)
print s

এটি অনলাইন চেষ্টা করুন!

ভাসমান-পয়েন্ট সংখ্যাগুলির টিপলস / দ্বি-উপাদানগুলির তালিকা হিসাবে ইনপুট নেয়।

ব্যাখ্যা

আমরা মূলত গ্রাফের পয়েন্টগুলির জোড়ার মধ্য দিয়ে পুনরাবৃত্তি করি এবং যদি , তবে আমরা গণনা করি যে লাইনের কত অংশ আলোর মুখোমুখি হয়েছে। জোড়ওয়ালা পুনরাবৃত্তি পরবর্তী পয়েন্ট, পাওয়ার জন্য একটি লুপ দিয়ে সঞ্চালিত হয় , বর্তমান পয়েন্টটি পুনরুদ্ধার করার জন্য তালিকায় প্রথম উপাদানটি পপ করে, ।Y1>Y2for(এক্স2,Y2)(এক্স1,Y1)

গণিত - রেখাংশের কোন অংশটি আলোর মুখোমুখি হয়?

খুব খারাপভাবে টানা পাহাড়

যাক বর্তমান বিন্দুর স্থানাঙ্ক হও। যাক বর্তমান এক (বর্তমান বিন্দু পরে স্থানীয় ম্যাক্সিমা) এবং পরে একটি বিন্দু সর্বোচ্চ উচ্চতা হতে পরবর্তী বিন্দু স্থানাঙ্ক হও। সূর্যের সাথে প্রকাশিত দৈর্ঘ্যের গণনা করার জন্য, , আমাদের ডায়াগ্রামে যেমন দেখানো হয়েছে তেমন উচিত । স্বাভাবিকভাবেই, যদি , বিভাগটি একেবারে আলোর মুখোমুখি হয় না।(এক্স1,Y1)Yমিএকটিএক্স(এক্স2,Y2)এলএক্স3Y1Yমিএকটিএক্স

গঠিত ত্রিভুজটিতে, দৈর্ঘ্যের দৈর্ঘ্যের বেসের সমান্তরাল , সুতরাং তিনটি । অতএব, এর মৌলিক উপপাদ্য থেকে মিল (কেস এঙ্গেল-অ্যাঙ্গেল), আমরা যে অনুমান করতে পারেন । তাই, । তারপরে আমরা পাইথাগোরিয়ান উপপাদ্যটি প্রয়োগ করতে পারি :এক্স3এক্স2-এক্স1এক্স3এক্স2-এক্স1=Y1-Yমিএকটিএক্সY1এক্স3=(Y1-Yমিএকটিএক্স)(এক্স2-এক্স1)Y1

এল=(Y1-Yমিএকটিএক্স)2+ +এক্স32

দুটি সূত্রে যোগদান করে আমরা নিম্নলিখিত অভিব্যক্তিতে পৌঁছেছি, যা এই পদ্ধতির মূল:

এল=

এল=(Y1-Yমিএকটিএক্স)2+ +((Y1-Yমিএকটিএক্স)(এক্স2-এক্স1)Y1)2
এল=(Y1-Yমিএকটিএক্স)2(1+ +(এক্স2-এক্স1)2Y12)

কোড - এটি কীভাবে কাজ করে?

p=input();s=0                             # Assign p and s to the input and 0 respectively.
for X,Y in p[1:]:                         # For each point (X, Y) in p with the first
                                          # element removed, do:
    x,y=p.pop(0)                          # Assign (x, y) to the first element of p and
                                          # remove them from the list. This basically
                                          # gets the coordinates of the previous point.
    n=y-max(zip(*p)[1])                   # Assign n to the maximum height after the
                                          # current one, subtracted from y.
    s+=n*(1+((X-x)/(y-Y))**2)**.5         # Add the result of the formula above to s.
                                 *(n>0)   # But make it null if n < 0 (if y is not the
                                          # local maxima of this part of the graph).
print s                                   # Output the result, s.

পরিবর্তণের

  • গল্ফিংয়ের উদ্দেশ্যে সূত্রটি ধীরে ধীরে অপ্টিমাইজ করা হয়েছে।

  • ফ্লিপট্যাককে ধন্যবাদ 1 বাইট সংরক্ষিত ।

  • অপ্রয়োজনীয় শর্তটি সরিয়ে 2 বাইট সংরক্ষণ করা হয়েছে y>Yযেহেতু যদি বর্তমান পয়েন্টটি বাদ দেওয়ার পরে ওয়াই- কোর্ডিনেটের স্থানীয় ম্যাক্সিমার yইতিবাচক হয়, তবে সেই অবস্থাটি অপ্রয়োজনীয়। যদিও এটি দুর্ভাগ্যক্রমে ফ্লিপটকের গল্ফকে অকার্যকর করে।

  • অ্যালগরিদমটি কিছুটা পরিবর্তন করে 3 বাইট সংরক্ষণ করা হয়েছে: কাউন্টার ভেরিয়েবলের পরিবর্তে, এটি বাড়িয়ে দেওয়া এবং তালিকার তালিকায় রাখার পরিবর্তে আমরা প্রতিটি পুনরাবৃত্তিতে প্রথম উপাদানটি সরিয়ে ফেলি।

  • Ovs ধন্যবাদ 8 বাইট সংরক্ষণ করা ; (x,y),(X,Y)একটি list.pop()কৌশল দিয়ে লুপ অবস্থায় পরিবর্তন ।

  • আরজান জোহানসেনকে 2 বাইট সংরক্ষণ করা হয়েছে (সূত্রটি কিছুটা অপ্টিমাইজড)।


12

জাভাস্ক্রিপ্ট, 97 বাইট

a=>a.reduceRight(([p,q,l=0,t=0],[x,y])=>[x,y,y>t?(y-t)/(s=y-q)*Math.hypot(x-p,s)+l:l,y>t?y:t])[2]

f=a=>a.reduceRight(([p,q,l=0,t=0],[x,y])=>[x,y,y>t?(y-t)/(s=y-q)*Math.hypot(x-p,s)+l:l,y>t?y:t])[2];
t=[[0, 3000], [500, 3500], [2500, 1000], [5000, 5000], [9000, 2000], [9000, 3500], [10200, 0]];
console.log(f(t));

(ইনপুটটির বিপরীত সংস্করণ গ্রহণ করা বৈধ হিসাবে বিবেচিত হলে 5 বাইট সংরক্ষণ করা যেতে পারে))


10

এপিএল + উইন, 48 বাইট

+/((h*2)+(((h←-2-/⌈\m)÷-2-/m←⌽⎕)×(⌽-2-/⎕))*2)*.5

এক্স কোঅর্ডিনেটের তালিকাকে y ওয়্যার কোঅর্ডিনেটের একটি তালিকা অনুসরণ করে

ব্যাখ্যা

h←-2-/⌈\m difference between successive vertical maxima viewed from the right (1)

-2-/m←⌽⎕ vertical difference between points (2)

⌽-2-/⎕ horizontal difference between points (3)

লিট উল্লম্ব দূরত্ব = এইচ এবং লিট অনুভূমিক দূরত্বগুলি (3) * (1) / (2)। বাকীটি পাইথাগোরাস।


চান +/.5*⍨(h*2)+×⍨((h←-2-/⌈\m)÷-2-/m←⌽⎕)×⌽-2-/⎕কাজ করে?
ক্রিটিকি লিথোস

দুর্ভাগ্যক্রমে আমার পুরানো এপিএল + ডাব্লুআইএন সংস্করণে অপারেটর নেই তাই আমি বলতে পারি না
গ্রাহাম

@ গায়েদের কোয়াকটি ডায়ালগ ইউনিকোড (v13) এর একটি পুরানো সংস্করণে চেষ্টা করার জন্য পরিচালিত এবং আপনার পরামর্শটি কার্যকর করেছে
গ্রাহাম

6

সুইফট , 190 বাইট

import Foundation
func f(a:[(Double,Double)]){var t=0.0,h=t,l=(t,t)
a.reversed().map{n in if l.0>=n.0&&n.1>l.1{t+=max((n.1-h)/(n.1-l.1)*hypot(n.0-l.0,n.1-l.1),0)
h=max(n.1,h)}
l=n}
print(t)}

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

import Foundation                  // Import hypot() function
func f(a:[(Double,Double)]){       // Main function
  var t=0.0,h=0.0,l=(0.0,0.0)      // Initialize variables
  a.reversed().map{n in            // For every vertex in the list (from right to left):
    if l.0>=n.0&&n.1>l.1{          //   If the line from the last vertex goes uphill:
      t+=max((n.1-h)/(n.1-l.1)     //     Add the fraction of the line that's above the
        *hypot(n.0-l.0,n.1-l.1),0) //     highest seen point times the length of the line
                                   //     to the total
      h=max(n.1,h)}                //     Update the highest seen point
    l=n}                           //   Update the last seen point
  print(t)}                        // Print the total

5

পাইথন 2 , 122 120 বাইট

k=input()[::-1]
m=r=0
for(a,b),(c,d)in zip(k,k[1:]):
 if d>m:r+=(b>=m or(m-b)/(d-b))*((a-c)**2+(b-d)**2)**.5;m=d
print r

এটি অনলাইন চেষ্টা করুন!


যেহেতু আমাদের দুটি ইনপুট হিসাবে এক্স মানগুলির একটি তালিকা এবং y মানগুলির একটি তালিকা নেওয়ার অনুমতি দেওয়া হয়েছে আমি দৃ sure়ভাবে নিশ্চিত যে আমরা প্রয়োজনীয়তা সরিয়ে, বিপরীতে সমন্বয়গুলির একটি তালিকা নিতে পারি [::-1]
জোনাথন অ্যালান

2

পাইথন 2 , 89 বাইট

M=t=0
for x,y in input()[::-1]:
 if y>M:t+=(y-M)*abs((x-X)/(y-Y)+1j);M=y
 X,Y=x,y
print t

এটি অনলাইন চেষ্টা করুন!

ফ্লোট জোড়া জোড়ের তালিকায় নেয়। Ovs এর সমাধান বন্ধ ভিত্তিতে ।


মনে করুন আমরা একটি বিপরীত তালিকা নিতে পারি (আমাদের এক্স এবং y পৃথক তালিকা হিসাবে গ্রহণের অনুমতি দেওয়া হয়েছে), যাতে আপনি এটি ড্রপ করতে পারেন [::-1]
জোনাথন অ্যালান

1

এপিএল (ডায়ালগ ইউনিকোড) , 31 বাইট এসবিসিএস

গ্রাহামের সূত্র ব্যবহার করে ।

ডান আর্গুমেন্ট হিসাবে 2 × n ম্যাট্রিক্স ডেটা গ্রহণ করে বেনামে উপসর্গ ফাংশন। প্রথম সারিতে ডান থেকে বামে এক্স-মান রয়েছে এবং দ্বিতীয় সারিতে সংশ্লিষ্ট y- মান রয়েছে।

{+/.5*⍨(×⍨2-/⌈\2⌷⍵)×1+×⍨÷⌿2-/⍵}

এটি অনলাইন চেষ্টা করুন!

{} বেনাম ল্যাম্বদা যুক্তিটি কোথায় :

2-/⍵ ডেল্টাস (লিটার। জোড় বিয়োগ-হ্রাস)

÷⌿⁄xΔy (lit। উল্লম্ব বিভাগ হ্রাস)

×⍨ বর্গক্ষেত্র (লিটার। গুণন সেলফি)

1+ একজন এতে যুক্ত হয়েছে

(… এর  সাথে নিম্নলিখিতটি গুণ করুন:

  2⌷⍵ আর্গুমেন্টের দ্বিতীয় সারি (y মান)

  ⌈\ সর্বাধিক চলমান (সর্বোচ্চ উচ্চতা এখন পর্যন্ত দেখা হয়েছে, ডান থেকে যাচ্ছে)

  2-/ ডেল্টাস (লিটল। জোড়ায় বিয়োগ-হ্রাস)

  ×⍨ বর্গক্ষেত্র (লিটার। গুণন সেলফি)

.5*⍨বর্গমূল (লিটার। এটি অর্ধেক শক্তি বাড়ান)

+/ সমষ্টি


1

জেলি , 23 বাইট

ṀÐƤḊ_⁸«©0×⁹I¤÷⁸I¤,®²S½S

বামদিকে y মানগুলির একটি তালিকা এবং ডানদিকে সম্পর্কিত x মানগুলির একটি তালিকা (একটি স্পষ্টভাবে মন্তব্যগুলিতে ওপি দ্বারা অনুমোদিত)

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

জ্বলন্ত একটি (opালু) বিভাগের ভগ্নাংশটি একই ভগ্নাংশ যা এটি উল্লম্ব ড্রপ হলে আলোকিত হত। নোট করুন যেহেতু স্কোয়ারিং slাল দৈর্ঘ্যের মূল্যায়ন করতে দেখা যায় সেই পথে গণনা করা উচ্চতাগুলি নেতিবাচক হতে পারে (এছাড়াও নীচের দিকে লিটার litালুগুলির দৈর্ঘ্যের নীচে নেতিবাচক দ্বারা বিভক্ত নেতিবাচক হিসাবে গণনা করা হয়)।

ṀÐƤḊ_⁸«©0×⁹I¤÷⁸I¤,®²S½S - Link:list, yValues; list, xValues
 ÐƤ                     - for suffixes of the yValues:       e.g. [ 3000, 3500, 1000, 5000, 2000, 3500,    0]
Ṁ                       -   maximum                               [ 5000, 5000, 5000, 5000, 3500, 3500,    0]
   Ḋ                    - dequeue                                 [ 5000, 5000, 5000, 3500, 3500,    0]
     ⁸                  - chain's left argument, yValues          [ 3000, 3500, 1000, 5000, 2000, 3500,    0]
    _                   - subtract                                [ 2000, 1500, 4000,-1500, 1500,-3500,    0]
        0               - literal zero
      «                 - minimum (vectorises)                    [    0,    0,    0,-1500,    0,-3500,    0]
       ©                - copy to the register for later
            ¤           - nilad followed by link(s) as a nilad:
          ⁹             -   chain's right argument, xValues  e.g. [    0,  500, 2500, 5000, 9000, 9000, 10200]
           I            -   incremental differences               [  500, 2000, 2500, 4000,    0, 1200]
         ×              - multiply (vectorises)                   [    0,    0,    0,-6000000, 0,-4200000, 0]
                ¤       - nilad followed by link(s) as a nilad:
              ⁸         -   chain's left argument, yValues        [ 3000, 3500, 1000, 5000, 2000, 3500,    0]
               I        -   incremental differences               [  500,-2500, 4000,-3000, 1500,-3500]
             ÷          - divide (vectorises)                     [    0,    0,    0, 2000,    0, 1200,    0]
                  ®     - recall from the register                [    0,    0,    0,-1500,    0,-3500,    0]
                 ,      - pair (i.e. lit slope [runs, rises])     [[0, 0, 0,    2000, 0,    1200, 0], [0, 0, 0,   -1500, 0,    -3500, 0]]
                   ²    - square (vectorises)                     [[0, 0, 0, 4000000, 0, 1440000, 0], [0, 0, 0, 2250000, 0, 12250000, 0]]            
                    S   - sum (vectorises)                        [  0,   0,   0, 6250000,   0, 13690000,   0]
                     ½  - square root (vectorises)                [0.0, 0.0, 0.0,  2500.0, 0.0,   3700.0, 0.0]
                      S - sum                                     6200.0

25 বাইট মোনাডিক সংস্করণ [x,y]সহ- আদেশের একটি তালিকা নিচ্ছে :

ṀÐƤḊ_«0
Z©Ṫµ®FI×Ç÷I,DzS½S

আর একবার চেষ্টা কর.


1
ইনপুট মানগুলির দুটি তালিকা হতে পারে। আমি কিছুক্ষণ আগে ওপিকে জিজ্ঞাসা করেছি এবং তারা বলেছে এটি ঠিক আছে
মিঃ এক্সকোডার

আমার মনে হচ্ছে অনেকগুলি এস এবং এস রয়েছে।
জোনাথন অ্যালান

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.