সময়ের ভ্রমণের প্যারাডক্স


17

একজন মানুষের দুটি ডিভাইস রয়েছে।

  • একটি সময় মেশিন - তিনি চিন্তা করে এই মেশিনটি নিয়ন্ত্রণ করতে পারেন। এটি তাকে যেকোন সময় থেকে অতীত বা ভবিষ্যতে (বা এমনকি বর্তমান সময়ে) কোনও সময়েই সময়ে সময়ে অন্য বিন্দুতে ভ্রমণ করতে দেয়। মনে রাখবেন যে তিনি বি থেকে ক এ অতীতে ভ্রমণ করেন, তবে এ থেকে বি পর্যন্ত সমস্ত সাধারণ ঘটনা (টাইম মেশিন, বিকল্পগুলি বাদ) ঠিক একই পদ্ধতিতে পুনরাবৃত্তি করতে হবে। তারপরে বি পয়েন্ট থেকে তাকে আবার পয়েন্ট এ এ নিয়ে যাওয়া হয়েছে। সুতরাং, একক সময় ভ্রমণ অসীম লুপ তৈরি করে।
  • অল্টারনেটার - এই সমস্যাটি বুঝতে পেরে তিনি একটি অন্য যন্ত্র তৈরি করেন। তিনি লক্ষ করেছেন যে, সমস্ত শারীরিক ঘটনা লুপে পুনরাবৃত্তি হওয়া সত্ত্বেও তার চিন্তাভাবনা আলাদা হতে পারে different অতএব এই মেশিনটি পাশাপাশি চিন্তা দ্বারা নিয়ন্ত্রণযোগ্য হওয়ার জন্য ডিজাইন করা হয়েছিল। মেশিনটি যে কোনও সময় ব্যবহার করার সময় সম্মানের সাথে একটি বিকল্প ভবিষ্যত (তবে অতীত নয়) সরবরাহ করতে পারে।

উদাহরণ

আমি একটি দীর্ঘ উদাহরণ ব্যবহার করে সমস্ত বিবরণ ব্যাখ্যা করব।

1000 T+250 250 T+0 500 T-200 100 T-50 125 A 225 T-400 500 A 100 T-200 150 T-25 100 T+100 50 A 25
  • 1000 বছর কেটে যায়। এটি এখন 1000 বছর।
  • তিনি 1000 থেকে 1250 পর্যন্ত ভ্রমণ করেন।
  • 250 বছর কেটে যায়। এটি এখন 1500 বছর।
  • তিনি 1500 থেকে 1500 পর্যন্ত ভ্রমণ করেন This এটির কোনও প্রভাব নেই (এবং উপেক্ষা করা যেতে পারে)।
  • 500 বছর কেটে যায়। এটি এখন বছর 2000
  • তিনি 2000 থেকে 1800 পর্যন্ত ভ্রমণ করেন।
  • 100 বছর কেটে যায়। এটি এখন 1900 বছর।
  • তিনি 1900 থেকে 1850 পর্যন্ত ভ্রমণ করেছেন।
  • 125 বছর কেটে গেছে: তবে, এখন যেমন তিনি লুপে রয়েছেন, জিনিসগুলি আলাদা। 50 বছর 1850 থেকে 1900 অবধি কেটে যায় He তিনি 1850 এ ফিরে যান Another আরও 50 বছর 1850 থেকে 1900 অবধি কেটে যায় He 25 বছর কেটে যায় এবং এটি 1875 হয়, এভাবে 125 বছর পূর্ণ হয়।
  • তিনি বিকল্প ব্যবহার করেন। এখন 1875 সালের বিকল্প বিকল্প রয়েছে, যা তিনি এখন রয়েছেন। অতীতের কোনও পরিবর্তন হয়নি।
  • 225 বছর কেটে গেছে। এটি এখন বছর 2100।
  • তিনি 2100 থেকে 1700 ভ্রমণ করেন।
  • 500 বছর পাস: 1700 থেকে 1875 পর্যন্ত সাধারণত পাস হয়। না তিনি আবার বিকল্পটির সাথে মুখোমুখি হন, যার অর্থ এখন 1875-এর পরে একটি তৃতীয় ভবিষ্যত তৈরি হয়েছে। 325 বছর সাধারণত 2200 বছর কেটে যায়।
  • অল্টারনেটার ব্যবহারের এখন কোনও প্রভাব নেই (এবং উপেক্ষা করা যেতে পারে) যেহেতু কেবলমাত্র 2200 এর ভবিষ্যত রয়েছে যা এখনও সংজ্ঞায়িত হয়নি।
  • 100 বছর কেটে যায়। এটি এখন 2300।
  • তিনি 2300 থেকে 2100 ভ্রমণ করেন।
  • 150 বছর পাস: 100 বছর 2100 থেকে 2200 পর্যন্ত সাধারণত পাস করুন। একটি দ্বিতীয় ভবিষ্যত 2200 থেকে তৈরি হয় 50 50 বছর কেটে যায় এবং এখন এটি 2250 বছর।
  • তাঁর 2250 থেকে 2225 যাওয়ার কথা রয়েছে However তবে, এখন দুটি ভিন্ন সময়রেখায় দুটি 2225 রয়েছে। সুতরাং এটি একটি প্যারাডক্সের দিকে নিয়ে যায়, যেহেতু তিনি নির্ধারণ করতে পারছেন না যে সময়ে তিনি কোন পয়েন্টে পৌঁছবেন। (আমরা ধরে নেব না যে সে আরও সাম্প্রতিক সময়রেখায় গেছে) সুতরাং এটি আমাদের সিমুলেশনটি সমাপ্ত করে।
  • যেকোনো কিছু আরও 100 T+100 50 A 25সম্পূর্ণরূপে উপেক্ষা করা হয় সাল থেকে প্যারাডক্স ঘটেছে এবং আমাদের সিমুলেশন চলমান বন্ধ করে দিয়েছে।

