সূর্য কত দূরে?


20

ভূমিকা

TL; ড

ক্রমাগতভাবে পৃথিবী থেকে সূর্যের বর্তমান দূরত্বকে আউটপুট করে


সরলীকৃত, সূর্যের চারপাশে পৃথিবীর কক্ষপথ একটি উপবৃত্তাকার। সুতরাং উভয়ের মধ্যে প্রকৃত দূরত্ব ক্রমাগত পরিবর্তিত হয়। এই সূত্রটি ব্যবহার করে যে কোনও নির্দিষ্ট দিনের জন্য এই দূরত্বটি গণনা করা যেতে পারে :

ডি / এউ = 1-0.01672 কোস (0.9856 (দিন -4))

সমীকরণটি নিম্নলিখিত অংশগুলিতে বিভক্ত হতে পারে 2 :

  • 1সমান, 1 এউ (জ্যোতির্বিদ্যা ইউনিট) উপস্থাপন করে149,597,870.691 km
  • 0.01672হয় কক্ষীয় ছিট পৃথিবী ও সূর্যের মধ্যে
  • cosঅবশ্যই কোসাইন ফাংশন, তবে রেডিয়ানগুলির চেয়ে ডিগ্রিতে যুক্তি সহ
  • 0.9856হয় 360 ° / 365,256363 দিন , এক বছরের মধ্যে একটি পূর্ণ আবর্তন, যেখানে 365.256363একটি নাক্ষত্রিক বছর দৈর্ঘ্য হয়, গড় সৌর দিন
  • day বছরের দিন হয় [1-365]
  • 4পেরিথিলিয়নে অফসেট উপস্থাপন করে যা 4 থেকে 6 জানুয়ারির মধ্যে রয়েছে

সূত্রটি পুরো দিন সময় নেয় তবে এই চ্যালেঞ্জের উদ্দেশ্যে - একটি অবিচ্ছিন্ন আউটপুট - আপনাকে আরও সঠিক হতে হবে; অথবা পরের দিন পর্যন্ত কিছুই ঘটবে না। কেবলমাত্র বর্তমান দিন বিগত সময় শতাংশ যোগ মত 1 :

day + (h * 3600 + m * 60 + s) / 864 / 100

কয়েকটি উদাহরণ:

  • 1 জানুয়ারী, 23:59:59 1.99998842592593
  • 1 জানুয়ারী, 18:00:00 | 1.75
  • 1 জানুয়ারী, 12:00:00 | 1.50
  • 1 জানুয়ারি, 06:00:00 | 1.25

ইনপুট

এই চ্যালেঞ্জের কোনও ইনপুট নেই।


