Bu kelime Lexically Sıralı mı?


44

Bir giriş dizgesi verildiğinde, S truthyharfindeki tüm harfler Lexically Ordered ise döner : ASCII değerlerinin artan veya azalan sırada olması gerekir. falsyDiğer durumlarda iade edin .

Giriş

  • Giriş aynı durumda olacaktır (tümü büyük veya tümü küçük harf). Gönderiniz her ikisini de yapabilmelidir.
  • Giriş, [A-Za-z]yalnızca aralıktaki ASCII’den oluşacak
  • Giriş uzunluğu, dilinizin desteklediği maksimum değere kadar en az 1 olacaktır.
  • Giriş bir dizedir - bir karakter listesi değil, bir ASCII kod noktası dizisi değil.

Çıktı

  • Çıktı olmalıdır trueya false, ya 0/1, ya da başka farklı true / falsetarzı çıkışı Dil sağlayabilir.
  • Tüm gerçek vakalar aynı çıktıya ve tüm yanlış durumlara sahip olmalıdır. "Yanlış 0, gerçek 1, 2 veya 3" değildir.

Ek kurallar

  • Standart boşluklar yasaktır
  • Cevap, snippet veya REPL girişi değil, tam program veya işlev olmalıdır.
  • , bayt cinsinden en kısa cevap kazanır.

Test durumları

Doğru

"ABCDEF"
"ZYX"
"no"
"tree"   --> the multiple 'e's don't break the order
"q"

Falsy

"ABCDC"
"yes"
"deed"

Geçersiz

"Hello" --> invalid input - mixed case-, does not have to be handled
""      --> invalid input - length 0-, does not have to be handled
"\n
  "     --> invalid input - newline is not in range [A-Za-z]-, does not have to be handled

1
Çıktı hakkında net bilgi verebilir misiniz? Hangi girişin verildiğinden bağımsız olarak gerçek değerin aynı olması gerekiyor mu?
Business Cat,

1
@BusinessCat Bir açıklama ekledim.
steenbergh,

Dilinizin bir dizgeyi uygulaması bir karakter listesi ise ne olur? Buraya gönderilen cevapların birçoğu bu dilleri kullanıyor ...
theonlygusti

1
Doğru ve Yanlış için gerçekten farklı değerler istiyorsanız, söylememelisiniz truthyveya falsy. Bu ima herhangi etmek değerlendirmek değerler trueveya falseizin verilir.
FlipTack

Yanıtlar:


8

05AB1E , 5 bayt

