Biorąc pod uwagę ciąg znaków, znajdź pierwsze słowo zaczynające się od każdej litery (bez rozróżniania wielkości liter).
Próba
Wykorzystując Ferulas flourish in gorgeous gardens.
jako dane wejściowe:
"Ferulas flourish in gorgeous gardens."
^^^^^^^ ^^ ^^^^^^^^
| | |
| | --> is the first word starting with `g`
| --> is the first word starting with `i`
--> is the first word starting with `f`
Następnie wynikiem dla tego przykładu powinny być dopasowane słowa połączone jedną spacją:
"Ferulas in gorgeous"
Wyzwanie
Zarówno dane wejściowe, jak i wyjściowe muszą być reprezentacją ciągu lub najbliższą alternatywą w Twoim języku.
Program lub funkcja dozwolona.
Można rozważyć słowo jest co najmniej jedno z następujących: lowercase or uppercase letters, digits, underscore
.
To jest golfowy kod , wygrywa najkrótsza odpowiedź w bajtach.
Kolejne próbki:
input: "Take all first words for each letter... this is a test"
output: "Take all first words each letter is"
input: "Look ^_^ .... There are 3 little dogs :)"
output: "Look _ There are 3 dogs"
input: "...maybe some day 1 plus 2 plus 20 could result in 3"
output: "maybe some day 1 plus 2 could result in 3"
Odpowiedzi:
Siatkówka , 28 bajtów:
M!
- Dopasuj każdą pracę i wydrukuj wszystkie słowa oddzielone znakiem nowej linii.i
- Zignoruj przypadek.\b(\w)
- Przechwyć pierwszą literę każdego słowa(?<!\b\1.+)
- Po dopasowaniu litery sprawdź, czy nie było poprzedniego słowa zaczynającego się od tej samej litery.\1.+
zapewnia co najmniej dwa znaki, więc pomijamy bieżące słowo.\w*
- dopasuj resztę słowa.Powyższe pasuje tylko do słów - wszystkie pozostałe znaki są usuwane.
¶\n
- Zamień znaki nowej linii na spacje.Wypróbuj online!
źródło
Siatkówka , 45 bajtów
Po prostu używa pojedynczego wyrażenia regularnego, aby usunąć późniejsze słowa zaczynające się od tego samego
\w
znaku (bez uwzględniania wielkości liter wi
opcji), konwertuje przebiegi\W
do pojedynczej spacji, a następnie usuwa wszelkie spacje wiodące / końcowe.Wypróbuj online!
Edycja: Zobacz odpowiedź @ Kobi dla krótszej wersji używającej
M!`
źródło
i` \b((\w)\w*)\b(?<=\b\2\w*\b.+)
(spacja przed pierwszą\b
) Czy linie nie są potem potrzebne?a...a -> a
JavaScript (ES6),
7371 bajtówZaoszczędzono 2 bajty dzięki @ edc65!
Test
źródło
parseInt("_",36) = NaN
? Bluźnierstwo!s=>s.match(u=/\w+/g).filter(w=>u[w=parseInt(w[0],36)]?0:u[w]=1).join' '
Pyth, 23 bajty
Wypróbuj online: pakiet demonstracyjny lub testowy
J:z"\w+"1
znajduje wszystkie słowa w danych wejściowych za pomocą wyrażenia regularnego\w+
i zapisuje je wJ
..grhk0J
grupuje słowa według pierwszej małej litery,hM
pobiera pierwsze z każdej grupy,xDJ
sortuje te słowa według indeksu w ciągu wejściowym ijd
umieszcza spacje między nimi.źródło
Perl 6, 39 bajtów
źródło
\w+
i Golfy tensubstr
udziałC,
142132122 bajtów10 bajtów lżejszych dzięki @tucuxi!
Drukuje spację po ostatnim słowie wyjściowym.źródło
c>47
ic<58
stosującisalnum
zamiastisalpha
MATL , 23 bajty
To zapożycza pomysł Jakube'a na użycie wyrażenia regularnego do usuwania niechcianych postaci i dzielenia w tym samym czasie.
Dane wejściowe to ciąg ujęty w pojedyncze cudzysłowy.
Wypróbuj online!
Wyjaśnienie
źródło
Vim 57 klawiszy
Wyjaśnienie:
Naprawdę jestem rozczarowany, jak długo to trwa. Te znaki „nieważny” (wszystko ale
a-z
,A-Z
,_
i spacja) naprawdę rzucił mnie. Jestem pewien, że jest lepszy sposób:Ponieważ
\h
wszystkie mecze tego oczekują od miejsca, ale nie mogę wymyślić, jak ustawić metachar w zasięgu. Jeśli ktoś ma jakieś wskazówki, chciałbym je usłyszeć.źródło
a-zA-Z_
nie\w
? cyfry są prawidłoweJulia,
165155151129102 bajtówTa funkcja przyjmuje łańcuch i zwraca łańcuch.
Nie golfowany:
Zaoszczędź 53 bajty dzięki pomocy Sp3000!
źródło
Galaretka,
3231 bajtówWypróbuj online!
źródło
C # (LINQPAD) -
136128 bajtówźródło
05AB1E , 40 bajtów
Kod:
Wypróbuj online!
Wyjaśnienie:
Najpierw generujemy wszystkie znaki, które należy usunąć z ciągu wejściowego za pomocą
94L32+ç
( Wypróbuj tutaj ). Łączymy ten ciąg za pomocąJ
i usuwamy,[a-zA-Z0-9_]
który jest przechowywany w žj ( spróbuj tutaj ). Usuwamy wszystkie znaki znajdujące się w drugim ciągu z pierwszego ciągu, który nas opuści:Można to również przetestować tutaj . Mamy
D
uplicate i sklep w tym celuX
zU
-polecenie. Następnie usuwamy wszystkie znaki znajdujące się w tym ciągu z danych wejściowych. Następnie dzielimy się na białe znaki za pomocąð¡
i usuwamy wszystkie puste ciągi (za pomocą""K
). Teraz to mamy .To jest czysta wersja danych wejściowych, z którą będziemy pracować. Mapujemy każdy element za pomocą
v
. To służyy
jako zmienna ciąg. Bierzemy pierwszy znak ciągu za pomocą¬
i pushX
, który zawiera ciąg ze wszystkimi zakazanymi znakami (!"#$%&'()*+,-./:;<=>?@[\]^`{|}~
). Sprawdzamy, czyl
wielka wersja pierwszego znaku (który również zostanie©
zapisany w rejestrze), znajduje się w tym ciągu za pomocąå
. Objęte tą częścią:ï>i
jeśli pierwsza litera nie istnieje w ciągu zabronionych znaków (X
), dołączamy ten list do listy zabronionych znaków (wykonanych zX®«U
) i przesuwamyy
na stos.Wreszcie, gdy łańcuchy są filtrowane, łączymy stos za pomocą spacji
ðý
.źródło
PHP
Zainspirowany użyciem wyrażenia regularnego w większości odpowiedzi, początkowo próbowałem to zrobić bez użycia wyrażenia regularnego w celu pokazania zgrabnej wariacji, ale problem z brakiem czystych ciągów jako danych wejściowych zrujnował ten pomysł. Smutny.
Z opakowaniem funkcji, 89 bajtów
Bez opakowania funkcji (wymagające uprzednio zadeklarowanego $ s), 73 bajty
Wyjaśnienie:
Żałuję tylko, że nie mogłem znaleźć szybszego sposobu sprawdzenia / konwersji liter.
źródło
Python, 103 bajty
źródło
Lua, 172 bajtów
To skończyło się znacznie dłużej, niż chciałem
Nie golfił
źródło
Poważnie, 43 bajty
Wypróbuj online!
Brak możliwości wyrażenia regularnego sprawił, że stało się to o wiele trudniejsze niż trzeba.
Wyjaśnienie:
źródło
Ruby 76 bajtów
Lub z definicją metody 88 bajtów
Nie golf i z testem jednostkowym:
źródło
\w
zawiera znaki numeryczne, więc[\w\d]
można je zastąpić\w
. Ponadto, jeślinil
wartości są w tablicy podczas wywoływaniajoin' '
(lub jeszcze lepiej,*' '
jest to skrót, którego można użyć, aby zapisać więcej bajtów), znikają, więc wywołanie docompact
jest niepotrzebne.\w\d
dla mnie krępujące. Ale jeśli usunęcompact
, dostanę dodatkowe spacje, (patrz['x',nil,'x']*'y' == 'xyyx'
). A może coś przeoczyłem?(list-[p])
oszczędza bajtylist.compact
. Również/\w/
jest równoważne z/[\w]/
. Wreszcie, można wymienićnil
zp
a!p
z1
(ponieważ tylko swoją hash potrzebuje wartości truthy w nim)nil
zep
nie działa. Jeśli użyję go w kodzie, pojawia się błąd składniowy. Muszę enkapsulować jak(p)
- ale potem znów mam 3 znaki.!f[j=i.upcase]?(f[j]=1;h):p
. Pomyślałem też o tym, ale z powodu indeksowania ciągów, używanias.scan(/\w+/)
i usuwania równieżi
na korzyśćh[0]
utworów.grep i awk,
6856 bajtówScenariusz:
Wyjaśnienie:
grep -o
dopasowuje słowa prawne, drukując każde w osobnej linii.awk
pobiera pierwszą literę każdego wierszasubstr
, zamienia ją na małe litery, a następnie inkrementuje wpis hashtable tym kluczem. Jeśli wartość została cofnięta przed przyrostem, linia jest drukowana.echo ...
zamienia wiersze z powrotem w słowaI wcześniej starał się stworzyć rozwiązanie bez
awk
, za pomocąuniq
,sort
,grep
abash
jednak padł właśnie krótki. Historia w edycjach.Dzięki Dennis za ulepszenia, za którymi tęskniłem.
źródło
Python 3.5, 138 bajtów:
Zasadniczo dzieje się…
źródło
PHP 120 bajtów
To generuje wiele ostrzeżeń, ale to w porządku.
źródło
function
konieczne?JavaScript ES6,
108107 znaków107 znaków, ciąg wyników jest przycięty
Test:
źródło
f=
się nie liczy .Tcl , 150 bajtów
Wypróbuj online!
źródło