To wyzwanie się skończyło! Gratulacje Flonk !
Byłem pewien, że dostanę dobrą ocenę, ale po oddaniu pracy Flonka mój profesor nie uwierzył, że to moja, i nie mógł zrozumieć, dlaczego jest tak skomplikowany ... Nie udało mi się, a mama uziemiła mnie na Facebooku i Minecrafcie przez miesiąc. Nie rozumiem. :(
Dziękujemy za wszystkie zgłoszenia! Kilka świetnych odpowiedzi tutaj. Oficjalnym zwycięzcą jest Flonk z wynikiem 64 . Top 5 to:
- Flonk , 64 (Haskell, z wydajną matematyką!)
- DigitalTrauma , 40 (Chmura, przyszłość jest teraz)
- primo , 38 lat (Python i mój ulubiony - i bardzo profesjonalny!)
- Sylwester , 20 lat (Rakieta, chociaż Janember ją rozciąga!)
- ilmale , 16 ( wysoce zoptymalizowany algorytm w Lua)
Oryginalne wyzwanie poniżej.
Proszę, pomóżcie mi, to bardzo pilne !!! :(
Muszę przekonwertować skrócone wersje nazw miesięcy na ich dłuższe reprezentacje (np. „Dec” -> „December”), bez rozróżniania wielkości liter. Teraz używam Java; nazwa miesiąca to String i wolałbym najpierw nie konwertować go na obiekt Date. Dowolny język jednak.
Czy jest na to łatwy sposób? Idź spokojnie, proszę, jestem nowicjuszem w programowaniu!
To konkurs popularności trollingu kodów (najlepszy, jaki istnieje!). Odpowiedź z największą popularnością 8 kwietnia 2014 r. Wygrywa.
źródło
Odpowiedzi:
To naprawdę proste z małą interpolacją wielomianową!
Najpierw spojrzałem na listę nazw krótkich miesięcy
i sprawdziliśmy sumę wartości znaków ASCII
następnie odjąłem 300 od tych, aby zrozumieć, z czym mam do czynienia, i przygotowałem tablicę, która zawiera wszystkie dłuższe wersje nazw miesięcy.
Wydaje mi się, że widać, co się teraz dzieje - potrzebuję tylko funkcji getIndex, która odwzorowuje 13 na 0, 1 na 1, 20 na 2 itd., Więc mogę po prostu zrobić
Na szczęście Wolfram | Alpha może to dla mnie zrobić ! Liczby stają się nieco większe, ale Haskell może sobie z tym poradzić z wdziękiem. Musimy tylko zaokrąglić wyniki, ponieważ arytmetyka zmiennoprzecinkowa jest trochę nieprecyzyjna! No i proszę, szybki, elegancki i idiomatyczny Haskell:
Uruchom to tak:
źródło
interpolating polynomial
.Bash + narzędzia GNU + „chmura”
Google ma odpowiedź na wszystko i mam szczęście :
W użyciu:
źródło
[a-zA-Z]
zadziała jako zamiennik[[:alpha:]]
(wydaje się, że przynajmniej tak się staram)? Pozwoliłoby to zaoszczędzić 3 znaki. Zapytania można zapisać jeszcze kilka znakówask.com
, ale może to nie być tak niezawodne.Pyton
Ponieważ ta funkcja jest bardzo ważna, prawdopodobnie będzie często używana, więc powinieneś postarać się ją jak najszybciej. Inni plakaty zalecają wyszukiwanie skrótów ... nie rób tego! Hashmapy są bardzo wolne w porównaniu do tablic. Musisz tylko przekonwertować każdy skrót na liczbę. W tym celu można zastosować standardową technikę haszowania:
Jest to prawie na pewno wyjątkowe i korzysta z tego wiele profesjonalnych narzędzi.
Teraz musisz utworzyć funkcję wyszukiwania:
I użyj tego w ten sposób:
print month_abbr_to_name("Dec")
→December
HTH!
Trolling
źródło
Rakieta
Idę na rozwiązanie KISS . Przetestowałem to na przykładzie użycia OP „Dec” ze wszystkimi ogranicznikami, aby sprawdzić, czy zwrócony został prawidłowy wynik. Minęło latającymi kolorami.
Oczywiście trolling polega na tym, że działa tylko w kilku przypadkach, więc jest bezużyteczny :-)
źródło
LUA
Moje rozwiązanie będzie działać w twoim języku lokalnym, twój profesor będzie szczęśliwy
Test
źródło
Perl
źródło
Jawa
Powiedziałeś, że twój obecny kod jest w Javie, więc pomyślałem, że ułatwię ci to.
źródło
Bash + coreutils + paq8hp12
Odpowiedź, która jest obecnie najbardziej ceniona, musi mieć dostęp do Internetu dla każdego zapytania. Oprócz tego, że jest bardzo nieefektywny, oznacza to również, że skrypt zawiedzie, jeśli nie będzie Internetu.
Lepiej jest przechowywać niezbędne informacje na dysku twardym. Oczywiście możesz przechowywać tylko dane potrzebne do tego samego skryptu, ale wymagałoby to różnych danych do różnych zadań. O wiele lepiej jest przechowywać wszystkie dane, które mogą być potrzebne w jednym pliku wielofunkcyjnym.
Trolling
źródło
Python + SQLite
Wiele dotychczasowych odpowiedzi popełniło błąd polegający na sztywnym kodowaniu nazw miesięcy. Ale nigdy nie wiadomo, kiedy jakiś Papież lub Prezydent zmusi nas do przejścia na inny kalendarz, a wtedy mnóstwo parsowania / formatowania kodu natychmiast stanie się bezwartościowe! (Lub częściej, gdy trzeba internacjonalizować swój program).
Potrzebujesz bazy danych.
Następnie po prostu napisz prosty program, aby go zapytać.
źródło
SH i przyjaciel (data)
Funkcja:
Testowanie:
Jest krótki ... ale obliczyć jego stosunek „zła na znak” ... mwhuaaahahahaaa ...
źródło
date
funkcji formatowania daty. Idate
szanuje lokalizację, generuje miesiąc pasujący do lokalizacji.-d"a_month_name 1
ustawia datę na 1 podany miesiąc (być może krótką nazwę), a brakujący rok jest ustawiany, więc będzie to następny taki miesiąc.+%B
to format wpisywania podanej daty i oznacza „długą nazwę miesiąca”. Cały tat jest zawinięty w funkcję powłoki, a ponieważ nie ma w nim nic specyficznego dla BASH, SH wystarczy, aby go uruchomić. Więc w zasadziedate
zasługuje na wszystkie brawa, nie ja! I nie dbam o downvotes w codegolf! : -Þperl
A może dobra brutalna siła?
Dlaczego to jest niesamowite:
użycie wbudowanego przeciążenia operatora perla (przyrost łańcucha) powoduje, że ten kod jest tak szybki jak natywny kod C. Spójrz na te wszystkie zera, pokazujące, jak szybko to działa!
Algorytm jest intuicyjnie oczywisty i zostawiam dowód jako ćwiczenie dla czytelnika, ale aby się upewnić, że działa we wszystkich przypadkach, sprawdźmy sierpień, jeden z ostatnich miesięcy i jeden z lat, aby upewnić się, że niczego nie przegapiłem:
Trollage:
Pomijając praktyki kodowania, które sprawiłyby, że Damian Conway umarłby na widoku, kod ten jest sporadycznie błędny i sporadycznie bardzo wolny. „Feb” działa około 6 rzędów wielkości - milion razy - wolniej niż „may”, „jun” lub „jul”. Feboapic, Sepibnd, Novgpej i Decabjuj nie są miesiącami (chociaż fajnie jest wypowiadać).
PS - Miałem trochę kodu, który ma jeszcze większy zasięg środowisk uruchomieniowych, ale nudnie wyświetla poprawną odpowiedź we wszystkich przypadkach, co jest znacznie mniej zabawne.
źródło
JavaScript - Zoptymalizowany klaster węzłów z gałęziami, liśćmi i sznurkami.
źródło
Java, Google i prawdopodobieństwo
Jestem rozczarowany, że tak wiele rozwiązań „wymyśla koło”, gdy odpowiedź jest łatwo dostępna w Internecie.
Oto wyjście mojego programu:
Nie idealny, ale wystarczająco dobry, aby wysłać go do kontroli jakości. Udało mi się osiągnąć te wyniki, wykorzystując moc crowdsourcingu:
źródło
Bash + binutils
Próbowałem zrobić to, co oczywiste, przekształcając dane wejściowe w obiekt daty, ale niestety zakończyło się to niepowodzeniem. Wreszcie uciekłem się do brutalnej siły.
Przebiegi testowe:
źródło
Rozumiem, że sprawdzanie nazw miesięcy jest bardzo trudne i wymaga wielu obliczeń i logicznego myślenia. Oto zoptymalizowana wersja algorytmu Buzz-Strahlemann do sprawdzania nazw miesięcy .
PHP
Trolle:
Ta odpowiedź;
Nie obsługuje stref czasowych i wyświetli komunikat ostrzegawczy;
Nie akceptuje miesiąca jako danych wejściowych, ale musisz go na stałe zakodować;
Nawet gdy kodujesz na stałe, wielkość liter ma znaczenie;
Ten kod próbuje uzyskać bieżący miesiąc, uzyskać pierwsze trzy litery i sprawdzić, czy pasuje do
$month
. Jeśli nie pasuje, zwiększa znacznik czasu o 1, a następnie ponawia próbę. To kończy się BARDZO POWOLNYM ;Ten kod nie wyświetla nic (oczywiście oprócz ostrzeżenia);
Komentarze są bardzo mylące:
time()
nie ładuje biblioteki rozszerzonego czasu, ale pobiera bieżący znacznik czasu;substr($checkThis,1,4)
pomija pierwszą literę miesiąca i dostaje po 4 (arch
dlaMarch
np); Prawidłowa forma to ta w komentarzach;Nawet po znalezieniu dopasowania kod nie wyjdzie z pętli: w rzeczywistości zmienna, która jest ustawiona,
true
jest inna.źródło
arch
że nigdy nie będzie równyMar
?Partia
To, o co prosisz, nie jest trywialne. Jednak znalazłem dla Ciebie idealne rozwiązanie! Działa to poprzez pobranie bardzo skomplikowanej listy języka angielskiego na dysk twardy. Dane wejściowe są następnie sprawdzane względem pobranej listy i podana jest ostateczna nazwa miesiąca! Geniusz!
Ta metoda ma wiele zalet w stosunku do innych metod, niektóre z nich to:
Jan
LubJanu
na styczeń!Kod:
Trollz
źródło
! #/grzmotnąć
Aby Twój program szybciej reagował, umieściłem na liście miesiące z 31 dniami wcześniej. Statystycznie rzecz biorąc, biorąc pod uwagę równomierny rozkład dat, istnieje większe prawdopodobieństwo, że znajdziesz się w jednym z tych miesięcy.
Udokumentowałem każdą linię, aby zrobić wrażenie na twoim szefie.
Zapisz to w pliku o nazwie
lookup_month_script.bash
i skopiuj i wklej następujący wiersz, aby go przetestować:Powodzenia w projekcie!
źródło
JavaScript - 209
Mówi się, aby nie konwertować na datę, co nie dzieje się tutaj, po prostu używam daty do wygenerowania rozszerzenia krótkiej nazwy.
Testy Wejściowe / Wyjściowe:
źródło
Java 696 łącznie z wejściem testowym
źródło
Język programowania „Brainf * ck” jest do tego idealnym narzędziem! To może nie być dokładnie to, czego szukałeś, ale z pewnością wykona to zadanie bezbłędnie!
Jestem pewien, że twój nauczyciel będzie dumny, kiedy mu to pokażesz!
Trolling
źródło
Jawa
Drogi uczniu informatyki,
Jest to dość trudne zadanie, które rozwiązałem tylko częściowo: Myślę, że jest to do pracy magisterskiej lub jakiegoś celu badawczego.
Do tej pory mam tylko wersję beta z kilkoma drobnymi błędami: czasami daje złe wyniki, ale jestem pewien, że twój profesor zaakceptuje twój wysiłek.
plik Month.java:
plik Era.java:
Aby go uruchomić, wykonaj:
wydajność:
Pamiętaj, aby ustawić
%JAVAPATH%
ścieżkę, na którejJava
jest zainstalowany kompilator!źródło
Ponieważ OP używa Java, dam rozwiązanie Java. Pomysł jest prosty:
Map
od długiej nazwy do krótkiej nazwy.String.equalsIgnoreCase
do sprawdzania, czy krótka nazwa jest taka sama jak wejściowa krótka nazwa, ignorując wielkość liter. Jeśli tak, sukces, wyjdź.Oto źródło:
Trolling
źródło
Dziękujemy za przesłanie tej prowokującej i pierwotnej pytania. Ci z nas, którzy zamieszczają odpowiedzi na Stack Overflow, cieszą się z możliwości udzielenia pomocy plakatom, ponieważ celem tej witryny jest katalogowanie wszystkich takich pytań, tak aby zapotrzebowanie na podręczniki i samodzielną naukę stało się przestarzałe. Nie przejmuj się tym, że nie rozumiesz tego konkretnego pytania, ponieważ jest to często zadawane pytanie ze względu na ukrytą sztuczkę wymaganą do skutecznego rozwiązania tego problemu. Instruktorzy często zadają to pytanie, aby określić nie tylko głębokość zrozumienia języka, ale także to, czy jesteś świadomy tego wspólnego pułapki programisty: kodowania znaków. Zrozumiesz pełniej po dokładnym przeczytaniu poniższego linku, tak jak wiem: link .
Jestem pewien, że do tej pory twój profesor szczegółowo opisał znaczenie ponownego użycia kodu, więc po przeczytaniu linku do kodowania znaków, który podałem, absolutnie rozumiesz, że będziesz musiał stworzyć wystarczająco ogólną klasę, która potrafi obsługiwać dowolny język, nawet jeśli pierwotne pytanie nie precyzowało dokładnie tego wymagania (możesz również dowiedzieć się o specyfikacji wymagań, która pomoże ci zrozumieć wymagania, przeczytaj ten link: link.
Jesteś bardzo inteligentny w sugerowaniu, aby nie używać dostarczony obiekt Date, ponieważ użycie kodu w domyślnych językach nie pozwoli ci pokazać swojemu profesorowi swojego prawdziwego rozumienia języka.
Aby pomóc ci w rozwiązaniu tego trudnego pytania, napisałem aplikację Groovy, która rozwiąże problem i niewątpliwie będzie miała więcej sensu niż ta tajemnicza java. Nie przejmuj się użyciem Groovy do tej odpowiedzi, ponieważ Groovy działa również na JVM, podobnie jak kod Java, więc możesz łatwo upuścić ten kod do swojej klasy Java z kilkoma modyfikacjami. Załączam link, który pomoże ci przejść przez ten proces, ale nie martwiłbym się nim do rana, ponieważ powinien on zająć tylko sekundę (tutaj jest link na później: link. Więc na razie skopiuj kod, ponieważ pokażę wiele przypadków testowych kodu działających poprawnie, abyś mógł czuć się pewnie w swoim zgłoszeniu. Zdecydowanie rozumiem, że jesteś bardzo zajętym, chętnym studentem, z mnóstwem obowiązków na twoim talerzu. Zapewne zdajesz sobie sprawę z tego, że współpracownicy tutaj pracują na pełny etat i są dobrze wynagradzani.
Przepraszam, że nie zostawiłem ci nic do roboty, dałem się ponieść odpowiedzi na twoje prowokujące do myślenia pytanie. Więc po prostu skopiuj i wklej tę odpowiedź. Jak widać z następujących uruchomień kodu, oto, co może zrobić:
źródło
Julia
Będziesz chciał tutaj skorzystać z mocy wielokrotnej wysyłki. Najpierw zdefiniujemy typ każdego miesiąca. Następnie możemy napisać proste definicje funkcji dla każdego typu miesiąca, które dadzą pożądaną odpowiedź. Umożliwi to korzystanie z wygodnej formy
nicename(Jan)
bez konieczności zawracania sobie głowy tymi irytującymi cudzysłowami. Dodatkowo możemy zdefiniować funkcję wygody do akceptowania ciągów i przekształcania ich w typy, ponownie wykorzystując całą pracę, którą już wykonaliśmy, aby zapewnić zupełnie nowy interfejs.źródło
Python 2.75
Prawdziwe piękno tkwi w prostocie, co oznacza niskie wymagania dotyczące pamięci. Zapomnij o tych nieznośnych słownikach i akapitach kodu. Ta funkcja jest tak dobra, że pasuje do krótkich nazw miesięcy w każdym przypadku. Przestrzegać.
PREMIA:
Możesz użyć więcej niż pierwszych 3 znaków (np. „Sept”, „febr” itp.)
źródło
w c #
źródło
Oto mały program, który robi to, o co prosiłeś.
Pisałem go w C ++, bo to co mam używać w tej chwili, ale to dość łatwo konwertuje do Javy. Będąc oddanym studentem, jestem pewien, że sam sobie poradzisz.
Postanowiłem być miły i używać
std::string
s zamiastchar*
s. Jestem pewien, że pomyliłbym cię z podobną składniąchar*[]
i na pewno zapomniałbym zadzwonićdelete
lub zrobiłbym coś głupiego jak połączeniedelete
zamiastdelete[]
.źródło
do
Jakaś rodzajowa transformacja skrótów na pełne słowa, wystarczy dopasować
data
tablicę ...źródło
PHP
źródło