Z tego powodu potrzebujesz lepszego sposobu ustalenia, czy fraza jest akronimem słowa. Uważasz również, że warto sprawdzić, czy dane wyrażenie i słowo są rekurencyjnymi akronimami.
Twoje zadanie:
Biorąc pod uwagę słowo, a następnie frazę oddzieloną wierszem, wypisz, czy fraza jest akronimem, a następnie, jeśli jest akronimem rekurencyjnym . (Fraza zawiera to, co oznacza)
- Dane wejściowe będą się składać ze znaków alfabetycznych oraz spacji.
- W twoim programie nie powinna być rozróżniana wielkość liter.
Przykład wejścia / wyjścia:
Przypadek 1:
Wkład:
Acronyms
Acronyms can really obviously narrow your message sensors
Wydajność:
True
True
Przypadek 2:
Wkład:
FAQ
frequently asked questions
Wydajność:
True
False
Przypadek 3:
Wkład:
foo
bar baz
Wydajność:
False
False
Przypadek 4:
Wkład:
GNU
GNU is not Unix
Wydajność:
False
False
Przypadek 5:
Wkład:
Aha
A huge Aha
Wydajność:
True
True
code-golf
decision-problem
niebieski
źródło
źródło
Odpowiedzi:
Pyth,
1918Ten drukuje wynik w dość dziwnym formacie, jak:
TrueFalse
.Możesz wypróbować online lub uruchomić pakiet testowy .
Wyjaśnienie:
źródło
Python 3, 89
Zaoszczędź sporo bajtów dzięki SOPython.
Najbardziej skomplikowaną częścią tego rozwiązania jest
h=tuple(a)==next(zip(*d))
.Spowoduje to rozpakowanie listy
d
do formatu zip, a następnie wywołania,next
aby zwrócić krotkę pierwszego elementu każdej przekazywanej iteracji, dozip
której jest następnie porównywana z krotką każdej litery w (tuple(a)
).źródło
[0]==l
za.startswith(l)
.CJam,
2120 bajtówWypróbuj to skrzypce w interpretatorze CJam lub zweryfikuj wszystkie przypadki testowe jednocześnie.
Jak to działa
źródło
Haskell,
8180 bajtówFormat wyjściowy nie jest ściśle określony, więc zwracam parę wartości logicznych, np.
p "Aha\na huge arm"
->(True,False)
.źródło
<-
) - dzięki!Scala,
135110108 bajtówZaoszczędziłem kilka bajtów, używając argumentów wiersza poleceń (dzięki J Atkin za podpowiedź), wypisując booleany jako tupel, używając
mkString
zamiastnew String
i drukuj zamiast println.EDYCJA: Źle zinterpretował pytanie i musiał ponownie wdrożyć rozwiązanie
źródło
Python 3, 106 bajtów
Cóż, przynajmniej pokonał Scalę;)
źródło
AppleScript,
302301297293 bajtówOch, do diabła tak. Nawet nie przejmowałem się tym, że przegrałem, to jest konkurencyjne dla AppleScript.
Dane wyjściowe jako:
Lub cokolwiek by się nie wydarzyło.
źródło
PHP, 120 bajtów
Niewielkie rozróżnianie wielkości liter ma duże znaczenie (26 bajtów). Przeszedł wszystkie przypadki testowe:
Zwraca dwie wartości bool w tej formie:
Odczytuje dwa argumenty z wiersza poleceń, takie jak:
Bez golfa
źródło
Rubin,
7774 bajtyźródło
Ruby, 52 bajty
Przykład:
źródło
Matlab, 90 bajtów
Przykład (zauważ, że Matlab wyświetla
true
/false
as1
/0
):źródło
JavaScript ES6,
9592 bajtówWprowadź oba ciągi jako parametry. Zwraca tablicę z dwiema wartościami: po jednej dla każdego logicznego.
źródło
.indexOf
. Dobra robota! Być możer=eval(`/^${a}$/i`)
działałby zamiast aktualnejr
konfiguracji.eval
postaciRegExp
obiektu skracania. Dzięki za wskazówkę!GNU sed, 118 bajtów
Wymaga
-r
flagi, zawartej w wyniku jako +1. Zauważ, że używam\b
do dopasowania granicy słowa, chociaż nie mogę znaleźć tego udokumentowanego w GNU sed. To działa dla mnie ...Rozszerzony:
źródło
Groovy, 91 bajtów
Format wyjściowy to.
[bool, bool]
To pobiera dane wejściowe z argumentów wiersza poleceń.źródło
Lua 5.3, 182 bajty
źródło
R, 93 bajty
Stosowanie:
źródło
awk
137 bajtówT="True";F="False"
aby uprościć wyjście.NR*NF<2{a=tolower($1)}
: seta
tylko, jeśli pierwszy wiersz ma tylko jedno pole.END{...}
: zakładając tylko dwie linie ...for(i=1;i<=NF;i++)b=b substr(tolower($i),1,1)
: konstruuj akronim rekurencyjny.print(a==b?T:F)"\n"(a==tolower($1)?T:F)
: wydrukuj wyniki obu porównańa==b
ia==tolower($1)
.Jeśli ktoś wie, jak zoptymalizować rekursywną konstrukcję akronimu, nie krępuj się zasugerować.
źródło
SpecBAS - 144 bajty
Konwersja 2 x danych wejściowych na wielkie litery zapisuje znaki vs. konwersja małych liter. Może teraz mieć wiele przypisań wykonanych w jednej
LET
instrukcji, co również pomaga. ITEXT
ratuje jedną postaćPRINT
.Używa 1/0, aby pokazać prawda / fałsz (apostrof po prostu przenosi dane wyjściowe do następnego wiersza).
źródło
Perl5, 90 bajtów
oszukiwanie trochę: 0 = wszystkie fałszywe, 1 = jedna prawda, 2 = oba prawdziwe. Nie jestem golfistą, ale denerwuje mnie perl podczas przeglądania!
źródło
JavaScript (ES6) 93
Przetestuj poniższy fragment kodu w dowolnej przeglądarce zgodnej z EcmaScript 6
źródło
JavaScript (ES6),
899695 bajtówShucks ... Myślałem, że wszystko załatwiłem, ale najwyraźniej się myliłem.
Definiuje to anonimową funkcję, która pobiera dane wejściowe jako dwa ciągi znaków i zwraca oraz tablicę dwóch elementów boolowskich. Pierwszy element jest obliczany przez porównanie pierwszego łańcucha małymi literami z pierwszym znakiem każdego słowa w drugim łańcuchu. Drugi element oblicza się po prostu przez sprawdzenie, czy drugi ciąg znaków zawiera pierwszy.
Oto inne rozwiązanie dla drugiego przedmiotu; 2 bajty krótsze, ale obsługuje go bardzo niewiele przeglądarek:
źródło
GNU: Gnus nettle unicorns
ReferenceError: l is not defined
(brakowałol=
wcześniejtoLowerCase
)'GNU','GNU is not unix'
(przypadek testowy 4) powinien być fałszywy, fałszywyl=
chwilę, szukając błędu i zapomniałem go przywrócić. Dzięki, że o tym wspomniałeś! Drugi przypadek testowy również powinien zostać naprawiony.Pyke (po opublikowaniu był bez tytułu), (niekonkurencyjny), 20 bajtów
Możesz znaleźć kod źródłowy tutaj , język jest całkowicie niestabilny (pierwsze wyzwanie testowe), więc nie spodziewaj się, że będzie działał w przyszłości (zatwierdzenie 8)
Lub 18 bajtów (stabilny)
Wypróbuj tutaj!
źródło