সংস্করণ সংখ্যা তুলনা করুন


26

যখন আমরা কিছু সফ্টওয়্যার প্রকাশ করি তখন আমরা এটিতে একটি সংস্করণ নম্বর বরাদ্দ করি। এবং ব্যবহারকারীরা কিছু সফ্টওয়্যারের সর্বশেষতম সংস্করণে আপডেট করতে চাইতে পারেন। সুতরাং, কোন সংস্করণটি আরও নতুন হওয়া উচিত তা অনুসন্ধানের সময়।

ইনপুট

স্ট্রিং হিসাবে দুটি সংস্করণ সংখ্যা ইনপুট করুন।

এই চ্যালেঞ্জের প্রসঙ্গে আমরা কেবলমাত্র সংস্করণ সংখ্যাগুলি সমর্থন করি যা কিছু বিন্দু বিন্দুতে যোগ হয়।

  • সংস্করণ সংখ্যাটি একটি স্ট্রিং যা কেবলমাত্র ( 0~ 9) এবং বিন্দু ( .) থাকতে পারে ।
  • বিন্দুগুলি কোনও সংস্করণ সংখ্যার প্রথম / শেষ অক্ষর হবে না।
  • বিন্দুগুলির মধ্যে অবশ্যই কিছু অঙ্ক থাকতে হবে। কোনও দুটি বিন্দু অবিচ্ছিন্নভাবে উপস্থিত হতে পারে।
  • সংস্করণ সংখ্যার সমস্ত সংখ্যা 2 16 এর চেয়ে কম হবে ।

আউটপুট

ইনপুটযুক্ত সংস্করণ সংখ্যা এবং আউটপুট তুলনা করুন যে প্রথমটি একের চেয়ে বড় / দ্বিতীয় এর চেয়ে সমান / কম whether আপনাকে নিম্নলিখিত উপস্থাপনাগুলির মধ্যে একটি চয়ন করার অনুমতি দেওয়া হয়েছে:

  • ধনাত্মক সংখ্যা / শূন্য / নেতিবাচক সংখ্যা ব্যবহার করুন, শূন্যের অর্থ সমান;
  • তিনটি ধ্রুবক স্বতন্ত্র মান ব্যবহার করুন;

তুলনা

আপনাকে এই বিভাগে বর্ণিত অ্যালগরিদমটি প্রয়োগ করতে হবে না। আপনার জমা যতক্ষণ তা এই অ্যালগরিদমের সাথে একই আউটপুট ফলাফল হিসাবে বৈধ।

  • সংস্করণ নম্বরগুলি বিন্দুতে যুক্ত কয়েকটি দশমিক সংখ্যা। আমরা প্রথমে দুটি সংস্করণ সংখ্যাকে সংখ্যার অ্যারেতে বিভক্ত করেছি;
  • শূন্যের সাথে অ্যারেগুলির সমাপ্তিগুলি প্যাডিং করা যাতে তাদের একই দৈর্ঘ্য হয়;
  • প্রথম আইটেম থেকে শেষের সাথে তুলনা করুন:
    • যদি দুটি অ্যারের আইটেম আলাদা হয় তবে বৃহত্তর সংখ্যাটির অর্থ বৃহত্তর সংস্করণ সংখ্যা
    • যদি সেগুলি একই হয় তবে নিম্নলিখিত আইটেমগুলির সাথে তুলনা চালিয়ে যান;
    • অ্যারের সমস্ত আইটেম সমান হলে দুটি সংস্করণ সমান।

Testcases

version1  version2  result
2         1         >
1.0.0     1         =
1.0       1.0.0     =
1.2.42    1.2.41    >
1.1.56789 1.2.0     <
1.10      1.2       >
1.20      1.150     <
18.04     18.4      =
7.010     7.8       >
1.0.0.1.0 1.00.00.2 <
00.00.01  0.0.0.1   >
0.0.1     0.1       <
42.0      4.2.0     >
999.999   999.999.1 <
2018.08.1 2018.08   >


.NET এর একটি সংস্করণ অবজেক্ট রয়েছে তবে এতে একটি একক অক্ষর সমর্থিত নয় :(
ব্রায়ান জে

@ ব্রায়ানজে এবং অনেকগুলি চরিত্রের জন্য '.0' ব্যয় করতে চান? :)
রবউউ

