Kelimenin harflerinin alfabetik sıralarda olup olmadığını kontrol edin


37

Girdi olarak küçük / büyük harflerden oluşan bir dize [A-Za-z] dizisini kabul eden, ortaya çıkan harflerin benzersiz olup olmadığını ve alfabetik sırayla (küçük ve büyük harfleri yok sayarak) olup olmadığını denetleyen bir işlev / program yazın. Çıktı, eğer benzersiz ve alfabetik sıraya göre sıradışı ve eğer değilse sahte.

İşte bazı testcases

a                           true
abcdefGHIjklmnopqrSTUVWXyz  true     
aa                          false
puz                         true
puzz                        false
puzZ                        false
puZ                         true
PuZ                         true
pzu                         false
pzU                         false
abcdABCD                    false
dcba                        false

İsterseniz, böyle bir wordlist tüm kelimeleri programınızı çalıştırmak bu bir ) = ve ve bazı ilginç olanları yayınlamak.

Gol

En düşük bayt sayısı kazanır.


3
Zayıf test durumları. (Bkz yorumumu üzerine Richard A 'nın PHP cevap .)
manatwork

Alfabe dönüyor mu? zaGerçek bir değer mi olmalı ?
MayorMonty

Hayır, alfabe ile başlar ave ile biter z.
kusur

Alfabetik sıraya göre olmayan bazı test durumlarına sahip olmalısınız
Jo King

1
@JoKing Biraz ekledim.
kusur

Yanıtlar:


28

CJam, 8 bayt

lel_$_&=

İşte mücadeledeki tüm örnekler için bir test donanımı . Bu döner 0veya 1(sırasıyla, CJam'da sahte ve truthy olan).

Ve burada söz konusu kelime listesini filtrelemek için bir komut dosyası (çalıştırmak için birkaç saniye sürer). Sözcük listesini giriş alanına el ile kopyalamanız gerekecek, çünkü bir kalıcı bağlantı için çok uzun.

açıklama

l        "Read input.";
 el      "Convert to lower case.";
   _$    "Get a copy and sort it.";
     _&  "Remove duplicates (by computing the set intersection with itself).";
       = "Check for equality with original (lower case) word.";

21

Regex (herhangi bir lezzet), 55 bayt

Bazı insanlar regex'i bir programlama dili olarak düşünmüyor, ancak daha önce kullanılmış ve en kısa olmaya yakın değil.

^a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?$

i(Büyük-küçük harf duyarlı) bayrağı için bir bayt ekledim . Bu çok basittir ve anında üretilmesi daha kısa olabilir.

Yalnız regex'e izin verilmiyorsa, Martin Büttner tarafından önerilen bu 56 baytlık Retina programını kullanabilirsiniz :

i`^a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?$

Bunu yukarıda bağlanan kelime listesi üzerinde çalıştırmak, alfabetik sırayla 10 harfli 10 kelime verdi.

["nefret", "neredeyse", "başlar", "yalvarıyor", "bijuteri", "biyopsi", "şempanze", "chinos", "chintz", "ghosty"]


2
Birisi regex'in bir dil olmadığından şikayet ederse, ES6 yerine Retina kullanabilirsiniz :i`^a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?$
Martin Ender

@ MartinBüttner Retina'yı unutmuşum. Teşekkürler!
NinjaBearMonkey

@ MartinBüttner META'ya göre ( meta.codegolf.stackexchange.com/questions/2028/… ) Regex'ler bir programlama dili olarak bir şekilde 'görülebilir'.
Ismael Miguel

@ IsmaelMiguel biliyorum. Ve aslında bu tanım, regex'i dışlamadığından emin olmak için özel olarak seçildi. Ancak bazı insanlar hala düzenli olarak şikayet ediyorlar, çünkü regex'i diğer diller gibi kullanamazsınız.
Martin Ender

@ MartinBüttner Şikayet edenler META adlı bir yere gidebilir ve arayabilirler. Neden hiç kimse çoğu sorunu çözen sorularla dolu bu kadar güzel bir yeri ziyaret etmiyor?
Ismael Miguel

19

Python 3, 44 bayt

*s,=input().lower()
print(sorted(set(s))==s)

Basit bir yaklaşım - benzersizliği, sıralama düzenini kontrol edin.


Ne yaptığını açıklayabilir misin *s,=...?
kusur

@flawr Buna 'yıldızlı atama' denir. Bu kodda, sadece sağ tarafı bir listeye dönüştürür. Bu aynı s=list(input().lower()).
Jakube

1
@flawr Jakube'un dediği gibi, burada sadece girdiler karakter listesine dönüştürülüyor. Genelde aşağıdakilere benzer işlemler sağlayan özel bir atama söz dizimi var x,*y = [1, 2, 3, 4]hangi atar 1'e, xve [2, 3, 4]için y.
Sp3000 13

@ mbomb007 *s,= bir bağlantılist(s) ...
Sp3000

2 bayt kaydetmek {*s}yerine bunu yapabilirsiniz set(s).
mbomb007

12

> <> , 52 42 39 bayt

0>i:1+?v1n;
? )'`':/'@'v
0v?){:-<'`'/;n

Bu tür bir soru, bir kerede yalnızca bir karakterle başa çıkmamız gerektiğinden, oldukça rahat olan birkaç tipten biridir.

açıklama

Kaybolma! Burada çok fazla sarma var.

0            Push 0. We'll be mapping a-z to 1-26, so 0 will be smaller than everything

(loop)
i            Read a char of input
:1+? 1n;     If there's no more input, print 1
:'`')?       If the char is bigger than backtick...
  '`'          Push backtick  (which is one before 'a'), else...
  '@'          Push an @ sign (which is one before 'A')
