Im Englischen gibt es den lustigen und einfachen Unterschied zwischen an
und a
: Sie verwenden, an
wenn Sie einem Wort vorangehen, das mit einem Vokalton a
beginnt , und wenn das Wort mit einem Konsonantenton beginnt.
Der Einfachheit halber wird bei dieser Herausforderung an
ein Wort vorangestellt, das mit einem Vokal ( aeiou
) beginnt , und a
ein Wort, das mit einem Konsonanten beginnt.
Eingang
Eine Zeichenfolge, die nur druckbare ASCII-Zeichen enthält und [?]
an Stellen angezeigt wird, an denen Sie an
oder einfügen müssen a
. [?]
wird immer vor einem Wort stehen. Sie können davon ausgehen, dass der Satz grammatikalisch korrekt und normal formatiert ist.
Ausgabe
Die Eingabezeichenfolge wird [?]
durch das entsprechende Wort ( an
oder a
) ersetzt. Sie müssen sich um die Großschreibung sorgen!
Wann man kapitalisiert
Schreiben Sie ein Wort in Großbuchstaben, wenn vor ihm keine Zeichen stehen (es ist das erste in der Eingabe) oder wenn vor ihm eines von .?!
gefolgt von einem Leerzeichen steht.
Beispiele
Input: Hello, this is [?] world!
Output: Hello, this is a world!
Input: How about we build [?] big building. It will have [?] orange banana hanging out of [?] window.
Output: How about we build a big building. It will have an orange banana hanging out of a window.
Input: [?] giant en le sky.
Output: A giant en le sky.
Input: [?] yarn ball? [?] big one!
Output: A yarn ball? A big one!
Input: [?] hour ago I met [?] European.
Output: A hour ago I met an European.
Input: Hey sir [Richard], how 'bout [?] cat?
Output: Hey sir [Richard], how 'bout a cat?
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
quelle
[?]
und dem Wort enthalten?[?] hour ago I met [?] European.
, um alle zu erschrecken.[?] hour ago I met [?] horse.
Antworten:
V , 41 Bytes
Probieren Sie es online! , mit dem bequemerweise auch alle Testfälle ohne zusätzliche Byteanzahl überprüft werden können.
Dies nutzt die "Regex-Komprimierung" von V aus. Es werden viele nicht druckbare Zeichen verwendet, daher hier ein Hexdump:
quelle
Perl, 48 Bytes
1 Byte aufgrund von Ton Hospel gespeichert .
Zählt man den Shebang als einen, wird die Eingabe von stdin übernommen.
Erläuterung
Beispielnutzung
quelle
/[.?!]/
dem Leerzeichen fehlt\G
es, Backwarsds zu benutzen. PPS, etwas kürzer:s;\[\?];A.n x$'=~/^ [aeiou]/^$"x/[^.?!] \G/;eg
Ruby,
7872 BytesUngolfed
quelle
"anAn"[...]
ist wirklich schlau. 👍🏻 Sie können ein paar Bytes sparen, indem Sie das Innere überspringensub
:s.gsub(/(^|\. )?\K\[\?\] ([aeiou])?/i){"anAn"[$1?2:0,$2?2:1]+" #$2"}
PHP, 207 Bytes
Ich mag Lösungen, die von Zeit zu Zeit vollständiger sind ...
aber ich muss zugeben, dass dies ein wenig übertrieben ist, obwohl es überhaupt nicht fertig ist.
In Datei speichern,
php <filename>
mit Eingabe von STDIN ausführen.Testfälle
Nervenzusammenbruch
quelle
[?][?][?]s [?]lert!
Minkolang 0,15 , 75 Bytes
Probieren Sie es hier aus!
Erläuterung
Da Minkolang torisch ist, wird der Programmzähler links wieder angezeigt, wenn er sich vom rechten Rand wegbewegt. Sicherlich golffähig, aber da ich wegen der Spezifikation 21 Bytes hinzufügen musste, darf ich es nicht versuchen.
quelle
JavaScript (ES6), 90
86 87 85Bearbeiten Sie erneut, da sich die Spezifikation für die Großschreibung geändert hat (jetzt sinnvoller).
Bearbeite noch einmal 1 Byte und speichere das @Huntro
Bearbeiten Sie 2 weitere Bytes, um Anführungszeichen und ähnliches zu verwalten, wie von IsmaelMiguel hervorgehoben (auch wenn ich nicht weiß, ob es von op angefordert wird). Beachten Sie, dass ich vorher 86 Bytes gezählt hatte, diese aber 85 waren
Versuch, die im Kommentarereignis angegebene Großschreibungsregel zu befolgen, wenn sie (mindestens) unvollständig istPrüfung
quelle
[?][?]
gebenAna
? Und sollte nicht[?][?] a.
produzierenAna a.
?[?] will always appear before a word. You can assume that the sentence will be grammatically correct and formatted like normal.
[?] "[?]".
(An "A"
die Anführungszeichen sind irrelevant) und für[?] "A".
(es funktioniert gut für[?] A.
).[?] "[?]"
ist keine gültige Eingabe.[?] will always appear before a word
und "[?]" ist kein Wort.]
ist nicht nötig./(\w )?\[\?](\W*.)/g
Batch, 136 Bytes
Übernimmt eine Eingabezeile für STDIN.
quelle
PHP,
10092 BytesDie regulären Ausdrücke konnten weiter golfen werden.
Gibt einen Hinweis über eine undefinierte Konstante aus, funktioniert aber weiterhin.
Edit: 8 Bytes gespeichert dank Primo
quelle
[n,A,a]
mithilfe von Look-Around-Assertions (\K
und(?= )
) auf den neuesten Stand zu bringen .Python 3.5.1,
153147124BytesEingabe:
[?] apple [?] day keeps the doctor away. [?] lie.
Ausgabe :
An apple a day keeps the doctor away. A lie.
123-Byte-Version - Dies behandelt keine Großschreibung.
Ideone es!
quelle
;
und Golf spielen.m.start() for
sollte seinm.start()for
,s[i+2] in 'aeiouAEIOU'
sollte seins[i+2]in'aeiouAEIOU'
. Eine einfache 3-Byte-Rasur aufgrund von Leerzeichen.('an','a')[s[i+2]in'aeiouAEIOU']
invertiert ist, können Sie dies'a'+'n'*(s[i+2]in'aeiouAEIOU')
beheben und 2 Bytes sparen. Hier finden Sie viele Tipps zum Golfen .enumerate()
ist cool. Danke @chepner.Java,
180178 BytesMein erster Beitrag hier, ich habe einen Teil des Beitrags von Kevin Cruijssen verwendet, aber mit einer anderen Herangehensweise hat er mir geholfen, das ein bisschen mehr zu reduzieren, dank ihm!
Hier ist es ungolfed:
Und das Ergebnis
Eine einfache Erklärung, ich benutze einen rekursiven Ansatz, um jeden zu finden
[?]
.Ich konnte keine Möglichkeit finden, die Übereinstimmungen mit Groß- und Kleinschreibung zu verwenden (nicht sicher, ob dies möglich ist).
178bytes: Danke an Martin Ender!
quelle
]
dem Regex entkommen müssen.05AB1E ,
383635 BytesProbieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
]
nach dem::
}
später entfernt, weil ich dachte, es würde ein Byte sparen, aber Sie haben in der Tat Recht, dass es für[?] vowel
Fälle fehlschlägt .. Danke, dass Sie mich informiert haben!C #
204235 BytesUngolfed volles Programm:
Ich bin sicher, dass dies verbessert werden könnte, insbesondere der Regex-Teil, aber mir fällt momentan nichts ein.
quelle
Java 7,
239214213 BytesUngolfed & Testfälle:
Probieren Sie es hier aus.
Ausgabe:
quelle
isEmpty
die Regex zu verwenden^$
. Ich glaube, ichString c(String s){String x[]=s.split("\\[\\?\\]",2),r=x[0];return x.length>1?r+(r.matches("(.+[.!?] )|(^)$")?"A":"a")+("aeiouAEIOU".contains(""+x[1].charAt(1))?"n":"")+c(x[1]):r;}
Also definitiv kürzer als meine Schleifenantwort. :)Schläger 451 Bytes (ohne Regex)
Es ist natürlich eine lange Antwort, aber es ersetzt a und a mit Großschreibung auch:
Testen:
Ausgabe:
Ausführliche Version:
quelle
J , 113 Bytes
Probieren Sie es online!
Schande, Schande!
quelle
Retina ,
6660 BytesProbieren Sie es online aus.
Erläuterung:
Führen Sie eine Suche ohne Berücksichtigung der Groß- / Kleinschreibung durch,
[?]
gefolgt von einem Vokal oder Konsonanten, wobei der optionale Vokal in Erfassungsgruppe 2 und die gesamte Übereinstimmung in Erfassungsgruppe 1 gespeichert wird:Ersetzen Sie dies durch ein
a
, gefolgt von der Länge der zweiten Gruppenmenge vonn
(also entweder 0 oder 1n
), gefolgt von den Buchstaben der Eroberungsgruppe 1:Dann passen Sie
a
entweder am Anfang der Zeichenkette oder nach einem der beiden.?!
Pluszeichen ein an:Und das A in Großbuchstaben, ohne die anderen Zeichen der Erfassungsgruppe 1 zu entfernen:
quelle
Java (JDK) , 154 Byte
Probieren Sie es online!
Erläuterung:
quelle
C (GCC) ,
225207202201 BytesVielen Dank an Ceilingcat für -24 Bytes
Probieren Sie es online!
quelle
Stark,
73162 Bytesedit: verdammt, die kapitalisierung hat hier alles total kompliziert
quelle
C # 209 Bytes
string A(string b){var s=b.Split(new[]{"[?]"},0);return s.Skip(1).Aggregate(s[0],(x,y)=>x+(x==""||(x.Last()==' '&&".?!".Contains(x.Trim().Last()))?"A":"a")+("AEIOUaeiou".Contains(y.Trim().First())?"n":"")+y);}
Formatiert
quelle
Perl 6 , 78 Bytes
Erläuterung:
Prüfung:
quelle
} $1
am Ende entfernen (machen}$1
)?{S:i:g/(^|<[.?!]>' ')?'[?]'(' '<[aeiou]>?)/{<a A>[?$0]~('n'x?~$1.substr(1))}$1/}
Lua, 131 Bytes.
Obwohl Lua eine schreckliche Sprache für das Golfen ist, habe ich das Gefühl, dass ich es ziemlich gut gemacht habe.
quelle
Pip ,
62555450 BytesNimmt die Zeichenfolge als Befehlszeilenargument.
Probieren Sie es online!
Erläuterung:
quelle
Schläger (mit Regex) 228 Bytes
Testen:
Ausgabe:
quelle
Python 3 ,
104103 Bytes-1 Byte, ohne Flucht
]
Probieren Sie es online!
Startet durch alle Vorkommen zu ersetzen ,
[?]
mita
,Dann werden alle ersetzt
a
durch einen Vokal folgt, mitan
.Dann ersetzt alles
a
zu Beginn der Eingabe oder einen Satz mitA
.Es wird davon ausgegangen, dass
[?]
niemals ein anderes Wort berührt wird und dass Kleinbuchstabena
niemals einen Satz beginnen sollten.quelle
Power Shell , 124 Byte
inspiriert von Avis Antwort für Java .
Probieren Sie es online!
quelle