ঠিক আছে, এটি আসলে 2, 3 বা 4 অংশ আশা করে। সুতরাং এটি 1.0.0.1.0 পরীক্ষার ক্ষেত্রে ব্যর্থ হয়েছে (যদিও আমি প্রথমে আপনার ধারণাটি চেষ্টা করেছি :))
ব্রায়ান জে

আমি মনে করি উইন্ডোজের একটি বিল্ট-ইন রয়েছে যা এটি করবে: StrCmpLogicalW
bace1000

উত্তর:



6

05 এ বি 1 ই (উত্তরাধিকার) , 15 14 13 বাইট

'.¡0ζε`.S}0K¬

আউটপুট -1 [] 1জন্য < = >যথাক্রমে।

-1 বাইট @ এমিগানাকে ধন্যবাদ ।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

'.¡              # Split on dots
                 #  i.e. ['1.0.1.1.0','1.00.2.0']
                 #   → [['1','0','1','1','0'],['1','00','2','0']]
   0ζ            # Zip, swapping rows and columns, using '0' as filler
                 #  i.e. [['1','0','1','1','0'],['1','00','2','0']]
                 #   → [['1','1'],['0','00'],['1','2'],['1','0'],['0','0']]
     ε   }       # Map each:
      `          #  Push both values to the stack
       .S        #  And calculate the signum (1 if a>b; -1 if a<b; 0 if a==b)
                 #   i.e. [['1','1'],['0','00'],['1','2'],['1','0'],['0','0']]
                 #    → [0,0,-1,1,0]
          0K     # Remove all zeros
                 #  i.e. [0,0,-1,1,0] → [-1,1]
            ¬    # Then take the head as result
                 #  i.e. [-1,1] → -1

1
আপনি 0Kপরিবর্তে ব্যবহার করতে পারেন ʒĀ}
Emigna

@ এমিগনা আহ অবশ্যই .. ধন্যবাদ।
কেভিন ক্রুইজসেন

5

আর , 32 বাইট

rank(numeric_version(scan(,"")))

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

একটি আর বিল্টিন ব্যবহার করে

আউটপুট 1 2, 1.5 1.5, 2 1কম, সমান বৃহত্তর জন্য।


এখন পর্যন্ত সেরা, বিল্টিন ছাড়া:

আর , 151 142 125 107 বাইট

function(v,L=strsplit(v,'\\.'))Find(c,sign(Reduce('-',Map(as.double,Map(c,L,Map(rep,0,rev(lengths(L))))))))

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

ব্যাখ্যা সহ নিবন্ধিত কোড:

function(v){             # character vector of 2 elements as function arg;
  L=strsplit(v,'\\.')    # obtain a list of two character vectors
                         # with the separated version numbers;
  R=rev(lengths(L))      # store in vector R the lengths of the 2 vectors and reverse it;
  M1=Map(rep,0,R)        # create a list of 2 vector containing zeros
                         # repeated R[1] and R[2] times;
  M2=Map(c,L,M1)         # append to the vectors in list L the zeros in M1;
  M3=Map(as.double,M2)   # convert the character vectors in M2 to double;
  w=sign(Reduce('-',M3)  # compute the sign of element by element difference M[[1]] - M[[2]]);
  Find(c,w)            # returns the first non zero element in w, if none return NULL;
}
# N.B. as.double is necessary because "0XX" is interpreted as octal by strtoi unless 
#      we use strtoi(x,10) which is exactly the same length of as.double(x)

আউটপুট -1, NULL, 1কম, সমান বৃহত্তর জন্য।


মূল ধারণা ব্যবহার নিচে golfed sapply, [<-এবং %*%:

আর , 129 বাইট

function(x,y=strsplit(x,"\\."),w=sign(sapply(y,function(x)strtoi("[<-"(rep(0,max(lengths(y))),seq(x),x),10))%*%c(1,-1)))w[!!w][1]

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

এখন আপনার কাছে দুটি সমান দৈর্ঘ্যের ভেক্টরের একটি তালিকা রয়েছে। জোড়ের মত পার্থক্য গণনা করুন এবং শেষের দিকে Reduceছোট্ট ছোট্ট w[!!w][1]ফর্মটি ব্যবহার করে প্রথম অ-শূন্য উপাদানকে আউটপুট দিন ।

আউটপুট -1, NA, 1কম, সমান বৃহত্তর জন্য।


চিত্তাকর্ষক! কুইক গল্ফ: আপনার কোডের শেষে অতিরিক্ত নিউলাইন - এটি 150 বাইট হওয়া উচিত;)
জেসি

নামে ভেরিয়েবল সংখ্যা কমাতে ... । আমি মনে করি তালিকার পরিবর্তে ম্যাট্রিক্স ব্যবহার করে এটি করার একটি উপায় আছে তবে আমি কীভাবে এটি করব তা এখনও পাইনি।
জেসি

1
আপনি এটি ব্যবহার করে 100 বাইটে নামিয়ে পেতে পারেন scan function(a,b,d=scan(t=a,se='.'),e=scan(t=b,se='.'),f=1:max(lengths(list(d,e))),g=d[f]-e[f])g[!!g][1](বা 106 যদি আপনি -1, এনএ, 1 টি (নেতিবাচক), এনএ, (ধনাত্মক) ফিরে আসতে চান
মলান

1
@ 100 মাইট বায়ু দ্রবণের সামান্য কাজ দরকার। এটি শেষ দুটি পরীক্ষার ক্ষেত্রে ব্যর্থ। 0প্যাডিংটি থাকতে হবে এবং না (অন্তর্নিহিত) NA। আমি একটি সম্প্রদায় উইকির উত্তরটি তৈরি করেছি যাতে যে কেউ এটি ঠিক করতে পারে কেবল এটি যুক্ত করতে পারে।
এনজিএম

1
@ ডিজিগেম সমস্ত প্রথমে সাইনটি গণনা করে 4 বাইট গল্ফ করেছে এবং তারপরেও Find(c,x)। আমি মনে করি এটি একটি নতুন কৌশল।
জেসি

4

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

এর ⍤1পরিবর্তে ∘↑(...)¨এবং নেস্টেড অ্যারে থেকে ম্যাট্রিক্সে ইনপুট ফর্ম্যাটটি পরিবর্তন করে ব্যবহার করার জন্য 1 বাইট @ অ্যাডমকে ধন্যবাদ রক্ষা করেছে

(⍋-⍒)(⍎¨∊∘⎕D⊆⊢)⍤1

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

ডান আর্গুমেন্ট হিসাবে অক্ষরের ম্যাট্রিক্স হিসাবে ইনপুট নেয়, যেখানে প্রতিটি সংস্করণ স্ট্রিং নিজস্ব সারিতে থাকে। আউটপুট ¯1 1, 0 0, 1 ¯1জন্য <, =, >যথাক্রমে।

(⍎¨∊∘⎕D⊆⊢)⍤1 প্রতিটি সারিতে

  • ∊∘⎕D⊆⊢ অঙ্কের সমস্ত উপস্থিতিগুলিকে গোষ্ঠীভূত করুন, অর্থাৎ বিভক্ত করুন .

  • ⍎¨ এবং এই সংঘটনগুলির প্রতিটিকে একটি সংখ্যায় রূপান্তর করুন

একটি ম্যাট্রিক্সে রূপান্তর করুন, যেখানে প্রথম ইনপুট শীর্ষ সারিতে এবং নীচে দ্বিতীয়টি 0যেখানে প্রয়োজন সেখানে এস দিয়ে প্যাডিং করুন

(⍋-⍒) এবং

  • - বিয়োগ করা
    • সারিগুলিতে সূচকগুলি যা ক্রমবর্ধমান ক্রমে সাজিয়ে রাখে
    • শীর্ষ হিসাবে একই কিন্তু আরোহী ক্রম জন্য

4

পার্ল 6 , 63 47 22 বাইট

{"v$^a cmp v$^b".EVAL}

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

দেখা যাচ্ছে যে পার্ল 6 এর একটি সংস্করণ টাইপ রয়েছে যা বর্ণনায় বেশ ফিট করে। এটি একটি বেনামী কোড ব্লক যে হয় দুই সংস্করণ স্ট্রিং এবং আয় একটি তালিকা লাগে More, Sameবা Less

ব্যাখ্যা:

{                    }  # Anonymous code block
 "             "        # Create a string of code
  v$^a cmp v$^b         # Comparing the two versions
                .EVAL   # And EVAL it

অথবা, 47 বাইটের জন্য অন্তর্নির্মিত প্রকারগুলি ছাড়াই:

{first +*,[Z<=>] map *.split('.')[^@_.ords],@_}

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

বেনামি কোড ব্লক যা দুটি স্ট্রিং নেয় এবং Moreদ্বিতীয়টি যদি বৃহত্তর হয় Lessতবে দ্বিতীয়টি ছোট হয় এবং Nilসেগুলি সমান হলে ফিরে আসে।

ব্যাখ্যা:

{                                             } # Anonymous code block
                 map *.split('.')          ,@_  # Split both strings by '.'
                                 [^@_.ords]     # Pad the lists by a lot
          [Z<=>]   # Zip the strings with the <=> operator
 first +*,  # Get the first value that when coerced to an int, is not 0

3

ব্র্যাচল্যাগ , 49 40 বাইট

+0|{~c[H,".",T]hị;T|ị;0|0}ᵐz{h-0&t↰₀|h-}

... এটি বরং অপ্রতিরোধ্যভাবে দীর্ঘ।

দুটি স্ট্রিংয়ের একটি তালিকা আশা করে। positive number / zero / negative number হিসাবে ব্যবহার করে > / = / <

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

ব্যাখ্যা

ইনপুট বিভক্ত করা

একটি ইনপুট দেওয়া হয়েছে যা একত্রিত হয় না [0, 0]যেমন যেমন ["1.02.0", "1.2.0.1.0"]নীচের বিভাগের আউটপুটগুলি, যেমন [[1, "02.0"], [1, "2.0.1.0"]],।

                            # unify the input with...
+0                          # : a list whose sum = 0 (output is 0)
  |{                     }ᵐ # : OR a list that when mapped...
    ~c                      # : : if the input string unifies with a list of the form...
      [H,".",T]             # : : : e.g. "1.02.0", H = "1", T = "02.0"
               hị           # : : : coerce the head to an integer
                 ;T         # : : : append the string T
                            # : : : "1.02.0" -> [1, "02.0"]
                   |ị       # : : OR it unifies with an integer
                     ;0     # : : : append 0
                            # : : : "1" -> [1, 0]
                       |0   # : : OR it unifies with 0
                            # : : : 0 -> [0]

ইনপুট তুলনা করা

প্রদত্ত, উদাহরণস্বরূপ, [[1, "02.0"], [1, "2.0.1.0"]]সাবলিস্টগুলিকে জিপ দেয় [[1, 1], ["02.0", "2.0.1.0"]]এবং মাথার মানগুলি ( [1,1]) এর সাথে তুলনা করে । দ্বিতীয় সাবলিস্টে পুনরাবৃত্তি করুন। নোট করুন যে zজিপটি সংক্ষিপ্ত তালিকার মাধ্যমে চক্রের পূর্বাভাস দেয় যাতে এর সাথে জিপ করা জিপ [0,0]করা সমান হয় [0], অতএব পূর্ববর্তী পদক্ষেপটি আরও মান যুক্ত না করে একত্রিত 0হয় 0

z             # zip the sublists
 {          } # unify the result (r) with...
  h           # : take the head of the result
   -          # : : subtract the second value from the first
    0         # : : if the difference unifies with 0...
     &t↰₀     # : : recur on the tail of r
         |h-  # : OR unify with the difference of the elements of the head
              # : (equivalent to returning early)

3

জাভাস্ক্রিপ্ট (ES6), 73 68 বাইট

@ রিডানডেন্সি ধন্যবাদ 5 বাইট সংরক্ষণ করা

হিসাবে ইনপুট লাগে (a)(b)। রিটার্নস জন্য সমান , একটি ধনাত্মক পূর্ণসংখ্যা জন্য তার চেয়ে অনেক বেশী বা একটি নেতিবাচক পূর্ণসংখ্যা কম0

a=>b=>(a+[...b].fill`.`).split`.`.some((x,i)=>d=~b.split`.`[i]-~x)*d

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


খুশী হলাম। আমি সঠিকভাবে বুঝতে থাকেন, তবে আপনি দ্বারা substituting বাইট সংরক্ষণ করতে পারবেন replaceসঙ্গে fill-উভয় এখন একটি সংখ্যা জোর করা আবশ্যক যেহেতু অপারেশন অপারেট করা হয়। এটি অনলাইন চেষ্টা করুন!
অপ্রয়োজনীয়

ভাল! (যদিও আমার বাস্তবায়নটি আপনার মনে ঠিক তাই ছিল কিনা তা নিশ্চিত নয় Not)
আর্নল্ড ২

আমি ধরে নিয়েছি আপনার উদ্দেশ্যটি 0 টির মতো সংখ্যার মতো পর্যাপ্ত মানগুলিকে সংযুক্ত করা ছিল যে a0 bটির চেয়ে বেশি সংখ্যক বিভাগ থাকলে শেষ পর্যন্ত চক্রের সাবস্ট্রিংগুলিতে ম্যাপিং করতে পারে a। এটি এমনটি ঘটে যে তা নিশ্চিত করার সবচেয়ে সংক্ষিপ্ত পদ্ধতিটি b'এর দৈর্ঘ্যের স্ট্রিংয়ের উপর বিভক্ত হয় ।' বিদ্যমান বিভাজন প্রয়োগ করে প্রয়োগ করে a
অপ্রয়োজনীয়

3

জাভা (জেডিকে 10) , 201 96 89 বাইট

java.util.Comparator.comparing(java.lang.module.ModuleDescriptor.Version::parse)::compare

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

প্রথম সংস্করণ দ্বিতীয়টির চেয়ে ছোট হলে একটি নেতিবাচক সংখ্যা প্রদান করে, যদি প্রথম সংস্করণটি দ্বিতীয়টির চেয়ে বড় হয় এবং 0যদি তারা সমান হয় তবে একটি ধনাত্মক নম্বর দেয় ।

হ্যাঁ, এটি একটি বিল্ট-ইনকে "জাস্ট" বলার জন্য কিছু ভারী কাজ!

ক্রেডিট


1
আমি চেষ্টা করেছি, তবে আমি কেবল তিনটি বাইট অপসারণ করতে সক্ষম .. 228 বাইট
কেভিন ক্রুইজসেন

1
আরও কিছু পাওয়া গেছে: 217 বাইট
কেভিন ক্রুইজসেন

1
সম্ভবত এটি .. try-finallyইফ-চেকটি সহজ করার জন্য ইতিমধ্যে চেষ্টা করা হয়েছে; লুপের ভিতরে ফেরার চেষ্টা যদি t!=0; ব্যবহার করার চেষ্টা করেছেন Integerএবং i.compare(i.valueOf(...),i.valueOf(...)); এই জাতীয় জেনারিক ব্যবহার করার চেষ্টা করেছেন <T>T[]g(T s){return(T[])(s+"").replaceAll("(\\.0+)*$","").split("\\.");}; ইত্যাদি সমস্ত 2-6 বাইট দীর্ঘ হয়। যদি আপনি (বা অন্য কেউ) কিছু খুঁজে পান তবে দয়া করে আমাকে জানান। কি জানতে আগ্রহী। :)
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন না, আমি পারছি না কারণ "সংস্করণ সংখ্যার সমস্ত সংখ্যা এর চেয়ে কম হবে 2^16।" সংক্ষিপ্ত পরিসীমা - (2 ^ 15) থেকে 2 ^ 15-1।
অলিভিয়ার গ্রাগোয়ার

1
@ কেভিন ক্রুইজসেন আমি 105 বাইট সরাতে পারি! কিভাবে? ঠিক আছে, আমি একটি অন্তর্নির্মিতটি পেয়েছি;)
অলিভিয়ার গ্রাগোয়ার


2

রেটিনা 0.8.2 , 54 বাইট

\d+
$*
+`^(.)(.*=)\1
$2
(.*=|^=.*)1.*
<
.*1.*=.*
>
\.

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। সমতা আউটপুট হিসাবে বিভাজক মানটি ব্যবহার করে, তাই সুবিধার জন্য শিরোনাম ইনপুট বিভাজককে রূপান্তরিত করে =তবে এটি কিছু নাও হতে পারে [.\d]। ব্যাখ্যা:

\d+
$*

অ্যানারিতে রূপান্তর করুন।

+`^(.)(.*=)\1
$2

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

  1. যদি উভয়ই স্ট্রিংয়ের একটি থাকে 1তবে ফলাফল হয়=
  2. যদি বাম স্ট্রিংটি একটি দিয়ে শুরু হয় 1তবে ফলাফল হয়>
  3. যদি ডান স্ট্রিংটি একটি দিয়ে শুরু হয় 1তবে ফলাফল হয়<
  4. যদি বাম স্ট্রিং ফাঁকা থাকে তবে ফলাফল হয় <
  5. এই মুহুর্তে ডান স্ট্রিং খালি তাই ফলাফল >

এ সম্পর্কে চিন্তাভাবনার আরেকটি উপায় হ'ল যদি একটি স্ট্রিংটিতে একটি থাকে 1এবং অন্যটি একটি দিয়ে শুরু না হয় 1তবে সেই স্ট্রিংটি আরও বেশি হয় তবে এটি বাইটটি দীর্ঘতর হয়।

(.*=|^=.*)1.*
<

কেস 3, বা কেস 4 ছাড়াই কেস 1 পরীক্ষা করুন।

.*1.*=.*
>

যদি বাম স্ট্রিংটিতে এখনও 1এই স্থানে একটি থাকে তবে এটি আরও বেশি।

\.

অন্যথায় যে কোনও বাম ও .গুলি মুছুন ।

ফায়ারফক্স ব্রাউজার কনসোল আরপিএল, 19 বাইট

Services.vc.compare

আমি বিশ্বাস করি যে এই অভ্যন্তরীণ ফাংশন প্রয়োজনীয় তুলনা করে। এটি -1, 0, বা 1 প্রদান করে।


1
আমি আপনাকে অন্য উত্তর হিসাবে ফায়ারফক্স ক্রোম কোড পোস্ট করার পরামর্শ দিচ্ছি ...
tsh

বিটিডব্লিউ, আমি নিশ্চিত নই যে ফায়ারফক্স ক্রোম কোডটি তার বাইটগুলি কীভাবে গণনা করবে। করা উচিত Cu.import("resource://gre/modules/Services.jsm");গণনা করা?
tsh

1
@tsh এ কারণেই আমি "ব্রাউজার কনসোল আরপিএল" যুক্ত করেছি ...
নীল

2

পিএইচপি , 38 বাইট

<?=version_compare($argv[1],$argv[2]);

আউটপুট -1 → < | 0 → = | 1 → >

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


আমি মনে করি আপনার জমাটি কেবল ফাংশন হতে পারে
জো কিং

1
এটি কেবল পেছনের শূন্যগুলিতে পৃথক হওয়া কোনও জোড়া ইনপুটগুলির জন্য ভুল ফলাফল প্রদান করে, যেমন 1.0.0এবং1
Oktupol

2

সি (জিসিসি) ,  140  134 বাইট

এই কোড একটি নেতিবাচক, আউটপুট 0বা জন্য একটি ইতিবাচক <, =বা >যথাক্রমে।

i;n;p;q;g(char*s){for(i=n=0;*s&&++n&&*s-46;i=i*10+*s++-48);i=i;}f(char*a,char*b){for(p=q=0;*a+*b&&p==q;b+=n)p=g(a),a+=n,q=g(b);a=p-q;}

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

সম্পাদনা:

  • সিলিংক্যাট ধন্যবাদ 6 বাইট সংরক্ষণ করা!

চ্যালেঞ্জটি বলে: "তিনটি ধ্রুব স্বতন্ত্র মান ব্যবহার করুন;" আপনার কোড ধ্রুবক ফিরে না।
অলিভিয়ার গ্রাগোয়ার

1
@ অলিভিয়ার এটি বলে যে আমি "তিনটি ধ্রুবক স্বতন্ত্র মান ব্যবহার করতে পারি;" বা "ধনাত্মক সংখ্যা / শূন্য / নেতিবাচক সংখ্যা ব্যবহার করুন, শূন্যের অর্থ সমান;"
অ্যানিও

আমার খারাপ! আপনি ঠিক বলেছেন।
অলিভিয়ার গ্রাগোয়ার


1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 105 88 80 বাইট

@ রিডানডেন্সি থেকে -17 বাইট। কি দারুন!

-8 বাইট ম্যাথ.সাইন। ধন্যবাদ @tsh

একটি নেতিবাচক, শূন্য বা ধনাত্মক মান প্রদান করে

f=(a,b,r=/(\d*).?(.*)/)=>a+b&&+((a=r.exec(a))[1]-(b=r.exec(b))[1]||f(a[2],b[2]))

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


1
স্ট্রিট execবিভক্ত করতে 88 বাইট ব্যবহার করে। এটি অনলাইন চেষ্টা করুন!
অপ্রয়োজনীয়

@ রিডানডেন্সি ধিক্কার, ধন্যবাদ! একটি দুর্দান্ত শীতল কৌশলটি
জানায়

পজিটিভ / শূন্য / নেতিবাচক মানগুলিতে স্যুইচ করে কিছু বাইট সংরক্ষণ করতে আপনি ম্যাথ.সাইনকে সরাতে পারেন। এবং সম্ভবত একটি ইতিবাচক চিহ্ন প্রয়োজন।
tsh

1

জাপট , 16 11 বাইট

@ শেগি থেকে -5 বাইট

আউটপুট:

  • জন্য নেতিবাচক সংখ্যা <
  • ( nullবা 0) জন্য=
  • জন্য ইতিবাচক সংখ্যা >

N®q.Ãy_r-Ãf

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


Would এই কাজ করে?
শেগি

@ শেগি ইয়েপ, এটি যথাক্রমে 10 টি বাইটে নেতিবাচক, নাল বা 0 < = >আউটপুট করে সংক্ষিপ্ত করা যেতে পারে তবে ইনপুটটি অ্যারে হিসাবে নেওয়া যেতে পারে কিনা তা আমি জানি না
লুইস ফিলিপ ডি জেসুস মুনোজ

0

পরিষ্কার , 116 111 বাইট

import StdEnv,Text
?s=map toInt(split"."s)
$a b= @(?a)(?b)
@[h:t][u:v]|h==u= @t v=h-u
@l[]=sum l
@[]l= ~(sum l)

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

প্রথম যুক্তি দ্বিতীয়টির তুলনায় কম হলে, সমান হলে শূন্য এবং দ্বিতীয়টির চেয়ে বেশি হলে ধনাত্মক সংখ্যা আউটপুট দেয়।


0

সুইফট 4 , 155 বাইট

শিরোনাম (গণনা করা হয়নি: কোডটি পুনরাবৃত্তিযোগ্য নয়):

let f:(String,String)->Bool? = 

কোড

{let x:(String)->[Int]={$0.split{$0=="."}.map{Int($0)!}.reversed().drop{$0==0}.reversed()},a=x($0),b=x($1)
return a==b ?nil:a.lexicographicallyPrecedes(b)}

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

ব্যাখ্যা

  • আমরা পিছনে ছাঁটা .0।
  • আমরা সংখ্যার সাথে উপাদানগুলি তুলনা করি।

রিটার্নড কনস্ট্যান্টস

  • শূন্য =
  • জন্য সত্য
  • > এর জন্য মিথ্যা

0

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

a=>b=>(e=i=>(g=v=>v.split`.`[i]||0)(a)-g(b)||!a[i]-1&&e(i+1))(0)

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

মন্তব্য সহ:

a=>b=>(                            // Main function takes arguments like ("1.2.42")("1.2.41")
    e=i=>                          // e(i) compares the ith number, returns >0, <0 or =0.
        (   g=v=>v.split`.`[i]||0  // g() returns the ith string or 0
        )(a)                       // call g(a)
        -g(b)                      // subtracting g(b) from g(a) casts strings to integer
        ||                         // If they are not equal return result now
        !a[i]-1 &&                 // recursion limited to a.length, always sufficient
        e(i+1)                     // next i
    )(0)                           // Start with i = 0


0

বার্লেস্ক - 17 বাইট

wd{'.;;)ri}m[^pcm


blsq ) "2018.08.1 2018.08"wd{'.;;)ri}m[^pcm
1
blsq ) "0.0.1 0.1"wd{'.;;)ri}m[^pcm
-1
blsq ) "1.1.56789 1.2.0"wd{'.;;)ri}m[^pcm
-1

আপনি যদি '> <=' এ আউটপুট চান তবে যুক্ত করুন ?i"<=>"j!!Q


0

পাওয়ারশেল, 88 বাইট

রিটার্নস 0সমান, একটি positive integerতার চেয়ে অনেক বেশী বা জন্য negative integerকম জন্য।

param($a,$b)+(($x=$a-split'\.')+($y=$b-split'\.')|%{$x[+$i]-$y[$i++]}|?{$_}|Select -f 1)

কম গল্ফ পরীক্ষা স্ক্রিপ্ট:

$f = {

param($a,$b)
$x=$a-split'\.'
$y=$b-split'\.'
$z=$x+$y|%{
    $x[+$i]-$y[$i++]
}|?{$_}|Select -first 1
+$z             # convert $null to 0

}

@(
    ,("2"         ,"1"         , 1)
    ,("1.0.0"     ,"1"         , 0)
    ,("1.0"       ,"1.0.0"     , 0)
    ,("1.2.42"    ,"1.2.41"    , 1)
    ,("1.1.56789" ,"1.2.0"     ,-1)
    ,("1.10"      ,"1.2"       , 1)
    ,("1.20"      ,"1.150"     ,-1)
    ,("18.04"     ,"18.4"      , 0)
    ,("7.010"     ,"7.8"       , 1)
    ,("1.0.0.1.0" ,"1.00.00.2" ,-1)
    ,("00.00.01"  ,"0.0.0.1"   , 1)
    ,("0.0.1"     ,"0.1"       ,-1)
    ,("42.0"      ,"4.2.0"     , 1)
    ,("999.999"   ,"999.999.1" ,-1)
    ,("2018.08.1" ,"2018.08"   , 1)
) | % {
    $v1,$v2,$expected = $_
    $result = &$f $v1 $v2
    "$([Math]::Sign($result)-eq$expected): $result"
}

আউটপুট:

True: 1
True: 0
True: 0
True: 1
True: -1
True: 8
True: -130
True: 0
True: 2
True: -1
True: 1
True: -1
True: 38
True: -1
True: 1

0

ডার্ট , 277 231 বাইট

F(s,{t}){t=s.split('.').map(int.parse).toList();while(t.last<1)t.removeLast();return t;}f(a,b,{d,e,f,g,h,i=0}){d=F(b);e=F(a);g=d.length;h=e.length;f=h>g?g:h;for(;i<f;i++)if(e[i]!=d[i])return e[i]>d[i]?1:-1;return h>g?1:(h<g?-1:0);}

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

  • দৈর্ঘ্য সঞ্চয় করতে ভেরিয়েবল ব্যবহার করে এবং লুপে টার্নারি ব্যবহার করে -44 বাইট
  • বন্ধনীর জন্য অপসারণ করে -2 বাইট

0

সুইফট 4 + ফাউন্ডেশন , 160 বাইট (142 + 18) , 155 বাইট (142 + 13)

আমদানি করুন ( ;কোড থেকে পৃথক করে সহ 13 বাইট ):

এটি ফাউন্ডেশন আমদানি করবে তবে এর চেয়ে কম 5 বাইট কম import Foundation

import UIKit;

শিরোনাম (গণনা করা হয়নি: কোডটি পুনরাবৃত্তিযোগ্য নয়):

let f:(String,String)->ComparisonResult =

কোড (142 বাইট):

{var x={($0 as String).split{$0=="."}.count},a=$0,b=$1
while x(a)<x(b){a+=".0"}
while x(b)<x(a){b+=".0"}
return a.compare(b,options:.numeric)}

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

ব্যাখ্যা

  1. একই সংখ্যক উপাদানগুলির জন্য আমরা কিছু অনুসরণীয় 0 সংযোজন করি।
  2. আমরা সংখ্যার সাথে উপাদানগুলি তুলনা করি।

রিটার্নড কনস্ট্যান্টস

  • তুলনাআরসাল্ট.অর্ডারসেম = এর জন্য
  • <এর জন্য তুলনাআরসাল্ট.অর্ডারডঅ্যাসেন্ডিং
  • > এর জন্য তুলনাআরসাল্ট.অর্ডারডেসেন্ডিং

আমি importবিবৃতিটি গণনা করেছি কিনা তা নিশ্চিত নই , তাই আমি পৃথক উত্তর পোস্ট করেছি যার প্রয়োজন নেই Foundationএবং 142 বাইট (আমদানি গণনা করা হচ্ছে না) এবং 160 বাইট (আমদানি গণনা করা) এর মধ্যে বাইটস গণনা করার প্রয়োজন নেই ।
সিউর

0

Zsh , 54 বাইট

eval {autoload,}' is-at-least $'{1\ $2,2\ $1}';<<<$?;'

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

এই evalনিম্নলিখিত আট বিবৃতি S:

autoload is-at-least $1 $2     # loads the "is-at-least" function
<<<$?                          # success, prints 0
autoload is-at-least $2 $1     # redundant
<<<$?                          # success, prints 0
is-at-least $1 $2              # exits 1 if $1 < $2
<<<$?
is-at-least $2 $1              # exits 1 if $2 < $1
<<<$?

সুতরাং তিনটি অনন্য মান হল:

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