Â)¤{å

Çevrimiçi deneyin!

açıklama

Â)     # pair the input with it's reverse in a list
  ¤{   # get a copy of the reverse and sort it
    å  # check if the sorted copy is in the list of [input,reverse_input]

{¹å4 için cevabımı sildim. Bifurkat kullanımı fark etmedi, benimki çok benzerdi.
Magic Octopus Urn

@ carusocomputing: Bu ne yazık ki sadece girişin sıralanmış girişin tersinde olup olmadığını kontrol eder.
Emigna

Veya sıralanmış girişe eşit. aba => ['aab', 'baa'] => is in? => 0| aab => same => 1
Magic Octopus Urn,

@ carusocomputing: Sıralanan giriş, yığındaki tersin altında olduğu için dikkate alınmaz. Onları asla bir listede eşleştiremezsin.
Emigna

Coulda bifürkat sarılı çıktı yemin etti; nvm, beni görmezden gel.
Magic Octopus Urn


13

Haskell , 33 bayt

(%)=scanl1
f s=s==max%s||s==min%s

Çevrimiçi deneyin!

Takma ad scanl1ekli 1 byte için Ørjan Johansen'e teşekkürler .

Haskell, golf sıralama temelli zorluklar için ilginç bir dildir, çünkü yerleşik bir sıralama özelliği yoktur ve uzun süren bir engeli yoktur import Data.List. Bu, açıkça sıralama yapmadan görevi el ile yapmanın bir yolunu bulmayı teşvik eder.

Kod scanl1, ara sonuçları izleyerek listeden bir işlemi soldan sağa doğru katlayan bir işlem kullanır . Bu nedenle, scanl1 maxlistenin kümülatif maksimasını, yani aşamalı olarak daha uzun öneklerin maksimasını listeleme etkisine sahiptir. Örneğin scanl1 max [3,1,2,5,4] == [3,3,3,5,5],.

Aynı şekilde minlistenin azalıp azalmayacağı da kontrol edilir. Kod iki vakayı kontrol eder ve bunları birleştirir ||.

Diğer ifadelerle karşılaştır:

(%)=scanl1;f s=s==max%s||s==min%s

f s=or[s==scanl1 q s|q<-[min,max]]
f s=s==scanl1 max s||s==scanl1 min s
f s=any(\q->scanl1 q s==s)[min,max]
f s=any((==s).(`scanl1`s))[min,max]
f s=elem s$(`scanl1`s)<$>[min,max]

Aslında ||tanımladığınız sürümle kazanırsınız (?)=scanl1.
Ørjan Johansen

11

Perl 6 , 25 bayt

{[le] .comb or[ge] .comb}

Nasıl çalışır:

  • .comb girişi bir karakter dizisine böler.
  • leve gevardır "az veya eşit" ve "büyük veya eşit" string karşılaştırma operatörleri.
  • [ ]Bir infix operatörünün çevresinde, bu operatörle olan argüman listesini azaltır ("katlar"). (Girdide yalnızca sıfır veya bir karakter varsa, True değerini döndürecek kadar akıllıdır.)
  • or her iki tarafındaki ifadeler doğruysa True değerini döndürür.

10

JavaScript (ES6), 43 bayt

([...s],q=s+"")=>q==s.sort()|q==s.reverse()

Argümandaki değişkenleri değiştirebileceğinizi bilmiyordum. Güzel!
Luke

1
@Luke Bu sadece varsayılan parametrelerin zor bir kullanımıdır : işlevi ikinci bir argümanla çağırmak qyerine bunun yerine bu değere ayarlanırdı.
ETHProductions

Aslında (bu durumda) onu hemen diziye dönüştüren spread operatörünü kastettim.
Luke

Ah tamam. Evet, yıkım çalışmaları da gerçekten işe yarıyor ;-)
ETHproductions

.sort()reverse
Mutasyonları zekice


6

Clojure, 47 bayt

#(let[c(map int %)a apply](or(a <= c)(a >= c)))

Hangi operatörün tam olarak başvuracağına nasıl karar verileceğine karar verilemedi. Bu harika.
Carcigenicate

Clojure'da yerleşik işlev adlarını değişkenlere ekleyebilir misiniz? Huh, bu harika. Bu yapar <=ve >=gerçekten garip olsa da, hangi infix bak.
clismique

(let[+ *](+ 2 3))= 6: D Herhangi bir işlev üzerinde çalışır, ancak görünüşe göre makrolarda değil: "Bir makro değeri
alamıyor

6

C (gcc) , 70 bayt

o(s,a)char*s;{for(a=0;s[1];s++)a|=s[1]-*s&64|*s-s[1]&32;return a!=96;}

Özyinelemeli bir işleve dayalı daha kısa bir çözüm bulmayı umuyordum, ancak çıktı gereksinimi nedeniyle işe yaramadı. İşte zorunlu bir yaklaşım. En azından, C'nin operatörü önceliği iç döngü ifadesi için iyi çalışıyor.

Çevrimiçi deneyin!


6

R, 48 50 61 bayt

Adsız bir işlev olarak

function(s)sd(range(sign(diff(utf8ToInt(s)))))<1

@Guiseppe'ye birkaç ekstra bayt için teşekkürler.

charToRawalır sve ham bir vektöre ayrılır. Bu tamsayılara ve bir diffuygulamalıya dönüştürülür . signfarkları tek bir birim yapar. rangevektörü minimum ve maksimum değerine indirir. O zaman standart sapma sd1'den azsa, TRUE olur.

Çevrimiçi deneyin!


9 bayt'ı function(s,d=utf8ToInt(s))all(d==sort(d))function(s,d=utf8ToInt(s))!is.unsorted(d)
ortanca

Ya da 34 bayttan aşağıya!is.unsorted(utf8ToInt(scan(,'')))
mnel

@mnel ne yazık ki bunlar tam tersini yapmıyor; örneğin cba, sonuncusu cat()tam bir program yapmak için bir
sonuca ihtiyaç duyacak

5 byte ile function(s)all(!diff(order(utf8ToInt(s)),,2))
tasarruf

@mnel tekrar üzgünüm, bu başarısız olurtree
MickyT

5

MATL, 8 bayt

tPvGSXma

Çevrimiçi Deneyin!

açıklama

        % Implicitly grab the input as a string
tP      % Create a copy that is reversed
v       % Vertically concatenate these
GS      % Grab the input again and sort it
Xm      % Check if each row of the normal and reversed matrix is equal to the sorted one
a       % Check if either row matched
        % Implicitly display the result

Güzel, ama bunun için de geçerlidir döndürür '\n've 'Hello': /
Patrick Bard

1
@PatrickBard Giriş aynı durumda olacak ve yalnızca [A-Za-z]ilk yazıda belirtildiği gibi olacaktır . Bunlar "geçersiz" bölümündedir, çünkü açıkça ele alınması gerekmez.
Suever

5

Jöle , 4 5 bayt

Ṣm0ẇ@

Çevrimiçi deneyin!

Başlangıçta Ṣm0wdört bayt idi.

açıklama

Ṣm0ẇ@  Input: string S
Ṣ      Sort S
 m0    Concatenate sort(S) with reverse(sort(S))
   ẇ@  Sublist exists? Check if S is contained in the previous result

Dört bayt olduğundan emindim ama düşünemedim!
Jonathan Allan,

1
... ne yazık ki, OP çıktının acımasız / sahte değil, iki farklı değer olduğunu netleştirmiştir. Yine de dört byte hala mümkün , inanıyorum. Düzenleme: ugh Ṣm0ẇ@.
Jonathan Allan,

@JonathanAllan Dilin doğru / yanlış stilini kullanmanın ilk kuralını karşıladığından beri talihsiz. Başka bir form olabilir Ṣẇm0$. Eğer argüman sırası farklı değilse wve ...
miller


@PatrickBard Huh? '\n've 'Hello'mükemmel geçerli değerler.
Outgolfer Erik

5

Mathematica, 33 bayt

0<=##||##>=0&@@ToCharacterCode@#&

Bu ipucuna dayanarak . Ne yazık ki, kullanmak zorunda ToCharacterCodeyerine Characters, çünkü <=ve >=değil karşılaştırmak dizeleri yapmak.


4

PowerShell , 61 bayt

param($a)$a-in-join(($b=[char[]]$a)|sort),-join($b|sort -des)

Çevrimiçi deneyin!

Girdiyi alır $a, sonra -iniki elemanlı bir dizi olup olmadığını kontrol eder . Dizi, bir dizi olarak alarak $a, onu sonradan chardepolayarak, sözlü olarak sıralayan $bboruları sort-objectoluşturarak oluşturulur. Diğer eleman, $bsıralama -desdüzeninde sıralanır.


4

Perl , 35 bayt

@Xcali sayesinde 4 bayt ve 4 dolaylı daha tasarruf sağladı .

31 bayt kodu + -pFbayrak.

@b=reverse@a=sort@F;$_=/@a|@b/x

Çevrimiçi deneyin!

Kod girişi sıralar ve girişlerin kendisinin sıralanmış (veya ters sırada) eşleşip eşleşmediğini kontrol eder.


Biraz farklı bir yöntem, ancak 38 bayta indirger: Çevrimiçi deneyin!
Xcali

@Xcali Çok hoş, teşekkürler. Daha sonra 5 bayttan daha fazla tasarruf etmek $"=$,için /xdeğiştiriciyi kullanabilir ve kullanabiliriz .
Dada



3

PHP, 66 bayt

$a=$s=$r=str_split($argv[1]);sort($s);rsort($r);echo$s==$a|$r==$a;

komut satırı argümanından girdi alır. İle koş -r.



3

Raket , 93 bayt

(define(f s)(let([t(string->list s)])(or(equal?(sort t char<=?)t)(equal?(sort t char>=?)t))))

Çevrimiçi deneyin!

Ungolfed:

(define (lex-sorted? string)
  (let ([char-list (string->list string)])
    (or
     (equal? (sort char-list char<=?) char-list)
     (equal? (sort char-list char>=?) char-list))))

Sıralama kullanarak sonra özgün yaklaşımla karşılaştırın


3

Brachylog , 5 bayt

Başarı olmadan 4 baytlık bir çözüm bulmaya çalıştım, bu yüzden şu an için bulduğum en ilginç 5 baytlık çözüm:

:No₎?

Çevrimiçi deneyin!

o, sipariş fonksiyonu, bir parametre alabilir: 0artan sıralama, 1azalan sıralama anlamına gelir. Bu parametreyi bağlanmamış bir değişkene ayarladık N. Brachylog N(sadece 0veya 1mümkün) için farklı değerler deneyecek, sonucu girdiyle birleştirmeye çalışacak ve bu denemelerden herhangi birinin başarılı olup olmadığını geri getirecektir.


Artık çalışma gibi o?|o₁?
gözüküyor

İki nokta üst üste noktalı virgülle değiştirirseniz iş gibi görünüyor. Bir başka bir bayt uzun varyantı olacaktır o{|↔}?.
İlişkisi Dize


2

JavaScript (ES6) 74 62 50 47 43 bayt

([...a],b=a+'')=>b==a.sort()|b==a.reverse()

Bazı golf oynama ve hata düzeltme işlemlerinden sonra, bu cevap ETHProduction ile hemen hemen aynı oldu, bu yüzden lütfen cevabını kontrol edin ve bir cevap verin +1.


Hata düzeltildi ..
Luke

1
Beni yakaladın, düzenlemeden önce yorumu yayınladım ...
Luke

Böceğin nedenini buldum ve şimdi her şeyi akıllıca ayarlayarak doğru şekilde düzelttim ...
Luke

Hata geri döndü ... repl.it/FZrs/2
steenbergh

1
Eh, bu hemen hemen @ ETHProduction'ın cevabı şimdi, bu yüzden bir uyarı ekledim. Lütfen +1onun cevabı.
Luke

2

Haskell, 54 50 bayt

t a=or[and(zipWith(<=)`f`tail$a)|f<-[(=<<),(<*>)]]

Kullanım örneği: t "defggh"-> True. Çevrimiçi deneyin! .

Belki de kullanmak sortgibi olsa da diğer cevaplar daha kısa olabilir import Data.List. İşte farklı bir yaklaşım:

Her fonksiyon fiçin [(=<<),(<*>)], and(zipWith(<=)`f`tail$a)sonuçlardan herhangi birini hesaplayın ve isteyin True. Fonksiyonlar

((=<<) (zipWith(<=)) tail) a
((<*>) (zipWith(<=)) tail) a

Her iki giriş listesinin komşu elemanların karşılaştırmaları yapmak olan aile <=, fakat bağımsız değişken ile, bir bir sonuçlanan çevrilmiş >=. andTüm karşılaştırmaların olup olmadığını kontrol eder True.


2

Pushy , 7 bayt

ogoGo|#

Çevrimiçi deneyin!

Açıklama:

      \ Implicit: Input on stack as charcodes
og    \ Check if the stack is sorted ascendingly (Push 0/1)
oG    \ Check if the stack is sorted descendingly (Push 0/1)
      \   - Note that this will work regardless of the first check, as input
      \     is guaranteed to be /[A-Za-z]+/
o|    \ Bitwise OR
#     \ Print the result

Bu, farklı bir gerçek değer vermez.
steenbergh

1
Hayır @steenbergh ama tatmin eden meta konsensüs truthy veya falsy olarak sayılır ne - 1ve 2olan Truesaldırgan içinde, oysa 0olduğunu False.
FlipTack,

Eğer Pushy bitli bir VEYA operatörüne sahipse, bunun yerine çalışması gerekir.
ETHProductions

@FlipTack Mücadelede net olduğunu düşündüm, ancak şimdi daha belirgin hale getirdim: TRUE tüm test senaryolarında aynı değeri vermelidir. Aynısı YANLIŞ için de geçerli.
steenbergh,

@steenbergh Meta konsensüs bir neden için var ve mantıklı, ama ısrar
edersen

2

Pyth, 5 bayt

}Q_BS

