Jeder weiß, dass Katzen miauen, aber was viele nicht merken, ist, dass die Katzen miauen. Tatsächlich hängt die Länge des Vokals, den die Katze macht, von der Länge des Vokals ab, mit dem Sie ihn ansprechen.
Auf die gleiche Weise gehen Kühe moo, aber coooows gehen moooooooo
Herausforderung
Sie müssen ein Programm schreiben, das als Eingabe ein Wort für Katze und ein Wort für Kuh verwendet, die Anzahl der Hauptvokale bestimmen und gegebenenfalls eine der folgenden Zeichenfolgen drucken:
C[]ts go M[]w
C[]ws go M[]
Wobei []
für die Vokale nach folgenden Regeln steht:
- Die Anzahl der e und o in "Meow" muss mit der Anzahl der im Eingabewort gefundenen Vokale übereinstimmen.
- Die Anzahl der O's in "Moo" muss doppelt so groß sein wie die Anzahl der Vokale im Eingabewort.
Das Programm muss die eingegebenen Wörter cat
und erkennen cow
. Für die Eingabe kann jede am besten geeignete Groß- und Kleinschreibung verwendet werden, die Ausgabe muss jedoch genau wie oben angegeben großgeschrieben werden.
Meooeoew
eine gültige AusgabeCaaat
zum Beispiel für?Antworten:
Retina ,
5749444341 BytesSo nah ...:)Pyth ...Probieren Sie es online aus.
Erwartet, dass die Eingabe wie
Caaat
oder aktiviert wirdCoooow
.Erläuterung
Der reguläre Ausdruck stimmt mit der gesamten Eingabe überein und erfasst die Vokale in Gruppen
1
(wir benötigen keine Anker, da die Übereinstimmung nicht fehlschlagen kann und die gesamte Eingabe gierig übereinstimmt). Die Ersetzung schreibt diese Eingabe zurück und hängt sie ans go M
, gefolgt von den doppelten Vokalen. Für EingabenCaaat
und erhaltenCoooow
wir:Die Ausgabe für Kühe ist bereits korrekt. Wir müssen nur etwas gegen diese Katzen unternehmen.
Der
+
fordert Retina auf, diesen Schritt so oft wie möglich zu wiederholen. Der reguläre Ausdruck stimmt mit zweia
s im letzten Teil der Zeichenfolge überein (wir stellen dies mit dem$
Anker sicher , damit wir keine Dinge im Inneren ersetzenCaaats
). Dies wird im Wesentlichen alles danach passenM
, solange dieser Teil nocha
s hat. Die zweia
s werden entfernt und das gesamte Suffix, nachdem es eingewickelt wurdee...ow
:Schließlich gibt es zwei viele
w
s im Ergebnis, so dass wir diejenigen zu entfernen , die ein vorausgeheno
(um sicherzustellen , sind wir nicht das vermasselnw
inCoooows
):Und wir bleiben mit:
quelle
LabVIEW, 58 LabVIEW-Grundelemente
Saiten wie diese zu erstellen ist ein Schmerz ...
Die am weitesten links stehenden vis sind Pattern Matching, a + und o + suchen jeweils nach der verzögertesten Menge von as und os in einer Reihe.
Die Länge von denen nehmend, verursache ich 3 Reihen 1 mit Länge OS 1 mit Länge ES und eine mit 2mal Länge OS.
Dann werden alle Teile zusammengesetzt. Zuerst die ursprüngliche Eingabe, dann gehen M alle Arrays, die nicht verwendeten sind leer, so dass sie ignoriert werden, und schließlich aw, wenn die Eingabe Katzen waren. (Wenn wie gefunden, wird es nach dem Spiel sein, wenn nicht nach dem Spiel leer ist)
Für die lolz habe ich auch den Fuchs mit 6 verschiedenen Ausgängen implementiert ^^
quelle
Pyth,
504434Übernimmt Eingaben im Format
["caat", "coow"]
.Probieren Sie es online aus.
Erklärt:
Vielen Dank an Jakube für die erhebliche Verkürzung der Länge.
quelle
jk
mits
, entfernen Sie die zweitejk
(es gar nicht alles tun), und ersetzen"w\n"
mit\wb
.r.Q3
wie bei anderen Dingen. Sie könnten eine binary_map verwenden und 10 zusätzliche Zeichen speichern.Pj.bs[rN3"s go M"S*-lN2+Y\o\w)Q"eo
. Ich bin mir nicht sicher, ob Sie bereits Erfahrung mit Karten haben oder ob Sie Fragen haben, die ich Ihnen im Pyth-Chat erläutern kann .Perl,
66615554 Bytesbeinhaltet +1 für
-p
Eingang wird voraussichtlich entsprechen
/^C[ao]+[tw]$/
(keine Newline!)Verbrauch:
/bin/echo -n Caaat | perl -p 55.pl
Nervenzusammenbruch
Vorherige Version:
Kommentiert :
Beispiel:
Caaat
$&
alsa
und@l
als(a,a,a)
.$x
zu dreimala
durch 3 mal gefolgto
:aaaooo
.a
in$x
zue
:eeeooo
. Die Anzahl der Ersetzungen (entweder 0 oder positiv) dient als cat-Detektor: Satz$y
anw
falls ja.s go M
,eeeooo
undw
.$\
anstatts/$/
und ohne nachfolgende Zeilenumbrüche in der Eingabe.quelle
Python 2, 74 Bytes
Übernimmt die Eingabe
Caaat
oderCooow
quelle
CJam (
60 57 5553 Bytes)Online-Demo . Es wird angenommen, dass die Eingabe in Kleinbuchstaben erfolgt.
Für die gleiche Länge:
quelle
PowerShell,
135132 Byte(Zeilenumbrüche werden wie Semikolons gezählt, daher zur Verdeutlichung durch Zeilenumbrüche getrennt.)
Überraschend knifflige Herausforderung. Und ich bin mir ziemlich sicher, dass dies weiter golfen werden kann.
Übernimmt die Eingabezeichenfolgen als
$a
und$b
. Verkettet sie und wandelt sie in ein Zeichen-Array um, das dann durch eine Schleife geleitet wird%{}
. Jeder Buchstabe wird dann auf seine-eq
Aktualität überprüft'a'
und die zugehörige Zählervariable entsprechend inkrementiert. Wir subtrahieren dann4+$c
von$d
, um diescatcw
in der Eingabe zu berücksichtigen , und fahren mit der Formulierung der Ausgabesätze fort, wobei wir die Ausgabe der Vokale mit den entsprechenden Zählern modifizieren. (In PowerShell'e'*3
würde'eee'
zum Beispiel ergeben.)quelle
Fast ähnlich der Antwort von @ omulusnr, aber dies erzeugt die korrekte Ausgabe und auch die Eingabe ist unabhängig von Groß- und Kleinschreibung.
PHP, 172
quelle
$p=$argv[1];preg_match("/c([ao]+)/i",$p,$e);$l=strlen($e[1]);$s=$k=strcmp($e[0][1],'o')?'eo':'oo';$r='str_repeat';echo $p,' go M',$r($s[0],$l),$r($s[1],$l),$k?'w':'';
ein bisschen kürzer auf 166 BytesSwift 2, 3̶8̶1̶ 333 Bytes
Ungolfed:
Nimmt Katze oder Kuh Großbuchstaben. Sie können es hier ausprobieren:
http://swiftlang.ng.bluemix.net/#/repl/3f79a5335cb745bf0ba7698804ae5da166dcee6663f1de4b045e3b8fa7e48415
quelle
MATLAB:
190152118 BytesUngolfed:
Tests:
PS: Danke an @Kenney für den netten Vorschlag (siehe Kommentare)!
quelle
disp( (b>0)*[...] + (c>0)*[...] )
hier arbeiten?PHP, 138 Bytes
lesbar:
versucht kürzer, aber nicht in PHP arbeiten:
=)
quelle
OKTAVE,
126, 108Erste Version mit Variablen und Erklärung, 126:
Erklärung: L weiß, welches Tier welchen Buchstaben enthält. S weiß, was sie wiederholen. Wir kennen das Ende. Sie müssen "Automatic Broadcasting" aktiviert haben, damit dies funktioniert, aber es sollte standardmäßig in allen von mir verwendeten Oktaven sein. Natürlich gibt es kürzere Wege mit zum Beispiel dem Befehl regexprep (reguläre Ausdrücke mit Ersetzung), aber es gab bereits mehrere solcher Ansätze in den Antworten, so dass dies langweilig wäre.
Bearbeiten: Überspringen von Variablen, die nur einmal vorkommen, Verwenden von Octave-On-the-Fly-Indizierung (weiß nicht, wie es für real heißt) und Hinzufügen von "i", Eingabezeichenfolgenvariable:
quelle
JavaScript (ES2015),
7877Versuchen Sie es hier: https://jsbin.com/guqaxejiha/1/edit?js,console
quelle
Lua,
12190 Bytes121 Bytes
90 Bytes
Nimmt Eingaben wie "Caats" oder "Coooows" unter Berücksichtigung der Groß- und Kleinschreibung auf. Da es keine Anforderungen für ungültige Eingaben gibt, kann die Ausgabe für beispielsweise "Füchse" oder "Ochsen" seltsam sein. : P
Ungolfed
Update auf 90 Bytes: Ersetzte if-Kontrollstruktur durch logische Operatoren, optimierte String-Verkettung durch Anhängen weiterer Daten in der Deklaration von
i
. Klammer auf entfernti:find("w")
. Interessanterweise hat das Speichern"o"
in einer Variablen bei der Verwendung einige Bytes gespartrep
, wäre jedoch mit"w"
oder kontraproduktiv"e"
. Je mehr du weisst.quelle
Lua:
1159289 Bytesnimmt
C[]t
oderC[]w
als Eingabe; [] = a's oder o's. Ein Low-Case-Eingang wird in das Ergebnis übersetzt.lange Version:
Beispielausgaben:
Bearbeiten: geändert
if
then
else
inand
or
. ALLE Leerzeichen, die keine Zeichenfolgen sind, wurden entfernt.Sie können es auch hier ausprobieren: Führen Sie Lua Online aus, aber ich konnte nicht herausfinden, wie das Terminal verwendet wird, und habe es in eine Funktion eingefügt.
Bearbeiten: Die Verwendung von "o" wurde geändert und von () entfernt
:find
. Kredit geht an CYV für diese Optimierungen zu finden. "S" hinzugefügt und geändertl=#i-3
zul=#i-2
Bei Eingabe mit "s" nur 88 Byte:
quelle
cat
undcow
. Bei der Eingabe kann eine Groß- oder Kleinschreibung verwendet werden, und cat oder Cat sollte gültig sein.Dart ,
114 112 110 104 102100 BytesProbieren Sie es online!
quelle
PHP,
170164161157 BytesNimmt jede Großschreibung.
CaAaT
,coOOOw
Was auch immer.v2: brauche nicht wirklich [wt] $. auch char ct korrigiert
v3: char ct war alles falsch, kondensiert ein und $ e Zuordnung $
v4: save 3 Bytes auf $ af - a> $
v5: save 4 Bytes von onelining es (nicht dargestellt)
quelle
$argv[0]."s go "
. Versuchen Sie diespreg_match("/(?i)c([ao]+)/",$x=$argv[1],$e);$a=$e[1][0]=="a"?"ew":"o";echo$x."s go M".str_repeat($a[0],$n=strlen($e[1])).str_repeat("o",$n).$a[1]."\n";
(korrekte Ausgabe und 151 Bytes).