Überprüfen Sie, ob die Buchstaben alphabetisch sortiert sind

37

Schreiben Sie eine Funktion / ein Programm, die / das eine Folge von Klein- / Großbuchstaben [A-Za-z] als Eingabe akzeptiert, die prüft, ob die vorkommenden Buchstaben eindeutig und in alphabetischer Reihenfolge sind (Groß- und Kleinbuchstaben werden ignoriert) oder nicht. Die Ausgabe muss wahr sein, wenn sie eindeutig und in alphabetischer Reihenfolge ist, und falsch, wenn nicht.

Hier einige Testfälle

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

Wenn du willst, starte dein Programm mit allen Wörtern einer Wortliste wie dieser und poste einige interessante =).

Ergebnis

Die niedrigste Anzahl von Bytes gewinnt.

Fehler
quelle
3
Schwache Testfälle. (Siehe meinen Kommentar auf Richard A ‚s PHP Antwort .)
Manatwork
Läuft das Alphabet in einer Schleife? Sollte zaein wahrer Wert sein?
MayorMonty
Nein, das Alphabet beginnt mit aund endet mit z.
Fehler
Sie sollten einige Testfälle haben, die nicht in alphabetischer Reihenfolge sind
Jo King
1
@JoKing habe ich hinzugefügt.
Fehler

Antworten:

28

CJam, 8 Bytes

lel_$_&=

Hier ist ein Testgeschirr für alle Beispiele in der Herausforderung. Dies ergibt 0oder 1(was in CJam falsch bzw. wahr ist).

Und hier ist ein Skript zum Filtern der Wortliste in der Frage (dauert einige Sekunden). Sie müssen die Wortliste manuell in das Eingabefeld kopieren, da sie für einen Permalink zu lang ist.

Erläuterung

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.";
Martin Ender
quelle
21

Regex (beliebiger Geschmack), 55 Bytes

Einige Leute halten Regex nicht für eine Programmiersprache, aber es wurde schon früher verwendet und es ist nicht annähernd die kürzeste.

^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?$

Ich habe ein Byte für das iFlag (ohne Berücksichtigung der Groß- / Kleinschreibung) hinzugefügt . Dies ist sehr einfach und kann im laufenden Betrieb kürzer sein.

Wenn Regex alleine nicht erlaubt ist, können Sie dieses 56-Byte- Retina- Programm verwenden, das von Martin Büttner vorgeschlagen wurde:

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?$

Wenn Sie dies in der oben verlinkten Wortliste ausführen, werden 10 Wörter mit 6 Buchstaben in alphabetischer Reihenfolge angezeigt.

["verabscheut", "fast", "beginnt", "begirt", "bijoux", "biopsie", "chimps", "chinos", "chintz", "ghosty"]

NinjaBearMonkey
quelle
2
Sie können Retina anstelle von ES6 verwenden, wenn sich jemand beschwert, dass Regex keine Sprache ist: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 Ich hatte die Retina vergessen. Vielen Dank!
NinjaBearMonkey
@ MartinBüttner Laut META ( meta.codegolf.stackexchange.com/questions/2028/… ) können Regexe als Programmiersprache etwas "gesehen" werden.
Ismael Miguel
@ IsmaelMiguel Ich weiß. Diese Definition wurde speziell gewählt, um sicherzustellen, dass Regex nicht ausgeschlossen wird. Aber manche Leute beschweren sich immer noch regelmäßig, weil Sie Regex nicht wie jede andere Sprache verwenden können.
Martin Ender
@ MartinBüttner Wer sich beschwert, kann sich an einen Ort namens META begeben und danach suchen. Warum besucht niemand einen so schönen Ort voller Fragen, die die meisten Probleme lösen?
Ismael Miguel
19

Python 3, 44 Bytes

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

Ein einfacher Ansatz - überprüfen Sie die Eindeutigkeit, überprüfen Sie die Sortierbarkeit.

Sp3000
quelle
Kannst du erklären, was *s,=...macht?
Fehler
@flawr Dies wird als "markierte Zuweisung" bezeichnet. In diesem Code wird einfach die rechte Seite in eine Liste konvertiert. Es ist das gleiche wie s=list(input().lower()).
Jakube
1
@flawr Wie Jakube sagt, wird hier nur die Eingabe in eine Liste von Zeichen konvertiert. Im Allgemeinen ist es eine besondere Aufgabe Syntax die Sie wie Dinge tun kann x,*y = [1, 2, 3, 4], die Abtretungsempfänger 1 xund [2, 3, 4]zu y.
Sp3000
@ mbomb007 *s,= ist list(s) ... Link
Sp3000
Sie können {*s}stattdessen set(s)2 Bytes speichern.
mbomb007
12

