Fragen Sie mich nicht wie oder warum, aber während ich ein Projekt programmierte, stellte ich fest, dass die Zeichen einiger Wörter ein bestimmtes Muster hatten, das sich auf das Alphabet bezog. Ich verband jedes Zeichen der Wörter mit dem Bleistift auf dem Alphabet und erhielt zwei Spiralen, dann bemerkte ich, dass die erste Spirale im Uhrzeigersinn und die andere gegen den Uhrzeigersinn war, und andere Eigenschaften ... also nannte ich sie Wirbelnde Wörter !
Ein wirbelndes Wort kann sein:
- im oder gegen den uhrzeigersinn
- zentripetal oder zentrifugal
Hier einige Beispiele für wirbelnde Wörter :
Aufgabe 1:
Schreiben Sie ein vollständiges Programm oder eine Funktion, die ein Wort von der Standardeingabe übernimmt und ausgibt, wenn es sich um ein wirbelndes Wort handelt und seine Eigenschaften in einem lesbaren Format, erweitertem Text, 3 Zeichen, Flags usw.
Testfälle und Beispielausgaben für verschiedene Wörter (Sie können jedoch entscheiden, wie die Ergebnisse dargestellt werden sollen):
EARTH, GROUP > NO // NOT A SWIRLING WORD
OPERA, STAY, IRIS > SW,CF,CW // SWIRLING WORD, CENTRIFUGAL, CLOCKWISE
MINER, TAX, PLUG, META > SW,CF,CC // SWIRLING WORD, CENTRIFUGAL, COUNTERCLOCKWISE
AXIOM, AXIS, COOK > SW,CP,CW // SWIRLING WORD, CENTRIPETAL, CLOCKWISE
WATCH, YETI, PILL > SW,CP,CC // SWIRLING WORD, CENTRIPETAL, COUNTERCLOCKWISE
MORE EXAMPLES OF FALSE TEST CASES (NOT SWIRLING WORDS):
EARTH, GROUP, OUTPUT, WORD, CONNECTION, ODD, MOM, DAD,
CHARACTER, EXAMPLE, QUESTION, NEWSLETTER, OTHER
Regeln:
- Die Verbindung zwischen den ersten beiden Zeichen sein muss , bis (wie in der Grafik), die alle die noch Verbindung sein muss , nach unten , alle ungeraden Verbindungen sein muss , bis .
- Sie können Groß- / Kleinschreibung ignorieren oder alle in Groß- oder Kleinschreibung umwandeln.
- Die eingegebenen Wörter sind nur Buchstaben im alphabetischen Bereich von AZ, keine Leerzeichen, keine Interpunktion usw.
- Wenn ein Wort doppelte Zeichen wie "GROOVE" enthält, müssen Sie die doppelten Zeichen zu einem Zeichen zusammenfassen: "GROOVE"> "GROVE".
- Die Eingabewörter enthalten mindestens 3 verschiedene Zeichen. Wörter wie "MOM", "DAD", "LOL" sind keine gültigen Wörter.
- Es ist möglich, mehrere Male in demselben Zeichen wie "IRIS" zu spielen.
- Kürzester Code gewinnt.
Schritt 2:
Um mehr Ansehen zu erlangen, suchen Sie nach den längsten wirbelnden Wörtern und ihren Merkmalen, die Sie im englischen Wörterbuch nach den oben genannten Regeln finden können. Sie können zum Beispiel die vollständige Liste der englischen Wörter hier als Referenz nehmen .
Viel Spaß beim Codieren!
Antworten:
MATL ,
333130 BytesDie Eingabe erfolgt in Großbuchstaben (oder in Kleinbuchstaben, jedoch nicht gemischt).
Ausgabe ist:
1
/-1
gibt Zentrifugal / Zentripetal an.1
/ "-1" zeigt im / gegen den Uhrzeigersinn an.Probieren Sie es online! Oder überprüfen Sie alle Testfälle (Code geändert, um alle Eingaben zu übernehmen und die beiden Ausgabenummern in derselben Zeile zu erzeugen).
Erläuterung
Nehmen wir
'OPERAA'
als Beispiel die Eingabe .Der erste Teil des Codes entfernt Doppelbuchstaben:
Wir prüfen nun, ob die Abstände zwischen den Buchstaben nicht abnehmen (notwendige Bedingung für das Wirbeln des Wortes):
Wir prüfen dann, ob die Buchstaben hin und her gehen (dies ist die andere Bedingung für das wirbelnde Wort):
Zuletzt prüfen wir, ob die beiden Bedingungen erfüllt sind und erzeugen in diesem Fall die Ausgabe:
quelle
Mathematica,
117111 BytesVielen Dank an JHM für das Speichern von 6 Bytes und die Berücksichtigung der Groß- und Kleinschreibung beim Booten!
Unbenannte Funktion, die eine Zeichenfolge verwendet und eine verschachtelte Liste von Booleschen Werten im Formular zurückgibt
{{B1,B2},B3,B4}
. B4 zeichnet auf, ob das Wort wirbelt (und wenn nicht, ist der Rest der Ausgabe Müll). Wenn das Wort wirbelt, zeichnet B1 auf, ob das Wort zentrifugal ist, B2 zeichnet auf, ob das Wort zentripetal ist, und B3 zeichnet auf, ob das Wort im Uhrzeigersinn (True) oder gegen den Uhrzeigersinn (False) ist.Hier ist eine längere Version , dass Post-Prozesse (erste Zeile) die obige Funktion ( im Abstand über die zweiten bis fünften Linien) , um es den OP identisch zu machen:
NO
wenn das Wort nicht ist , wirbelt, und die geeignete Wahl von{SW,CF,CW}
,{SW,CF,CC}
,{SW,CP,CW}
oder{SW,CP,CC}
wenn das Wort wirbelt:Die Erklärung ist die gleiche wie in Martin Enders CJam-Antwort, mit einer zusätzlichen Anmerkung: Die Liste der aufeinanderfolgenden Unterschiede muss sich im Vorzeichen abwechseln, damit das Wort wirbelt. Dies kann festgestellt werden, indem sichergestellt wird, dass alle Produkte von Paaren aufeinanderfolgender Unterschiede negativ sind (das ist was
Max[Most[d]Rest@d]<0
tut).Wenn Sie die Funktion für alle mehr als 40.000 Wörter von Mathematica ausführen
WordList[]
, finden Sie die folgenden 8-Buchstaben-Wirbelwörter, die die längsten ihrer jeweiligen Wirbeltypen sind:(Brownie deutet darauf hin,
positive
dass es keine Doppelbuchstaben und weniger wiederholte Buchstaben alsstowaway
.)Aber der absolute Champion ist das 9-Buchstaben-Gegenuhrzeigersinn wirbelnde zentripetale Wort
vassalage
!quelle
LetterNumber
anstelle von verwenden,ToCharacterCode
und weitere 3 Bytes, indem SieMost[d]
anstelle von verwendenDrop[d,-1]
.Scala, 110 Bytes
Gibt ein Tupel
(a,b)
mit zurücka == 1
wenn s zentripetal ista == 0
wenn s zentrifugal ista == -1
wenn s nicht wirbeltund
b == true
wenn s im uhrzeigersinn istb == false
wenn s gegen den Uhrzeigersinn istErläuterung:
quelle
Gelee , 30 Bytes
TryItOnline
Oder sehen Sie sich die Testfälle an (mit einer kleinen Änderung, da die allerletzte
Ñ
auf den neuen Hauptlink verweist).(Mein Mangel an Verkettungsfähigkeiten kostet hier wahrscheinlich ein paar Bytes.)
Alle oberen oder alle unteren.
Gibt eine Merkerliste [D, F, S] zurück:
S: Schleudern = 1 / Nichtschleudern = 0
F: Schleudern = 1 (kreisförmig = 0) zentripetal = -1
D: im Uhrzeigersinn = 1 / gegen den Uhrzeigersinn = -1
- wenn S = 0 Die anderen Flags werden weiterhin ausgewertet, obwohl sie keine nützlichen Informationen enthalten.
Wie?
quelle
0
so ist, dass dies auch für diese weiterhin funktioniert!circular(0)
Ihre innere Erklärung, vielleicht ist es Zeit, sie auch zu entfernen.min([])=0
jelly.tryitonline.net/#code=W13huYI&input= - Beachten Sie, dass seit dem Kreis Worte sind jetzt nie Erwarteter Input, es ist kein Problem, für sie zu sorgen.min([])==0
, aber ich dachte, das ist immer noch golffähig.CJam , 39 Bytes
Probieren Sie es online!
Die Eingabe kann in Groß- oder Kleinbuchstaben erfolgen, jedoch nicht gemischt.
Das Programm weist versehentlich auf Wörter hin, die nicht unbedingt zentrifugal oder zentripetal sind, aber ansonsten die Anforderungen der Spiralität erfüllen. Diese werden in der folgenden Tabelle als "Rundschreiben" bezeichnet.
Verwenden Sie diese Tabelle, um die Ausgabe zu interpretieren:
Erläuterung:
Das Programm wertet tatsächlich aus, ob die Folge von Unterschieden ungleich Null zwischen Zeichen positiv oder negativ beginnt, ob sie im Vorzeichen wechselt, ob die Beträge anfangen zuzunehmen oder abzunehmen, und ob dies weiterhin der Fall ist. Wenn sich die Werte nicht erhöhen oder verringern, bricht das Programm ab, indem ein leeres Array bearbeitet wird. Die wichtigsten Schritte sind nachstehend aufgeführt (dieser Code zeigt auch den Fortschritt des Stapels an):
quelle
PHP, 322 Bytes
für eine schönere Ausgabe
echo["n","+P","-P","+F","-F"][$s];
Erweiterte Version
Aufgabe 2 zweiter Wert ohne kurze Doppelregel
Visualisiere ein Wort
Im Snippet ist das Ergebnis der SVG, die ich erstellt habe
quelle
'.(.8*$radius).'
statt'.($radius).'
und wenn Sie($radius).' 0 0 0
mit($radius).' 0 0 '.(($w[$i-1]<$w[$i]?1:0)^(($i-1)%2)).'
dem Programm ersetzen hat keine feste RichtungHaskell, 148 Bytes
Probieren Sie es auf Ideone.
Die Eingabe muss entweder in Klein- oder in Großbuchstaben erfolgen.
Die Ausgabe ist eine Liste von fünf booleans:
[SW?, CF?, CP?, CW?, CC?]
.f "positive" -> [True,True,False,False,True]
Dies stellte sich als länger als erwartet heraus, insbesondere das Ausblenden von wiederholten Zeichen dauert ungefähr 40 Bytes.
Anfangs habe ich im Vergleich nur die ersten beiden Zeichen zu erhalten
CW
oderCC
vor , dass Testfälle wie zu bemerken ,bba
oderbbc
sind auch gültig und diesen Ansatz zu besiegen.quelle
Python, 152 Bytes:
Eine anonyme Lambda-Funktion. Anrufen als
print(<Function Name>('<String>'))
.Nimmt die Eingabe als Klein- oder Großbuchstaben, jedoch nicht als gemischte Groß- / Kleinschreibung.
Gibt ein Array mit nothing (
[]
) aus, wenn das Wort nicht swirly ist, oder ein Array im folgenden Format:True/False
fürCentrifugal/Centripetal
.True/False
fürClockwise/Counterclockwise
.Probieren Sie es online! (Ideone)
quelle