Dies ist eine ziemlich einfache Herausforderung.
Herausforderung
Die Eingabe enthält eine Zeichenfolge (nicht null
oder leer) mit einer maximalen Länge von 100. Geben Sie die Anzahl der Vokale in jedem Wort der Zeichenfolge aus, die durch Leerzeichen getrennt sind.
Regeln
- Die Zeichenfolge darf nicht länger als 100 Zeichen sein.
- Die Zeichenfolge wird nur Alphabete enthalten
A-Z
,a-z
und kann auch Leerzeichen enthalten. - Die Eingabe muss über die
stdin
Befehlszeilenargumente oder erfolgen. - Die Ausgabe muss im erfolgen
stdout
. - Sie können ein vollständiges Programm oder eine Funktion schreiben, die Eingaben von dem Programm entgegennimmt
stdin
und das Ergebnis ausgibt. - Die Vokale, die Ihr Programm / Ihre Funktion zählen muss, sind
aeiou
undAEIOU
.
Testfälle
This is the first test case --> 1 1 1 1 1 2
one plus two equals three --> 2 1 1 3 2
aeiou AEIOU --> 5 5
psst --> 0
the quick brown fox jumped over the lazy dog --> 1 2 1 1 2 2 1 1 1
Wertung
Dies ist Code-Golf , also gewinnt die kürzeste Einreichung (in Bytes).
stdin
mitstdout
. Ich möchte keine Eingaben über die Funktionsargumente erhalten. Befehlszeilenargumente scheinen in Ordnung zu sein. Ich habe es in den Beitrag aufgenommen.The name "vowel" is often used for the symbols that represent vowel sounds in a language's writing system, particularly if the language uses an alphabet. In writing systems based on the Latin alphabet, the letters A, E, I, O, U, and sometimes Y are all used to represent vowels. However, not all of these letters represent vowels in all languages.
Was meinst DU mit Vokalen?Antworten:
Pyth, 17 Bytes
Einfache Lösung. Probieren Sie es online aus: Vorführ- oder Testgeschirr
Erläuterung:
quelle
C
113 108 10396 BytesDanke @ andrea-biondo für eine besonders schöne 5-Byte-Speicherung.
Das fühlt sich immer noch etwas aufgebläht an, so dass ich es hoffentlich später noch ein paar Bytes runterholen kann.
Der interessante Teil ist vielleicht das
wird sein,
1
wennc
ein (Groß- oder Kleinschreibung) ASCII-Vokal ist, und0
für andere Zeichena-zA-Z
. Die subexpressionc-65&31
abbildet'a'
und'A'
zu0
,'b'
und'B'
zu2
usw. Wenn wir hinzufügen ,33
die Vokale zu den Zahlen entsprechen33, 37, 41, 47, 53
jeweils alle sind (bequem) prime. In unserem Sortiment teilen sich nur solche Zahlen124701951 = 33*37*41*47*53
, dh nur für Vokale wird der Rest von124701951%(...)
Null.BEARBEITEN: Auf diese Weise kann man den Ausdruck
!(n%((c-65&31)+s))
wo(n,s) = (124701951, 33)
als Bestimmung betrachten, ob das Zeichenc
ein Vokal ist. In den Kommentaren @ andrea-biondo darauf hingewiesen, dass das Paar(n,s) = (2016,28)
auch in diesem Ausdruck verwendet werden kann, um die Vokalität zu bestimmen. Ich lasse die aktuelle Erklärung in Bezug auf die obigen Primzahlen, aber der Grund, warum diese kürzere Paarung funktioniert, ist wieder, dass im Bereich von 28 bis 53 die einzigen Zahlen mit Primfaktoren, die vollständig in der Primfaktorsammlung von 2016 enthalten sind, 28, 32 sind. 36, 42, 48, die genau den Vokalen entsprechen.EDIT2: Weitere 5 Bytes, die seitdem gespeichert wurden,
(c-65&31)+28
können auf gekürzt werdenc%32+27
.EDIT3: In eine do-while-Schleife konvertiert, um sie endlich unter 100 Bytes zu bringen.
Testfälle:
quelle
a;
outside verwendenmain
. Auf diese Weise reduzieren Sie einige Bytes , da Sie nicht brauchen , um declarea
inmain(...)
und auch, müssen nicht initialisiert werdena
aus der Schleife.a
wird bei jeder Schleife neu initialisiert, sodass Sie es nicht einmal auf Null initialisieren können, indem Sie global deklarieren. Ich habe einen kleinen Bruteforcer geschrieben, um das kleinste(n, s)
Paar zu finden, dasn%((c-65&31)+s)
für Vokale null und für Konsonanten ungleich null ist (az, AZ). Ich fand(2016, 28)
und es scheint gut zu funktionieren:!(2016%((c-65&31)+28))
ist 5 Zeichen kürzer. Wie auch immer, sehr schöne Lösung :)CJam,
2119 BytesWie es funktioniert :
Probieren Sie es hier online aus
quelle
R,
4443 BytesUngolfed + Erklärung:
quelle
Perl,
35343130
Zeichen+1
für-n
.Wie viel Perl-Code funktioniert dies von rechts nach links.
split
teilt die eingegebene Zeile auf Leerzeichen.map
Führt den Code zwischen{}
jedem Wort aus, das geteilt wurde.lc
macht das Wort klein.=~y/aeiou//
wird uns die Anzahl der Vokale geben..$"
wird ein Leerzeichen an das Wort anhängen.say
dann druckt alle Wörter!Laufen mit:
quelle
Python 3, 65 Bytes
Sehr einfach, ziemlich lesbar.
w
steht für Wort,c
steht für Charakter.quelle
Perl: 30 Zeichen
(Art erzwingt die Regeln: Die Zahlen in der Ausgabe werden mit so vielen Leerzeichen getrennt, wie die Eingabewörter waren.)
Probelauf:
Perl: 27 Zeichen
(Nur um zu zeigen, wie kurz es wäre, wenn ich den
y///
Rückgabewert von chilemagic nicht vergessen würde . Nochmals. Jetzt stimme der Antwort von chilemagic zu , die mich any///
den Rückgabewert von chilemagic erinnert . Nochmals.)quelle
s!\w+!lc($&)=~y/aeiou//!ge
bringt es auf27
Bytes (26 Zeichen +1 für das-p
.y///
. :(Ruby, 38 Bytes
Verwendung:
quelle
JavaScript ( ES6 ), 68
I / O über Popup. Führen Sie das Snippet zum Testen in Firefox aus.
quelle
Rebol - 70
quelle
PowerShell, 35 Byte
Irgendwie langweilig, aber tatsächlich einmal im Wettbewerb? (PowerShell unterscheidet standardmäßig zwischen Groß- und Kleinschreibung.)
quelle
echo <word> | code
, wobei <word> Ihr Wort oder Ausdruck istBash - 85
Erläuterung
read l
Liest eine Zeile von der Eingabefor w in l
Teilt die Zeile mit dem Leerzeichen-Trennzeichen in Wörterx=${w//[^aouieAOUIE]/}
löscht alle außer Vokalen aus dem Wort${#x}
ist die Länge der resultierenden Zeichenfolge === Anzahl der Vokalequelle
while
..do
..done
wäre kürzer. Auch nicht die letzte/
in der Mustersubstitution benötigt . Und ein einzelnes buchstäbliches Leerzeichen ist kürzer als angegeben.read l;for w in $l;do x=${w//[^aouieAOUIE]};echo -n ${#x}\ ;done;echo
Julia,
76726965 BytesUngolfed + Erklärung:
Dazu gehört ein einzelnes Leerzeichen, von dem mir gesagt wird, dass es legitim ist.
quelle
Mathematica, 95 Bytes
Ich werde keine Wettbewerbe gewinnen, aber ...
quelle
InputString
, ob es in der Webschnittstelle existiert, es ist ein Dialogfeld in Mathematica.)InputString
die nächste Eingabezeile.Golflua, 55 Bytes
Grundmusterabgleich von Vokalen nach erzwungener Kleinschreibung. Ein (ungolfed) Lua-Äquivalent wäre
quelle
gsub('[aeiouAEIOU]','')
und zu überspringenlower()
.R 139 Bytes
Stdout () lesen / schreiben ist schrecklich
quelle
cat()
anstatt verwendenwrite(..., stdout())
.Python 3, 72 Bytes
Inspiriert von der Antwort von @randomra . Die
Länge istetwas länger, es wird jedoch Regex anstelle des Listenverständnisses verwendet. Es ist auch weniger lesbar.quelle
import re;print(*map(len,re.sub("[^aeiou ]","",input()).split()))
. (Verwenden Sie Newline statt,;
wenn Sie möchten.)2
ist das Flag , bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird) und durch geteilt werden," "
damit Zeug mit einer Länge von 0PHP - 94
Ungolfed-Version
quelle
Objective-C, 223 Bytes
Nicht die kompakteste Sprache, aber es funktioniert.
Unkomprimierte Version:
quelle
Matlab, 73 Bytes
Ihre Herausforderung ist nicht sehr klar (aber es ist interessant). Ich gehe davon aus
a
,e
,i
,o
,u
.Code:
quelle
rs , 50 bytes
Das zählt nicht ganz; rs wurde ungefähr 2 Wochen nach der Veröffentlichung hochgeladen. Offensichtlich würde dies jedoch sowieso nichts gewinnen, so ist es immer noch cool.
Live-Demo.
Die Implementierung ist ziemlich einfach:
quelle
Perl,
6045Danke an kirbyfan64sos für das Speichern von 15 Bytes - das hat wirklich geholfen!
Beachten Sie, dass am Ende der Ausgabe ein zusätzliches Leerzeichen steht.
quelle
split
von entfernen, indem Sie das Hinzufügen festlegen$/=" ";
, und Sie können das Schleifenpräfix von kurzschließenwhile(<>)
. Mit diesen beiden Änderungen wird der Code$/=" ";while(<>){$n=()=/[aeiou]/gi;print"$n "}
und spart 14 Bytes!Haskell,
76-68BytesEinfache Implementierung, nicht sicher, ob es hier etwas zum Golfen gibt.
quelle
KDB (Q), 30 Bytes
Erläuterung
Prüfung
quelle
Smalltalk - 66
72Dies ist in Smalltalk / X; die namen für stdin und stdout können in squeak / pharo unterschiedlich sein.
In Smalltalk / X (und vielen anderen Dialekten) verstehen Symbole #value :.
Wenn als eine Funktion codiert, die den String als Argument "s" erhält:
Natürlich würde man in echtem Code eine Dienstprogrammfunktion "f" verwenden, die einen Vektor der Zählungen zurückgibt, und diese ausgeben. Das Ausgabeformat entspricht dann jedoch nicht genau den Anforderungen:
quelle
Python 2, 76 Bytes
Ich habe dies gemacht, bevor ich eine andere Lösung sah, und dann überprüft, ob zwei P3-Lösungen kürzer sind :( Verdammte P2-Einschränkungen.
quelle
PowerShell, 65 Byte
Testen Sie nach dem Speichern unter das folgende Muster
vowels.ps1
Auf diese Weise handelt es sich um ein tatsächliches Skript und nicht nur um ein Code-Snippet, wodurch die folgenden Bedingungen erfüllt werden:
Msgstr "Die Eingabe muss über die Standard - oder Befehlszeilenargumente erfolgen."
quelle
Gelee , 7 Bytes
Probieren Sie es online!
Gefunden mit Hilfe von Mr. Xcoder im Chat
Erläuterung
Wenn die Ausgabe muss Raum getrennt sein, hängt dann
K
an das Endequelle
SAS, 72
Das restriktive E / A-Format für dieses tut diesem wirklich weh, da es hier für 25 der Bytes verantwortlich ist.
quelle
C # 186
quelle
AEIOU
.