> <> , 52 42 39 Bytes

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

Diese Art von Frage ist eine der wenigen Arten, mit denen> <> ziemlich vertraut ist, da wir immer nur mit einem Buchstaben zu tun haben.

Erläuterung

Verirre dich nicht! Hier wird viel gewickelt.

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

Vorherige Lösung, 42 Bytes

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

Das Interessante ist, dass trotz scheinbar gleicher Funktionalität die Alternative ist

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

(Die Änderung ist in den Pfeilen und Spiegeln ganz rechts)

Gibt tatsächlich falsche Ergebnisse aus, da der Interpreter von> <> ein Python-Standardgebot verwendet. Was passiert, ist, dass beim Durchlaufen des leeren Bereichs am Ende der zweiten Zeile implizit Nullen in die leeren Bereiche eingefügt werden, wenn> <> versucht, auf die Zelle zuzugreifen. Dies führt dann zu Problemen mit dem ?bedingten Trampolin am Anfang derselben Zeile, da die neu platzierten Nullen übersprungen werden und nicht die vam Ende.

Sp3000
quelle
Ich habe das Gefühl, Sie könnten einige Bytes sparen, indem Sie nur 32 von Kleinbuchstaben abziehen, anstatt den alphabetischen Index für alle Buchstaben zu erhalten
Aaron
9

Haskell, 52 Bytes

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

Verwendung: (and.(zipWith(>)=<<tail).map toLower) "abcd"welche Ausgänge True.

nimi
quelle
9

C, 67 65 57 54 (52) Zeichen

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

etwas kürzer:

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

und noch kürzer:

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

Hier ist ein kleiner Test: http://ideone.com/ZHd0xl

Nach den neuesten Vorschlägen sind hier noch zwei kürzere Versionen:

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

Auch dieser Code beruht auf der Tatsache, dass sich in ASCII Klein- und Großbuchstaben nur um das 5. Bit (32) unterscheiden, das ich herausfiltere. Dies funktioniert also möglicherweise offensichtlich nicht mit anderen Codierungen.

BEARBEITEN: Die neueste Version setzt immer das 5. Bit als |32kürzer als &~32.

Felix Bytow
quelle
Gute Nutzung des Domänenwissens zur Behandlung des Problems der Groß- und Kleinschreibung.
RomSteady
Speichern Sie 2, indem Sie die for-Schleife durch ersetzen for(;(*s&=95)>d;d=*s++);. Und Sie können auf initialisieren d, 1ohne das Ergebnis zu ändern, und 1 weitere speichern. Sehen.
AShelly
1
Ich bin nicht sicher, ob dies im Codegolf als legal angesehen wird, aber es d;f(char*s){d=32;for...}funktioniert, indem es dimplizit als globales int deklariert wird (was in GCC eine Warnung ist - "Datendefinition hat keinen Typ oder Speicherklasse" - aber keinen Fehler). Das spart zwei Bytes.
wchargin
Ahelly hm, das habe ich nicht bedacht. Ihr Vorschlag ändert jedoch die ursprüngliche Zeichenfolge. Aber wie auch immer, es ist Codegolf: D Auch ich bin mir nicht sicher, ob der Hinweis von WChargin, da eine globale Variable nicht wirklich Teil der Funktion wäre.
Felix Bytow
1
Warum nicht lieber din der forSchleife als in einer eigenen Anweisung initialisieren ? Auf diese Weise sparen Sie ein ;.
Josh
6

Ruby, 33

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

Überprüft, ob die sortierten eindeutigen Zeichen mit allen Zeichen übereinstimmen.

britishtea
quelle
1
Denken Sie, Sie können es ein wenig kürzer mitc==c.sort|c
Histokrat
Oh, das gefällt mir, das ist klug. Vielen Dank.
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}

Verbessert auf 87 von edc95:

stimme seinem Kommentar zu :)

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

Übrigens sind die aktuell im OP befindlichen Testfälle erfüllt, wenn ein Programm nur die Eindeutigkeit prüft und dabei die Reihenfolge außer Acht lässt.


Da ich noch keine Kommentare schreiben kann, beantworte ich hier einige Bemerkungen:

@ edc65: Danke! Ich habe versucht, es mit some()umzuschreiben, aber ich konnte keine kürzere Lösung finden, denn obwohl es so aussieht, als würde es mir ermöglichen, die überflüssige Variable b loszuwerden, müssen Sie "return" zweimal eingeben (dasselbe mit reduce()), und Sie Das Ergebnis des Vergleichs kann nicht einfach direkt zurückgegeben werden, da das letzte Zeichen nach dem Vergleich gespeichert werden muss.

