Sie sagen, das hate
ist ein starkes Wort. Ich wollte herausfinden, warum, also habe ich mir das Wort genau angesehen.
Ich bemerkte, dass jeder Konsonant einen Vokal danach hatte. Das machte es ziemlich stark für mich, also entschied ich, dass das, was ein Wort stark macht.
Ich möchte stärkere Wörter finden, deshalb brauche ich ein Programm dafür!
Starke Worte finden
Starke Wörter sind Wörter, bei denen auf jeden Konsonanten (Buchstaben in der Menge BCDFGHJKLMNPQRSTVWXZ
) ein Vokal (Buchstaben in der Menge AEIOUY
) folgt . Das ist es. Das ist alles, was zählt.
Wenn das Wort mit einem Vokal beginnt, müssen Sie sich vor dem ersten Konsonanten über keinen der Buchstaben Gedanken machen. Wenn das Wort überhaupt keine Konsonanten enthält, ist es automatisch ein starkes Wort!
Einige Beispiele für starke Worte sind agate
, hate
und you
. agate
ist immer noch ein starkes Wort, denn obwohl es mit einem Vokal beginnt, folgt jedem Konsonanten immer noch ein Vokal. you
ist ein starkes Wort, weil es keine Konsonanten hat.
Es gibt keine Längenbeschränkung für starke Wörter.
Die Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine nicht leere Zeichenfolge als Eingabe verwendet und einen Wahrheitswert ausgibt, wenn es sich um ein starkes Wort handelt, oder einen falschen Wert, wenn dies nicht der Fall ist.
Klarstellungen
- Sie können entscheiden, ob die Eingabe in Klein- oder Großbuchstaben erfolgen soll. Geben Sie in Ihrer Antwort an, welche.
- Wörter enthalten keine Interpunktion. Sie enthalten nur einfache Buchstaben im Satz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
. - Anstatt wahrer und falscher Werte können Sie zwei unterschiedliche und konsistente Werte auswählen, die für wahr und falsch zurückgegeben werden. Geben Sie in diesem Fall die Werte an, die Sie in Ihrer Antwort ausgewählt haben.
- Sie können alternativ einen falschen Wert für ein starkes Wort und einen falschen Wert für ein nicht starkes Wort ausgeben.
Testfälle
Input -> Output
hate -> true
love -> true
popularize -> true
academy -> true
you -> true
mouse -> true
acorn -> false
nut -> false
ah -> false
strong -> false
false -> false
parakeet -> false
Wertung
Da es sich um Code-Golf , Bytes die Antwort mit dem geringsten gewinnt!
quelle
""
eine mögliche Eingabe?Antworten:
JavaScript (ES6),
362827 Bytes1 Byte durch Invertieren des Ergebnisses gespeichert, wie von LarsW vorgeschlagen
Nimmt Eingaben in Kleinbuchstaben vor. Gibt
false
für ein starkes Wort undtrue
für ein nicht starkes Wort zurück.Wie?
Wir fügen ein
0
(Nicht-Vokal) an das Ende der Eingabezeichenfolge an und suchen nach zwei aufeinander folgenden Nicht-Vokal-Zeichen. So können wir beide Fälle abdecken, die ein Wort nicht stark machen:Testfälle
Code-Snippet anzeigen
quelle
+0
aber? Es scheint gut zu funktionieren, ohne es+0
würde es falsche Positive auf Wörtern zurückgeben, die mit einem Konsonanten enden.!
(zwei unterschiedliche Werte)Python 2 , 48 Bytes
Eine unbenannte Funktion, die eine Zeichenfolge (in Kleinbuchstaben) verwendet
s
und zurückgibt,False
wenn sie stark ist oderTrue
nicht.Probieren Sie es online! (invertiert die Ergebnisse entsprechend dem OP)
Wie?
Nicht-starke Wörter haben entweder einen Konsonanten gefolgt von einem Konsonanten oder enden in einem Konsonanten.
Der Code fügt am Ende (
s+'b'
) einen Konsonanten hinzu , damit der erforderliche Test nur für zwei Konsonanten hintereinander gilt.Es wird herausgefunden, ob jeder Buchstabe im geänderten Wort ein Vokal mit dem Listenverständnis ist
[v in'aeiouy'for v in s+'b']
.Es muss nun nach zwei
False
Ergebnissen in einer Reihe`...`
suchen (was ein nicht starkes Wort signalisiert), indem es eine Zeichenfolgendarstellung (unter Verwendung ) dieser Liste abruft und nach der Existenz von sucht'se, F'
. Dies ist die kürzeste Zeichenfolge gefunden ,'False, False'
aber keiner von:'True, True'
;'False, True'
; oder'True, False'
.Als Beispiel betrachtet
'nut'
, wertet das Listenverständnis jeden Buchstaben aus,v
von dem,'nutb'
um'aeiouy'
die Liste zu erhalten[False, True, False, False]
, die Zeichenfolgendarstellung dieser Liste hier'[False, True, False, False]'
enthalten'e, F'
ist:'[False, True, Fals>>e, F<<alse]'
daher gibt die Funktion zurück,True
was bedeutet, dass nut kein starkes Wort ist.quelle
Gelee ,
109 BytesEin monadischer Link, der eine Liste von Zeichen aufnimmt und Folgendes zurückgibt:
0
wenn stark1
wenn nichtProbieren Sie es online! oder sehen Sie sich die Testsuite an .
Wie?
Hinweis: Der Grund für die Verwendung
Ạ
ist nur, um ein Byte über die Verwendung zu sparen1
(da wir dann11
sofort verwenden möchten ).quelle
Ạ
Sache in Ihrem Code ... sonst hätten Siee€ØY;1w11
oder etwas getanẇ
ein linkes Argument hat, das eine Zahl ist, wird es implizit in eine dezimale Liste von Ziffern konvertiert, sodass die Elf wird[1,1]
.05AB1E , 8 Bytes
Code
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung
Beispiel
quelle
R , 43 Bytes
Probieren Sie es online!
Ein Port von Arnauld's JavaScript-Antwort; gibt 1 für schwache und
integer(0)
für starke Wörter zurück ; es hängt ein(Leerzeichen) an das Ende der Zeichenkette an.
Dies ist tatsächlich vektorisiert; Mit einem Vektor aus Zeichenfolgen werden die Indizes (1-basiert) der schwachen Wörter zurückgegeben.
quelle
$
das näher erläutern?paste0(s,0)
, aber das ist nur streiten. Ich denke, @Charlie verweist auf so etwas:grep("[^aeiouy]([^aeiouy]|$)",s)
Dyalog APL, 20 Bytes
Probieren Sie es online!
quelle
⎕←
.Haskell ,
6154 BytesProbieren Sie es online!
Ich musste ein
z
am Ende der Zeichenfolge hinzufügen , um den Fall eines nachgestellten Konsonanten zu behandeln.quelle
Java (OpenJDK 8) ,
93 bis81 ByteProbieren Sie es online!
quelle
s->{int w=0,p=w,l;for(char c:s){l="aeiouy".indexOf(c)>>31;w|=p&l;p=l;}return w+p>=0;}
.s->{int w=0,p=w,l;for(char c:s)w|=p&(p=l="aeiouy".indexOf(c)>>31);return w+p>=0;}
[a-z&&[^aeiouy]]
in einer früheren Antwort herausgefunden, wie ich Konsonanten zuordnen kann . ;)Schale , 12 Bytes
Probieren Sie es online!
Vielen Dank an H.PWiz für die Hilfe bei -4.
Gibt inkonsistente, aber entsprechend wahrheitsgemäße oder falsche Werte zurück.Dank Leo für -1 wird nun ein konsistenter Wahrheits- / Falschwert zurückgegeben.
quelle
Pyth , 18 Bytes
Überprüfen Sie alle Testfälle.
"Ausgeliehen" der Regex aus der JS-Antwort . Dies
False
giltTrue
ansonsten für starke Wortequelle
13 ISO-8859-1 bytes, 13 chars
. Ich denke, das sollte in Ordnung seinBrachylog ,
181110 BytesProbieren Sie es online!
Ordentlich und einfach (mit Ausnahme der 2 zusätzlichen Anfangsbytes, die für den endgültigen Konsonantenfall erforderlich sind, z. B. "Sittich").
Ist falsch für starke Worte und wahr für nicht starke Worte.
quelle
Python 2 , 58 Bytes
-30 Bytes, wenn man merkt, dass es so einfach ist wie Arnauld's JS-Antwort .
Probieren Sie es online!
quelle
f=lambda s...
f=\
in einer Kopfzeile).'[^aeiouy]([^aeiouy]|$)'
(24 Bytes) durch"[^aeiouy]("*2+")|$)"
(21 Bytes) zu ersetzen , um 3 Bytes zu sparen, da die leere Gruppe()
das Suchverhalten ( TIO ) nicht ändert .Perl 5, 31 Bytes (30 + 1)
+1 Byte für
-p
Befehlszeilenflag. Gibt das Wort aus, wenn es ein starkes Wort ist, oder die leere Zeichenfolge, wenn dies nicht der Fall ist.quelle
$_=$/if/[^aeiouy]{2}/
.Jelly , 11 Bytes
Probieren Sie es online!
Ja, ich weiß, dass ich viel von Jonathan Allan geschlagen wurde, aber ich wollte trotzdem meinen Ansatz teilen: P
-4 Bytes durch Diebstahl eines kleinen Teils von Jonathan Allans Antwort (anstatt einen Konsonanten anzufügen, um den Rand des letzten Buchstabens zu prüfen, fügen Sie einfach 1)
-1 Bytes dank Meilen hinzu
quelle
a2\
oderȦ2Ƥ
anstelle vonṡ2Ȧ€
ØC
um sicherzustellen ,Yy
als Konsonant gezählt wurde , weil ich irgendwie nach hinten fiel. Vielen Dank!Awk, 39 Bytes
druckt
n
für Nicht-Strongword, nichts (oder nur eine neue Zeile) für StrongwordFolgen Sie dem Pack und suchen Sie nach zwei aufeinander folgenden Nicht-Vokalen bei der Eingabe in Kleinbuchstaben
testen
quelle
Kotlin , 49 Bytes
Richtig und falsch sind vertauscht
Verschönert
Prüfung
TryItOnline
Basierend auf der Antwort von @ Arnauld
quelle
Retina ,
2318 BytesProbieren Sie es online! Gibt 0 für stark aus, 1 wenn nicht. Fügen Sie 1 Byte hinzu, um gemischte Groß- und Kleinschreibung zu unterstützen. Bearbeiten: 5 Bytes dank @ovs gespeichert.
quelle
Java 8,
5342 Bytes-11 Bytes mit demselben regulären Ausdruck wie in @jrtapsells Kotlin-Antwort .
Probieren Sie es hier aus. (
false
wenn stark,true
wenn nicht)Erläuterung:
Es wird also grundsätzlich geprüft, ob wir zwei benachbarte Konsonanten finden können oder ob der String mit einem Konsonanten endet.
Alte Antwort ( 53 Bytes ):
Probieren Sie es hier aus. (
true
wenn stark,false
wenn nicht)Verwendet Regex, um festzustellen, ob der Eingabe-String mit dem Regex 'strong' übereinstimmt. Beachten Sie, dass
String#matches
in Java automatisch hinzugefügt wird^...$
, um zu überprüfen, ob der String vollständig mit dem angegebenen regulären Ausdruck übereinstimmt.Erläuterung":
Eine Suche anstelle von Übereinstimmungen (wie viele andere Antworten) ist in Java tatsächlich länger:
70 Bytes :
Probieren Sie es hier aus. (
false
wenn stark,true
wenn nicht)quelle
Ruby , 25 Bytes
Probieren Sie es online!
Alle anderen machen es so, warum kann Ruby es nicht?
quelle
SOGL V0.12 ,
1918 BytesProbieren Sie es hier aus!
Erläuterung:
quelle
05AB1E , 11 Bytes
Probieren Sie es online!
Verwendet Jonathans Algorithmus und gibt
0
für wahr und1
falsch zurück.quelle
Swift 3.1 , 85 Bytes
Probieren Sie es hier aus!
Dies leiht Arnauld Regex .
quelle
Lua, 41 Bytes
Liest von der Standardeingabe
Lua (Loadstring), 37 Bytes
Liest aus Funktionsparametern
Die Eingabe erfolgt in Kleinbuchstaben
Es wird festgestellt, ob es eine Zeichenfolge mit einer Länge von 2 oder mehr gibt, die nur aus Nicht-Vokalen (Konsonanten) besteht, oder ob die Zeichenfolge mit einem Nicht-Vokal endet
Gibt true / false zurück
quelle
C ++,
195194 Bytes-1 Bytes dank Zacharý
Großbuchstaben, Rückgabe true, wenn die Eingabe ein starkes Wort ist, andernfalls false (C ++ hat einfache implizite Umwandlungsregeln für int, 0 => false, andernfalls true)
Code zum Testen:
quelle
return
und entfernen!
.C 107 Bytes
Gibt 1 für ein starkes Wort und 0 für ein schwaches Wort zurück. Getestet mit den Worten im Hauptbeitrag.
quelle
C (gcc) , 59 Bytes
Probieren Sie es online!
quelle
PHP, 69 Bytes
Gibt 1 zurück, wenn das Wort nicht stark ist.
quelle
/", str
->/",str
und[1]))) return
->,[1])))return
aber ich kenne PHP nicht so gut, daher kann ich nicht sicher sein.[B-Z]
?[B-Z]
enthält Vokale.[^AEIOUY]
funktioniert aber.if
Anweisung zu schreiben .CJam , 57 Bytes
Probieren Sie es online!
Liest die Eingabe, konvertiert in 1s für Konsonanten, 0s für Vokale. Für jeden Konsonanten UND vordefinierte Variable X (vordefiniert auf 1) mit dem Wert des nächsten Zeichens. Ausgang X
quelle