Girişini alan "quoted string"ve basan Trueveya Falseuygun bir program.

Test odası

Nasıl çalışır

}Q_BS   Program. Input: Q
}Q_BSQ  Implicit variable fill
 Q      Is Q
}       in
    SQ  Q sorted
   B    or
  _     Q sorted reversed?
        Implicitly print

Örtülü kullanan }Qile değiştirerek bir bayt kaydedebilir (ve en kısa cevap olabilir) . /Q
isaacg


2

GNU sed, 97 + 1 (r bayrağı) = 98 bayt

Harfler sıralanırsa, komut dosyası 1aksi durumda döner 0. Sed'de veri türü yoktur.

s:$: zyxwvutsrqponmlkjihgfedcba:
s:(.*(.)(.).* ).*\2.*\3.*:\1abcdefghijklmnopqrstuvwxyz:i
//c0
c1

Tüm harflerin artan düzende olup olmadığını kontrol etmek için, azalan bir alfabedeki her ardışık harf çiftinden bir tablo araması yapıyorum, yani bir sayaç örneği bulmaya çalışıyorum. //Son düzenli ifade eşleşmesinin gerçekte tekrarlandığını unutmayın ! (2. ve 3. satırlara bakınız)

Run örneği: script, her satırda bir tane olmak üzere birden fazla giriş kelimesini test edebilir.