ইঙ্গিত: আপনি উদাহরণটি বোঝার জন্য যদি লড়াই করে যাচ্ছেন তবে সময়টি পৃথিবীতে যে পথটি খনন করছেন তার মতো হওয়ার জন্য কল্পনা করুন। আপনি যদি ভ্রমণের সময় করে থাকেন তবে আপনি একটি টেলিপোর্টার তৈরি করছেন। আপনি যদি বিকল্পটি ব্যবহার করে থাকেন তবে আপনি একটি বিদ্যমান পাথের দেয়ালে একটি নতুন পথটি খনন করছেন।

কূটাভাস

ধরুন A, B এবং C সময়মতো তিনটি পয়েন্ট (একের পর এক)। একটি প্যারাডক্স ঘটেছে বলে জানা গেছে যদি if:

  • আপনি সি বিন্দুতে আছেন, বি পয়েন্টে একটি বিকল্প রয়েছে, বি নির্দেশ করার জন্য একাধিক ভবিষ্যত রয়েছে (এবং আপনি তাদের মধ্যে একটিতে রয়েছেন) এবং আপনি সময় এবং ভ্রমণের মাধ্যমে বি এবং সি এর মধ্যে যে কোনও পয়েন্ট অ্যাক্সেস করার চেষ্টা করছেন attempt
  • আপনি A বিন্দুতে আছেন, সেখানে একটি বিন্দুতে বিকল্প রয়েছে, বি নির্দেশ করার জন্য একাধিক ভবিষ্যত রয়েছে এবং আপনি সময় ভ্রমণের মাধ্যমে একটি বিন্দু সি (বি এর পরে) অ্যাক্সেস করার চেষ্টা করেন।

ইনপুট

উদাহরণের অনুরূপ একটি সিরিজ ইভেন্ট। (ফর্ম্যাট নমনীয়।)

আউটপুট

একটি সত্যবাদী / মিথ্যা মান, এটি বোঝাচ্ছে যে প্যারাডক্সটি ঘটেছে কিনা।

চ্যালেঞ্জ

সংক্ষিপ্ততম কোড (বাইটে) জয়ী।


কিভাবে flexibleহয় format?
বিড়াল

@ গ্লেনর্যান্ডার্স-পেহারসন ওহ, আপনি যা বলতে চেয়েছিলেন তা পেয়েছি। সম্পাদনা করা হয়েছে।
ভূত_স_ই_কোড

2
@ সিসেরেক ইনপুটটিতে কোনও অতিরিক্ত বিরামচিহ্ন (হোয়াইটস্পেস, কমা, বন্ধনী ইত্যাদি) অনুমোদিত। যে কোনও চরিত্র (গুলি) সময় ভ্রমণ এবং বিকল্প পরিবর্তনের মধ্যে পার্থক্য করতে দেয়। যে কোনও অক্ষর (গুলি) + এবং - (এগিয়ে / পিছিয়ে ভ্রমণ) এর পরিবর্তে ব্যবহারের অনুমতি দেয়। নম্বরগুলি কোনও বেসে (বাইনারি, দশমিক ইত্যাদি) হতে পারে। ইভেন্টগুলি একই ক্রমে প্রবেশ করা হবে। কোনও আসল বছরের সংখ্যা সরবরাহ করা হবে না, আপনাকে অবশ্যই শূন্য (বা অন্য কোনও পূর্ণসংখ্যা) বলে ধরে নিতে হবে এবং প্রকৃত বছরের সংখ্যাগুলি নিজেই বের করতে হবে (যদি আপনার প্রয়োজন হয়)।
ভূত_এই_কোড

