Moja rodzina ma biznes e-commerce. Na naszej stronie zmuszamy ludzi do wybierania ich stanu z menu rozwijanego po wprowadzeniu adresu, ale za pośrednictwem innych używanych przez nas kanałów klienci mogą wpisać w polu dowolne informacje.
Moja mama uwielbia szablony faktur, które dla niej przygotowałem, które są generowane automatycznie. Ale ponieważ są tak ładne i zrównoważone, nie może tego znieść, gdy ludzie NAPISUJĄ nazwy swoich stanów lub, co gorsza, piszą coś w stylu „nowej koszulki”. Mówi, że to psuje wygląd.
Mój tata lubi, żeby kod był lekki. Więc zamiast używać bloku szafy rozdzielczej, chce lżejszego rozwiązania.
Wyzwanie polega więc na stworzeniu krótkiej funkcji, która przyjmuje możliwe dane wejściowe i zwraca dwuliterowy skrót (wielkie litery dla mamy). Przyjmiemy (błędne) założenie, że nasi użytkownicy mogą przeliterować i zawsze wstawiać spację w nazwie (w razie potrzeby) lub podawać poprawny skrót. Zakres obejmuje 50 stanów USA.
- Nowy Jork
- Nowy Jork
- NY
- ny
są wszystkie dopuszczalne dane wejściowe dla Nowego Jorku i powinny dać wynik NY.
Jeśli zostanie przekazane coś takiego jak New Yrok, funkcja może zwrócić oryginalną wartość.
Możesz używać dowolnego wspólnego języka. To konkurs popularności, więc wygrywa ten, który pod koniec tygodnia uzyska najwięcej głosów. Zakładam, że sprzyja to nowości i użyteczności.
EDYCJA: Opis jest puchowy, ale pracowałem nad podobnym projektem i pomyślałem, że musi być bardziej interesujący sposób. Mogę samodzielnie wykonać projekt (już to zrobiłem), ale pomyślałem, że to dobre miejsce na bardziej interesujące wyzwanie. Przez „Dowolny wspólny język” wykluczyłem niestandardowe języki / biblioteki przeznaczone do tego wyzwania - starałem się szukać nowych metod, a nie darmowej pomocy przy kodzie. Myślę, że wszyscy kiedyś to zrobili, ale fajnie byłoby to zrobić w niecodzienny sposób. Uważam, że najciekawsze projekty to te, w których podejmujesz codzienne zadania w nowy i interesujący sposób - dlatego jest to konkurs popularności, a nie golf.
źródło
you can use any code
... więc OP przepisze swoją stronę, aby użyć rozwiązania APL / CJAM / GolfScript? To wyzwanie oparte na prawdziwej historii. Głosuję w góręOdpowiedzi:
Rubin
Pomyślałem, że byłoby interesujące wyodrębnić skróty stanowe bez wyraźnego wpisywania nazwisk lub skrótów. Ten nie bierze pod uwagę błędnej pisowni danych wejściowych, ponieważ nie obchodzi nas coś takiego na codegolf.SE, rihgt ?
Wymyślenie sprytnych wzorów pasujących do wszystkich stanów zajęło sporo czasu. Kolejność wzorów jest ważna - każdy kolejny wzór stosuje się do pozostałych stanów, które nie zostały dopasowane przez poprzedni wzór:
Wszystkie stany z dwoma słowami używają pierwszych liter tych dwóch słów: Wszystkie stany rozpoczynające się od dowolnej litery w {CDGHKLPV
} używają pierwszej i ostatniej litery w nazwie: Z pozostałych stanów litery {ZVX
} są unikalne: Wszystkie pozostałe stany zaczynające się od {FNOUW
} używają dwóch pierwszych liter. Zatem {DNR
} są unikatowe jako drugie litery:Naprawdę trudno jest tworzyć ogólne wzory, ale ...
Tylko trzy pozostałe stany używają podwójnejN
lubL
, a podwójna litera jest używana w skrócie stanu:A
lubO
po podwójnym S jest unikalny dla Ilekroć {SNW
} pojawia się przed innymi literami w nazwach pozostałych stanów, litery po nich są używane w skrótach: Zostały dwa. Używają one dwóch pierwszych liter:Można oczywiście grać w golfa:
Rubinowy 2 -
191165154 znakówKolejne 26 znaków wyłączone przez ugloszenie wyrażeń regularnych. Ponadto jeden z oryginalnych wyrażeń regularnych okazał się zbędny!
źródło
If something like New Yrok is passed in, the function should return the original value.
DO#
Użyłem znaków znajdujących się już w stanach jako skrótów, aby skrócić ciąg stanu.
źródło
JavaScript (E6)
Tutaj większość jest listą nazw, przy użyciu sztuczki camelCase, aby nieco skrócić. Gra w golfa, 617 bajtów.
źródło
Pyton
Postanowiłem zrobić to jako wyzwanie dla golfa. Sprowadziłem to do
906713694 znaków przy pomocy Daniero i HSL:Jeśli jednak moduły są dozwolone (jak moduł us ), mogę sprowadzić go do 130 znaków:
A jeśli nie musisz zwracać oryginalnej wartości, gdy stan nie istnieje, mogę ją zmniejszyć do 50 znaków:
źródło
s
jeden duży ciąg, a następnie dzieląc go przecinkami (,
); Nie potrzeba wszystkich pojedynczych cudzysłowów.bash + sed, 291 bajtów
Bezwstydna konwersja rozwiązania Ruby firmy Daniero na sed:
źródło
Golfscript -
750653Większość jest w nazwach stanowych i skrótach.
Wyjaśnienie:
źródło
PHP
Moja próba, która nie zakończyła się tak dużym sukcesem, jak się spodziewałem, polega na użyciu długości łańcucha i określonego umiejscowienia znaków w celu wyodrębnienia skrótu z nazwy stanu. Prawdopodobnie możliwe jest lepsze sekwencjonowanie eliminacji nazw.
Oczywiście można grać w golfa. To moja pierwsza próba gry w golfa, więc doceniłem wgląd. (911)
źródło
JavaScript
Wiem, że to nie jest golf golfowy, ale i tak chcę grać w golfa. :)
Yay na nowe rzeczy! (Fragmenty stosu)
źródło
eval(open('a.txt'))
również ważny? Jeśli używasz dowolnego rodzaju pliku, musisz również dołączyć ten plik i jego nazwę do liczby znaków. (To nie jest golf golfowy, więc i tak naprawdę nie ma to w tym przypadku znaczenia.)