-            Subtract, mapping a-z to 1-26
:{)?         If the new char is bigger than the previous char...
               Repeat from the beginning of the loop, else...
  0n;          Print 0

Önceki çözüm, 42 bayt

0i:1+?v1n;n0/\!
?)'`':/'@'v
? ){:-<'`'/ vv

İlginç olan, aynı işlevselliğe sahip görünmesine rağmen alternatifin

0i:1+?v1n;n0\/!
?)'`':/'@'v
? ){:-<'`'/ ^^

(Değişiklik oklarda ve en sağdaki aynalarda)

aslında > <> bir Python defaultdict kullanan yorumlayıcısı nedeniyle yanlış sonuçlar veriyor . Olan şu ki, ikinci satırın sonundaki boş alan boyunca ilerleyerek, hücreye>>> erişmeye çalıştığında 0'ların boş alanlara örtük olarak yerleştirilmesi. Bu, daha sonra ?yerleştirilen 0'lar vsonunda değil atlandığından, aynı sıranın başında koşullu trambolinle karışır .


Tüm baytlar için alfabetik dizin almak yerine, yalnızca küçük harflerden 32 çıkartarak bazı baytları kurtarabileceğinizi hissediyorum
Aaron

9

Haskell, 52 Bayt

import Data.Char
and.(zipWith(>)=<<tail).map toLower

Kullanımı: (and.(zipWith(>)=<<tail).map toLower) "abcd"Hangi çıktılar True.


9

C, 67 65 57 54 (52) karakter

f(char*s){int c,d=0;for(;(c=*s++)&&(c&~32)>(d&~32);d=c);return!c;}

biraz daha kısa:

f(char*s){int c,d=0;for(;(c=*s++)&&(c&~32)>d;d=c&~32);return!c;}

ve hatta daha kısa:

f(char*s){int d=32;for(;(*s|32)>d;d=*s++|32);return!*s;}

İşte küçük bir test: http://ideone.com/ZHd0xl

Buradaki son önerilerden sonra hala iki kısa versiyon var:

// 54 bytes
f(char*s){int d=1;for(;(*s&=95)>d;d=*s++);return!*s;}

// 52, though not sure if valid because of global variable
d;f(char*s){d=1;for(;(*s&=95)>d;d=*s++);return!*s;}

Ayrıca, bu kod, ASCII'de küçük harf ve büyük harfin yalnızca filtreledim 5'inci bit (32) ile farklı olduğu gerçeğine dayanır. Yani bu açıkça diğer kodlamalar ile çalışmayabilir.

EDIT: En son sürüm her zaman 5. bit'i |32olduğundan daha kısa olarak ayarlar &~32.


Büyük / küçük harf duyarlılığı sorununu ele almak için etki alanı bilgisinin iyi kullanılması.
RomSteady

For döngüsünü değiştirerek 2 tasarruf edin for(;(*s&=95)>d;d=*s++);. Ve başlatabilir diçin 11 daha tasarruflu, sonuç değiştirmeden. Görmek.
AShelly

1
Bunun kod golfünde yasal olarak kabul edilip edilmediğinden emin değilim, ancak d;f(char*s){d=32;for...}çalışıyor, ddolaylı olarak global bir int (GCC'de bir uyarıdır - "veri tanımının türü veya depolama sınıfı yok" - ancak bir hata yok) olarak çalışıyor. Bu iki bayt kaydeder.
wchargin

AShelly hm, bunu düşünmedim. Öneriniz yine de orijinal dizgiyi değiştiriyor. Ama her neyse, bu kod golf: D Ayrıca, WChargin'in bir global değişken olarak d'nin fonksiyonunun bir parçası olmayacağının ipucundan emin değilim.
Felix Bytow

1
Neden başlatılamadı diçinde fordöngü ziyade kendi deyimi? Bu şekilde bir tasarruf ;.
Josh,

6

Ruby, 33

->s{c=s.upcase.chars
c==c.sort|c}

Sıralanan benzersiz karakterlerin tüm karakterlerle aynı olup olmadığını kontrol eder.


1
Biraz daha kısa c==c.sort|c
sürebilirsin sanırım

Ooh, hoşuma gitti, bu akıllıca. Teşekkürler.
britishtea

5

Javascript (ES5), 101

function i(s){b=0;l=''.a
s.toUpperCase().split('').forEach(function(c){if(c<=l)b=1
l=c})
return!b}

Edc95 tarafından 87'ye geliştirildi:

Yorumunu oyla :)

function i(s){return!s.toUpperCase().split(l='').some(function(c){return(u=l,l=c)<=u})}

Ancak, OP’deki test durumları, bir program sadece benzersizliği kontrol edip sırasını dikkate almadığında yerine getirilir.


Henüz yorum yazamıyorum, bu yüzden bazı açıklamaları burada cevaplayacağım:

@ edc65: Teşekkürler! Kullanarak yeniden yazmaya çalıştım some(), ancak daha kısa bir çözüm bulamadım, çünkü yüzeysel b değişkeninden kurtulmamı sağlayacak gibi görünse de, iki kez "return" yazmanız gerekir (aynı reduce()) karşılaştırmanın sonucunu doğrudan döndüremezsiniz, çünkü son karakterin karşılaştırmadan sonra kaydedilmesi gerekiyor.

@ edc65: 87 için virgül operatörünün güzel bir kullanımı! Daha fazla görünürlük için cevabımı düzenledim.


Bu benimkinden daha iyi bir fikir. .Some kullanmak daha da iyi olabilirdi (ES6 ile 52)
edc65 17.05 de

Bir karakter kaydetmek için returnve arasındaki boşluğu kaldırabilirsiniz !b.
ProgramFOX

Olduğu gibi, sadece beyaz alanı function i(s){b=0;l='';s.toUpperCase().split('').forEach(function(c){if(c<=l)b=1;l=c});return!b}
önemsiyorum

Aynı, daha golf oynadı, 92:function i(s){s.toUpperCase(b=0).split(l='').forEach(function(c){if(c<=l)b=1;l=c});return!b}
edc65

1
Bazılarını (veya her birini, aynı puanı) kullanarak, 87:function i(s){return!s.toUpperCase().split(l='').some(function(c){return(u=l,l=c)<=u})}
edc65

4

Haskell, 90 bayt

Fonksiyonu sağlar f :: String -> Bool

import Data.List
import Distribution.Simple.Utils
f l=g$lowercase l
g l=sort l==l&&l==nub l

Kullanımı (varsayarak golf.hs kaydedilir). 'in ayrıntılı yükleme mesajlarını ...değiştirmek için kullanılır ghci.

$ ghci golf.hs
...
*Main> f "as"
...
True
*Main> f "aa"
False

Birisinin lowercasedaha kısa bir yöntemi varsa, import Distribution.Simple.Utilslütfen yorum yapın.


1
Kullanım map toLowerdan Data.Charyerinelowercase
niml'de

1
Ayrıca: Eğer parametreyi kaldırabilirsiniz lde f, yani f=g.lowercase(ya f=g.map toLowersen geçerseniz toLower). İçinde gbir karşılaştırma yeterlidir: g l=nub(sort l)==l.
nimi

4

Wolfram Mathematica, 49 37 bayt

f[x_]:=(l=Characters[ToLowerCase[x]];Union[l]==l)

Martin Büttner'den PS Shorter çözümü:

Union[l=Characters@ToLowerCase@#]==l&

2
#⋃#==#&@*Characters@*ToLowerCase
alephalpha

1
@alephalpha Bu çok güzel!
Martin Ender

4

J, 17 bayt

Küçük harf sıralı /:~dizgenin -:küçük harf nub ~.dizeye eşit olup olmadığını kontrol eder .

   (/:~-:~.)@tolower

   NB. testing with the example inputs
   ((/:~-:~.)@tolower) every (1$'a');'abcdefGHIjklmnopqrSTUVWXyz';'aa';'puz';'puzz';'puzZ';'puZ';'PuZ'
1 1 0 1 0 0 1 1

J'de olduğu gibi normal bir dize (tırnak işaretli) olarak temsil edilen 1-karakter uzunluğundaki bir "string" sadece bir karakter atomudur, girişimi uygun şekilde formatladım, böylece tüm girişler gerçek stringler olacaktı. (Yukarıdaki örnekte kullandım 1$'a'.)


4

MATLAB, 29 27 bayt

Şimdi kod golf dışında bile mantıklı olan bir liner için.

İsimsiz bir işlev olarak (kullanın o('yourstring'))

o=@(s)all(diff(lower(s))>0)

Bir gazete ilanı gibi okuduğu için bu fonksiyonun oldukça açıklayıcı olduğunu düşünüyorum.

Önceki sürüm (29 bayt):

all(diff(lower(input('')))>0)

Girdi 'işaretler arasında sunulmalıdır , örn 'Potato'.


4

Brachylog , 3 bayt

ḷ⊆Ạ

Çevrimiçi deneyin!

Öngörülen girdi, belirtilen gereksinimleri karşılıyorsa başarılı olur ve yazmazsa, yazdırmazsa true.veya false.bir program olarak çalışıyorsa başarısız olur .

       The input,
ḷ      lowercased,
 ⊆     is a not-necessarily-contiguous sub-list of
  Ạ    "abcdefghijklmnopqrstuvwxyz".

İlk kez buldum, alfabeye atıfta bulunmadan açıkça:

Brachylog , 4 bayt

ḷ≠.o

Çevrimiçi deneyin!

        The input,
ḷ       lowercased,
 ≠      in which every character is distinct,
  .     is the output variable,
   o    which sorted,
        is still the output variable.

3

J, 21 karakter

Bu çok uzun. Argüman rütbeli olmalı 1, yani bir dize veya vektör olmalıdır.

*/@(<=~.;/:~)@tolower
  • tolower y- yküçük harflerle.
  • /:~ y- ysözlü olarak.
  • ~. y- nub y, yani ykopyalar çıkarılmış olarak.
  • x ; y- xve ykutulara koymak ve sonra birleştirilmiş.
  • < y- ybir kutuya koyun.
  • x = y- x element-bilge ile karşılaştırıldığında y.
  • (< y) = (~. y) ; (/:~ y)- ynubuna eşit olup olmadığını ve sıralandığını gösteren bir vektör .
  • */ y- Maddelerin ürünü yveya mantıksal ve eğer öğeler boolean ise.
  • */ (< y) = (~. y) ; (/:~ y)- Küçük harf için istenen özelliği gösteren bir Boole y.

3

Julia, 44 bayt

s->(l=lowercase(s);l==join(sort(unique(l))))

Bu, tek bir argüman alan s, küçük harfe dönüştüren ve dizenin benzersiz sıralanmış sürümüyle karşılaştıran anonim bir işlev oluşturur . Bir boole döndürür, yani trueveya false. Test etmek istiyorsanız, gibi ata f=s->...ve sonra ara f("PuZ"), vb.


Bunun için Amin, @flawr. Destek için teşekkürler.
Alex A.

3

Saf Bash 4.x, 37

[[ ${1,,} =~ ^`printf %s? {a..z}`$ ]]

Komut satırı parametresi olarak alınan giriş. Standart kabuk anlambilimine göre, çıkış kodu 0, doğru (alfabetik) ve çıkış kodu! = 0, yanlış (alfabetik değil) anlamına gelir.

Printf, regex'i @ hsl'nin çözümünde olduğu gibi yaratır . Giriş dizesi küçük harfe genişletilir ve regex ile karşılaştırılır.


Önceki cevap:

Bash + coreutils, 52

Basit çözüm:

a=`fold -1<<<${1,,}`
cmp -s <(sort -u<<<"$a")<<<"$a"

Bunun bash 4.x gerektirdiğini unutmayın.
Mark Reed

@MarkReed Evet. Kayıt edilmiş.
Dijital Travma

3

C # 6, 18 + 82 76 = 94 bayt

Gerektirir (18 bayt):

using System.Linq;

Kod (76 bayt):

bool a(string s)=>(s=s.ToLower()).Distinct().OrderBy(x=>x).SequenceEqual(s);

C # 6, golf oynamak için yararlı olan bir işlevi tanımlamak için lambdaları destekler.

C # 6 olmayan sürüm:

bool a(string s){return (s=s.ToLower()).Distinct().OrderBy(x=>x).SequenceEqual(s);}

Ungolfed kod:

bool IsInAlphabeticalOrder(string s)
{
    s = s.ToLower();
    return s.Distinct()
            .OrderBy(x => x)
            .SequenceEqual(s);
}

3

JavaScript (ES6) 54

Büyük harfe dönüştürün, ardından sıralamak ve sıralamak için. Sıralama sırasında iki eleman yanlış sırada veya eşitse, 0 (falsy) else 1 (truthy) döndürün

Düzenleme Kısaltılmış @Optimizer thx (ama yine de daha ES6 uygulanan @Tamas çözümü 2'den: F=s=>[...s.toUpperCase()].every(c=>(u=l,l=c)>u,l=''))

F=s=>[...s.toUpperCase(x=1)].sort((a,b)=>a<b?1:x=0)&&x

Firefox / FireBug konsolunda test edin

;['a','abcdefGHIjklmnopqrSTUVWXyz','aa','puz','puzz','puzZ','puZ','PuZ']
.map(w=>w+' '+F(w))

["bir 1", "abcdefGHIjklmnopqrSTUVWXyz 1", "aa 0", "puz 1", "puzz 0", "puzZ 0", "puZ 1", "PuZ 1"]]


1
s=gerekli görünmüyor ...
Doktoru

@Optimizer hakkı, ilk önce nihayet (üst
basamaklı

3

C (44 bayt)

f(char*s){return(*s&=95)?f(s+1)>*s?*s:0:96;}

Burada test edin: http://ideone.com/q1LL3E

Bunu gönderdiğim için henüz yorum yapamıyorum, aksi halde mevcut C cevabını iyileştirmek için bir öneri olurdu çünkü mevcut C cevabından büyük / küçük harf duyarlı fikri tamamen çaldım.

Dize sipariş edilmediyse 0, sipariş edilirse sıfır olmayan bir değer döndürür.


3

Golang (65 bayt)

Git golf dostu bir dil değil, aynı zamanda golf de emmek ...

func a(s[]byte)(bool){return len(s)<2||s[0]|32<s[1]|32&&a(s[1:])}

Burada çalıştırın: http://play.golang.org/p/xXJX8GjDvr

Düzenle 106-> 102

düzenle 102-> 96

Düzenle 96-> 91

düzenle 91-> 87

düzenle 87-> 65

Java sürümünü yendim, bugün için durabilirim


3

Java 8 - 90 89 87 85 karakter

Buradaki fikir, son karakteri izleyen ve dizinin kesin olarak yükselmediğini tespit ettiğinde "pes eden" bir "azaltma" işlevi kullanmaktır.

golfed:

int f(String s){return s.toLowerCase().chars().reduce(0,(v,c)->(v<0)?v:(c>v)?c:-1);}

ungolfed:

int f(String s){
    return s.toLowerCase()
            .chars()
            .reduce(0, (v,c) -> (v<0)? v : (c>v)?c:-1);
}

örnek:

System.out.println(new Quick().f("abc"));
System.out.println(new Quick().f("aa"));
System.out.println(new Quick().f("abcdefGHIjklmnopqrSTUVWXyz"));
System.out.println(new Quick().f("puZ"));
System.out.println(new Quick().f("Puz"));
System.out.println(new Quick().f("cba"));

çıktı:

99
-1
122
122
122
-1

3

Perl 6, 35 bayt

{my@c=.uc.comb;@c eq@c.sort.unique}

Bu, çağrılabilir bir blok üretir; $_önceden istenen kelimeye ayarlanmış olduğunu varsayabilirsem , çevreleyen kıvrımlı parantezleri silebilir ve iki bayt daha kaybedebilirim, ancak muhtemelen bu varsayımı yapmanın tek makul yolu onu çalıştırmak -nve sözcüğü standart girdi olarak beslemektir. , bu iki byte'ı hemen geri ekler.


Tabii ki öyle. .uc.combhiçbir şeyi yeniden düzenlemez; bu nedenle, üst sıralı ve taranmış dizi, üst sıralı ve taranmış diziye eşitse, bu, sıralı bir şekilde başlatıldığı anlamına gelir.
Mark Reed,

tamam, düzeni görmezden gelen kavşak boyutunu kontrol ediyor. Tamam, güncellendi.
Mark Reed

3

R , 37 bayt

all(diff(utf8ToInt(scan(,''))%%32)>0)

Çevrimiçi deneyin!

Bu, Michal'ın R cevabından önemli ölçüde farklı ve daha kısa olduğu için gönderiliyor .

Harfleri ASCII kod noktalarına dönüştürür utf8ToInt, daha sonra alt ve üst harflerin aynı sayılara 1 ... 26 çevrilmesi için modulo 32 alır. İkili farkları hesaplar ve hepsinin pozitif olduğunu kontrol eder.


2

Perl, 27

@ hsl'nin düzenli ifadesi dinamik olarak oluşturulur.

#!perl -p
$"="?";@x=a..z;$_=/^@x?$/i

Ayrıca ters bir eşleşme de yapabiliriz: girişi bir regexp: PuZ=> 'ye dönüştürün .*p.*u.*z.*ve sonra bunu alfabetik sırayla bir harf dizisi ile eşleştirin. Sonuç - ayrıca 27 karakter.

#!perl -lp
$_=join(s//.*/g,a..z)=~lc

2

k (6 bayt)

&/>':_

& Her iki argüman da doğruysa true döndürür

/değiştirir &fonksiyonel dilde bir kat gibi bir liste "üzerinde" uygulamak

> daha büyük

':>"her-önceki" uygulanacak şekilde modifiye edildiğinden, hangi elementlerin öncekinden daha büyük olduğunu belirten bir boolel vektörü döndürür

_ argümanı küçük harf yapar

  _"puzZ"
"puzz"
  >':_"puzZ"
1110b
  &/>':_"puzZ"
0b

( 0bboolean false anlamına gelir)

q (13 bayt)

all(>':)lower

q, sadece k üzerindeki sözdizimsel şekerdir. allolarak tanımlanır &/ve düşük_


4
Bunun nasıl çalıştığını açıklayabilir misiniz?
kusurları

Bu neredeyse diğer dilleri aldatmak gibi geliyor ... İşlev isimlerine, parantezlere ve noktalı virgüllere kimin ihtiyacı var? :)
Sanchises

@sanchises k bunların hepsine sahiptir ve hemen hemen C tarzı dillerle aynı şekilde çalışırlar. Sadece bu sorunun tek bir ifade olarak anlaşılabilir olacağıdır.
mollmerx


2

VBA (161 bayt)

Function t(s As String)
t = 0
For i = 2 To Len(s)
a = Left(LCase(s), i)
    If Asc(Right(a, 1)) <= Asc(Right(a, 2)) Then Exit Function
Next
t = 1
End Function  

Ascii değerini önceki harf ile küçük harflerle karşılaştırır, değeri daha küçük / eşit olduğunda ve işlevinden çıkınca 0 (false) döndürür


2

Python 2 , 43 bayt

lambda s:eval('"%s"'%'"<"'.join(s.lower()))

Çevrimiçi deneyin!

Koyar <bütün harfler arasında semboller (küçük harfe dönüştürülür) ve sonra evalböyle. Python'un zincirleme karşılaştırma operatörleri, her şeyi büyük bir boole ifadesi olarak değerlendirmekten çok mutlular.


1

Erlang, 51

f(S)->G=string:to_lower(S),ordsets:from_list(G)==G.

java.util.TreeSetKarakterleri sıralamak ve kopyaları atmak için sıralı bir küme kullanır (buna benzer ). Yeni liste daha sonra giriş dizesiyle karşılaştırılır.

Test İşlevi:

test() ->
    [io:format("~p ~p~n", [S, f(S)]) || S <- ["a","abcdefGHIjklmnopqrSTUVWXyz","aa","puz","puzz","puzZ","puZ","PuZ"]].

1

Java, 96

boolean a(char[]a){int i=-1,l=0;for(;++i<a.length;l+=i>0&&a[i]<=a[i-1]?1:0)a[i]|=32;return l<1;}

Burada oldukça basit. Sadece hepsini aşağıya dönüştürün ve her birini önceki karakterle karşılaştırın.

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.