এটির ক্ষেত্রে যদি একটি বড়টির পরিবর্তে কয়েকটি ছোট ছোট উদাহরণ থাকে তবে তা আমাকে সহায়তা করবে, তবে আমি এখনও ভোট দিয়েছি!
উজ্জ্বল ডোন

উত্তর:


4

রুবি, 510 460 বাইট

p=[0];w=[n=x=0]
i=gets.split.map{|s|
if x!=1
if s[0]=="A"
w<<n
else
if s[0..1]=="T+"
t=n
q=s[2..-1].to_i
if w[-1]==t||(w[-1]>t&&w[-1]<n+q)
w<<w[-1]
n+=q
else
n+=(t<p[-1]&&n+q>p[-1])?q%(p[-1]-n):q
end
elsif s[0..1]=="T-"
t=n
p<<n
n-=s[2..-1].to_i
x=(x==0&&w[-1]>0&&t>w[-1]&&n>w[-1])?1:0
else
t=n
q=s.to_i
if w[-1]==t||(w[-1]>t&&w[-1]<n+q)
w<<w[-1]
n+=q
else
n+=(t<p[-1]&&n+q>p[-1])?q%(p[-1]-n):q
end
end
end
else
break
end}
p x

ইনপুট

উদাহরণ হিসাবে

আউটপুট

0 = প্যারাডক্স নয়, 1 = প্যারাডক্স

নমুনা

নমুনা ইনপুট সরবরাহ করা হয়েছে: 1000 T+250 250 T+0 500 T-200 100 T-50 125 A 225 T-400 500 A 100 T-200 150 T-25 100 T+100 50 A 25 রিটার্ন 1, একটি প্যারাডক্স নির্দেশ করে।

মন্তব্য

এটি কেবল প্রথম নয় আমি চেষ্টা করি নয়, এটি আমার লেখা প্রথম রুবি প্রোগ্রামও। সুতরাং, এটি সম্ভবত আরও খাটো হতে পারে।

সংক্ষিপ্ত বর্ণনা

p: Infinite loops
w: Alternate timelines
n: Now (regardless of timeline)
x: Paradox

অসম্পূর্ণ লুপগুলি কেবলমাত্র সময়মতো এগিয়ে যাওয়ার সময় ঘটবে। আমি যে কোনও প্রতিক্রিয়ার জন্য খুশি - বিশেষত যদি এটি এটিকে সমাধানের আরও ভাল উপায় নির্দেশ করে।


আপনি কি কিছু নমুনা ইনপুট / আউটপুট ডেটা সরবরাহ করতে পারেন?
অ্যাডিসন ক্রম্প

@ ভোটটোক্লোস - প্রশ্নটিতে প্রদত্ত ডেটা বাদে, প্রয়োজনে আরও নমুনা ডেটা তৈরি করতে পারি?
পিটার অ্যাবোলিনস

ওহ, গোশ, আমি সেই "নমুনা" অংশটি পুরোপুরি মিস করেছি। আমি বোকা। +1
অ্যাডিসন ক্রম্প

3
সমস্ত thenগুলি অপ্রয়োজনীয় এবং সরানো যেতে পারে। এছাড়াও, আপনার আরও অক্ষর সংরক্ষণের {...}পরিবর্তে ব্যবহার করা উচিত do...endmapএকটি বাইট ওভার সাশ্রয় করে eachএবং splitডিফল্টরূপে হোয়াইটস্পেসে বিভক্ত হয়। প্রারম্ভিক প্রথম চারটি লাইন সংক্ষিপ্ত করা যেতে পারে p=[];w=[n=x=0]
ডুরকনব

2
আমি জানি 3.5 বছর হয়ে গেছে (লোল ..), তবে আমি মনে করি আপনি নিজের বর্তমান কোডটি 288 বাইটে গল্ফ করতে পারবেন (পুরোপুরি নিশ্চিত নয়, যেহেতু আমি রুবিকে খুব ভাল জানি না)। তবে আপনার বর্তমান কোডটি ফরওয়ার্ড টাইম ট্রাভেলিং (ওপির বর্ণনার দ্বিতীয় বুলেট-পয়েন্ট) সহ প্যারাডক্সের জন্য অ্যাকাউন্ট করে না।
কেভিন ক্রুইজসেন

