Sürüm numaralarını karşılaştırın


26

Bazı yazılımları yayınladığımızda, ona bir sürüm numarası veriyoruz. Ve kullanıcılar bazı yazılımların en son sürümlerine güncelleme yapmak isteyebilirler. Öyleyse, hangi sürümün daha yeni olması gerektiğini bulma zamanı.

Giriş

Dizge olarak iki sürüm numarası girin.

Bu zorluk bağlamında, yalnızca noktalarla birleştirilen bazı basamaklar olan sürüm numaralarını destekliyoruz.

  • Sürüm numarası, yalnızca rakamları ( 0~ 9) ve dots ( .) içerebilen bir dizedir .
  • Noktalar, sürüm numarasının ilk / son karakteri olmaz.
  • Noktalar arasında bazı rakamlar olmalıdır. Sürekli olarak iki nokta görünmeyebilir.
  • Sürüm numarasındaki tüm numaralar 2 16'dan küçük olur .

Çıktı

Girilen sürüm numaralarını karşılaştırın ve birincisinin ikinciden eşit / daha küçük olup olmadığına bakın. Aşağıdaki sunumlardan birini seçmenize izin verilir:

  • Pozitif sayı / sıfır / negatif sayı kullanırken, sıfır eşit demektir;
  • Üç sabit farklı değer kullanın;

karşılaştırma

Bu bölümde açıklanan algoritmayı uygulamanız gerekmez. Gönderiminiz, bu algoritma ile aynı çıktıyla sonuçlandığı sürece geçerlidir.

  • Sürüm numaraları, noktalarla birleştirilen bazı ondalık sayılardır. İlk önce iki versiyon numarasını sayı dizisine böldük;
  • Dizilerin sonlarının aynı uzunlukta olmasını sağlamak için sıfırlarla doldurulması;
  • İlk maddeden sonuncuyla karşılaştırın:
    • İki dizi öğesi farklıysa, daha büyük sayı daha büyük sürüm numarası anlamına gelir.
    • Aynılarsa, aşağıdakileri karşılaştırmaya devam edin;
    • Dizideki tüm öğeler eşitse, iki sürüm eşittir.

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 bir Version nesnesine sahip, ancak tek bir karakter içinde desteklenmiyor :(
Brian J

@BrianJ ve birçok karaktere '.0' ekleme maliyeti? :)
RobAu,

Aslında 2, 3 veya 4 porsiyon bekliyor. Bu yüzden 1.0.0.1.0 test davasında başarısız oluyor (başlangıçta fikrinizi denedim :))
Brian J

Sanırım Windows bunu yapacak bir yerleşik içeriğe sahip: StrCmpLogicalW
bace1000

Yanıtlar:



6

05AB1E (eski) , 15 14 13 bayt

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

Çıkışlar -1 [] 1için < = >sırasıyla.

@Emigna sayesinde -1 bayt .

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın .

Açıklama:

'.¡              # 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
Sen kullanabilirsiniz 0Kyerine ʒĀ}.
Emigna,

Tabii ki @Emigna Ah .. Teşekkürler.
Kevin Cruijssen,

5

R , 32 bayt

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

Çevrimiçi deneyin!

Bir R yerleşik kullanarak

Çıkışlar 1 2, 1.5 1.5, 2 1daha az, eşit, daha uzun bir süreyle.


Yerleşik olmadan şimdiye kadarki en iyi:

R , 151 142 125 107 bayt

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

Çevrimiçi deneyin!

Açıklamalı kontrolsüz kod:

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)

Çıkışlar -1, NULL, 1daha az, eşit, daha uzun bir süreyle.


Orijinal konsept, kullanarak aşağı golfed sapply, [<-ve %*%:

R , 129 bayt

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]

Çevrimiçi deneyin!

Şimdi iki eşit uzunluktaki tamsayı vektörünün bir listesi var. İkili farkları kullanarak hesaplayın ve sondaki Reducezor küçük w[!!w][1]formu kullanarak ilk sıfır olmayan elemanı çıkarın .

Çıkışlar -1, NA, 1daha az, eşit, daha uzun bir süreyle.


Etkileyici! Çabuk golf: Kodunuzun sonunda ekstra yeni
hat