@ edc65: Das ist eine nette Verwendung des Komma-Operators für 87! Ich habe es in meine Antwort für mehr Sichtbarkeit bearbeitet.

Tamas
quelle
Das ist eine bessere Idee als meine. Die Verwendung von .some könnte sogar noch besser sein (52 mit ES6)
edc65
Sie können das Leerzeichen zwischen returnund entfernen !b, um ein Zeichen zu speichern.
ProgramFOX
Wie es ist, nur fürsorgliche Leerzeichen, 96:function i(s){b=0;l='';s.toUpperCase().split('').forEach(function(c){if(c<=l)b=1;l=c});return!b}
edc65
Das gleiche, mehr Golf, 92:function i(s){s.toUpperCase(b=0).split(l='').forEach(function(c){if(c<=l)b=1;l=c});return!b}
edc65
1
Unter Verwendung einiger (oder jeder, gleichen Punktzahl), 87:function i(s){return!s.toUpperCase().split(l='').some(function(c){return(u=l,l=c)<=u})}
edc65
4

Haskell, 90 Bytes

Liefert die Funktion f :: String -> Bool

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

Verwendung (vorausgesetzt, es wird als golf.hs gespeichert). ...wird verwendet, um ghcidie ausführlichen Lademeldungen von zu ersetzen .

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

Wenn jemand eine lowercaseMethode hat, die kürzer als diese import Distribution.Simple.Utilsist, kommentieren Sie bitte.

HEGX64
quelle
1
Verwenden Sie map toLowervon Data.Charanstelle vonlowercase
nimi
1
Außerdem: Sie können den Parameter lum entfernen f, dh f=g.lowercase(oder f=g.map toLowerwenn Sie zu wechseln toLower). Innerhalb geines Vergleichs genügt: g l=nub(sort l)==l.
Nimi
4

Wolfram Mathematica, 49 37 Bytes

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

PS Kürzere Lösung von Martin Büttner:

