W języku angielskim istnieje zabawna i prosta różnica między an
i a
: używasz, an
gdy słowo zaczyna się od dźwięku samogłoski, a a
gdy słowo zaczyna się od dźwięku spółgłoski.
Dla uproszczenia w tym wyzwaniu an
poprzedza słowo rozpoczynające się od samogłoski ( aeiou
) i a
słowo rozpoczynające się spółgłoską.
Wejście
Ciąg zawierający tylko drukowane znaki ASCII, [?]
występujący w miejscach, w których należy wstawić an
lub a
. [?]
zawsze pojawi się przed słowem. Możesz założyć, że zdanie będzie poprawne gramatycznie i sformatowane jak zwykle.
Wynik
Łańcuch wejściowy [?]
zastąpiony odpowiednim słowem ( an
lub a
). Musisz się martwić o wielkie litery!
Kiedy kapitalizować
Wielkie słowo należy wpisać wielką literą, jeśli nie jest poprzedzone żadnymi znakami (jest to pierwsze na wejściu) lub jeśli poprzedzone jest jednym z .?!
następujących po nim spacją.
Przykłady
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?
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach!
źródło
[?]
słowem a słowem?[?] hour ago I met [?] European.
aby wszyscy się skrzywdzili.[?] hour ago I met [?] horse.
Odpowiedzi:
V , 41 bajtów
Wypróbuj online! , które wygodnie można również wykorzystać do weryfikacji wszystkich przypadków testowych bez dodatkowej liczby bajtów.
Wykorzystuje to V „Regex Compression”. Używa wielu znaków niedrukowalnych, więc oto zrzut heksowy:
źródło
Perl, 48 bajtów
Zapisano 1 bajt z powodu Ton Hospel .
Licząc shebang jako jeden, dane wejściowe są pobierane ze standardowego wejścia.
Wyjaśnienie
Przykładowe użycie
źródło
/[.?!]/
Brakuje obsługi wielkich liter, po których następuje spacja\G
backwarsds. PPS, nieco krótszy:s;\[\?];A.n x$'=~/^ [aeiou]/^$"x/[^.?!] \G/;eg
Rubinowy,
7872 bajtówNie golfił
źródło
"anAn"[...]
jest naprawdę sprytny. 👍🏻 Możesz zaoszczędzić kilka bajtów, pomijając wewnętrznysub
:s.gsub(/(^|\. )?\K\[\?\] ([aeiou])?/i){"anAn"[$1?2:0,$2?2:1]+" #$2"}
PHP, 207 bajtów
Od czasu do czasu lubię bardziej kompletne rozwiązania ...
ale muszę przyznać, że to trochę przesada, choć wcale nie jest skończona.
Zapisz do pliku, uruchom
php <filename>
z wejściem STDIN.przypadki testowe
awaria
źródło
[?][?][?]s [?]lert!
Minkolang 0,15 , 75 bajtów
Wypróbuj tutaj!
Wyjaśnienie
Zauważ, że ponieważ Minkolang jest toroidalny, kiedy licznik programu przesuwa się poza prawą krawędź, pojawia się ponownie po lewej. Z pewnością gra w golfa, ale ponieważ musiałem dodać 21 bajtów ze względu na specyfikację, nie mogę spróbować.
źródło
JavaScript (ES6), 90
86 87 85Edytuj jeszcze raz gdy zmieniła się specyfikacja wielkich liter (teraz bardziej sensowna)
Edytuj ponownie 1-bajtowy zapis thx @Huntro
Edytować 2 dodatkowe bajty, aby zarządzać cytatami i tym podobne, jak wskazał IsmaelMiguel (nawet jeśli nie wiem, czy jest to wymagane przez operację). Zauważ, że wcześniej liczyłem 86 bajtów, ale były to 85
Próba przestrzegania reguły wielkich liter podanej w zdarzeniu komentarza, jeśli jest niekompletna (przynajmniej)Test
źródło
[?][?]
dawaćAna
? A nie powinien[?][?] a.
produkowaćAna a.
?[?] will always appear before a word. You can assume that the sentence will be grammatically correct and formatted like normal.
[?] "[?]".
(An "A"
, cytaty nie mają znaczenia) i dla[?] "A".
(działa dobrze dla[?] A.
).[?] "[?]"
nie jest poprawnym wejściem.[?] will always appear before a word
a „[?]” nie jest słowem.]
nie jest potrzebna./(\w )?\[\?](\W*.)/g
Partia, 136 bajtów
Pobiera wiersz danych wejściowych STDIN.
źródło
PHP,
10092 bajtówMożliwe było dalsze golfa wyrażeń regularnych.
Informuje o niezdefiniowanej stałej, ale nadal działa.
Edycja: 8 bajtów zapisanych dzięki primo
źródło
[n,A,a]
za pomocą asercji (\K
i(?= )
).Python 3.5.1,
153147124bajtówWejście :
[?] apple [?] day keeps the doctor away. [?] lie.
Wynik :
An apple a day keeps the doctor away. A lie.
Wersja 123 bajtów - nie obsługuje reguły wielkich liter.
Ideone to!
źródło
;
i zagrać w golfa.m.start() for
powinny byćm.start()for
,s[i+2] in 'aeiouAEIOU'
powinno byćs[i+2]in'aeiouAEIOU'
. Łatwe golenie o długości 3 bajtów dzięki spacji.('an','a')[s[i+2]in'aeiouAEIOU']
jest odwrócony, możesz to'a'+'n'*(s[i+2]in'aeiouAEIOU')
naprawić i zapisać 2 bajty. Tutaj znajdziesz wiele wskazówek dotyczących golfa .enumerate()
jest spoko. Dzięki @chepner.Java,
180178 bajtówMój pierwszy post tutaj wykorzystałem część postu Kevina Cruijssena, ale dzięki innemu podejściu pomógł mi to zmniejszyć, dzięki niemu!
Tutaj nie jest golfem:
I wynik
Proste wyjaśnienie: używam rekurencyjnego approch, aby znaleźć każdy
[?]
.Nie mogłem znaleźć sposobu na użycie zapałek bez rozróżniania wielkości liter (nie jestem pewien, czy jest to możliwe).
178 bajtów: Dzięki Martin Ender!
źródło
]
wyrażeniem regularnym.05AB1E ,
383635 bajtówWypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
]
po::
}
później, ponieważ myślałem, że pozwoli to zaoszczędzić bajt, ale rzeczywiście masz rację, że nie powiedzie się w[?] vowel
przypadkach .. Dziękuję za poinformowanie mnie!C #,
204235 bajtówPełny program bez golfa:
Jestem pewien, że można to poprawić, zwłaszcza część Regex, ale nie mogę teraz o niczym myśleć.
źródło
Java 7,
239214213 bajtówPrzypadki bez golfa i testy:
Wypróbuj tutaj.
Wynik:
źródło
isEmpty
użycie wyrażenia regularnego^$
. Myślę, że skończę z 202;)String 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;}
Tak zdecydowanie krótszy niż moja pętla. :)Rakieta 451 bajtów (bez wyrażenia regularnego)
Jest to oczywiście długa odpowiedź, ale zastępuje również litery „a” wielką literą:
Testowanie:
Wynik:
Wersja szczegółowa:
źródło
J , 113 bajtów
Wypróbuj online!
Wstyd, wstyd!
źródło
Siatkówka ,
6660 bajtówWypróbuj online.
Wyjaśnienie:
Wykonaj wyszukiwanie bez rozróżniania wielkości liter,
[?]
a następnie samogłoskę lub spółgłoskę, gdzie opcjonalna samogłoska jest zapisywana w grupie przechwytywania 2, a całe dopasowanie w grupie przechwytywania 1:Zastąp to ciągiem
a
, a następnie długością drugiej grupyn
(czyli 0 lub 1n
), a następnie literą (-ami) grupy przechwytywania 1:Następnie dopasuj
a
albo na początku łańcucha, albo po jednym z.?!
plus spacji:I wielkie litery A, bez usuwania innych znaków z grupy przechwytywania 1:
źródło
Java (JDK) , 154 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
C (gcc) ,
225207202201 bajtówDzięki pułapowi cat na 24 bajty
Wypróbuj online!
źródło
Groovy,
73162 bajtówedytuj: cholera, wielkie litery całkowicie skomplikowały wszystko tutaj
źródło
C # 209 bajtów
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);}
Sformatowany
źródło
Perl 6 , 78 bajtów
Wyjaśnienie:
Test:
źródło
} $1
na końcu (czyniąc ją}$1
)?{S:i:g/(^|<[.?!]>' ')?'[?]'(' '<[aeiou]>?)/{<a A>[?$0]~('n'x?~$1.substr(1))}$1/}
Lua, 131 bajtów.
Chociaż lua jest okropnym językiem do gry w golfa, czuję się całkiem nieźle.
źródło
Pip ,
62555450 bajtówBierze ciąg jako argument wiersza polecenia.
Wypróbuj online!
Wyjaśnienie:
źródło
Rakieta (z wyrażeniem regularnym) 228 bajtów
Testowanie:
Wynik:
źródło
Python 3 ,
104103 bajty-1 bajtów, nieskalowany
]
Wypróbuj online!
Rozpoczyna poprzez zastąpienie wszystkich wystąpień
[?]
za
,następnie zastępuje wszystkie
a
następuje samogłoska, zan
.Następnie zamienia wszystko
a
na początku wprowadzania lub zdania naA
.Zakłada, że
[?]
nigdy nie dotknie innego słowa i że małe literya
nigdy nie powinny zaczynać zdania.źródło
PowerShell , 124 bajty
zainspirowany odpowiedzią Avi na Javę .
Wypróbuj online!
źródło