... isimli değişkenlerin sayısını azaltmak . Listeleri yerine bir matris kullanarak yapmanın bir yolu olduğunu düşünüyorum ama henüz nasıl yapılacağını bulamadım.
JayCe

1
Bunu kullanarak 100 bayta indirebilir 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](veya -1, NA, 1 değil (negatif), NA, (pozitif) döndürmek istiyorsanız, 106
mnel

1
@mnel 100 byte çözümü biraz çalışma gerektiriyor. Son iki test olayında başarısız oldu. Dolgu 0(dolaylı) olmalı ve olmamalıdır NA. Bu cevabı bir Topluluk Wiki'si yaptım, böylece düzeltebilecek her kimse ekleyebilir.
NGM

1
@digEmAll önce işareti hesaplayarak 4 byte golf oynadı ve sonra yaptı Find(c,x). Bence bu yeni bir numara.
JayCe

4

APL (Dyalog Unicode) , 18 17 bayt

Giriş biçimini yuvalanmış bir diziden bir matrise değiştirerek kullanmak ⍤1yerine @ Adám sayesinde 1 bayt kaydedildi∘↑(...)¨

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

Çevrimiçi deneyin!

Girdiyi, her sürüm dizesinin kendi satırında olduğu doğru argüman olarak bir karakter matrisi olarak alır. Çıkışlar ¯1 1, 0 0, 1 ¯1için <, =, >sırasıyla.

(⍎¨∊∘⎕D⊆⊢)⍤1 her satırda

  • ∊∘⎕D⊆⊢ Tüm basamak oluşumlarını gruplandırmak .

  • ⍎¨ ve bu oluşumların her birini bir sayıya dönüştürün.

İlk girişin üst satırda, ikincinin alt kısımda olduğu bir matrise dönüştürün, 0gerekli olduğunda s ile doldurun

(⍋-⍒) ve

  • - çıkarmak
    • Endeksleri sıraya göre sıralayacak şekilde sıralar.
    • üst ile aynı ancak artan sipariş için

4

Perl 6 , 63 47 22 bayt

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

Çevrimiçi deneyin!

Perl 6'nın açıklamaya hemen hemen uyan bir sürüm türüne sahip olduğu ortaya çıkıyor. Bu, iki sürüm dizesinin listesini alan ve döndüren adsız bir kod bloğudur More, Sameveya Less.

Açıklama:

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

Veya, 47 bayt için yerleşik türler olmadan:

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

Çevrimiçi deneyin!

İki dizgiyi alan ve Moreikincisi daha büyükse, Lessikincisi daha küçükse ve Nileşitse döndürülen adsız kod bloğu .

Açıklama:

{                                             } # 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

Brachylog , 49 40 bayt

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

... Hala etkileyici derecede uzun.

İki dizenin bir listesini bekliyor. Kullanımları positive number / zero / negative number olarak > / = / <.

Çevrimiçi deneyin!

açıklama

Girişleri bölme

İle birleşme olmayan bir giriş verilen [0, 0]gibi ["1.02.0", "1.2.0.1.0"], örneğin kademeli çıkışları, aşağıda [[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]

Girişlerin karşılaştırılması

Örneğin, [[1, "02.0"], [1, "2.0.1.0"]]verilenler, alt listeleri sıkıştırır [[1, 1], ["02.0", "2.0.1.0"]]ve kafadaki değerleri karşılaştırır ( [1,1]). İkinci alt listede tekrarla. Yüklem zip bu Not zile sıkıştırma, böylece kısa bir liste arasnda [0,0]ile sıkıştırma eşdeğerdir [0]dolayısıyla önceki adımı birleştirir, 0ile 0diğer değerleri ekteki olmadan.

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

JavaScript (ES6), 73 68 bayt

@Redundancy sayesinde 5 bayt kurtardı

(a)(b)0

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

Çevrimiçi deneyin!


Güzel. Doğru anladım ettiyseniz, ikame edilmesi suretiyle bayt kaydedebilirsiniz replaceile fill. Her -ikisi de şimdi bir sayıya zorlanmak zorunda olduğundan, işlenenler değiştirildi. Çevrimiçi deneyin!
fazlalık

@redundancy İyi fikir! (Uygulamamın tam olarak aklınızdakilerden biri olup olmadığından emin değilim.)
Arnauld

Amacınızın, 0'a zorlayıcı değerler eklemek olduğunu, öyle ki , sayılardan daha fazla sayıda bölüm içeriyorsa , asonuçta bu 0 değer arasında alt döngüleri eşleştirecek şekilde eşleme yapılacağını varsaydım . Öyle olur ki, bunu sağlamanın en kısa metodu '.' Uzunluğundaki bir dizgeye bölünmektir . uygulanan bölünmeyi kaldırarak . baba
fazlalık

3

Java (JDK 10) , 201 96 89 bayt

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

Çevrimiçi deneyin!

İlk sürüm ikinci sürümden daha küçükse negatif, ilk sürüm ikinci sürümden büyükse ve 0eşitse pozitif olan bir sayı döndürür .

Evet, bu yerleşik bir "sadece" demek için ağır bir iş!

Kredi


1
Denedim, ancak yalnızca üç baytı kaldırabilirim .. 228 bayt
Kevin Cruijssen

1
Daha fazla bilgi edinin: 217 bayt
Kevin Cruijssen

1
Muhtemelen bu ... Zaten denedim try-finally, eğer if-check basitleştirilebilir; eğer döngü içinde dönüş denedim t!=0; Integerve kullanmayı denedim i.compare(i.valueOf(...),i.valueOf(...)); bunun gibi jenerik ilaçları kullanmayı denedi <T>T[]g(T s){return(T[])(s+"").replaceAll("(\\.0+)*$","").split("\\.");}; Hepsi 2-6 bayttır. Siz (veya bir başkası) daha fazla bir şey bulursanız, lütfen bana bildirin. Ne olduğunu merak ediyorum. :)
Kevin Cruijssen,

1
@KevinCruijssen Hayır, yapamam çünkü "Bir sürüm numarasındaki tüm sayılar daha az olurdu 2^16." Kısa değerler - (2 ^ 15) ila 2 ^ 15-1 arasındadır.
Olivier Grégoire

1
@KevinCruijssen 105 bayt kaldırabilirim! Nasıl? Şey, bir yerleşik buldum;)
Olivier Grégoire


