Wprowadzenie
Rekurencyjny akronim jest skrótem, który zawiera lub odnosi się do siebie, na przykład:
Fish
może być rekurencyjny akronim Fish is shiny hero
, który zawiera zawiadomienie jak również sam skrót. Innym przykładem jest Hi
-> Hi igloo
. Lub nawet ppcg paints
->ppcg paints cool galaxies pouring acid into night time stars
Zasadniczo zdanie jest rekurencyjnym akronimem, jeśli pierwsze litery każdego ze słów oznaczają pierwsze słowo lub słowa.
Wyzwanie
Utwórz program, który pobiera ciąg 1 lub więcej słów oddzielonych spacją i generuje rekurencyjny akronim lub pusty ciąg, jeśli jest to niemożliwe. Niemożliwe jest utworzenie rekurencyjnego akronimu dla ciągu, takiego jak na przykład, ppcg elephant
ponieważ zaczynasz od wzięcia p
od, ppcg
a następnie dodając go do akronimu, a następnie biorąc e
od elephant
. Ale teraz mamy sprzeczność, ponieważ akronim oznacza obecnie „pe ..”, co jest sprzeczne z „pp ..”. Tak też jest na przykład w przypadku hi
. Weźmiesz h
od hi
, ale zdanie już się skończyło i nie ma już liter do przeliterowania, hi
a my zostajemy z h
tym, co nie pasujehi
. (Ciąg wymaga ilości słów większej lub równej liczbie liter w akronimie)
W danych wejściowych i wyjściowych nie jest rozróżniana wielkość liter
Ograniczenia
- Wszystko, co zostanie wprowadzone do twojego programu, będzie poprawnymi angielskimi słowami. Musisz jednak upewnić się, że wypisujesz również prawidłowe angielskie słowa (możesz użyć bazy danych lub po prostu zapisać słowo dla każdej z 26 liter)
- Obowiązują standardowe luki i domyślne reguły we / wy
Przypadki testowe
hi igloo -> hi
ppcg paints -> (impossible)
ppcg paints cool giraffes -> ppcg
ppcg paints cool galaxies pouring acid into night time stars -> ppcgpaints
ppcg paints cool galaxies pouring acid into night time -> ppcg
ppcg questions professional pool challengers greatly -> (impossible)
I -> I
Punktacja
To jest golf golfowy , więc wygrywa najmniejszy kod źródłowy w bajtach
ppcg paints cool galaxies pouring acid into night time
Żeby upewnić się, że żaden z nas się nie pomyli, po utworzeniu akronimu nie byłoby „ppcgpaint”, ale wynik powinien być taki,ppcg
że jest to tylko częściowe dopasowanie?Odpowiedzi:
Japt , 13 bajtów
Wypróbuj online!
źródło
ppcg paints cool galaxies pouring acid into night time stars
przypadku testowym05AB1E , 16 bajtów
Wypróbuj online!
źródło
ð¡
zamiast#
w ostatniej edycji? Jakieś specjalne przypadki testowe, których nie biorę pod uwagę?#
nie powiedzie się w przypadku wprowadzania pojedynczego słowa, które wypisuje dane wejściowe zamiast pustego ciągu.#
powinien zachowywać się tak samo jakð¡
... Czy istnieje przypadek użycia, w którym można pomyśleć o miejscu, w którym chcesz podzielić ciąg znaków na spacje, ale jeśli nie zawiera spacji, powinien pozostać ciągiem (zamiast ciągu zawinięte w listę)? Inni ludzie to czytają; FYI: Użycie#
(podział na spację) na łańcuchu bez spacji powoduje, że łańcuch jest taki, jaki jest (tj"test" -> "test"
.). Użycieð¡
(podział na spację) na łańcuchu bez spacji powoduje, że łańcuch jest zawijany na liście (tj"test" -> ["test"]
.).#
jest używany jakoquit if true
(co jest jego główną funkcją). Jeśli zostanie#
zwrócony false, prawdopodobnie nie chcesz, aby wartość była zawijana na liście pozostawionej na stosie.Haskell,
5148 bajtówEdycja: -3 bajty dzięki @xnor.
Znajduje akronim.
Wypróbuj online!
źródło
x
, komponowanie(\w-> ...).words
byłoby krótsze.Perl 6 ,
50 42 5849 bajtów-9 bajtów dzięki nwellnhof
Wypróbuj online!
Pierwsza opcja.
Wykorzystuję fakt, żeLub wyrażenie regularne z odpowiedzi księżycowego serca jest krótszeord
jedyna zwraca wartość porządkową pierwszej litery łańcucha, a jednocześniechrs
bierze listę zamówień i zwraca łańcuch.:(
. Dla porównania, poprzednia odpowiedź brzmiała.words>>.ord.chrs
zamiast[~] m:g/<<./
Wyjaśnienie:
źródło
Retina 0.8.2 , 60 bajtów
Wypróbuj online! Znajduje rekurencyjny akronim, jeśli istnieje. Wyjaśnienie:
Zduplikuj dane wejściowe.
Zmniejsz słowa w pierwszym wierszu do ich pierwszych liter.
W miarę możliwości wstaw spacje, aby dopasować oryginalne słowa.
Wyjście pierwszego wiersza, jeśli jest to przedrostek drugiego wiersza.
źródło
pp
tylko przeliteruje część pierwszego słowa zamiast całegoPerl 6 , 56 bajtów
Wypróbuj online!
Poprzednio wyrażenia regularne były dla mnie mylące i bezużyteczne. Nagle rozumiem je doskonale. Co się ze mną stało: P
Spełnia wybór 1.
źródło
ppcgpaints
testem, w przeciwnym razie zasugerowałbym coś takiego$!∈.words
dla warunku ifK (ngn / k) , 40 bajtów
Pierwsza opcja:
Wypróbuj online!
źródło
Rust, 155, spróbuj online!
Wybrane: Problem 1: Znalezienie akronimu
Niegolfowany, tylko trochę:
Lub jeśli możemy założyć, że wszystkie dane wejściowe są pisane małymi literami, wystarczy 130:
źródło
Galaretka , 9 bajtów
Pełny program drukujący skrót rekurencyjny, jeśli jest to możliwe.
Wypróbuj online!
W jaki sposób?
źródło
JavaScript [ES6], 74 bajty
Tworzy wyrażenie regularne do dopasowania. Zobacz przykłady w kodzie.
Wszystkie przypadki testowe:
źródło
increase i
Python 2 , 106 bajtów
Pierwsza opcja - znalezienie rekurencyjnego akronimu.
Zwraca wynik na liście.
Wypróbuj online!
Python 2 , 120 bajtów
Pierwsza opcja - znalezienie rekurencyjnego akronimu.
Wypróbuj online!
źródło
JavaScript, 71 bajtów
Podejście 1
Nie golfowany:
źródło
Rubinowy
-apl
, 57 bajtówWypróbuj online!
źródło
Python 2 , 109 bajtów
Wypróbuj online!
źródło
Scala, 76 bajtów
Rozwiązanie dla prostej skrzynki (akronimy bez białych znaków)
Scala,
144 bajty100 bajtów (patrz rozwiązanie ASCII-tylko w komentarzach)Test w REPL
źródło
:::
zastąpić++
? RównieżList[String]
->Seq[Any]
?