3

05 এ বি 1 ই , 93 92 86 82 বাইট

ðU0V#vyAQiYˆðUëy.ïiYy+DX˜såàiXD€нY@Ïн©θ-®¥OÄ%®θY-YOVëVëYy¦+©¯@àXðʘà*i1q}XY®Ÿª{U®V

ইনপুট এ গিয়ে, চ্যালেঞ্জ বর্ণনাতে হিসাবে একই ফর্ম্যাটে আছে ছাড়া পর্যাবৃত্ত Aহয় abcdefghijklmnopqrstuvwxyzএকটি বাইট সংরক্ষণ করতে পরিবর্তে। কোনও প্যারাডক্স দেখা দিলে
আউটপুট 1, না হলে নিজেই ইনপুট (কেবল 105AB1E এ সত্যবাদী, অন্য সব কিছু মিথ্যা)।

আলগাভাবে আমার জাভা 10 উত্তরের উপর ভিত্তি করে ।

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

অথবা এটি যুক্ত ডিবাগ-লাইনগুলি দিয়ে অনলাইনে চেষ্টা করুন ( টোডো: একবারে সমস্ত পরীক্ষার কেস সহ সঠিক টেস্ট স্যুট তৈরি করুন .. ):
- পশ্চাদপদ সময়-ভ্রমণের বিপরীতে পরীক্ষার কেস: অনলাইনে চেষ্টা করে দেখুন।
- ফরোয়ার্ড টাইম-ট্র্যাভেল প্যারাডক্সের সাথে পরীক্ষার কেস: এটি অনলাইনে চেষ্টা করে দেখুন।
- সময়-ট্র্যাভেল প্যারাডক্স ছাড়াই টেস্ট কেস: এটি অনলাইনে চেষ্টা করে দেখুন।

ব্যাখ্যা:

ðU                         # Set variable `X` (time-travels) to a space character " "
0V                         # Set variable `Y` (current year) to 0
#                          # Split the (implicit) input by spaces
 v                         # And loop over each event `y`:
  yAQi                     #  If the current event `y` is an alternator ("abcdefghijklmnopqrstuvwxyz"):
      Yˆ                   #   Add the current year `Y` to alternators-list `GB`
      ðU                   #   And reset variable `X` to " "
  ëyi                    #  Else-if the current event `y` is an integer:
       Yy+                 #   Calculate the current year `Y` plus the integer `y`
          D                #   Duplicate `Y+y`
           X˜såài          #   If this `Y+y` is within any of the time-travel ranges:
                 X €н      #    Get the starting positions of each time-travel
                     Y@    #    Check for each starting position if the current year `Y` is >= it
                  D    Ï   #    And only leave the time-travel ranges for which this is truthy
                        н  #    Then pop and push the first one
                         © #    Store this time-travel range in variable `r` (without popping)
                 θ         #    Pop and only leave the time-travel destination
                  -        #    Subtract it from the `Y+y` we duplicated
                       %   #    And modulo it with:
                   ®¥OÄ    #     The absolute distance of the time-travel `r`
                 ®θ        #    Then push the time-travel destination again
                   Y-      #    And subtract the current year `Y`
                 YO        #    Then sum these two and the current year `Y` together
                   V       #    And pop and store it as new year `Y`
       ë                   #   Else (`Y+y` is not within any time-travel ranges)
        V                  #    Simply pop and store the duplicated `Y+y` as new year `Y`
  ë                        #  Else (the current event `y` is a time-travel)
    y¦                     #   Remove the leading "T"
   Y  +                    #   And add the value to the current year `Y`
       ©                   #   Store this value in variable `r`
        ¯@à                #   Check if any alternator in list `GB` is >= this value
           XðÊ˜à           #   Check if there are any time-travels
                *i  }      #   And if both are truhy:
                  1        #    Push a 1
                   q       #    Stop the program
                           #    (after which the top of the stack is output implicitly)
    Y®Ÿ                    #   Create a list in the range [current year `Y`, new year `r`]
   X   ª                   #   Append it to the time-travels `X`
        {                  #   And then sort these time-travels
         U                 #   After which we pop and store it as updated `X`
   ®V                      #   And then set `Y` to the new year `r`
                           # (if we haven't reached `q`, the (implicit) input is output instead)

3

জাভা 10, 498 485 478 বাইট

import java.util.*;s->{var a=new Stack<Long>();var m=new TreeMap<Long,Long>();long p=0,c=0,t,v,k;o:for(var S:s.split(" "))if((t=S.charAt(0))>65){var b=S.charAt(1)>44;v=new Long(S.substring(2));for(var A:a)p=A>c+(b?-v:v)|m.size()<1?p:1;if(v>0)m.put(c,b?c-v:c+v);c+=b?-v:v;}else if(t>64){a.add(c);m.clear();}else{t=new Long(S);e:for(var e:m.entrySet())if((k=e.getKey())>=c){for(v=c;v<=c+t;)if(a.contains(v++))break e;c=(v=e.getValue())+(c+t-v)%(k-v);continue o;}c+=t;}return p>0;}

চ্যালেঞ্জ বর্ণনার মতো ইনপুট একই ফরম্যাটে (বর্তমানে)।

-13 বাইটস @ বেনজামিন ইউরুকহার্টকে ধন্যবাদ ।
-7 বাইটস @ সিলিংক্যাটকে ধন্যবাদ ।

অনলাইনে এটি ব্যবহার করে দেখুন বা যুক্ত ডিবাগ-লাইনগুলির সাথে অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

import java.util.*;            // Required import for the List and TreeMap
s->{                           // Method with String parameter and boolean return-type
  var a=new Stack<Long>();     //  Create a List for the alternators
  var m=new TreeMap<Long,Long>();
                               //  Create a sorted Map for the time-travels
  long p=0,                    //  Paradox-flag, initially 0
       c=0,                    //  Current year, initially 0
       t,v,k;                  //  Temp-values, uninitialized
  o:for(var S:s.split(" "))    //  Loop over the input substrings split by space:
    if((t=S.charAt(0))>65){    //   If the first character is a 'T':
      var b=S.charAt(1)>44;    //    Check if the second character is a '-'
      v=new Long(S.substring(2));
                               //    Convert the String-value to a number
      for(long A:a)            //    Loop over the alternators
        p=A>                   //     If an alternator is larger than:
            c+                 //      The current year, plus
              (b?              //      If we travel backwards in time:
                 -v            //       Subtract the value
                :              //      Else (we travel forward in time):
                 v)            //       Add the value
          |m.size()<1?         //     Or if no previous time-travels occurred:
           p                   //      Leave the paradox-flag the same
          :                    //     Else:
           1;                  //      Set the paradox-flag to 1
      if(v>0)                  //     If the value is not 0 (edge-case for "T+0")
        m.put(c,b?c-v:c+v);    //      Add the from-to time-travel to the Map
      c+=b?-v:v;}              //     Increase/decrease the year accordingly
    else if(t>64){             //   Else-if the character is an 'A':
      a.add(c);                //    Add the current year to the alternators-list
      m.clear();}              //    And empty the time-travel Map
    else{                      //   Else (it's a number)
      t=new Long(S);           //    Convert the String to a number
      e:for(var e:m.entrySet())//    Loop over the time-travels:
        if((k=e.getKey())      //     If the time-travel starting point is
                         >=c){ //     larger than or equal to the current year
          for(v=c;v<=c+t;)     //      Loop from the current year to the year+number:
            if(a.contains(v++))//       If the alternator-list contains any of these years
              break e;         //        Stop the time-travel loop
          c=                   //      Set the current year to:
             (v=e.getValue())  //       The time-travel destination
             +                 //       Plus:
              (c+t             //        The current year plus the number
                  -v)          //        minus the time-travel destination
                     %(k-v);   //        Modulo the time-travel from-to distance
          continue o;}         //      And then continue the outer input-loop
      c+=t;}                   //    Increase the current year by the number 
  return p>0;}                 //  Return whether the paradox-flag is 1

কেন ব্যবহার Longকরবেন না ?
বেনজামিন আরউখার্ট

1
@ বেনজামিনউয়ার্কার্ট ভাল প্রশ্ন .. প্রথমদিকে আমার তালিকা এবং মানচিত্রটি কাঁচা- intটাইপযুক্ত ছিল , তাই ছোট ছিল, তবে এটি মানচিত্র-এন্ট্রি কীভ্যালু-জোড়গুলির সাথে ত্রুটি দিয়েছে। তার পরে লং-তে সবকিছু বদলানোর কথা ভাবেনি .. -13-এর জন্য ধন্যবাদ!
কেভিন ক্রুইজসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.