2

Retina 0.8.2 , 54 bayt

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

Çevrimiçi deneyin! Link, test durumlarını içerir. Ayırıcı değerini eşitlik çıktısı olarak kullanır, böylece kolaylık sağlamak için başlık giriş ayırıcıyı dönüştürür =ancak içinde olmayan bir şey olabilir [.\d]. Açıklama:

\d+
$*

Birliğe dönüştür.

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

İlk karakteri, farklı veya bir tarafı bitene kadar her bir taraftan siliniz. Bu, muhtemelen golfçüler olmasa da, önekleri eşleştirmeye çalışmaktan çok daha hızlıdır. Bu noktada, dizgiler, bir karşılaştırma sonucunun kodu çözülmesi gereken çeşitli formlardan birindedir.

  1. Her iki dize de içermiyorsa 1sonuç=
  2. Sol dize bir ile başlarsa 1, sonuç>
  3. Sağ dize bir ile başlarsa 1, sonuç<
  4. Sol dize boşsa, sonuç <
  5. Bu noktada sağ dize boştur, yani sonuç >

Bunun hakkında düşünmenin bir başka yolu, eğer bir dize a içeriyorsa 1diğeri diğeriyle başlamazsa, 1o dize daha büyüktür, ancak bunun bir bayt olduğu ortaya çıkar.

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

Durum 3'ü veya durum 1 olmadan durum 4'ü kontrol edin.

.*1.*=.*
>

Sol dize hala 1bu noktada bir a içeriyorsa , daha büyük olur.

\.

Aksi takdirde kalanları .s.

Firefox Tarayıcı Konsolu REPL, 19 bayt

Services.vc.compare

Bu iç fonksiyonun gerekli karşılaştırmayı yaptığını düşünüyorum. -1, 0 veya 1 döndürür.


1
Firefox krom kodunu başka bir cevap olarak göndermenizi tavsiye ederim ...
tsh

btw, Firefox krom kodunun baytları nasıl saydığından emin değilim. Meli Cu.import("resource://gre/modules/Services.jsm");sayılacak?
tsh,