Union[l=Characters@ToLowerCase@#]==l&
Savenkov Alexey
quelle
2
#⋃#==#&@*Characters@*ToLowerCase
Alephalpha
1
@alephalpha Das ist schön!
Martin Ender
4

J, 17 Bytes

Überprüft, ob die kleingeschriebene sortierte /:~Zeichenfolge -:der kleingeschriebenen NUB- ~.Zeichenfolge entspricht.

   (/:~-:~.)@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

Da in J eine 1-Zeichen lange "Zeichenfolge", die als reguläre Zeichenfolge (mit Anführungszeichen) dargestellt wird, nur ein Zeichenatom und keine echte Zeichenfolge ist, habe ich die Eingabe entsprechend formatiert, sodass alle Eingaben echte Zeichenfolgen wären. (Im obigen Beispiel habe ich verwendet 1$'a'.)

randomra
quelle
4

MATLAB, 29 27 Bytes

Jetzt zu einem Einzeiler, der auch außerhalb des Codegolfs Sinn macht.

Als anonyme Funktion (Verwendung als o('yourstring'))

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

Ich denke, diese Funktion ist ziemlich selbsterklärend, da sie sich wie eine Zeitungsanzeige liest.

Vorherige Version (29 Bytes):

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

Die Eingabe muss zwischen den 'Markierungen erfolgen, z 'Potato'.

Sanchises
quelle
4

Brachylog , 3 Bytes

ḷ⊆Ạ

Probieren Sie es online!

Das Vergleichselement ist erfolgreich, wenn die Eingabe die angegebenen Anforderungen erfüllt, und schlägt fehl, wenn sie nicht gedruckt true.oder false.als Programm ausgeführt wird.

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

Die erste Version, die ich mir ausgedacht habe, bezieht sich nicht explizit auf das Alphabet:

Brachylog , 4 Bytes

ḷ≠.o

Probieren Sie es online!

        The input,
ḷ       lowercased,
 ≠      in which every character is distinct,
  .     is the output variable,
   o    which sorted,
        is still the output variable.
Nicht verwandte Zeichenfolge
quelle
3

J, 21 Zeichen

Dies ist zu lang. Das Argument muss einen Rang haben 1, dh es muss ein String oder ein Vektor sein.

*/@(<=~.;/:~)@tolower
  • tolower y- yin Kleinbuchstaben.
  • /:~ y- yin lexikalischer Reihenfolge.
  • ~. y- der Knoten von y, dh ymit entfernten Duplikaten.
  • x ; y- xund yin Kisten legen und dann verketten.
  • < y- yIn eine Kiste legen.
  • x = y- x Elementweise verglichen mit y.
  • (< y) = (~. y) ; (/:~ y)- Ein Vektor, der angibt, ob yer seinem Knoten entspricht und selbst sortiert ist.
  • */ y- das Produkt der Items von yoder sein logisches und wenn die Items Boolesche Werte sind.
  • */ (< y) = (~. y) ; (/:~ y)- Ein Boolescher Wert, der die gewünschte Eigenschaft für Kleinbuchstaben angibt y.
FUZxxl
quelle
3

Julia, 44 Bytes

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

Dadurch wird eine anonyme Funktion erstellt, die ein einzelnes Argument sin Kleinbuchstaben konvertiert und mit der eindeutigen sortierten Version der Zeichenfolge vergleicht. Es gibt einen Booleschen Wert zurück, dh trueoder false. Wenn du es ausprobieren willst, ordne es gerne zu f=s->...und rufe dann an f("PuZ"), etc.

Alex A.
quelle
Amen dazu, @flawr. Danke für die Unterstützung.
Alex A.
3

Pure Bash 4.x, 37

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

Eingabe als Befehlszeilenparameter. Gemäß der Standard-Shell-Semantik bedeutet der Exit-Code 0 true (alphabetisch) und der Exit-Code! = 0 false (nicht alphabetisch).

Der printf erstellt den regulären Ausdruck wie in der @ hsl-Lösung . Die Eingabezeichenfolge wird zu Kleinbuchstaben erweitert und mit dem regulären Ausdruck verglichen.


Vorherige Antwort:

Bash + Coreutils, 52

Einfache Lösung:

a=`fold -1<<<${1,,}`
cmp -s <(sort -u<<<"$a")<<<"$a"
Digitales Trauma
quelle
Beachten Sie, dass hierfür Bash 4.x erforderlich ist.
Mark Reed
@ MarkReed Ja. Zur Kenntnis genommen.
Digital Trauma
3

C # 6, 18 + 82 76 = 94 Bytes

Benötigt (18 Bytes):

using System.Linq;

Code (76 Bytes):

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

C # 6 unterstützt Lambdas, um eine Funktion zu definieren, die für das Golfen nützlich ist.

Nicht-C # 6-Version:

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

Ungolfed-Code:

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

JavaScript (ES6) 54

Konvertieren Sie in Großbuchstaben, dann in Array und sortieren. Wenn beim Sortieren zwei Elemente in der falschen Reihenfolge oder gleich sind, gebe 0 (falsch) zurück, sonst 1 (wahr)

Bearbeiten Verkürzte thx to @Optimizer (aber immer noch 2 mehr als die @Tamas Lösung in ES6 umgesetzt: 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

Test in der Firefox / FireBug-Konsole

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

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

edc65
quelle
1
s=scheint nicht erforderlich zu sein ...
Optimierer
@Optimizer richtig, es war ein erster Versuch, als ich endlich das Original (Großbuchstaben) und das sortiert
edc65
3

C (44 Bytes)

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

Testen Sie es hier: http://ideone.com/q1LL3E

Posting dies, weil ich noch nicht kommentieren kann, sonst wäre es ein Vorschlag, die vorhandene C-Antwort zu verbessern, weil ich die Idee der Groß- und Kleinschreibung aus der vorhandenen C-Antwort vollständig gestohlen habe.

Gibt 0 zurück, wenn die Zeichenfolge nicht geordnet ist, und einen Wert ungleich Null, wenn geordnet.

erai
quelle
3

Golang (65 Bytes)

Go ist keine golffreundliche Sprache, außerdem sauge ich am Golf ...

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

Führen Sie es hier aus: http://play.golang.org/p/xXJX8GjDvr

edit 106-> 102

edit 102-> 96

edit 96-> 91

edit 91-> 87

edit 87-> 65

Ich habe die Java-Version geschlagen, ich kann für heute aufhören

Kristoffer Sall-Storgaard
quelle
3

Java 8 - 90 89 87 85 Zeichen

Die Idee hier ist, eine 'Reduzieren'-Funktion zu verwenden, die das letzte Zeichen verfolgt und "aufgibt", wenn erkannt wird, dass die Sequenz nicht streng aufsteigend ist.

Golf gespielt:

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

Beispiel:

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

Ausgabe:

99
-1
122
122
122
-1
Michael Easter
quelle
3

Perl 6, 35 Bytes

{my@c=.uc.comb;@c [email protected]}

Dies erzeugt einen aufrufbaren Block; Wenn ich nur annehmen könnte, dass $_bereits das gewünschte Wort gesetzt ist, könnte ich die umgebenden geschweiften Klammern löschen und zwei weitere Bytes verlieren, aber wahrscheinlich ist die einzige vernünftige Möglichkeit, diese Annahme zu treffen, -ndas Wort als Standardeingabe auszuführen und zu füttern , was die zwei Bytes gleich wieder hinzufügen würde.

Mark Reed
quelle
Sicher tut es das. .uc.combordnet nichts neu. Wenn also das Array in Großbuchstaben und Kammzugriffen dem sortierten Array in Großbuchstaben und Kammzugriffen entspricht, bedeutet dies, dass es in sortierter Reihenfolge gestartet wurde.
Mark Reed
Richtig, es wird die Größe der Kreuzung überprüft, wobei die Reihenfolge ignoriert wird. Ok, aktualisiert.
Mark Reed
3

R , 37 Bytes

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

Probieren Sie es online!

Das Posten ist wesentlich anders und kürzer als Michals R-Antwort .

Konvertiert die Buchstaben mit in ASCII-Codepunkte utf8ToIntund nimmt dann modulo 32, so dass die unteren und oberen Buchstaben in die gleichen Zahlen 1 ... 26 konvertiert werden. Berechnet die paarweisen Differenzen und prüft, ob sie alle positiv sind.

Robin Ryder
quelle
2

Perl, 27

@ hsls reguläre Ausdrücke werden dynamisch erstellt.

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

Wir können auch eine umgekehrte Übereinstimmung durchführen: Konvertieren Sie die Eingabe in einen regulären Ausdruck: PuZ=> .*p.*u.*z.*und ordnen Sie diese dann einer Buchstabenfolge in alphabetischer Reihenfolge zu. Ergebnis - auch 27 Zeichen.

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

k (6 Bytes)

&/>':_

& Gibt true zurück, wenn beide Argumente true sind

/ändert &, um "über" eine Liste anzuwenden, wie eine Falte in funktionalen Sprachen

> größer als

':ändert >, um "each-prior" anzuwenden, und gibt so einen Vektor von Booleschen Werten zurück, der angibt, welche Elemente größer sind als ihre Vorgänger

_ macht es Argument Kleinbuchstaben

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

( 0bbedeutet boolean false)

q (13 Bytes)

all(>':)lower

q ist nur syntaktischer Zucker auf k. allist definiert als &/und niedriger ist_

Mollmerx
quelle
4
Können Sie erklären, wie das funktioniert?
Fehler
Das fühlt sich fast an, als würde man andere Sprachen betrügen ... Wer braucht Funktionsnamen, Klammern und Semikolons? :)
Sanchises
@sanchises k hat all diese Dinge und sie funktionieren ziemlich genau wie in C-Sprachen. Es ist nur so, dass dieses Problem als einzelne Aussage ausgedrückt werden kann.
Mollmerx
2

Python, 50 Bytes

f=lambda x:sorted(set(x.lower()))==list(x.lower())

Versuchen Sie es online hier: http://repl.it/c5Y/2

mbomb007
quelle
2

VBA (161 Byte)

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  

Vergleicht den ASCII-Wert mit dem vorherigen Buchstaben in Kleinbuchstaben und gibt 0 (false) zurück, wenn der Wert kleiner / gleich ist, und beendet die Funktion

Alex
quelle
2

Python 2 , 43 Bytes

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

Probieren Sie es online!

Setzt <Symbole zwischen alle Buchstaben (in Kleinbuchstaben umgewandelt) und evals es dann. Die verketteten Vergleichsoperatoren von Python bewerten das Ganze gerne als einen großen booleschen Ausdruck.

ArBo
quelle
1

Erlang, 51

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

Verwendet einen geordneten Satz (analog zu java.util.TreeSet), um die Zeichen zu sortieren und alle Duplikate zu verwerfen. Die neue Liste wird dann mit der Eingabezeichenfolge verglichen.

Testfunktion:

test() ->
    [io:format("~p ~p~n", [S, f(S)]) || S <- ["a","abcdefGHIjklmnopqrSTUVWXyz","aa","puz","puzz","puzZ","puZ","PuZ"]].
cPu1
quelle
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;}

Ziemlich einfach hier. Wandle einfach alle in niedrigere um und vergleiche sie mit dem vorherigen Zeichen.

Geobits
quelle