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.
code-golf
string
decision-problem
Fehler
quelle
quelle
za
ein wahrer Wert sein?a
und endet mitz
.Antworten:
CJam, 8 Bytes
Hier ist ein Testgeschirr für alle Beispiele in der Herausforderung. Dies ergibt
0
oder1
(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
quelle
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.
Ich habe ein Byte für das
i
Flag (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:
Wenn Sie dies in der oben verlinkten Wortliste ausführen, werden 10 Wörter mit 6 Buchstaben in alphabetischer Reihenfolge angezeigt.
quelle
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?$
Python 3, 44 Bytes
Ein einfacher Ansatz - überprüfen Sie die Eindeutigkeit, überprüfen Sie die Sortierbarkeit.
quelle
*s,=...
macht?s=list(input().lower())
.x,*y = [1, 2, 3, 4]
, die Abtretungsempfänger 1x
und[2, 3, 4]
zuy
.*s,=
istlist(s)
... Link{*s}
stattdessenset(s)
2 Bytes speichern.> <> ,
524239 BytesDiese 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.
Vorherige Lösung, 42 Bytes
Das Interessante ist, dass trotz scheinbar gleicher Funktionalität die Alternative ist
(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 diev
am Ende.quelle
Haskell, 52 Bytes
Verwendung:
(and.(zipWith(>)=<<tail).map toLower) "abcd"
welche AusgängeTrue
.quelle
C,
67 65 5754 (52) Zeichenetwas kürzer:
und noch kürzer:
Hier ist ein kleiner Test: http://ideone.com/ZHd0xl
Nach den neuesten Vorschlägen sind hier noch zwei kürzere Versionen:
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
|32
kürzer als&~32
.quelle
for(;(*s&=95)>d;d=*s++);
. Und Sie können auf initialisierend
,1
ohne das Ergebnis zu ändern, und 1 weitere speichern. Sehen.d;f(char*s){d=32;for...}
funktioniert, indem esd
implizit als globales int deklariert wird (was in GCC eine Warnung ist - "Datendefinition hat keinen Typ oder Speicherklasse" - aber keinen Fehler). Das spart zwei Bytes.d
in derfor
Schleife als in einer eigenen Anweisung initialisieren ? Auf diese Weise sparen Sie ein;
.Ruby, 33
Überprüft, ob die sortierten eindeutigen Zeichen mit allen Zeichen übereinstimmen.
quelle
c==c.sort|c
Javascript (ES5), 101
Verbessert auf 87 von edc95:
stimme seinem Kommentar zu :)
Ü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 mitreduce()
), 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.
quelle
return
und entfernen!b
, um ein Zeichen zu speichern.function i(s){b=0;l='';s.toUpperCase().split('').forEach(function(c){if(c<=l)b=1;l=c});return!b}
function i(s){s.toUpperCase(b=0).split(l='').forEach(function(c){if(c<=l)b=1;l=c});return!b}
function i(s){return!s.toUpperCase().split(l='').some(function(c){return(u=l,l=c)<=u})}
Haskell, 90 Bytes
Liefert die Funktion
f :: String -> Bool
Verwendung (vorausgesetzt, es wird als golf.hs gespeichert).
...
wird verwendet, umghci
die ausführlichen Lademeldungen von zu ersetzen .Wenn jemand eine
lowercase
Methode hat, die kürzer als dieseimport Distribution.Simple.Utils
ist, kommentieren Sie bitte.quelle
map toLower
vonData.Char
anstelle vonlowercase
l
um entfernenf
, dhf=g.lowercase
(oderf=g.map toLower
wenn Sie zu wechselntoLower
). Innerhalbg
eines Vergleichs genügt:g l=nub(sort l)==l
.Wolfram Mathematica,
4937 BytesPS Kürzere Lösung von Martin Büttner:
quelle
#⋃#==#&@*Characters@*ToLowerCase
J, 17 Bytes
Überprüft, ob die kleingeschriebene sortierte
/:~
Zeichenfolge-:
der kleingeschriebenen NUB-~.
Zeichenfolge entspricht.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'
.)quelle
MATLAB,
2927 BytesJetzt zu einem Einzeiler, der auch außerhalb des Codegolfs Sinn macht.
Als anonyme Funktion (Verwendung als
o('yourstring')
)Ich denke, diese Funktion ist ziemlich selbsterklärend, da sie sich wie eine Zeitungsanzeige liest.
Vorherige Version (29 Bytes):
Die Eingabe muss zwischen den'
Markierungen erfolgen, z'Potato'
.quelle
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.
oderfalse.
als Programm ausgeführt wird.Die erste Version, die ich mir ausgedacht habe, bezieht sich nicht explizit auf das Alphabet:
Brachylog , 4 Bytes
Probieren Sie es online!
quelle
J, 21 Zeichen
Dies ist zu lang. Das Argument muss einen Rang haben
1
, dh es muss ein String oder ein Vektor sein.tolower y
-y
in Kleinbuchstaben./:~ y
-y
in lexikalischer Reihenfolge.~. y
- der Knoten vony
, dhy
mit entfernten Duplikaten.x ; y
-x
undy
in Kisten legen und dann verketten.< y
-y
In eine Kiste legen.x = y
-x
Elementweise verglichen mity
.(< y) = (~. y) ; (/:~ y)
- Ein Vektor, der angibt, oby
er seinem Knoten entspricht und selbst sortiert ist.*/ y
- das Produkt der Items vony
oder sein logisches und wenn die Items Boolesche Werte sind.*/ (< y) = (~. y) ; (/:~ y)
- Ein Boolescher Wert, der die gewünschte Eigenschaft für Kleinbuchstaben angibty
.quelle
Julia, 44 Bytes
Dadurch wird eine anonyme Funktion erstellt, die ein einzelnes Argument
s
in Kleinbuchstaben konvertiert und mit der eindeutigen sortierten Version der Zeichenfolge vergleicht. Es gibt einen Booleschen Wert zurück, dhtrue
oderfalse
. Wenn du es ausprobieren willst, ordne es gerne zuf=s->...
und rufe dann anf("PuZ")
, etc.quelle
Pure Bash 4.x, 37
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:
quelle
C # 6, 18 +
8276 = 94 BytesBenötigt (18 Bytes):
Code (76 Bytes):
C # 6 unterstützt Lambdas, um eine Funktion zu definieren, die für das Golfen nützlich ist.
Nicht-C # 6-Version:
Ungolfed-Code:
quelle
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='')
)Test in der Firefox / FireBug-Konsole
quelle
s=
scheint nicht erforderlich zu sein ...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.
quelle
Golang (65 Bytes)
Go ist keine golffreundliche Sprache, außerdem sauge ich am Golf ...
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
quelle
Java 8 -
90898785 ZeichenDie 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:
ungolfed:
Beispiel:
Ausgabe:
quelle
Perl 6, 35 Bytes
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,-n
das Wort als Standardeingabe auszuführen und zu füttern , was die zwei Bytes gleich wieder hinzufügen würde.quelle
.uc.comb
ordnet 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.R , 37 Bytes
Probieren Sie es online!
Das Posten ist wesentlich anders und kürzer als Michals R-Antwort .
Konvertiert die Buchstaben mit in ASCII-Codepunkte
utf8ToInt
und 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.quelle
Perl, 27
@ hsls reguläre Ausdrücke werden dynamisch erstellt.
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.quelle
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(
0b
bedeutet boolean false)q (13 Bytes)
q ist nur syntaktischer Zucker auf k.
all
ist definiert als&/
und niedriger ist_
quelle
Python, 50 Bytes
Versuchen Sie es online hier: http://repl.it/c5Y/2
quelle
VBA (161 Byte)
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
quelle
Python 2 , 43 Bytes
Probieren Sie es online!
Setzt
<
Symbole zwischen alle Buchstaben (in Kleinbuchstaben umgewandelt) undeval
s es dann. Die verketteten Vergleichsoperatoren von Python bewerten das Ganze gerne als einen großen booleschen Ausdruck.quelle
Erlang, 51
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:
quelle
Java, 96
Ziemlich einfach hier. Wandle einfach alle in niedrigere um und vergleiche sie mit dem vorherigen Zeichen.
quelle