1
@tsh Bu yüzden "Browser Console REPL" 'i ekledim ...
Neil


2

C (gcc) ,  140  134 bayt

Bu kod, bir negatif çıktılar 0ya da pozitif <, =ya da >sırasıyla.

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;}

Çevrimiçi deneyin!

Düzenlemeler:

  • Ceilingcat sayesinde 6 byte kurtarıldı!

Zorluk şöyle: "Üç sabit farklı değer kullanın;" Kodunuz sabit döndürmez.
Olivier Grégoire

1
@Olivier "Üç sabit farklı değer kullanın" diyebileceğimi belirtiyor; VEYA "Sıfır eşit demektir; pozitif sayı / sıfır / negatif sayı kullanın."
Annyo,

Benim hatam! Haklısın
Olivier Grégoire


1

JavaScript (Node.js) , 105 88 80 bayt

@Undan itibaren -17 bayt. Vaov!

-8 bayt Math.sign'ı kaldırıyor. Teşekkürler @tsh

Negatif, sıfır veya pozitif değer döndürür

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

Çevrimiçi deneyin!


1
execDizeleri bölmek için 88 bayt kullanılır . Çevrimiçi deneyin!
fazlalık

@redundancy Lanet olsun, teşekkürler! thats oldukça havalı bir hile
Luis felipe De jesus Munoz

Belki pozitif / sıfır / negatif değerlere geçerek bazı baytları kaydetmek için Math.sign dosyasını kaldırmak istiyorsunuz. Ve belki de olumlu bir işaret gereklidir.
tsh


0

Temiz , 116 111 bayt

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)

Çevrimiçi deneyin!

İlk argüman ikinciden küçük olduğunda negatif sayı, eşdeğer olduğunda sıfır ve ikinciden fazla olduğunda pozitif sayı verir.


0

Swift 4 , 155 bayt

Başlık (sayılmaz: kod özyinelemeli değildir):

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

kod

{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)}

Çevrimiçi deneyin!

açıklamalar

  • İzleri kırptık .0.
  • Bileşenleri sayısal olarak karşılaştırırız.

Döndürülen sabitler

  • nil =
  • <için doğru
  • için yanlış>

0

JavaScript 64 bayt

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

Çevrimiçi deneyin!

Yorumlarla:

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

Burlesque - 17 bayt

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

'> <=' De çıktı almak istiyorsanız ekleyin ?i"<=>"j!!Q.


0

Powershell, 88 bayt

0Eşit, positive integera'dan büyük veya a'dan küçük için döndürür negative integer.

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

Daha az golf test testi senaryosu:

$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"
}

Çıktı:

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

Dart , 277 231 bayt

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);}

Çevrimiçi deneyin!

  • -44 bayt uzunluğu depolamak için değişkenleri kullanarak ve döngü içinde üçlü kullanarak
  • - Parantezleri kaldırarak

0

Swift 4 + Vakfı , 160 bayt (142 + 18) , 155 bayt (142 + 13)

İçe aktar ( ;koddan ayrılmak da dahil olmak üzere 13 bayt ):

Bu, Foundation'ı içe aktaracak, ancak 5 byte daha kısa import Foundation.

import UIKit;

Başlık (sayılmaz: kod özyinelemeli değildir):

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

Kod (142 bayt):

{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)}

Çevrimiçi deneyin!

açıklamalar

  1. Aynı sayıda bileşen için bazı izler.0 ekledik.
  2. Bileşenleri sayısal olarak karşılaştırırız.

Döndürülen sabitler

  • KarşılaştırmaResult.orderedSame =
  • KarşılaştırmaResult.orderedAscending for <
  • KarşılaştırmaResult.orderedDescending>

İfadeyi sayıp saymadığımızdan emin değilim import, bu yüzden gerektirmeyen ve 142 bayt (içe aktarma sayılmaz) ve 160 bayt (içe aktarma sayma) arasında bir bayt sayma gerektiren ayrı bir yanıt gönderdim Foundation.
Coeur

0

Zsh , 54 bayt

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

Çevrimiçi deneyin! Bir test takımı deneyin!

Bu evalaşağıdaki sekiz ifadeye 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
<<<$?

Yani üç benzersiz değer:

 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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.