Używając wybranego języka, napisz najkrótszą możliwą funkcję / skrypt / program, który zidentyfikuje słowo o największej liczbie unikalnych liter w tekście.
- Unikalne litery powinny zawierać dowolny wyraźny znak wykorzystujący kodowanie UTF-8 .
- Wielkie i małe wersje tego samego znaku są różne i wyraźne;
'a' != 'A'
- Wielkie i małe wersje tego samego znaku są różne i wyraźne;
- Słowa są powiązane dowolnymi znakami spacji.
- „Litery” to dowolny symbol, który może być reprezentowany przez pojedynczy znak Unicode.
- Dokument tekstowy musi zostać wczytany przez Twój kod - niedozwolone jest wstępne ładowanie / kodowanie tekstu.
- Wynikiem powinno być słowo, a po nim liczba unikalnych liter.
llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch - 18
- Wszelkie separatory / odstępy między tymi dwiema wartościami zależą od Ciebie, o ile istnieje co najmniej jeden znak do ich rozdzielenia.
- W przypadku, gdy istnieje więcej niż jedno słowo o najwyższej liczbie, wydrukuj wszystkie słowa dla tej liczby, z jedną nową linią oddzielającą.
przeświadczenie - 16 pseudolamellibranchiate - 16
- To jest kod golfowy, więc wygrywa najkrótszy kod.
Ta odpowiedź na English.SE zainspirowała mnie do stworzenia tego wyzwania. W przykładzie użyto tylko listy słów , ale każdy tekst powinien być przetwarzany.
LlanfairPG
jest słowem walijskim i zawiera litery alfabetu walijskiego -ll
ich
oba są pojedynczymi literami w języku walijskim.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+~`<>/\\?'";:{}[],.
to prawidłowe „słowo”?Odpowiedzi:
APL (56)
Jest to funkcja (pytanie mówi, że jest to dozwolone), która pobiera ciąg znaków i zwraca macierz słów i unikalne długości.
Stosowanie:
Wyjaśnienie:
⎕ML←3
: ustaw poziom migracji na 3 (czyli⊂
partycja zamiast załączenia)W←⍵⊂⍨⍵≠' '
: przechowuj wW
podanym ciągu, gdzie każda partycja składa się ze znaków spacji.⍙←⍒∆←↑∘⍴∘∪¨W
: pobierz ilość (⍴
) unikalnych (∪
) elementów w każdej części (¨
)W
i zapisz je∆
, a następnie uzyskaj porządek sortowania po posortowaniu w dół na tej (⍒
) i zapisz w⍙
.∆[⍙
...]
: sortuj∆
według⍙
, więc teraz mamy unikalne długości w kolejności.∆∘.=∆←∆
: zapisz posortowane z∆
powrotem∆
i sprawdź, które elementy∆
są równe.↑+/
: zsumuj wiersze (teraz wiemy, ile elementów jest równych każdemu elementowi), a następnie weź pierwszy element (teraz wiemy, ile elementów jest równych pierwszemu elementowi, tj. ile słów jest powiązanych na pierwszym miejscu).W[⍙]⍴⍨
: posortujW
według⍙
i weź pierwsze N, gdzie N jest liczbą, którą właśnie obliczyliśmy.{⍵,⍴∪⍵}¨
: dla każdego z nich uzyskaj samo słowo i liczbę unikalnych znaków w słowie⊃
: format jako macierzźródło
Mathematica
96115Edycja : kod znajduje teraz wszystkie słowa maksymalnej liczby znaków. Odmawiam traktowania przecinków jako znaków słownych.
Przykłady
lub
lub
Dłuższe przykłady
Niespodzianka: najbardziej „unikalne” słowo w Deklaracji Niepodległości jest również najbardziej wyjątkowym słowem w Alicji w Krainie Czarów !
źródło
Python 2 (110 (98 przy użyciu wprowadzania plików))
.
Co poprawić: drukowanie (33 znaki)
Interpunkcję uważa się za litery.
źródło
NameError: global name 'r' is not defined
. Po dodaniu apostrofów wokółr
:AttributeError: 'file' object has no attribute 'split'
. Python 3.3.0:SyntaxError: invalid syntax 'print i,c'
.To mój pierwszy codegolf, jestem bardzo podekscytowany :) Oznacza to również, że prawdopodobnie nie jest dobry.
Groovy
127117112105Edycja: Ponieważ funkcje tutaj wydają się być dozwolone, jest to jedna na 105. Zmieniłem również nazwy zmiennych, aby pierwsza kolumna czytała ACDC, ponieważ jest to ważne w każdym kodzie źródłowym:
Można to tak nazwać:
Bez funkcji przy użyciu standardowego wejścia w numerze 112 :
Dane wejściowe: Lorem Ipsum Tekst z primo
Dane wyjściowe wszystkich skryptów:
Czy ktoś wpadł na pomysł, jak uczynić je bardziej atrakcyjnymi?
źródło
Perl 78 bajtów
Interpretacja ograniczenia „Dokument tekstowy musi zostać wczytany przez Twój kod”, co oznacza, że opcje wiersza poleceń, które czytają i analizują dane wejściowe, są niedozwolone. Podobnie jak w poniższym rozwiązaniu PHP, tylko znaki 10 i 32 są uznawane za separatory słów. Wejście i wyjście są również brane w ten sam sposób.
PHP 128 bajtów
Jedynymi znakami uważanymi za ograniczniki słów są znak 10 i znak 32. Reszta, w tym znaki interpunkcyjne, są uważane za część słowa.
Zawiera on kilka znaków binarnych, które zapisują znaki cudzysłowu, ale w związku z tym należy je zapisać z kodowaniem ANSI, aby działać poprawnie. Alternatywnie można użyć tej wersji, która jest o 3 bajty cięższa:
Przykładowe I / O:
wejście 1:
wyjście 1:
wejście 2:
wyjście 2:
źródło
incredulity
ma 10 unikalnych liter, a nie 11.GoRuby 2.0.0 - 66 znaków
Poniższe rozwiązania nie znalazły wszystkich dopasowań, ale tylko jeden. Oto moja ostateczna wersja:
Przykłady:
produkuje:
GoRuby 2.0.0 - 29 znaków (niedokładny format wyjściowy)
Oczekuje danych wejściowych ze standardowego wejścia. Format wyjściowy jest jednak nieco inny. Na przykład:
GoRuby 2.0.0 -
4240 znakówoczekuje danych wejściowych od standardowego wejścia
Ruby 1.9.3 - 6965 znakówoczekuje danych wejściowych od standardowego wejścia (takie same jak powyżej, ale bez skrótów GoRuby)
źródło
JavaScript
163 155 152162 bajtówTo jest tak krótko, jak mogę to uzyskać:
W tej wersji
/\s/
słowa są oddzielane na podstawie białych znaków, więc zawiera interpunkcję, przecinki, kropki itp. Jako część słów. Można to łatwo zmienić, aby/\b/
ich nie uwzględnić.Za chwilę zobaczę, co mogę zrobić z pętlami for zamiast zamiast forEaches.
I / O:
źródło
In the event more than one word exists with the highest count, print all words for that count, **with one new line delimiting**.
Scala 129 znaków:
źródło
R - 106 znaków
Jako funkcja z tekstem wejściowym jako parametrem:
I kilka przykładów:
Lub R - 100 znaków
Jako funkcja ze ścieżką do pliku tekstowego jako parametrem:
Stosowanie:
źródło
Python
176168źródło
Python3 119
Odczytuje z pliku o nazwie
a
.Testowany z tekstami wejściowymi z @primo:
źródło
VBScript - 430 / VBA - 420
VBScript:
VBA:
źródło