আপনার ভাষা যদি বর্তমান সময়টি না পেতে পারে তবে আপনি এটিকে আপনার প্রোগ্রামের ইনপুট হিসাবে পেতে পারেন। বৈধ ইনপুটগুলি টাইমস্ট্যাম্প বা সম্পূর্ণ তারিখ-কালীন স্ট্রিং যা ভাষার পক্ষে সেরা। বর্তমান দিনটি একা ( 5৫ জানুয়ারীর মতো বা 5.25একই দিনের জন্য o'clock টা বাজে) পাস করার অনুমতি নেই।

আউটপুট

পৃথিবী থেকে সূর্যের বর্তমান দূরত্ব আউটপুট করুন:

  • মানটি আউটপুট করুন km
  • কমপক্ষে প্রতি সেকেন্ডে মান আপডেট করুন ।

উদাহরণ আউটপুট:

152098342

যদি এটি আপনার বাইট গণনা বৃদ্ধি না করে তবে আপনি ফলাফলটি খুব সুন্দরভাবে মুদ্রণ করতে পারেন:

152,098,342
152,098,342 km

আবশ্যকতা

  • আপনি একটি প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। এটি যদি কোনও বেনামে কাজ করে থাকে তবে দয়া করে কীভাবে এটি চালাবেন তার একটি উদাহরণ অন্তর্ভুক্ত করুন।
  • এটি তাই বাইট জিতে সংক্ষিপ্ত উত্তর।
  • স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

উদাহরণ বাস্তবায়ন

আমি জাভাস্ক্রিপ্টে একটি উদাহরণ বাস্তবায়ন প্রস্তুত করেছি। এটি প্রতিযোগিতামূলক বা গল্ফডও নয়।

// dayOfYear from http://stackoverflow.com/a/8620357/1456376
Date.prototype.dayOfYear = function() {
    var j1= new Date(this);
    j1.setMonth(0, 0);
    return Math.round((this-j1)/8.64e7);
}

// vars
var e = document.getElementById('view'),
    au = 149597870.691,
    deg2rad = Math.PI/180,
    date = now = value = null;

// actual logic
function calculate() {
    date = new Date();
    now = date.dayOfYear() + (date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds()) / 864 / 100;
    value = 1 - 0.01672 * Math.cos(deg2rad * 0.9856 * (now - 4));
    // supported in Firefox and Chrome, unfortunately not in Safari
    e.innerHTML = Math.round(value * au).toLocaleString('en-US') + ' km';

    setTimeout(calculate, 1000);
}

// let's do this
calculate();
<div id="view"></div>


1 অযৌক্তিকভাবে জটিলতা না বাড়ানোর জন্য আপনার স্থানীয় সময়টিকে ইউটিসিতে রূপান্তর করতে হবে না। আপনি যদি ইউটিসি ব্যবহার করেন তবে দয়া করে আপনার উত্তরে একটি নোট যুক্ত করুন।

2 আরও তথ্যের জন্য পদার্থবিদ্যায় " বছরের একটি নির্দিষ্ট দিনে আর্থ-সূর্যের দূরত্ব " দেখুন


প্রোগ্রামিং ভাষাগুলি এমন কী করা উচিত যা বর্তমান সময়ে অ্যাক্সেস করতে পারে না? বিএফ ইত্যাদি পছন্দ?
flawr

3
আমি বিশ্বাস করি যে আপনার উদাহরণটি ভুল, যেহেতু Math.cosরেডিয়ান ব্যবহার করে। এবং যেহেতু এই সূত্রটি খুব আনুমানিক বলে মনে হচ্ছে , উত্তরগুলি কীভাবে যাচাই করা হবে সে সম্পর্কে আপনাকে পরিষ্কার হতে হবে।
grc

@ জিআরসিআর আমি আমার উদাহরণটিতে ত্রুটিটি স্থির করেছি - আমাকে এটি দেখানোর জন্য ধন্যবাদ।
সন্নিবেশকারীর নাম এখানে

@ ফ্লোয়ার আপনি আপনার প্রোগ্রামের ইনপুট হিসাবে সময় পেতে পারেন। প্রশ্ন অনুসারে আপডেট করা হয়।
সন্নিবেশকারী

1
আমি বাজি ধরছি ম্যাথামেটিকার জন্য একটি বিল্ট-ইন রয়েছে!
সার্জিওল

উত্তর:


5

টিআই-বেসিক, 38 বাইট

Disp 25018086(59.8086-cos(5022635.4⁻¹checkTmr(83761
prgmA

একটি টিআই -৪৪ + সিরিজের ক্যালকুলেটরের জন্য। এই নামটি prgmA। নোট করুন যে এটি কয়েক হাজার পুনরাবৃত্তির পরে স্ট্যাকটিকে উপচে ফেলেছে; While 1:...:Endদুটি অতিরিক্ত বাইটের জন্য যদি সমস্যা হয় তবে এর পরিবর্তে ব্যবহার করুন ।

এটি 1 জানুয়ারী, 1997, 23:16 ইউটিসি রেফারেন্সের জন্য পেরিহেলিওন ব্যবহার করে এবং পরবর্তী কয়েক বছরের জন্য কয়েক ডজন কিলোমিটারের মধ্যে (নির্ভুলতার প্রায় 7 ডিজিট) সঠিক।


এখন এটি সংক্ষিপ্ত। যশ!
সন্নিবেশকারীর নাম এখানে

5

জাভা - 185 180 বাইট

static void d(){while(true){System.err.println(149597870.691*(1-.01672*Math.cos(Math.toRadians(.9856*(Calendar.getInstance().get(6)+LocalTime.now().toSecondOfDay()/8.64e4-4)))));}}

এটি এই সত্যটি ব্যবহার করে যে একদিনে 86,400 সেকেন্ড রয়েছে এবং স্থানীয় সময় GMT ব্যবহার করে না। আউটপুট প্রতি সেকেন্ডে একাধিকবার ঘটে। আমদানির বিবৃতিগুলি বাইট গণনায় অন্তর্ভুক্ত করা উচিত কিনা তা নিশ্চিত নয়।

একটি 1 সেকেন্ড বিলম্ব অন্তর্ভুক্ত করতে প্রায় 26 বাইট যেমন যোগ করে

static void d(){try{while(true){System.err.println(149597870.691*((1-.01672*Math.cos(Math.toRadians(.9856*(Calendar.getInstance().get(6)+LocalTime.now().toSecondOfDay()/8.64e4-4)))));Thread.sleep(1000L);}}catch(Exception e){}}

জাভা অবশ্যই সবচেয়ে গল্ফযোগ্য ভাষা নয়। :)

@ সন্নিবেশকারী নামটির জন্য কয়েকটি বাইট সরানো হয়েছে


1
খুশী হলাম। 1.0হয়ে গেল না 1? আর তুমি নেতৃস্থানীয় অপসারণ করতে পারেন 0থেকে 0.01672এবং 0.9856?
সন্নিবেশকারী নাম এখানে

খুব সত্য, আমি প্রশ্নটি থেকে অনুলিপি-পেস্টের জন্য যা পাই: p আমি যদি আরও কিছু বাইট ব্যবহার করতে পারি import staticতবে এটি "প্রতারণামূলক" হতে পারে ... আমি এখানে বরং নতুন rather
রবার্ট বেনসন

System.err কেন?
সুপারজেডি ২২৪

আমি ব্যবহার করেছি System.errযাতে কোনও বাফারিংয়ের দরকার নেই। আমি জানি যে printlnযাইহোক তত্ক্ষণাত্ মুদ্রণ করার কথা, তবে এটি সর্বদা এটি বলে মনে হয় না। অবশ্যই এটি বাইট গণনা পরিবর্তন না করে System.out এ রূপান্তরিত হতে পারে :)
রবার্ট বেনসন

2
আমি লক্ষ্য করেছি যে অনেকেই ডিগ্রি থেকে রেডিয়ানে রূপান্তর করতে ভুলে যাচ্ছেন। আমি তাদের সম্পর্কে মন্তব্য করব, তবে আমি খুব সামান্য প্রতিনিধি সহ এক নবাগত: পি
রবার্ট বেনসন

4

পাইথন, 101 বাইট

import time,math
a=149597870.691
while 1:print(a-a*.01672*math.cos((time.time()-345600)/5022635.53))

345600 = 4 * 24 * 3600 (চার দিন)

5022635.53 ≌ (365.256363 * 24 * 3600) / (2π) (সেকেন্ডে বছর / 2π)


প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম। এটি একটি ভাল সমাধান, +1। যাইহোক, আপনি যদি একটি অসমাপ্ত এবং মন্তব্য করা সংস্করণ যুক্ত করেছেন, আপনি কী করেছেন তা ব্যাখ্যা করে বা কোডের আগে সবে একটি সহজ মন্তব্য যুক্ত করলে এটি উত্তরটির উন্নতি করতে পারে।
wizzwizz4

আমি বাইট গণনার জন্য 107 পেয়েছি।
মরগান থ্রাপ

ঠিক আছে, আমি শেষ নিউলাইন অন্তর্ভুক্ত করেছি।
পাচোলিক

আপনি মিশ্রন 7 বাইট সংরক্ষণ করতে পারবেন importS: import time,math। এছাড়াও, আপনি যদি পাইথন 2 ব্যবহার করেন তবে আপনি এখান থেকে প্রথম বন্ধনীটি ড্রপ করতে পারেন print
পূর্কাকুডারী

এটিও সত্য, যে পিইপি সবই আমি ভুলে গিয়েছি এটি সম্ভব! :)
পাচলিক

3

বাশ / কোর্টিল / বিসি, 101 বাইট

#!/bin/bash
bc -l <<<"149597870.691*(1-.01672*c((`date +%s`-`date -d 4-Jan +%s`)/5022635.5296))"
sleep .5
exec $0

এটি অফসেটটি 4 জানুয়ারী থেকে কয়েক সেকেন্ডে গণনা করে, তাই রেডিয়ানে রূপান্তর করতে একটি অনুরূপ ধ্রুবক ব্যবহার করে। অর্ধেক বছর মোটামুটি পাইতে রূপান্তরিত হয়:

$ bc -l <<<"(365.256363/2*86400)/5022635.5296"
3.14159265361957033371

বাকী গণনাটি সরাসরি প্রশ্ন থেকে।


সুন্দর কাজ. আমি ভাবছিলাম যে এটির bcজন্য কী কার্যকর হতে পারে। আমি লক্ষ্য করেছি যে dcআপনার শিরোনামে bcআছে তবে কোডটি ব্যবহার করুন। আমি প্রায়শই দুজনকে নিজেই বিভ্রান্ত করি।
রবার্ট বেনসন

1
ধন্যবাদ, @ রবার্ট - আমি শিরোনাম ঠিক করেছি। আমি ডিসির দিকে তাকাতে শুরু করলাম, তারপরে বুঝতে পারলাম আমার বিসির ম্যাথলিব দরকার, ভুল মূহুর্তে আমার মনে উভয় ক্যালকুলেটর ছিল!
টবি স্পিড 13 ই

হ্যাঁ, সেখানে এসেছেন, তা করেছেন। আমি সবসময় ভুলে যাই কোনটি।
রবার্ট বেনসন

2

এফ #, 178 বাইট

open System
Seq.initInfinite(fun _->
let n=DateTime.Now
(1.-0.01672*Math.Cos(0.0172*((n-DateTime.Today).TotalDays+float(n.DayOfYear-4))))*149597870.691)|>Seq.iter(printfn"%f")

এটি একটি F # স্ক্রিপ্ট যা এফ # ইন্টারেক্টিভতে ভাল চলে। সরলতার জন্য, "অবিচ্ছিন্ন আউটপুট" প্রয়োজনীয়তাটি আক্ষরিক স্তরে নেওয়া হয়, যদিও আমি প্রতি পুনরাবৃত্তিতে একটি নতুন লাইনে আউটপুট প্রিন্ট তৈরি করতে একটি বাইট হারিয়েছি যাতে এটি খুব খারাপ না হয় । = পি

অবহেলিত এবং ব্যাখ্যা:

Seq.initInfinite (fun _ ->            // Create an infinite sequence, with each element being defined by the following function
    let n = DateTime.Now
    let dayOffset = n.DayOfYear - 4   // Day of year returns the day as a number between 1 and 366
    let today = n - DateTime.Today    // Extract the current day, so the hours, minutes and all
    let partialDay = today.TotalDays  // Get the value of 'today' as a floating point number of days
                                      // so between 0 and 1 in this case - exactly what I needed
    // And now, the formula - note that 0.9856 has been combined with the conversion from degrees to radians, giving 0.0172
    (1. - 0.01672 * Math.Cos (0.0172 * (partialDay + float dayOffset))) * 149597870.691
)
|> Seq.iter (fun i -> printfn "%f" i) // For each of the (infinity of) numbers, print it

1

গণিত, 97 বাইট

Dynamic[1496*^5-2501*^3Cos[.9856#&@@Now~DateDifference~{DateValue@"Year",1,4}],UpdateInterval->1]

ব্যাখ্যা

{DateValue@"Year",1,5}এই বছরের 5 জানুয়ারীর প্রতিনিধিত্ব করে এবং ...~DateDifference~...অস্থায়ী দূরত্ব দেয়।

Dynamic[...,UpdateInterval->1] প্রতি সেকেন্ডে এক্সপ্রেশনটি আপডেট করুন।


কেবল আপনাকে স্মরণ করিয়ে দেওয়ার জন্য, আপনাকে উত্তরকে কিউ থেকে আউটপুট করতে হবে, এও নয়। আমি মনে করি ম্যাথামেটিকায় অন্তর্নির্মিত রূপান্তরকারী রয়েছে যাতে আপনি ইউনিট রূপান্তরকরণের জন্য কিছু বাইট সংরক্ষণ করতে পারেন, হ্যাঁ?
বাসুকসুয়ান

@ বুসুকক্সুয়ান, আমি সূত্রটির সহগকে গুণিত করেছি।
এনজিপিপোরগান

ওহ সরি আমি মিস করেছি এটি 4 টি উল্লেখযোগ্য পরিসংখ্যানে থাকবে বলে আশা করেনি।
বুসুক্সুয়ান

2
বিকল্পভাবে,Dynamic[Round[PlanetData["Earth", "DistanceFromSun"]~QuantityMagnitude~"Kilometers"]]
2012Compion

1

পাইথ, 51 বাইট

#*149597870.691-1*.01672.t*c-.dZ86400 31558149*2.nZ1

বিকল্প সূত্র

d / AU = 1 - 0.01672 cos (2π [সময় পেরিহিলিয়ন হওয়ার পরে]] [[অরবিটাল পিরিয়ড]]
এই সূত্রটি মূলত ওপি-র সূত্রের সমান, রেফারেন্সের তারিখ হিসাবে কোনও পেরিহিলিয়ন ব্যবহার করতে সক্ষম হওয়ার জন্য এটি সাধারণীকরণ করা হয়।

ওপি'র সূত্রে [পেরিহেলিওনের পর থেকে সময়) (দিন - 4) হিসাবে রয়েছে এবং এটিতে (2π রেড / [অরবিটাল পিরিয়ড]) 0.9856 ডিগ্রি / দিন হিসাবে প্রাক-গণনা করা হয়েছে।

আমার সমাধানে আমি 2 জানুয়ারী 1970 , ইউনিক্সের যুগের নিকটতম পেরিহিলিয়নটি ব্যবহার করছি ।

কোড

পাইথোনিক সিউডোকোডে হাতে সংকলিত:

#                        while 1:
  *149597870.691             print( 149597870.691 * (                 # implicit print
    -1                           1 - (
      *.01672                        0.1672 * (
        .t                               trigo(
          *                                  multiply(
            c                                    divide(
              -.dZ86400                              unixTime-86400,
              31558149                               31558149
                                                 ),
            *2.nZ                                2*pi
                                             ),
          1                                  1                        # 1 means cos
                             )))))

এটি মূলত নিম্নলিখিত সূত্রটিকে কোডে রূপান্তর করছে:
d = (1 - 0.01672 কোস (2π (টি - 86400) / 31558149)) * 149597870.691
যেখানে টি ইউনিক্সের সময়।


1

পাইথন 2.4 - 158 বাইট

import time,math
while 1:t=time.localtime();print(int(149597870.691*(1-.01672*math.cos(math.radians(.9856*(t[7]+(t[3]*3600+t[4]*60+t[5])/864.0/100.0-4))))))

স্থানীয় সময় নেয় এবং দূরত্ব ছিটকে। সময়.লোকালটাইম () একটি টিপল দেয় এবং এখানে উল্লেখ করা যায়


আপনি কিছু বাইট .0থেকে সরিয়ে 864.0এবং 100.0সংরক্ষণ করতে পারেন ?
সন্নিবেশকারী নাম এখানে

এটি করতে আমি কেবল উদ্বিগ্ন যে এটি আর কোনও ভাসমান পয়েন্ট বিভাগ হবে না। আমি এটি রেখেছি .0যাতে তারা ভাসমান বিন্দু হয় এবং পূর্ণসংখ্যার হয় না।
linkian209

0

সি, 338

#include <stdio.h>
#include <time.h>
#include <math.h>
int main ()
{
  time_t rt;
  struct tm * ti;
  while(1) {
  time(&rt);
  ti = localtime(&rt);
  double d = 1.0 - .01672*cos(0.0174533 * .9856*((ti->tm_yday + (ti->tm_hour * 3600.0 + ti->tm_mday * 60.0 + ti->tm_sec) / 86400.0) - 4));
  printf ("%f\n", d * 149598000.0);}
}

3
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! এটি সঠিক উত্তর হিসাবে দেখায়, এটি খুব বেশি গল্ফযুক্ত বলে মনে হয় না। [কোড-গল্ফ] ট্যাগ সহ প্রশ্নের জন্য, উত্তরগুলিকে অনন্য-বিষয় বিবেচনা করার জন্য যথাসম্ভব তাদের আকার হ্রাস করার চেষ্টা করা দরকার - সহায়তা কেন্দ্রটি দেখুন । আমি গল্ফ সংস্করণ দেখার অপেক্ষায় থাকবো! =)
রাউজো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.