(Hinweis: Dies ist eine einfachere Abwandlung meiner vorherigen Herausforderung " Find the Infinity Words!" , Die eine Abwandlung meiner anderen vorherigen Herausforderung " Find the Swirling Words!" Ist. :))
Definition eines welligen Wortes :
- Wenn Sie alle Zeichen eines Wellenworts auf dem Alphabet (AZ) mit Kurven verbinden , erhalten Sie den Pfad einer Welle, die kontinuierlich nach rechts oder links verläuft und die Richtung nie ändert, wie in den folgenden Diagrammen.
- Ein welliges Wort kann sein:
- Wird ausgelöst, wenn sich jedes aufeinanderfolgende Zeichen rechts (im Alphabet) vom vorherigen befindet.
- Absteigend, wenn sich jedes aufeinanderfolgende Zeichen links (im Alphabet) des vorherigen befindet.
- Alle geraden Verbindungen müssen unterbrochen sein, alle ungeraden Verbindungen müssen aktiviert sein.
- Sie können Groß- / Kleinschreibung ignorieren oder alle in Groß- oder Kleinschreibung umwandeln.
- Die eingegebenen Wörter sind nur Zeichen im alphabetischen Bereich von AZ, keine Leerzeichen, keine Interpunktion oder Symbole.
- Wenn ein Wort doppelte Zeichen wie "SPOON" enthält, müssen Sie die doppelten Zeichen zu einem Zeichen zusammenfassen: "SPOON"> "SPON" (denn wenn Sie von O nach O gehen, ist der Abstand Null).
- Die wellenförmigen Wörter enthalten mindestens 3 verschiedene Zeichen (auch nach dem Zusammenfallen von Doppelzeichen).
Hier einige Beispiele:
Aufgabe:
Schreiben Sie ein vollständiges Programm oder eine Funktion, die ein Wort von der Standardeingabe übernimmt und ausgibt, ob es sich um ein Wellenwort handelt oder nicht, und im positiven Fall, wenn es angehoben oder abgesenkt wird . Der Ausgang kann sein True/False/Null
, 2/1/0
, 1/Null/0
, -1/0/1
, NO/WR/WD
, usw, entscheiden Sie , wie es zu vertreten.
Testfälle:
WAVY WORDS:
ADEPT, BEGIN, BILL, BOSS, BOOST, CHIMP,
KNOW, SPONGE, SPOON, TROLL, WOLF
ADEPT > YES > RAISING
BEGIN > YES > RAISING
BILL > YES > RAISING
BOSS > YES > RAISING
BOOST > YES > RAISING
CHIMP > YES > RAISING
KNOW > YES > RAISING
SPONGE > YES > DECREASING
SPOON > YES > DECREASING
TROLL > YES > DECREASING
WOLF > YES > DECREASING
NOT WAVY WORDS:
WATCH, EARTH, NINON, FOO, BAR, WAVE, SELECTION,
YES, NO, DEFINITION, WATER, WINE, CODE, AAAHHHH, I, MM, ABCA
Regeln:
- Kürzester Code gewinnt.
Optionale Aufgabe:
Finden Sie als Liste so viele wellenförmige Wörter wie möglich in einem englischen Wörterbuch und die längste. Sie können die vollständige Liste der englischen Wörter zum Beispiel als Referenz nehmen hier .
NO
undFOO
sind keine gültigen Eingaben nach Ihren Regeln.NOT WAVY WORDS
Sektion, was richtig ist ..Antworten:
05AB1E ,
119 Bytes (Dank an Adnan)Probieren Sie es online!
Wellenförmige Fälle:
0 - Abnehmende Welligkeit
1 - Zunehmende Welligkeit
Nicht gewellte Fälle:
[0,1] - Nicht wellig, anfänglich abnehmend, aber dann mit einer Zunahme / Gleichheit, die das Muster durchbrochen hat.
[1,0] - Nicht wellig, anfänglich ansteigend, aber dann mit einer Abnahme / Gleichheit, die das Muster durchbrochen hat
Input String - Wegen der Länge ist es nicht möglich, gewellt zu sein.
Erläuterung:
quelle
The input words will contain at least 3 distinct characters
gemeint, dass ich nicht weniger als 3 Zeichenwörter verarbeiten musste. Das Bearbeiten von Änderungen kann eine Weile dauern. Dies ist meine erste Antwort, die ich in 05AB1E machen konnte.ü‹
ist das gleiche wieü-0‹
:)Gelee , 10 Bytes
TryItOnline! oder führen Sie alle Testfälle aus
Rückkehr:
[1]
für wellige Erhöhung[-1]
für wellige abnehmendetwas anderes sonst (
[]
,[0]
,[-1,1]
, oder[1,-1]
)(Angegeben als unnötig: Für einen einzelnen Wert für jedes
OIṠḟ0µL’aQS
(11 Bytes) zurückkehren1
,-1
und0
jeweils) .Wie?
quelle
Python 2, 54 Bytes
Übernimmt die Eingabe als Liste von Zeichen. Ausgänge:
Überprüft, ob die sortierte Eingabezeichenfolge der ursprünglichen oder der umgekehrten entspricht. Dazu schneiden Sie mit den Schrittgrößen 1 und -1. Gleichzeitig prüfen wir, ob das Wort mindestens zwei verschiedene Buchstaben hat.
Wenn "exit with error" für keinen der beiden Fälle als Ausgabe verwendet werden kann, können wir auf 51 Bytes zurückgehen:
quelle
Python 3,
7775 BytesAngenommen, alle Buchstaben sind gleich.
Kehrt zurück:
0
wenn nicht wellig1
wenn vorwärts wellig2
wenn rückwärts gewelltÜberflüssige Leerzeichen wurden dank @ETHproductions entfernt
quelle
or
.R,
9695 BytesKehrt zurück:
1
für wellig und heben2
für wellig und abnehmend3
für nicht welligErklärt
d=diff(rle(utf8ToInt(x))$v)
: Erzeugt eine Variable,d
indem zuerst die Zeichenfolge in ihreASCII
Werte konvertiert wird , wobeiutf8ToInt
zweckmäßigerweise ein Vektor zurückgegeben wird. Führen Sie anschließend die Lauflängencodierung mit ausrle
.rle(...)$v
Gibt die sich nicht wiederholenden Werte der Sequenz zurück (dh alle Läufe werden ausgeblendet). Nimm endlich den Unterschied.if(any(d>0)&any(d<0)|sum(1|d)<2)3
: Wenn mindestens eine der Differenzen positiv und mindestens eine negativ ist oder wenn die Differenzsequenz kleiner als ist2
Elemente enthält (entspricht dem ursprünglichen Wort mit weniger als 3 Zeichen), ist das Wort nicht wellig und kehrt zurück3
else``if``(all(d<1),2,1)
: Andernfalls, wenn alle Unterschiede negativ sind, kehren Sie2
für wellig und abnehmend zurück, andernfalls kehren Sie1
für wellig und steigend zurück .Probieren Sie alle Testfälle bei R-fiddle aus (beachten Sie, dass der Name so lautet, dass er für die Testfälle vektorisiert werden kann).
quelle
JavaScript (ES6),
8481 BytesAngenommen, die Eingabe ist alle in demselben Fall. Gibt
1
für das Erhöhen der Wellenlänge ,-1
für das Verringern der Wellenlänge0
oder-0
(beide sind falsch) für das Nicht-Wellenförmig zurück. Bearbeiten: 3 Bytes dank @RobertHickman gespeichert.quelle
new
?new
.t=[...s]
und t anstelle von [...] s an den beiden Stellen verwenden, an denen Sie es haben.Javascript (ES6),
848078 BytesWenn die Wellenzunahme 0 ist, ist die Abnahme 1 und -1 ist nicht wellig.
Vielen Dank an @Neil, der mir geholfen hat, 2 Bytes zu sparen.
quelle
new Set(s=[...i])
Spart Ihnen 2 Bytes. (Es funktionierti
, indem es iteriert , in ein Array verwandelt, das Array iteriert und in ein Set umgewandelt wird. Gewunden, aber Sie machen sich keine Sorgen darüber, wenn Sie Golf spielen.)Pyth, 12 Bytes
Probieren Sie es online aus. Testsuite.
quelle
Python 2,
535250 BytesErwartet in Anführungszeichen eingeschlossene Eingaben, z
"watch"
Als unbenanntes Lambda:
Summiert das Vorzeichen der Differenz zwischen den einzelnen Buchstaben und die Ganzzahl dividiert durch
len-1
. Wenn alle1
(aufsteigend) sind, wird die Summelen-1
angezeigt1
, ähnlich wie bei abnehmenden-1
und gemischten Werten1
.-1
Die Summe ist kleiner als die Summe , dielen-1
angezeigt wird0
.-1 Byte für den Wechsel
cmp,s[1:],s[:-1])
zucmp,s[1:],s)+1
quelle
1
für"NO"
LMNOP
so O ist nach N, was bedeutet, zu erhöhen, was bedeutet, 1len
Problem behoben , aber ich die sich wiederholenden Zeichen sind immer noch ein ProblemRuby, 54 Bytes
Gibt zurück,
0
wenn das Wort nicht wellig ist.1
wenn es rückwärts wellig ist und2
wenn es vorwärts wellig ist.quelle
Groovy - 56 Bytes
Ausgänge
[1,0]
zum Erhöhen der Wellenlänge,[0,1]
zum Verringern der Wellenlänge,[0,0]
zur Eingabe einzelner Zeichen oder[1,1]
für Nicht-Wellenformen.HINWEIS: Es wird davon ausgegangen, dass die Eingabe entweder ein String oder ein Zeichen [] ist und alle Buchstaben den gleichen Groß- / Kleinschreibungstyp haben.
quelle
PHP, 96 Bytes
oder 98 Bytes
0 nicht wellig 1 ansteigend -1 absteigend
quelle
-
anstelle von2*
(-1 zum Verringern: -1 Byte).*(!!...)
braucht keine Klammern. (-2)$s*$s>1
anstelle vonabs($s)>1
(-2)PHP, 100 Bytes
Kehrt zurück:
-1
für wellig, abnehmend.0
für nicht wellig.1
für wellig, erhöhen.quelle
!!array_unique($s)[2]
stattcount(array_unique($l))>2
C 164 Bytes
Gibt 0 zurück, wenn es nicht wawy ist, 1, wenn es wawy ist und erhöht, 2, wenn es abnimmt.
quelle
Schläger 321 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
Java 7,
254240 BytesGibt aus,
0
wenn die Eingabezeichenfolge nicht wellig ist,1
wenn es sich um eine ansteigende Welle handelt, und2
wenn es sich um eine absteigende Welle handelt.Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
int c(char[]s){int t=s[0],f=s.length,a=1,b=1,i;for(i=1;i<f;){if(s[i]-s[i-1]>=0)++a;if(s[i]-s[i++-1]<1)++b;}return a==f?1:b==f?-1:0;}
(132 Bytes)