me@LCARS:/PPCG$ echo -e "tree\nABCDC" | sed -rf word_ordered.sed
1
0

2

CJam , 12 11 bayt

q_$_W%+\#)g

Çevrimiçi deneyin!

açıklama

q            Push the input
 _$          Duplicate and sort
   _W%       Duplicate and reverse
      +      Concatenate the sorted and the reversed strings
       \     Bring input to the top
        #    Find the index of the input in the other string; returns -1 if not found
         )   Increment
          g  Signum (coerces to 0 or 1)

2

8086 makine kodu, 68 61 48 46 45 39 bayt

00000000  b2 31 be 82 00 ac 9f 88  c3 ac 3c 0d 74 14 38 c3  |.1........<.t.8.|
00000010  74 f5 e3 03 b1 00 9f 77  05 9e 76 ea eb 03 9e 77  |t......w..v....w|
00000020  e5 4a b4 02 cd 21 c3                              |.J...!.|
00000027

Şuradan toplandı:

org 0x100
use16
    mov dl, 0x31
    mov si, 0x82
    lodsb
a:  lahf
b:  mov bl, al
    lodsb
    cmp al, 0x0d
    je y
    cmp bl, al
    je b
    jcxz @f
    mov cl, 0
    lahf
@@: ja @f
    sahf
    jbe a
    jmp n
@@: sahf
    ja a
n:  dec dx
y:  mov ah, 0x02
    int '!'
    ret

2

Scala, 47 bayt

def f(x:String)=x==x.sorted|x==x.sorted.reverse
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.