Этот вызов закончился! Поздравляем Flonk !
Я был уверен, что получу хорошую оценку, но после сдачи моей работы Флонка мой профессор не верил, что она моя, а также не мог понять, почему это так сложно ... Я потерпел неудачу, и моя мама вытащила меня из Facebook и Minecraft на месяц. Я не понимаю :(
Спасибо за все ваши представления! Некоторые отличные ответы здесь. Официальный победитель - Флонк с результатом 64 . Топ 5:
- Flonk , 64 (Haskell, с эффективной математикой!)
- DigitalTrauma , 40 (Облако, будущее уже сейчас)
- primo , 38 (Питон и мой личный фаворит - и очень профессиональный!)
- Сильвестр , 20 (Ракетка, хотя Янембер ее растягивает!)
- ilmale , 16 ( Высоко оптимизированный алгоритм в Lua)
Оригинальный вызов ниже.
Пожалуйста, помогите мне, это очень срочно! :(
Мне нужно преобразовать сокращенные версии названий месяцев в их более длинные представления (например, «Декабрь» -> «Декабрь») без учета регистра. Прямо сейчас я использую Java; имя месяца - это строка, и я бы не стал сначала преобразовывать его в объект Date. Любой язык подойдет, хотя.
Есть простой способ сделать это?? Успокойся, пожалуйста, я новичок в программировании!
Это конкурс популярности кодового троллинга (лучший вид!). Ответ с наибольшим количеством голосов 8 апреля 2014 года выигрывает.
источник
Ответы:
Это действительно просто с небольшой полиномиальной интерполяцией!
Сначала я посмотрел список коротких названий месяцев
и проверил сумму своих символов ASCII значений
затем вычел 300 из них, чтобы понять, с чем я здесь имею дело, и подготовил массив, содержащий все более длинные версии названий месяцев.
Я думаю, вы можете видеть, что происходит сейчас - все, что мне нужно, это функция getIndex, которая отображает 13 на 0, 1 на 1, 20 на 2 и так далее, так что я могу просто сделать
К счастью, Wolfram | Alpha может сделать это для меня ! Числа становятся немного большими, но Haskell может справиться с этим с изяществом. Нам просто нужно округлить результаты, потому что арифметика с плавающей точкой немного неточна! Итак, поехали, быстрый, элегантный и идиоматичный Haskell:
Запустите его просто так:
источник
interpolating polynomial
.Bash + инструменты GNU + "облако"
У Google есть ответ на все вопросы, и мне повезло :
В использовании:
источник
[a-zA-Z]
работать в качестве замены[[:alpha:]]
(кажется, таким образом, когда я пытаюсь по крайней мере)? Это спасло бы 3 символа. Можно запросить еще несколько символовask.com
, но это может быть не так надежно.питон
Поскольку эта функция очень важна, она, вероятно, будет использоваться очень часто, поэтому вам следует постараться сделать ее как можно быстрее. Другие авторы рекомендовали использовать поиск по хэш-карте ... не делайте этого! Hashmaps действительно медленны по сравнению с массивами. Вам просто нужно преобразовать каждую аббревиатуру в число. Для этого можно использовать стандартную технику хеширования:
Это почти наверняка будет уникальным, и многие профессиональные инструменты используют это.
Теперь вам нужно создать функцию поиска:
И используйте это так:
print month_abbr_to_name("Dec")
→December
НТН!
Троллинг
источник
рэкет
Я иду на решение KISS . Я протестировал его с использованием сценария использования OP "Dec" со всеми заглавными буквами, чтобы проверить, вернется ли правильный результат. Это прошло с летающими цветами.
Очевидно, троллинг здесь заключается в том, что он работает только в нескольких случаях, поэтому он бесполезен :-)
источник
LUA
Мое решение будет работать на вашем языке, ваш профессор будет счастлив
Тест
источник
Perl
источник
Джава
Вы сказали, что ваш текущий код написан на Java, поэтому я решил, что вам будет проще.
источник
Bash + coreutils + paq8hp12
Ответ, который в настоящее время проголосовал больше всего, имеет доступ к Интернету для каждого запроса. Помимо того, что он очень неэффективен, это также означает, что ваш скрипт не будет работать, если нет интернета.
Лучше хранить необходимую информацию на жестком диске. Конечно, вы можете хранить только данные, необходимые для этого самого сценария, но для этого потребуются разные данные. Гораздо лучше хранить все данные, которые могут вам понадобиться, в одном многоцелевом файле.
Троллинг
источник
Python + SQLite
Многие из ответов до сих пор делают ошибку в жестком кодировании названий месяцев. Но вы никогда не знаете, когда какой-нибудь папа или президент заставит нас переключиться на другой календарь, и тогда тонны кода разбора / форматирования даты мгновенно станут бесполезными! (Или, чаще, когда вам нужно интернационализировать вашу программу.)
Что вам нужно, это база данных.
Затем просто напишите простую программу для запроса.
источник
SH & друг (дата)
Функция:
Тестирование это:
Это коротко ... но посчитайте, что это соотношение "зло на персонажа" ... mwhuaaahahahaaaa ...
источник
date
возможностей форматирования даты в России. Иdate
учитывает локализацию, он генерирует месяц, соответствующий локализации.-d"a_month_name 1
устанавливает дату на 1-й из названного месяца (возможно, короткое имя), а пропущенный год устанавливается так, что это будет следующий такой месяц.+%B
является форматом для отображения данной даты и означает «длинное имя месяца». Все таты обернуты в функцию оболочки, и поскольку там нет специфической вещи BASH, SH будет достаточно для ее запуска. Так что в основномdate
заслуживает всех аплодисментов, а не меня! И мне плевать на отрицательные голоса в Codegolf! : -ÞPerl
Как насчет хорошей старой силы?
Почему это круто:
Использование встроенной в Perl перегрузки операторов (приращение строк) делает этот код таким же быстрым, как и собственный код Си. Посмотрите на все эти нули, показывая, насколько быстро он работает!
Алгоритм интуитивно понятен, и я оставляю доказательство в качестве упражнения для читателя, но просто для того, чтобы убедиться, что он работает во всех случаях, давайте проверим август, один из месяцев, и один из, чтобы убедиться, что мы ничего не пропустил
Trollage:
Оставляя в стороне методы кодирования, которые могли бы привести к гибели Дамиана Конвея, этот код периодически ошибочен и периодически крайне медленен. «Фев» работает примерно на 6 порядков - в миллион раз медленнее, чем «май», «июнь» или «июль». Feboapic, Sepibnd, Novgpej и Decabjuj - это не месяцы (хотя их забавно пытаться произносить).
PS - у меня был какой-то код, который имеет еще больший разброс времени выполнения, но он скучно выводит правильный ответ во всех случаях, что гораздо менее весело.
источник
JavaScript - оптимизированный кластер узлов с ветвями, листьями и строковыми бочками.
источник
Java, Google и вероятность
Я разочарован тем, что многие решения здесь «изобретают велосипед», когда ответ легко доступен в Интернете.
Вот вывод моей программы:
Не идеально, но достаточно хорошо, чтобы отправить в QA. Я смог достичь этих результатов, используя возможности краудсорсинга:
источник
Bash + binutils
Я изо всех сил пытался сделать очевидное, преобразовав входные данные в объект даты, но с треском провалился. Наконец-то я прибег к грубой силе.
Тестовые прогоны:
источник
Я понимаю, что проверка названий месяцев очень сложна и требует много вычислений и логического мышления. Вот оптимизированная версия алгоритма Buzz-Strahlemann для проверки названий месяцев .
PHP
Тролли:
Этот ответ;
Не обрабатывает часовые пояса и выдаст предупреждающее сообщение;
Не принимает месяц как ввод, но вам нужно жестко его кодировать;
Даже когда вы жестко его кодируете, он чувствителен к регистру;
Этот код пытается получить текущий месяц, первые три буквы и проверить, соответствует ли он
$month
. Если он не совпадает, он увеличивает временную метку на 1, а затем повторяет попытку. Это заканчивается очень медленно ;Этот код ничего не выводит (кроме предупреждения, конечно);
Комментарии очень вводят в заблуждение:
time()
не загружает расширенную библиотеку времени, но получает текущую временную метку;substr($checkThis,1,4)
пропускает первую букву месяца и получает следующие 4 (arch
дляMarch
, например); Правильная форма - та, что в комментариях;Даже когда совпадение найдено, код не выйдет из цикла: на самом деле переменная, для которой установлено значение
true
, отличается.источник
arch
что никогда не будет равныхMar
?партия
То, что вы просите, нетривиально. Однако я нашел идеальное решение для вас! Как это работает, загрузив очень сложный список английского языка на свой жесткий диск. Затем входные данные сверяются с загруженным списком и дается окончательное название месяца! Genius!
Теперь этот метод имеет много плюсов по сравнению с другими методами, некоторые из которых:
Jan
илиJanu
за январь!Код:
Trollz
источник
! # / Баш
Чтобы ваша программа реагировала быстрее, я включил в список месяцы на 31 день раньше. По статистике, при равномерном распределении дат, вы, скорее всего, окажетесь в одном из этих месяцев.
Я задокументировал каждую строку, чтобы произвести впечатление на вашего босса.
Сохраните это в файле с именем
lookup_month_script.bash
и скопируйте и вставьте следующую строку, чтобы проверить это:Удачи с вашим проектом!
источник
JavaScript - 209
В нем говорится не преобразовывать в Date, что здесь не происходит, я просто использую Date для генерации расширения короткого имени.
Тесты ввода / вывода:
источник
Java 696, включая тестовый ввод
источник
Язык программирования "Brainf * ck" является идеальным инструментом для этого! Конечно, это может быть не совсем то, что вы искали, но работа сделана безупречно!
Я уверен, что ваш учитель будет горд, когда вы покажете ему это!
Троллинг
источник
Джава
Уважаемый ученик компьютерного ученого,
Это довольно сложная задача, и я решил только частично: я думаю, это для вашей дипломной работы или какой-то исследовательской цели.
До сих пор у меня есть только бета-версия с некоторыми незначительными ошибками: иногда она дает неправильные результаты, но я уверен, что ваш профессор примет ваши усилия.
файл Month.java:
файл Era.java:
Для запуска выполните:
выход:
Не забудьте установить
%JAVAPATH%
путь, по которому вашJava
компилятор!источник
Поскольку OP использует Java, я дам решение Java. Идея проста:
Map
от длинного имени к короткому имени.String.equalsIgnoreCase
чтобы проверить, совпадает ли короткое имя с входным коротким именем, игнорируя регистры. Если это так, успех, выход.Вот источник:
Троллинг
источник
Спасибо за размещение этой провокационной мысли и оригинального вопроса. Те из нас, кто публикует ответы на Stack Overflow, пользуются возможностью помочь постерам, поскольку цель этого веб-сайта состоит в том, чтобы каталогизировать все такие вопросы, чтобы сделать ненужными учебники и самостоятельное обучение. Не беспокойтесь из-за того, что вы не понимаете этот конкретный вопрос, так как это типичный вопрос, задаваемый из-за его скрытого трюка, необходимого для его эффективного решения. Инструкторы обычно задают этот вопрос, чтобы определить не только вашу глубину понимания языка, но и то, знаете ли вы об этой распространенной ловушке программиста: кодировке символов. Вы поймете более полно после того, как внимательно прочитаете следующую ссылку, как я знаю, вы будете: ссылка .
К настоящему времени я уверен, что ваш профессор очень подробно описал важность повторного использования кода, поэтому, прочитав предоставленную мною ссылку на кодировку символов, вы абсолютно точно поймете, что вам придется создать достаточно общий класс, который может работать с любым языком, даже если в исходном вопросе не было конкретно указано это требование (вы также можете узнать о спецификации требования, которая поможет вам понять требования, прочитайте эту ссылку: ссылка.
Вы очень умны, предлагая не использовать предоставленный объект Date, так как использование кода на языках по умолчанию не позволит вам показать свое истинное понимание языка своему профессору.
Чтобы помочь вам в этом сложном вопросе, я написал приложение на Groovy, которое решит вашу проблему и, несомненно, будет иметь больше смысла, чем та загадочная Java. Не пугайтесь использования Groovy для этого ответа, так как Groovy также работает на JVM точно так же, как код Java, поэтому вы можете легко перенести этот код в свой класс Java с помощью всего лишь нескольких модификаций. Я приложил ссылку, чтобы помочь вам в этом процессе, но я не буду беспокоиться об этом до утра, так как это займет всего секунду (вот ссылка на потом: ссылка, Итак, просто скопируйте код на данный момент, так как я покажу множество тестовых примеров кода, работающего надлежащим образом, чтобы вы могли чувствовать себя уверенно в своем представлении. Я определенно понимаю, что вы очень, очень занятый ученик, с множеством обязательств на вашей тарелке. Вы, вероятно, знаете, что авторы здесь работают полный рабочий день и получают хорошую компенсацию.
Извините, что я ничего не оставил вам здесь делать, я увлекся, отвечая на ваш вопрос, заставляющий задуматься. Так что просто скопируйте и вставьте этот ответ. Как вы можете видеть из следующих прогонов кода, вот что он может сделать:
источник
Юлия
Вы захотите использовать силу множественной отправки здесь. Сначала мы определим тип каждого месяца. Затем мы можем написать простые определения функций для каждого типа месяца, которые дают желаемый ответ. Это позволит вам использовать удобную форму,
nicename(Jan)
не беспокоясь об этих раздражающих кавычках. Кроме того, мы можем определить вспомогательную функцию для приема строк и преобразования их в типы, повторного использования всей работы, которую мы уже проделали, для обеспечения совершенно нового интерфейса.источник
Python 2.75
Истинная красота в простоте, что означает низкие требования к памяти. Забудьте эти надоедливые словари и параграфы кода. Эта функция настолько хороша, что в любом случае она будет соответствовать коротким названиям месяцев. Обратите внимание.
БОНУС:
Вы можете использовать более 3 первых символов (например, «sept», «febr» и т. Д.)
источник
в с #
источник
Вот небольшая программа, которая делает то, что вы просили.
Я написал это на C ++, потому что это то, чем я сейчас пользуюсь, но он довольно легко конвертируется в Java. Будучи самоотверженным студентом, я уверен, что вы можете справиться с этим самостоятельно.
Я решил быть хорошим и использовать
std::string
s вместоchar*
s. Я уверен, что я бы перепутал вас с синтаксисом вроде,char*[]
и я бы определенно забыл позвонитьdelete
, или сделал бы что-то глупое, как вызовdelete
вместоdelete[]
.источник
С
Какое-то общее преобразование сокращений в полные слова, просто настройте
data
массив ...источник
PHP
источник