Herausforderung
Bestimmen Sie anhand eines einzelnen Wortes als Eingabe, ob das Wort gerade oder ungerade ist.
Gerade und ungerade Wörter
Nimm die allgemeinen Regeln an:
odd + odd = even
even + odd = odd
odd + even = odd
even + even = even
Im Alphabet sind die ungeraden Buchstaben:
aeiou
Und die geraden Buchstaben sind:
bcdfghjklmnpqrstvwxyz
Gleiches gilt für Großbuchstaben ( AEIOU
ungerade und BCDFGHJKLMNPQRSTVWXYZ
gerade).
Dann 'addieren' Sie jeden Buchstaben des Wortes. Zum Beispiel ist das Wort cats
äquivalent zu:
even + odd + even + even
Welches vereinfacht zu:
odd + even
Was weiter vereinfacht:
odd
Das Wort cats
ist also seltsam.
Beispiele
Input: trees
Output: even
Input: brush
Output: odd
Input: CAts
Output: odd
Input: Savoie
Output: even
Input: rhythm
Output: even
Regeln
Alle Eingaben sind ein einzelnes Wort, das nur alphabetische Zeichen enthält.
Wenn das Wort ungerade ist, geben Sie einen Wahrheitswert aus. Wenn das Wort gerade ist, geben Sie einen falschen Wert aus.
Gewinnen
Der kürzeste Code in Bytes gewinnt.
code-golf
string
decision-problem
Beta-Zerfall
quelle
quelle
Antworten:
05AB1E , 6 Bytes
Erläuterung
Probieren Sie es online!
quelle
EXCEL, 79 Bytes:
Eingabe:
Diese Funktion kann an einer beliebigen Stelle platziert werden, AUSSER A1. Geben
Sie Ihr Wort in A1 ein.
Ausgabe: 0 wenn gerade, 1 wenn ungerade.
quelle
JavaScript (ES6),
34413332 ByteDank Arnauld 1 Byte gespart:
1
0
Bisherige Lösungen:
33 Bytes dank Arnauld:
1
0
Ein anderer Weg ohne bitweise Operatoren:
41 Bytes:
1
0
null
42 zurückzugebende Bytes
0
anstelle vonnull
:34 Bytes, Brüche bei Wörtern ohne ungerade Buchstaben:
2 Bytes gespart dank Shaun H.
quelle
f=
wird nicht benötigt und der Aufruf von exec für das reguläre Objekt ist kürzer.s=>/[aeiou]/ig.exec(s).length%2
exec
mit derg
Flagge.s=>s.split(/[aeiou]/i).length&1^1
?s=>~s.split(/[aeiou]/i).length&1
ist eigentlich ein Byte kürzer.Brain-Flak
206196192178 + 3 = 181 BytesProbieren Sie es online!
Dies erfordert, dass das
-c
Flag im ASCII-Modus ausgeführt wird und der Länge des Programms 3 zusätzliche Bytes hinzugefügt werden.Ungolfed
Erläuterung
Speichern Sie zuerst die Stapelhöhe für zukünftige Zwecke
Dann, während der Stapel nicht leer ist (setzt voraus, dass keines der Zeichen Null ist)
Subtrahiere siebenundneunzig (und speichere drei für spätere Optimierungen)
Wenn es nicht Null ist (dh nicht a)
Subtrahiere 4 (und speichere 4 für spätere Optimierungen)
Wenn es nicht Null ist (dh nicht e)
Subtrahiere 4 (und speichere 4 für spätere Optimierungen)
Wenn es nicht Null ist (dh nicht i)
Subtrahiere 6 (und speichere 6 für spätere Optimierungen)
Wenn es nicht Null ist (dh nicht o)
Subtrahiere 6 (speichere 6, da das Programm eine spätere erwartet)
Wenn es nicht Null ist (dh nicht u)
Verschieben Sie den Rest auf den anderen Stapel und setzen Sie eine Null auf den aktiven Stapel, um alle ifs zu umgehen
Sobald alle Wenns entkommen sind, entfernen Sie die Null und die Sechs
Nachdem alle Zeichen verarbeitet wurden, subtrahieren Sie die Höhe des Offsets von der ursprünglich gespeicherten Höhe.
Mod um zwei
quelle
-c
nur +1 Byte da immer Perl Antwort auch nur 1 Byte / Flag hinzufügt.perl -pe'code'
liegt daran, dass nur ein Byte länger ist alsperl -e'code'
.C, 42 Bytes
Dies funktioniert mit GCC 4.x auf einer x86-64-CPU. Die Ergebnisse können je nach Einrichtung variieren.
Testen Sie es auf repl.it .
Auf Kosten von 5 weiteren Bytes kann undefiniertes Verhalten vermieden werden, sodass der Code funktionieren sollte, solange int s mindestens 32 Bit breit sind.
Wie es funktioniert
Modulo 32 , die Zeichencodes aller ungeraden Buchstaben sind 1 , 5 , 9 , 15 und 21 . 2130466 ist die 32-Bit-Ganzzahl, die an diesen Stellen gesetzte und an allen anderen Stellen nicht gesetzte Bits hat.
Wenn f für eine Zeichenfolge aufgerufen wird, wird zuerst überprüft, ob das erste Zeichen der Zeichenfolge ein Nullbyte (Zeichenfolgenabschlusszeichen) ist. Wenn dies der Fall ist,
*s
ergibt sich 0 und f gibt 0 zurück . Ansonsten*s
ergibt sich der Zeichencode eines Buchstabens und das richtige Argument des logischen AND (&&
) wird ausgeführt.Für
>>
generiert GCC eine Schichtanweisung. Auf einer x86-64-CPU ignoriert der entsprechende Befehl für eine 32-Bit-Ganzzahl alle bis auf die unteren 5 Bits des rechten Arguments, wodurch das Reduzieren von*s
Modulo 32 vermieden wird . Die Rechtsverschiebung und das folgende bitweise UND mit 1 extrahieren das Bit von 2130466 , das dem Buchstaben entspricht. Dies ist genau dann 1, wenn der Buchstabe ungerade ist.Anschließend inkrementieren wir den Zeiger s (wobei der erste Buchstabe effektiv verworfen wird), rufen f rekursiv für die enthauptete Zeichenfolge auf und nehmen das bitweise XOR des Ergebnisses von oben und das Ergebnis des rekursiven Aufrufs.
quelle
sed
44(42 + 1 für -n) 43-1 danke an Neil
Drucke
o
für ungerade und nichts für geradequelle
s/[aeiou][^aeiou]*[aeiou]//gi
könnte dir ein byte sparen, wenn ich richtig gezählt habe.Python, 41 Bytes
quelle
Python, 42 Bytes
Hier gibt es nicht viel zu erklären. Eine unbenannte Funktion, die 0 oder 1 zurückgibt.
quelle
Brain-Flak ,
524, 446, 422 BytesProbieren Sie es online!
Ungolfed, besser lesbare Version:
quelle
Jelly ,
13 1211 Bytes-1 Byte dank @Luis Mendo (
Ḃ
zum Ersetzen verwenden%2
)-1 Byte dank @Dennis (String-Komprimierung verwenden)
Alle Testfälle sind bei TryItOnline
Wie?
Nicht konkurrierend, 5 Bytes (da ich gerade die Funktion hinzugefügt habe
Øc
)Testfälle auch bei TryItOnline
Wie oben,
Øc
liefert jedoch die Vokale des lateinischen Alphabets.'AEIOUaeiou'
quelle
%2
durchḂ
“¡ẎṢɱ»
.“”«»‘’
(es gibt auch⁾
Zeichenketten mit zwei Zeichen , die jedoch in komprimierten Zeichenketten verwendet werden).Haskell,
3837 BytesDanke an Angs für ein Byte!
quelle
odd
stattdessen verwendeneven
. Spart ein Byte!Python 3, 53 Bytes
Dies kann wahrscheinlich weiter golfen werden:
quelle
in
und'aeiou'
undfor
, und verwenden Sie diese Optionsum
, um 8 Byte zu speichern:lambda n:sum(x in'aeiou'for x in n.lower())&1
(Wie Sie jedoch aus DJMcMayhems Beitrag ersehen können, ist die Verwendung aller zehn Vokale ebenfalls kürzer.)sum()
Kommando vor diesem Golf, also habe ich wieder etwas gelernt! Einen schönen Tag noch :)Java, 73
Ich habe ein paar andere Java-Antworten gesehen, die ich sonst nicht geteilt hätte. Danke an Phaeze für das Speichern eines Bytes.
quelle
%2>0
C 52 Bytes
das Wesentliche und das Ergebnis:
quelle
h(o){return~-o?1^h(1+strpbrk(o,"aeiouAEIOU")):1;}
Spart 3 Bytes.Pyth, 14 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Ruby, 30 Bytes
quelle
Vim,
32, 31, 29 TastenanschlägeDa der V-Interpreter abwärtskompatibel ist, können Sie ihn online ausprobieren! genau hier.
EinDrei Bytes gespart dank m-chrzan!quelle
s/.../gi
anstelle von tuns/\c.../g
?'<C-r>"'
->@"
.@"
15 Minuten herausgefunden. Der beste vim Tipp, den ich habe, ist zu verwenden:help foo
und/
die Dokumentation: P.:h foo
ist es kürzer. : PJava 7, 88
Ungolfed:
quelle
Dummkopf , 14 Bytes (nicht konkurrierend)
Ich dachte, dies wäre eine lustige und einfache Herausforderung für eine neue Sprache.
Erläuterung
a
- Schieben Sie ein neues Array in die Matrixr[aeiou]}
- Zählen Sie die Vorkommen aller Werte, die mit dem regulären Ausdruck "[aeiou]" im ersten Array übereinstimmen (da das erste Array die Eingabe enthält), ignorieren Sie die Groß- und Kleinschreibung und verschieben Sie diesen Wert an das Ende des letzten Arrays.e
- Wenn die letzte Zahl im letzten Array gerade ist (die wir auf die Anzahl der Vorkommen festgelegt haben), führen Sie die nächsten Operationen bis zu einer schließenden Klammer ("}") aus.t
- Beenden Sie die Ausführung, löschen Sie die Matrix und setzen Sie den ersten Wert auf false}
- Ende dese
CodeblocksT
- Beenden Sie die Ausführung, löschen Sie die Matrix und setzen Sie den ersten Wert auf trueProbieren Sie es online!
Verwenden Sie das Eingabefeld, um das Wort einzugeben.
Ich werde bald Dokumentation hinzufügen ...
quelle
PowerShell v2 +,
45 bis42 ByteNimmt Eingaben entgegen
$args[0]
, sendet sie durch-replace
, um alle Nicht-Vokal-Zeichen zu entfernen, nimmt das Ergebnis auf.length
und%2
prüft, ob es ungerade / gerade ist.Beispiele
quelle
J, 20 Bytes
Unkomplizierter Ansatz
Erläuterung
quelle
Japt, 7 Bytes
Online testen! Ausgänge 1 für ungerade, 0 für gerade.
Wie es funktioniert
quelle
Oktave, 34 Bytes
Dies ist 6 Byte kürzer als der traditionelle Ansatz
ismember
,@(s)mod(sum(ismember(s,'aeiouAEIOU')),2)
und zwei Bytes kürzer als der regex Ansatz:@(s)mod(nnz(regexpi(s,'[aeiou]')),2)
.Teste es hier .
quelle
PHP, 41 Bytes
Dies gibt -1 für wahr und 0 für falsch aus.
quelle
Mathematica, 44 Bytes
Gibt True für eine ungerade Zeichenfolge und False für eine gerade Zeichenfolge.
quelle
q, 29 Bytes
quelle
C #
64625650 BytesWir benutzen bereits linq, also spart Contains 2 Bytes über IndexOfDurch die Verwendung der Methode Überladung von Count werden 6 Bytes eingespartEine anonyme Funktion, die eine Zeichenfolge verwendet und die ungeraden Buchstaben zählt, gibt true zurück, wenn eine ungerade Anzahl vorhanden ist, oder false, wenn dies nicht der Fall ist.
Diese neue Lösung teilt die Zeichenfolge in alle Zeichen des angegebenen Zeichen-Arrays auf. Die Mechanik dieser Umkehrung der Bedeutung des
%2
Ergebnisses; 0 ist jetzt ungerade und 1 gerade daher die1>
.Probieren Sie es hier online aus!
quelle
string.Split()
Zählen der Vokale erforderlich, und Sie benötigen kein LINQ.s=>1>s.Split("aeiouAEIOU".ToCharArray()).Length%2;
Netzhaut , 19 Bytes
Probieren Sie es online! (Die erste Zeile aktiviert eine durch Zeilenvorschub getrennte Testsuite.)
Die erste Zeile zählt die Vokale in der Eingabe. Die zweite Zeile prüft, ob das Ergebnis ungerade ist.
quelle
MATL ,
8, 7 BytesProbieren Sie es online!
Erläuterung:
quelle
Pyke, 10 Bytes
Probieren Sie es hier aus!
quelle