Diese Herausforderung ist beendet! Glückwunsch Flonk !
Ich war mir sicher, dass ich eine gute Note bekommen würde, aber nachdem ich meine Arbeit bei Flonk eingereicht hatte , glaubte mein Professor nicht, dass es meine war und konnte auch nicht verstehen, warum es so kompliziert war ... Ich habe versagt und meine Mutter hat mich von Facebook und Minecraft geerdet für einen Monat. Ich verstehe nicht :(
Vielen Dank für alle Einsendungen! Einige gute Antworten hier. Der offizielle Gewinner ist Flonk mit einer Punktzahl von 64 . Die Top 5 sind:
- Flonk , 64 (Haskell, mit effizienter Mathematik!)
- DigitalTrauma , 40 (Die Wolke, die Zukunft ist jetzt)
- primo , 38 (Python und mein persönlicher Favorit - und sehr professionell!)
- Sylwester , 20 (Racket, obwohl Janember es ausdehnt!)
- ilmale , 16 (A hoch optimierten Algorithmus in LUA)
Ursprüngliche Herausforderung unten.
Bitte helfen Sie mir, es ist sehr dringend !!! :(
Ich muss verkürzte Versionen von Monatsnamen in ihre längeren Darstellungen konvertieren (z. B. "Dec" -> "December"), wobei die Groß- und Kleinschreibung nicht berücksichtigt wird. Im Moment benutze ich Java; Der Monatsname ist ein String und ich würde ihn lieber nicht zuerst in ein Date-Objekt konvertieren. Jede Sprache wird es jedoch tun.
Gibt es eine einfache Möglichkeit, dies zu tun? Gehen Sie einfach, bitte, ich bin ein Neuling in der Programmierung!
Dies ist ein Code-Trolling- Beliebtheitswettbewerb (der beste, den es gibt!). Die Antwort mit den meisten positiven Stimmen am 8. April 2014 gewinnt.
quelle
Antworten:
Mit ein wenig Polynominterpolation ist das ganz einfach!
Zuerst habe ich mir die Liste der kurzen Monatsnamen angesehen
und überprüfte die Summe ihrer Zeichen ASCII-Werte
Ziehen Sie dann 300 davon ab, um zu verstehen, worum es hier geht, und erstellen Sie ein Array, das alle längeren Versionen der Monatsnamen enthält.
Ich denke, Sie können sehen, was jetzt los ist - alles, was ich brauche, ist eine Funktion getIndex, die 13 auf 0, 1 auf 1, 20 auf 2 und so weiter abbildet, damit ich es einfach tun kann
Zum Glück kann Wolfram | Alpha das für mich tun ! Die Zahlen werden ein bisschen groß, aber Haskell kann das mit Anmut behandeln. Wir müssen nur sicherstellen, dass die Ergebnisse gerundet werden, da Fließkomma-Arithmetik etwas ungenau ist! Also los, schnell, elegant und idiomatisch, Haskell:
Führen Sie es einfach so aus:
quelle
interpolating polynomial
.Bash + GNU-Tools + "die Wolke"
Google hat die Antwort auf alles und ich fühle mich glücklich :
In Benutzung:
quelle
[a-zA-Z]
als Ersatz für[[:alpha:]]
(scheint so, wenn ich es zumindest versuche)? Das würde 3 Zeichen sparen. Einige weitere Zeichen könnten durch Abfragen gespeichert werdenask.com
, dies ist jedoch möglicherweise nicht so zuverlässig.Python
Da diese Funktion sehr wichtig ist, wird sie wahrscheinlich häufig verwendet. Sie sollten daher versuchen, sie so schnell wie möglich zu gestalten. Andere Poster haben die Verwendung einer Hashmap-Suche empfohlen ... tun Sie dies nicht! Hashmaps sind im Vergleich zu Arrays sehr langsam . Sie müssen nur jede Abkürzung in eine Zahl umwandeln. Es gibt eine Standard-Hashing-Technik, die dafür verwendet werden kann:
Dies ist fast garantiert einzigartig und wird von vielen professionellen Tools verwendet.
Nun müssen Sie eine Suchfunktion erstellen:
Und benutze es so:
print month_abbr_to_name("Dec")
→December
HTH!
Trolling
quelle
Schläger
Ich greife zu einer KISS-Lösung . Ich habe es mit OPs Use Case "Dec" mit allen Großbuchstaben getestet, um zu überprüfen, ob das richtige Ergebnis zurückgegeben wird. Es ging mit Bravour vorbei.
Das Trolling hier ist natürlich, dass es nur in wenigen Fällen funktioniert, also ist es nutzlos :-)
quelle
LUA
Meine Lösung wird in Ihrer Landessprache funktionieren, Ihr Professor wird sich freuen
Prüfung
quelle
Perl
quelle
Java
Sie sagten, Ihr aktueller Code ist in Java, also dachte ich, ich würde es Ihnen leicht machen.
quelle
Bash + coreutils + paq8hp12
Die Antwort, die derzeit am häufigsten angenommen wird, muss für jede Abfrage auf das Internet zugreifen. Dies ist nicht nur sehr ineffizient, sondern führt auch dazu, dass Ihr Skript fehlschlägt, wenn kein Internet vorhanden ist.
Es ist besser, die erforderlichen Informationen auf Ihrer Festplatte zu speichern. Natürlich könnten Sie nur die Daten speichern, die für dieses Skript benötigt werden, aber das würde unterschiedliche Daten für unterschiedliche Aufgaben erfordern. Es ist viel besser, alle Daten, die Sie möglicherweise benötigen, in einer einzigen Mehrzweckdatei zu speichern.
Trolling
quelle
Python + SQLite
Viele der bisherigen Antworten machen den Fehler, die Monatsnamen hart zu codieren. Aber Sie wissen nie, wann ein Papst oder Präsident einen Wechsel zu einem anderen Kalender veranlassen wird, und dann wird jede Menge Datumsanalyse- / Formatierungscode sofort wertlos! (Oder häufiger, wenn Sie Ihr Programm internationalisieren müssen.)
Was Sie brauchen, ist eine Datenbank.
Dann schreiben Sie einfach ein einfaches Programm, um es abzufragen.
quelle
SH & ein Freund (Datum)
Die Funktion:
Testen Sie es:
Es ist kurz ... aber berechnen Sie das Verhältnis "Übel pro Charakter" ... mwhuaaahahahaaa ...
quelle
date
Datumsformatierungsfunktionen von. Unddate
respektiert die Lokalisierung, es wird der Monat generiert, der mit der Lokalisierung übereinstimmt.-d"a_month_name 1
Stellt das Datum auf den 1. des genannten Monats ein (möglicherweise Kurzname) und das fehlende Jahr wird so eingestellt, dass es der nächste Monat ist.+%B
ist das Format für die Eingabe des angegebenen Datums und bedeutet "der lange Name des Monats". Alle TATs sind in eine Shell-Funktion eingebunden, und da dort kein BASH-spezifisches Element vorhanden ist, reicht SH aus, um es auszuführen. Alsodate
verdient im Grunde den ganzen Applaus, nicht ich! Und Abstimmungen im Codegolf interessieren mich nicht! : -Þperl
Wie wäre es mit einer guten alten Gewalt?
Warum das so toll ist:
Durch die Verwendung der in Perl integrierten Operatorüberladung (Inkrementierung von Zeichenfolgen) wird dieser Code so schnell wie nativer C-Code. Schauen Sie sich all diese Nullen an und zeigen Sie, wie schnell es läuft!
Der Algorithmus ist intuitiv offensichtlich, und ich überlasse dem Leser einen Beweis als Übung, aber um sicherzugehen, dass er in allen Fällen funktioniert, überprüfen wir August, einen der letzten Monate und einen der letzten Monate, um sicherzugehen, dass wir es schaffen nichts verpasst:
Trollage:
Abgesehen von den Codierungspraktiken, die dazu führen würden, dass Damian Conway sofort stirbt, ist dieser Code zeitweise falsch und zeitweise extrem langsam. "Feb" läuft ungefähr 6 Größenordnungen - eine Million Mal - langsamer als "Mai", "Juni" oder "Juli". Feboapic, Sepibnd, Novgpej und Decabjuj sind keine Monate (obwohl es Spaß macht, sie auszusprechen).
PS: Ich hatte einen Code, der eine noch größere Bandbreite an Laufzeiten aufweist, aber er gibt auf jeden Fall die richtige Antwort aus, was viel weniger Spaß macht.
quelle
JavaScript - Optimierter Knotencluster mit Zweigen, Blättern und String-Fässern.
quelle
Java, Google und Wahrscheinlichkeit
Ich bin enttäuscht, dass so viele der hier vorgestellten Lösungen "das Rad neu erfinden", wenn die Antwort im Internet leicht verfügbar ist.
Hier ist die Ausgabe meines Programms:
Nicht perfekt, aber gut genug, um an die Qualitätssicherung zu senden. Ich konnte diese Ergebnisse erzielen, indem ich die Kraft des Crowdsourcing nutzte:
quelle
Bash + binutils
Ich habe mich bemüht, das Offensichtliche zu tun, indem ich die Eingabe in ein Datumsobjekt konvertierte, aber es ist kläglich gescheitert. Schließlich griff ich auf Brute-Force-Ansätze zurück.
Testläufe:
quelle
Ich verstehe, dass die Überprüfung der Monatsnamen sehr schwierig ist und viel Rechenaufwand und logisches Denken erfordert. Hier ist eine optimierte Version des Buzz-Strahlemann-Algorithmus zum Überprüfen der Monatsnamen .
PHP
Trolle:
Diese Antwort;
Verarbeitet keine Zeitzonen und gibt eine Warnmeldung aus.
Akzeptiert keinen Monat als Eingabe, aber Sie müssen ihn fest codieren.
Auch wenn Sie es hart codieren, wird zwischen Groß- und Kleinschreibung unterschieden.
Mit diesem Code wird versucht, den aktuellen Monat abzurufen, die ersten drei Buchstaben abzurufen und zu überprüfen, ob sie übereinstimmen
$month
. Wenn es nicht übereinstimmt, erhöht es den Zeitstempel um 1 und versucht es dann erneut. Dies endet extrem langsam ;Dieser Code gibt nichts aus (außer der Warnung natürlich);
Kommentare sind sehr irreführend:
time()
Lädt keine erweiterte Zeitbibliothek, sondern erhält den aktuellen Zeitstempel.substr($checkThis,1,4)
den Monat überspringt den ersten Buchstaben und bekommt die folgenden 4 (arch
fürMarch
zB); Die richtige Form ist die in den Kommentaren;Selbst wenn eine Übereinstimmung gefunden wird, verlässt der Code die Schleife nicht: Tatsächlich ist die Variable, auf die gesetzt
true
wird, anders.quelle
arch
nie was gleichMar
?Stapel
Was Sie verlangen, ist nicht trivial. Ich habe jedoch die perfekte Lösung für Sie gefunden! Das funktioniert, indem Sie eine sehr komplexe Liste der englischen Sprache auf Ihre Festplatte herunterladen. Die Eingabe wird dann mit der heruntergeladenen Liste verglichen und der endgültige Name des Monats angegeben! Genius!
Diese Methode hat viele Vorteile gegenüber anderen Methoden, einige davon sind:
Jan
oderJanu
für Januar!Der Code:
Trollz
quelle
! # / bash
Damit Ihr Programm schneller reagiert, habe ich die Monate mit 31 Tagen früher in die Liste aufgenommen. Statistisch gesehen ist es bei einer gleichmäßigen Verteilung der Daten wahrscheinlicher, dass Sie sich in einem dieser Monate befinden.
Ich habe jede Zeile dokumentiert, um Ihren Chef zu beeindrucken.
Speichern Sie dies in einer Datei mit dem Namen
lookup_month_script.bash
und kopieren Sie die folgende Zeile, um sie zu testen:Viel Glück bei Ihrem Projekt!
quelle
JavaScript - 209
Es heißt nicht in ein Datum zu konvertieren, was hier nicht der Fall ist. Ich benutze einfach Date, um die Erweiterung des Kurznamens zu generieren.
Teste Input / Output:
quelle
Java 696 inklusive Testeingabe
quelle
Die Programmiersprache "Brainf * ck" ist dafür das perfekte Werkzeug! Es ist vielleicht nicht genau das, wonach Sie gesucht haben, aber es erledigt den Job einwandfrei!
Ich bin sicher, Ihr Lehrer wird stolz sein, wenn Sie ihm dies zeigen!
Trolling
quelle
Java
Sehr geehrter Informatiker-Lehrling,
Dies ist eine ziemlich schwierige Aufgabe, und ich habe sie nur teilweise gelöst: Ich denke, dies ist für Ihre Abschlussarbeit oder einen Forschungszweck.
Bisher habe ich nur eine Beta-Version mit einigen kleinen Fehlern: Manchmal führt dies zu falschen Ergebnissen, aber ich bin mir sicher, dass Ihr Professor Ihre Bemühungen akzeptieren wird.
Datei Month.java:
Datei Era.java:
So führen Sie es aus:
Ausgabe:
Denken Sie daran
%JAVAPATH%
, den Pfad anzugeben, in dem IhrJava
Compiler installiert ist!quelle
Da das OP Java verwendet, gebe ich eine Java-Lösung. Die Idee ist einfach:
Map
von Langname zu Kurzname.String.equalsIgnoreCase
diese Option , um zu überprüfen, ob der Kurzname mit dem eingegebenen Kurznamen identisch ist, wobei Fälle ignoriert werden. Wenn ja, Erfolg, beenden.Hier ist die Quelle:
Trolling
quelle
Vielen Dank, dass Sie diese zum Nachdenken anregende und originelle Frage gestellt haben. Diejenigen von uns, die Antworten auf Stack Overflow posten, haben die Möglichkeit, Plakaten zu helfen, da der Zweck dieser Website darin besteht, all diese Fragen zu katalogisieren, um das Erfordernis von Lehrbüchern und selbst motiviertem Lernen hinfällig zu machen. Seien Sie nicht beunruhigt über Ihr Unverständnis für diese spezielle Frage, da es sich um eine häufig gestellte Frage handelt, die aufgrund ihres versteckten Tricks zur effektiven Lösung erforderlich ist. In der Regel wird der Kursleiter diese Frage stellen, um nicht nur Ihr tiefes Verständnis der Sprache zu bestimmen, sondern auch, ob Ihnen diese häufige Fallstricke des Programmierers bekannt ist: die Zeichencodierung. Sie werden es besser verstehen, wenn Sie den folgenden Link gründlich durchgelesen haben, wie ich weiß: link .
Ich bin mir sicher, dass Ihr Professor die Bedeutung der Wiederverwendung von Code bereits ausführlich beschrieben hat. Wenn Sie also den von mir bereitgestellten Zeichencodierungslink gelesen haben, sind Sie sich absolut einig, dass Sie eine Klasse erstellen müssen, die generisch genug ist kann jede Sprache handhaben , auch wenn die ursprüngliche Frage diese Anforderung nicht ausdrücklich angeben (Sie können auch über Anforderungsspezifikation erfahren möchten, was Sie Anforderungen verstehen helfen, lesen Sie über diesen Link: . Link
Sie , wo sehr intelligent in was darauf hindeutet , nicht verwenden Mit dem bereitgestellten Date-Objekt können Sie Ihrem Professor nicht zeigen, wie gut Sie die Sprache verstehen, wenn Sie den Code in den Standardsprachen verwenden.
Um Ihnen bei dieser schwierigen Frage zu helfen, habe ich eine Groovy-Anwendung geschrieben, die Ihr Problem löst und zweifellos sinnvoller ist als dieses kryptische Java. Seien Sie nicht beunruhigt über die Verwendung von Groovy für diese Antwort, da Groovy genau wie Java-Code auch auf der JVM ausgeführt wird, sodass Sie diesen Code mit nur wenigen Änderungen problemlos in Ihre Java-Klasse einfügen können. Ich habe einen Link angehängt, um Ihnen bei diesem Vorgang zu helfen, aber ich würde mich erst am Morgen darum kümmern, da es nur eine Sekunde dauern sollte (hier ist der Link für später: link. Kopieren Sie den Code jetzt einfach, da ich viele Testfälle zeigen werde, in denen der Code ordnungsgemäß funktioniert, damit Sie sich bei der Übermittlung sicher fühlen können. Ich verstehe auf jeden Fall, dass Sie sehr, sehr beschäftigt sind, eifrige Schüler, mit vielen Verpflichtungen auf Ihrem Teller. Sie wissen wahrscheinlich, dass die Mitarbeiter hier Vollzeit arbeiten und gut entschädigt werden.
Es tut mir leid, dass ich Ihnen hier nichts zu tun hinterlassen habe. Ich habe Ihre zum Nachdenken anregende Frage beantwortet. Kopieren Sie diese Antwort und fügen Sie sie ein. Wie Sie aus den folgenden Code-Ausführungen ersehen können, können Sie damit Folgendes tun:
quelle
Julia
Sie werden hier die Kraft des Mehrfachversands nutzen wollen. Zuerst definieren wir einen Typ für jeden Monat. Dann können wir einfache Funktionsdefinitionen für jeden Monatstyp schreiben, die die gewünschte Antwort geben. Auf diese Weise können Sie die bequeme Form von verwenden,
nicename(Jan)
ohne sich mit diesen lästigen Anführungszeichen herumschlagen zu müssen. Außerdem können wir eine Komfortfunktion definieren, mit der Zeichenfolgen akzeptiert und in Typen konvertiert werden können. So können wir die gesamte Arbeit, die wir bereits geleistet haben, wieder verwenden, um eine völlig neue Benutzeroberfläche bereitzustellen.quelle
Python 2.75
Wahre Schönheit liegt in der Einfachheit, was einen geringen Speicherbedarf bedeutet. Vergessen Sie diese lästigen Wörterbücher und Absätze des Codes. Diese Funktion ist so gut, dass sie auf jeden Fall mit kurzen Monatsnamen übereinstimmt. Beobachten.
BONUS:
Sie können mehr als die ersten 3 Zeichen verwenden (z. B. "sept", "febr" usw.)
quelle
in c #
quelle
Hier ist ein kleines Programm, das genau das macht, was Sie verlangt haben.
Ich habe es in C ++ geschrieben, weil ich es momentan verwende, aber es lässt sich ziemlich einfach nach Java konvertieren. Ich bin mir sicher, dass Sie als engagierter Student das selbst schaffen können.
Ich habe beschlossen, nett zu sein und
std::string
s anstelle vonchar*
s zu verwenden. Ich bin sicher, ich hätte Sie mit Syntax wie verwirrtchar*[]
und ich hätte definitiv vergessen, anzurufendelete
, oder etwas Dummes wie calldelete
statt getandelete[]
.quelle
C
Eine Art generische Umwandlung von Abkürzungen in vollständige Wörter, passen Sie einfach das
data
Array an ...quelle
PHP
quelle