短い月名をより長い名前に変換する[終了]


28

この挑戦は終わりました!おめでとうフランク

私は確かに、私は良い成績を得るでしょうだったが、中に電源を入れた後Flonkの私の仕事、私の教授それは私のものだったとも、それがそのように複雑になった理由を理解できなかったと信じていませんでした...私は失敗した私のお母さんは、FacebookとのMinecraftから私を接地しますひと月ほど。分かりません。:(

すべての提出をありがとう!ここでいくつかの素晴らしい答え。公式の勝者はフランクで、スコアは64です。トップ5は次のとおりです。

  1. Flonk、64(Haskell、効率的な数学!)
  2. DigitalTrauma、40(クラウド、未来は今)
  3. primo、38(Python、そして私の個人的なお気に入り-そして、非常にプロフェッショナルです!)
  4. Sylwester、20(ラケット、ジェーンバーはそれを伸ばしている!)
  5. ilmale、16(Luaの高度に最適化されたアルゴリズム)

以下の元の課題。


私を助けてください、それは非常に緊急です!!! :(

月名の短縮バージョンを、大文字と小文字を区別せずに、より長い表現(「Dec」->「December」など)に変換する必要があります。現在、私はJavaを使用しています。月の名前は文字列であり、最初にDateオブジェクトに変換したくないのです。ただし、どの言語でも可能です。

これを行う簡単な方法はありますか?? 簡単に始めてください、私はプログラミングの初心者です!


これは人気のコンテストをトローリングするコードです(最高の種類があります!)。2014年4月8日に最も賛成票を投じた回答が勝利します。


7
?<<<私の宿題を、迅速にそれを行う「私は、それは非常に緊急です!!! :(助けてください」

13
@yetiできるだけ早く!! クラスを失敗する前に急いでください!
ジェイソンC 14

24
Stackoverflowからこのような質問をコードトローリングタグを使用してcodegolf.SEに密かにコピーし、その後、spoilerタグのテキストを削除してcodegolf.SEからの回答を元の投稿に転送する機能が必要です。
ダニエロ14

公式のスタンスに従ってコードトローリングは削除されるプロセスにあります。この質問には非常に多くの回答が寄せられており、その多くは非常に高く評価されています。それは上のわずか50%、「削除」票を受け取った世論調査が、私が歴史的意義のためにそれをロックしていますので、それは、非常に多くの答えとの票を受け取っであること独特です。
ドアノブ

回答:


74

多項式補間が少しあれば本当に簡単です!

最初に、短い月名のリストを見ました

["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"]

文字のASCII値の合計を確認しました

[313,301,320,323,327,333,331,317,328,326,339,300]

次に、それらから300を差し引いて、ここで扱っていることを把握し、月の名前のすべての長いバージョンを含む配列を準備しました。

[13,1,20,23,27,33,31,17,28,26,39,0]
mons = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

私はあなたが今何が起こっているかを見ることができると思います-私が必要とするのは13に0、1に1、20に2などをマップする関数getIndexだけなので、私は簡単に行うことができます

getMonthName shortname = mons !! (getIndex shortname)

幸いなことに、Wolfram | Alpha はこれを私のためにできます!数字は少し大きくなりますが、Haskellはそれを優雅に処理できます。浮動小数点演算は少し不正確なので、結果を丸める必要があります!そこで、高速でエレガントで慣用的なHaskellを使用します。

import Data.Char

getIndex x = round $ 11 -
    (220797068189915461*x)/11644212222720 +
    (184127469431441671621*x^2)/6982771136140800 -
    (8800438195450444577647153*x^3)/1013060436431307264000 +
    (2826703553741192361967823*x^4)/2026120872862614528000 -
    (269098602165195540339443*x^5)/2026120872862614528000 +
    (13744405529566098359*x^6)/1692665725031424000 -
    (13060656886070844161*x^7)/39727860252208128000 +
    (5939638907108115199*x^8)/675373624287538176000 -
    (303426664924585177*x^9)/2026120872862614528000 +
    (2983240583426137*x^10)/2026120872862614528000 -
    (12901227927103*x^11)/2026120872862614528000

mons = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
getMonthName = (mons!!).getIndex.subtract 300.fromIntegral.sum.fmap (ord.toLower)

次のように実行します。

λ> getMonthName "DeC"
"December"

λ> getMonthName "jan"
"January"

3
非常に優れており、整数は非常に効率的です。インストラクターが私の作品を気に入ってくれると確信しています。
ジェイソンC 14

8
について教えてくれた+1 interpolating polynomial
プリモ14

3
最初の文章を読むときは笑わなければなりませんでした。
照応14

46

Bash + GNUツール+「クラウド」

Googleにはすべてに対する答えがあり、幸運を感じています。

wget -qU Mozilla -O- "http://www.google.com/search?q=$1+month&btnI" | grep -Eo "<title>[[:alpha:]]+" | cut -d\> -f2

使用中で:

$ ./longmonth.sh jan
January
$ ./longmonth.sh feb
February
$

1
よくやった!
ojblass 14

[a-zA-Z]代わりとしては機能しません[[:alpha:]](少なくとも試してみるとそのように見えます)。これで3文字節約できます。クエリを実行するとask.com、さらにいくつかの文字を保存できますが、それは信頼性が低い場合があります。
マイケル14

7
これがコードゴルフである場合に重要な@Mic
地下

7
@JasonCその「クラウドベース」ソリューション。確かに他の正当化は必要ありません。
デジタル外傷14

4
@DigitalTrauma親愛なるIve氏はクラウドについて聞いたことがあり、非常にプロフェッショナルです!とても良い!とても納得!Ty -JasonC-
ジェイソンC

43

Python

この関数は非常に重要であるため、おそらく頻繁に使用されるため、可能な限り高速にするようにしてください。他のポスターは、ハッシュマップ検索の使用を推奨しています...これをしないでください!ハッシュマップは配列と比較して本当に遅いです。各略語を数字に変換するだけです。これに使用できる標準のハッシュ手法があります。

index = reduce(int.__mul__, (ord(c) for c in abbr))

これはほとんど一意であることが保証されており、多くのプロフェッショナルツールがこれを使用しています。

次に、ルックアップ関数を作成する必要があります。

def month_abbr_to_name(abbr):
  months = ["Unknown"] * 2000000

  months[679932]  = "December"
  months[692860]  = "Febuary"
  months[783315]  = "August"
  months[789580]  = "January"
  months[829920]  = "April"
  months[851466]  = "March"
  months[903749]  = "May"
  months[907236]  = "October"
  months[935064]  = "July"
  months[938896]  = "September"
  months[952380]  = "June"
  months[1021644] = "November"

  index = reduce(int.__mul__, (ord(c) for c in abbr))

  month_name = months[index]

  if month_name == "Unknown":
    raise ValueError("Invalid month abbreviation!")

  return month_name

そして、次のように使用します。

print month_abbr_to_name("Dec")December

HTH!


トローリング

-このコードは恐ろしく遅いです。配列へのアクセスは確かにハッシュマップよりも高速ですが、配列が必要なハッシュマップよりも数千倍大きい場合、これは当てはまりません。
-この非常に大きな配列は、関数が呼び出されるたびに何度も作成されます。もう少しスペースを無駄にするために、各値は「不明」で初期化されます。
-ハッシュ関数は、Pythonに不慣れな人にはわかりにくいようになっています。私は、それが調査を思いとどまらせるために「多くのプロのツールで使用される」と付け加えます。
-ハッシュ関数は、12か月間を正確に区別するのに十分な独自性を備えていますが、スワップ文字などの一般的なタイプミスをキャッチしません。
-3文字より長い文字列は、配列インデックスが範囲外でクラッシュします。
-「Febuary」のつづりが間違っています。
-「この機能は非常に重要です。」OPのマイナーなエゴラブ。


12
よく見てください、皆さん。これは適切なコードトローリングの答えです!追伸 イムは確かに私はこれで良いグレードを取得し、そのはるかに良い、その後sloooow書くためにJavaのシェルスクリプトIトライ[ここに画像の説明を入力します]?!
ジェイソンC

2
「Febuary」のつづりが間違っています。-いくつかの深刻なトローリング:)
Jaa-c 14

10
その後、実際に非効率的なハッシュテーブルを実装し、ハッシュテーブルは非効率的であることを言って1
James_pic

1
「ハッシュマップは配列に比べて本当に遅い。各略語を数字に変換するだけでよい。これに使用できる標準のハッシュ手法がある...」つまり、ハッシュマップを再実装する。うん +1
wchargin 14

25

ラケット

KISSソリューションに行きます。正しい結果が返されるかどうかを確認するために、OPのユースケース「Dec」をすべて大文字でテストしました。それは飛ぶ色で合格しました。

(define (long-month short-month)
  (define end "ember")   
  (string-titlecase 
   (string-append short-month end)))

;; Test OP's use case
(long-month "DEC") ;;==> "December"

明らかに、ここでのトローリングは、いくつかの場合にのみ機能するため、役に立たないということです:-)


おそらく、コードトローリングタグwikiから、「タスクは機能するコードを提供することですが、役に立たず、OPをひどくイライラさせることです。」あなたのコードは機能しません。ここで、もう1つ下票があります。
user12205 14

@aceエラーをスローせず、正解「12月」を返します。質問は、それが他の月でも機能するか、彼らが持つであろう長い名前を指定しなかったので、最後に「残り火」を追加することは良いトロールの答えであると期待しています。
シルウェスター

1
「月名の短縮バージョンをより長い表現に変換する必要がある(「Dec」->「December」など)」という質問から、12月は例であり、すべてのケースではありません。プログラムはすべての月の名前で機能するはずです。
user12205

9
@aceそしてそれは。「Jan」を「Janember」に変えます。OPがまさに望んでいる例を見てください。「質問を意図的に誤って解釈する」と「質問をチートする」の両方が答えるのに良い方法であるため、コードトローリングタグに対する回答をどのように下げることができるかは本当にわかりません。
シルウェスター

7
これはまさに私が提供しようと考えていたタイプのソリューションであり、「免責事項:あなたは緊急であると言ったので、私は急いで3つのケースだけをテストしましたが、すべてのケースで合格しました」。
AShelly 14

22

ルア

私のソリューションはあなたのロケール言語で動作し、あなたの教授は満足します

input = ...
found = false
input = string.lower(input)

i = 12
while i > 0 do
   abb = os.date("%b")
   if string.lower(abb) == input then
      print(os.date("%B"))
      return
   end
   os.execute('sleep 28d')
   i = i - 1
end
print('not found')

テスト

lua 25207.lua aPr
April

正しい場合は現在の月の略語を確認し、そうでない場合は長い文字列を返します。それ以外の場合は再試行してください。


ブリリアント!<<<エラー:接続がタイムアウトしました>>>
joeytwiddle

13

Perl

use re 'eval';$_=lc<>;
s/b/br/;s/an|br/$&uary/;s/(?<!u)ar/arch/;s/r$/ril/;s/p$/pt/;s/t|v|c$/$&ember/;
s/ju(.)/$&.$1=~tr\/nl\/ey\/r/e;s/(?<=g)/ust/;s/ctem/cto/;
print ucfirst;

-正規表現の地獄。正規表現が「あいまいな言語によるトローリング」としてカウントされないことを願っています。
-非常に壊れやすい。Bugsemberのサポートを追加するのは大変です。
-判読不能。パターン内部のパターンは、さらにそれを可能にします。
-6月と7月を1つのステートメントに圧縮しても、実際には何も圧縮されません。
-のlookbehindのランダムな使用、g他の人は置換でパターンを繰り返します。
- use re 'eval'実際には必要ありません。可変パターンが必要な場合にのみ使用されます。また、eval「圧縮」を少し「得る」ために使用します。


17
私には、通常のPerlのように見えます...
ピーター・オルソン

1
@PeterOlson言語はアルゴリズムに適合するように選択されましたが、アルゴリズムはタスクにまったく適合しません、あなたは同意しませんか?:
ジョンドヴォルザーク

10

Java

あなたはあなたの現在のコードがJavaであると言ったので、私はあなたのために物事を簡単にすると思いました。

// The standard library's there, so you should use it
import static java.util.Calendar.*;

public class MonthConverter {

  private static int shortNameToNumber(String shortName) {
    int i;
    switch (shortName) {
      case "jan": i = 1;
      case "feb": i = 2;
      case "mar": i = 3;
      case "apr": i = 4;
      case "may": i = 5;
      case "jun": i = 6;
      case "jul": i = 7;
      case "aug": i = 8;
      case "sep": i = 9;
      case "oct": i = 10;
      case "nov": i = 11;
      case "dec": i = 12;
      default: i = 0;
    }
    return i;
  }

  private static String numberToLongName(int month) {
    switch (month) {
      case JANUARY: return "January";
      case FEBRUARY: return "February";
      case MARCH: return "March";
      case APRIL: return "April";
      case MAY: return "May";
      case JUNE: return "June";
      case JULY: return "July";
      case AUGUST: return "August";
      case SEPTEMBER: return "September";
      case OCTOBER: return "October";
      case NOVEMBER: return "November";
      case DECEMBER: return "December";
      default: return "Unknown";
    }
  }

  public static String fullName(String shortName) {
    return numberToLongName(shortNameToNumber(shortName));
  }

  public static void main(String[] args) {
    // Always test your code
    System.out.println("jan is: " + fullName("jan"));
    assert fullName("jan").equals("January");
  }
}

Calendarクラスには、0から始まる月が番号付けされる楽しい小さな落とし穴がありJANUARY == 0ます。しかし、これは明らかに、テスト中にコードに影響を与えることはできません。shortNameToNumberには意図しない切り替えフォールスルーがあることに注意してください。これは、毎月が0になることを意味しJANUARY == 0ます。便利なことに、テストに合格します。


1
ああ、スイッチステートメントにブレークがないことに気づきませんでした。スイッチを使用してから長い時間が経ちました。
ジョーZ. 14

10

Bash + coreutils + paq8hp12

現在最も支持されている回答は、すべてのクエリでインターネットにアクセスする必要があります。非常に非効率であることに加えて、これは、インターネットがない場合、スクリプトが失敗することも意味します。

必要な情報をハードディスクに保存することをお勧めします。もちろん、このスクリプトに必要なデータだけを保存することもできますが、そのためにはタスクごとに異なるデータが必要になります。必要な可能性のあるすべてのデータを単一の多目的ファイルに保存することをお勧めします。

# This script is supposed to output only the wanted information, so we'll have to close
# STDERR and make sure accidental keyboard presses don't show any characters on the screen.

exec 2>&-
stty -echo

# Unfortunately, Bash doesn't have goto labels. Without them, it's impossible to use if
# statements, so we'll implement them.

goto()
{
    exec bash <(egrep -A 1000 "^: $1" $0) $BASH_ARGV
}

# We'll need enwik8, a magic file containing all the important Wikipedia data. EVERYTHING
# can be found on Wikipedia, so this file contains all the information any script could
# possibly need.

ls | grep -q enwik8 && goto alreadydownloaded

# Too bad.

wget http://mattmahoney.net/dc/enwik8.zip
unzip enwik8.zip

# ZIP is a very wasteful format and hard disk space is expensive. It is best to compress
# the file using a more efficient algorithm.

wget http://mattmahoney.net/dc/paq8hp12any_src.zip
unzip paq8hp12any_src.zip

# Make the compression program executable and compress the magic Wikipedia file.

chmod +x paq8hp12_l64
./paq8hp12_l64 enwik8.paq8 enwik8

: alreadydownloaded

# Extract the enwik8 file from the paq archive.

./paq8hp12_l64 enwik8.paq8 enwik8

# Now we use a simple POSIX Basic Regular Expression to find the required information in
# the file.

cat enwik8 | egrep -io "[0-9].[a-z]?[a-z]?[a-z]?[a-z]?[a-z]?[a-z]?[a-z]?[a-z]?[a-z]?[a-z]?[a-z]?[a-z]?[a-z]?[a-z]?[a-z]?.[0-9]" | sort | uniq -c | sort -n | tac | egrep -o "$1[a-z]*" | sort | uniq -c | sort -n | tac | head -n 1 | cut -d ' ' -f 7

# We're done.

トローリング

  • STDERRを閉じるため、スクリプトが失敗した場合はデバッグできません。

  • 入力エコーを無効にします。これは、スクリプトの終了後も保持されます。端末から実行する場合は、端末を再び使用可能にするためにstty echoを実行する必要があります。端末から実行しないと、スクリプトがクラッシュする可能性があります。

  • 最初にgotoを実装する必要があります。それだけでは十分ではないかのように、スクリプトのファイル名にスペースが含まれているとgoto関数は機能しません。

  • 文字列enwik8を含むファイルが現在のディレクトリに存在する場合、アーカイブをダウンロードしません。これうまくいくかもしれません

  • (36 MBに圧縮されている場合でも)100 MBのファイルをダウンロードすることは、このタスクにとって明らかに過剰です。さらに、enwik8には4 GB以上のWikipediaダンプの最初の100 MBが含まれているため、特定のタスクについては、有用な情報が含まれることはほとんどありません。

  • paq8hp12でファイルを圧縮すると16 MBに縮小されますが、圧縮と解凍の両方に1時間かかります。実際に、このスクリプトが最初に実行されるときに両方を実行します。

  • このスクリプトはenwik8の zipバージョンまたはrawバージョンを削除しないため、16 MBに縮小するとさらに多くのハードディスク容量が消費されます。

  • 圧縮ユーティリティは、64ビットプロセッサでのみ動作します。

  • ダウンロードまたは抽出されたすべてのファイルは現在のディレクトリに残ります。

  • スクリプトの最も扱いにくい部分、つまり正規表現パイプモンスターについては説明していません。基本的に、先頭と末尾の数字を持つ4〜19バイトのすべての文字列を抽出し、それらの文字列を出現回数で並べ替え、短い月名を含む文字列をフィルタリングし、出現回数で再度並べ替え、最も頻繁に表示します。

  • 上記良いアイデアであったとしても、最初はcatは不要です。egrepはこのタスクではかなり遅く、正規表現は多くの誤検知を返します(1つの正規表現ですべてを実行できます)。uniq -c | sort -n | tacはまったく何も達成せず、ソートを使用します| sort -rおよびcutの代わりにtacは、先頭のスペースの数が可変であるため、確実に動作しません。

  • 正規表現は拡張 POSIX正規表現であるため、BRE構文をグーグルで検索してもまったく役に立ちません。

  • 11月ではなく11月8月ではなく6を返します。


1
これらは非常に役立つアドバイスです!確かにこれはより効率的であり、私のインストラクターは、専門家がOOPのデータを再利用可能にし、OOPはより速く、より良いと私に言った!
ジェイソンC 14

9

Python + SQLite

これまでの回答の多くは、月の名前をハードコーディングするという間違いを犯しています。しかし、教皇や大統領がいつ私たちを別のカレンダーに切り替えさせようとすると、膨大な日付の解析/フォーマットコードが即座に役に立たなくなります!(または、より一般的には、プログラムを国際化する必要がある場合。)

必要なのはデータベースです。

CREATE TABLE tblShortMonthNames (
   MonthAbbr CHAR(3) PRIMARY KEY NOT NULL COLLATE NOCASE,
   MonthID   INTEGER NOT NULL
);

CREATE TABLE tblFullMonthNames (
   MonthID   INTEGER PRIMARY KEY,
   MonthName VARCHAR(9) NOT NULL
);

INSERT INTO tblFullMonthNames VALUES (1, 'January');
INSERT INTO tblFullMonthNames VALUES (2, 'February');
INSERT INTO tblFullMonthNames VALUES (3, 'March');
INSERT INTO tblFullMonthNames VALUES (4, 'April');
INSERT INTO tblFullMonthNames VALUES (5, 'May');
INSERT INTO tblFullMonthNames VALUES (6, 'June');
INSERT INTO tblFullMonthNames VALUES (7, 'July');
INSERT INTO tblFullMonthNames VALUES (8, 'August');
INSERT INTO tblFullMonthNames VALUES (9, 'September');
INSERT INTO tblFullMonthNames VALUES (10, 'October');
INSERT INTO tblFullMonthNames VALUES (11, 'November');
INSERT INTO tblFullMonthNames VALUES (12, 'December');

INSERT INTO tblShortMonthNames
   SELECT SUBSTR(MonthName, 1, 3), MonthID FROM tblFullMonthNames;

次に、クエリを実行する単純なプログラムを作成します。

import sqlite3
import sys

QUERY = """SELECT tblFullMonthNames.MonthName
FROM tblShortMonthNames INNER JOIN tblFullMonthNames USING (MonthID)
WHERE tblShortMonthNames.MonthAbbr = ?"""

with sqlite3.connect('months.db') as db:
    for abbr in sys.argv[1:]:
        row = db.execute(QUERY, [abbr]).fetchone()
        if row:
            print(row[0])
        else:
            print(abbr + ' is not a valid month name.')

5

SHと友人(日付)

関数:

longmonth() {
    date +%B -d"$1 1"
}

それをテストする:

$ echo $LANG
de_DE.utf8
$ for i in jan feb mar apr may jun jul aug sep oct nov dec ; do longmonth $i ; done
Januar
Februar
März
April
Mai
Juni
Juli
August
September
Oktober
November
Dezember
$ LANG=C
$ for i in jan feb mar apr may jun jul aug sep oct nov dec ; do longmonth $i ; done
January
February
March
April
May
June
July
August
September
October
November
December

それは短いです...しかし、それは「キャラクターごとの悪」比率です... mwhuaaahahahahaaa ...


私は言語がわからないので、ここで何も悪いことを見ることができません。あなたのダウン票は、同様の立場にある他の人からのものだと思います。何が起こっているのか、なぜそれが悪なのかを説明してください。私は興味がある。
レベルリバーセント14

これは、date日付の書式設定機能のa(n)(ab)使用です。そして、dateの点の局在化は、それが局在を一致月を生成します。-d"a_month_name 1日付を名前付き月の最初の日(おそらくは短い名前)に設定し、欠落している年が次のその月になるように設定します。+%Bは、指定された日付を表示するための形式で、「月の長い名前」を意味します。すべてのtatはシェル関数にラップされており、そこにはBASH固有のものがないため、SHで実行できます。基本的dateに、私ではなく、すべての拍手に値します!そして、私はcodegolfのdownvotesを気にしません!:-Þ

これ大好き!虐待者。
ojblass

4

perl

良いオールドブルートフォースはどうですか?

$|++;

use List::Util qw(reduce);

sub hash {
    my $t=9;
    (reduce { $a*$b*log(++$t+$a) } map { ord() } split//, shift)%54321098
}

my @m = (qw( january february march april may june
             july august september october november december ) );
my %targets = map { hash($m[$_]) => 1 } (0..$#m);

chomp(my $in = lc <>);

print ucfirst $in;

my $r;
if(!$targets{hash($in)}) {
  $r = "a";
  ++$r until $targets{hash($in.$r)};
}
print "$r\n";

これが素晴らしい理由:

  • ブルートフォースは常にそれを行うための最大の方法です。
  • あなたの便宜のために、それがわかるとすぐに部分的な答えを印刷します(「Feb」が「Feb ...」で始まるものの略であることを知らなかったに違いありません)?
  • 最高のセキュリティを実現するカスタムハッシュ関数。
  • perlの組み込み演算子オーバーロード(文字列のインクリメント)を使用すると、このコードはネイティブCコードと同じくらい高速になります。これらすべてのゼロを見て、実行速度を確認してください!

    ski@anito:/tmp$ for m in mar apr may jun jul  ; do echo $m | time -f "%U user" perl brute.pl ; done 
    March
    0.00 user
    April
    0.00 user
    May
    0.00 user
    June
    0.00 user
    July
    0.00 user
    
  • アルゴリズムは直感的に明らかであり、読者に演習として証拠を残しますが、すべての場合に機能することを確認するために、8月、-berか月の1つ、および-uariesの1つを確認して確認します何も見逃していませんでした:

    ski@anito:/tmp$ for m in aug jan oct ; do echo $m | perl brute.pl  ; done 
    August
    January
    October
    

トロール:

Damian Conwayがすぐに死んでしまうようなコーディング手法を別にすれば、このコードは断続的に間違っており、断続的に非常に遅いです。「Feb」は、「may」、「jun」、または「jul」よりも約6桁-100万回実行されます。Feboapic、Sepibnd、Novgpej、およびDecabjujは月ではありません(発音を試してみるのは楽しいですが)。

    ski@anito:/tmp$ for m in jan feb mar apr may jun jul aug sep oct nov dec ; do echo $m | time -f "%U user" perl  brute.pl  ; done 
    January
    3.14 user
    Feboapic
    62.77 user
    March
    0.00 user
    April
    0.00 user
    May
    0.00 user
    June
    0.00 user
    July
    0.00 user
    August
    0.10 user
    Sepibnd
    1.33 user
    October
    2.22 user
    Novgpej
    1.11 user
    Decabjuj
    4.27 user

PS-ランタイムの広がりがさらに大きいコードがいくつかありましたが、すべてのケースで退屈に正しい答えを出力するため、あまり面白くありません。


3

JavaScript-ブランチ、リーフ、ストリングバレルを備えた最適化されたノードクラスター。

// fullMon - Converts month key names to full names using a highly optimized tree for fast traversal.
function fullMon(key) {

    // Initialize the full month string
    var fullMonth = "";

    // Make sure the key is capitalized.
    key = key.substr(0,1).toUpperCase() + key.substr(1).toLowerCase();

    // Set the current node to the tree root.
    var current = fullMon.tree;

    // Traverse the characters in key until we can go no further.
    for (var i = 0; i < key.length; i++) {
        var c = key.charAt(i)
        fullMonth += c
        if (typeof current[c] === "undefined") return key // no full month for this key
        current = current[c]
    }

    // The remaining leaves are the characters in the full month.
    while (current !== null) {
        for (c in current) fullMonth += c
        current=current[c]
    }
    return fullMonth
}

// fullMon.treeBuilder - Builds a character node tree of full month names.
fullMon.treeBuilder = function() {
    // Set a barrel of month keys.
    var barrel = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

    // Root node for letter tree.
    var tree = {};

    // Loop through all month keys.    
    for (var i = 0; i < barrel.length; i++) {

        // Get the next month key and do a barrel roll by
        // splitting into an array of single character strings.
        var monKey = barrel[i].split("");

        // Set the current branch to the tree root.
        var branch = tree;

        // Climb branches in the tree by looping through
        // month key characters and doing leaf wipes.
        for (var c = 0; c < monKey.length; c++) {

            // The next character is the next leaf of the branch.
            var leaf = monKey[c];

            // Wipe this leaf on the branch if it doesn't already exist.
            if (typeof branch[leaf] === "undefined") {
                // If the leaf is the last character then it's not sticky should be set to null.
                branch[leaf] = (c === (monKey.length-1)) ? null : {};
            }

            // Switch to the next branch.
            branch = branch[leaf];
        }
    }
    return tree;
}

fullMon.tree = fullMon.treeBuilder();

fullMon.demo = function () {
    // Demonstrates keys that are not found "none" and found keys.
    var short = ["none","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"];
    for (var i = 0; i < short.length; i++) {
        console.log(fullMon(short[i]));
    }
    // Shows the optimized tree for fast lookups.
    console.log(JSON.stringify(fullMon.tree));
}

fullMon.demo();

3

Java、Google、および確率

答えがインターネットで簡単に入手できる場合、ここでのソリューションの多くが「車輪を再発明する」ことに失望しています。

これが私のプログラムの出力です:

The short version of jan is january
The short version of feb is february
The short version of mar is margin
The short version of apr is april
The short version of may is mayinhistory
The short version of jun is june
The short version of jul is july
The short version of aug is august
The short version of sep is september
The short version of oct is october
The short version of nov is november
The short version of dec is december

完璧ではありませんが、QAに送信するには十分です。クラウドソーシングの力を活用して、これらの結果を達成することができました。

public static String expandMonthName(String shortMonthName) {
    try {
        // First, we ask Google for the answer

        String query = "https://www.google.com/search?q="
                + "what+month+is+" + shortMonthName;
        String response = curl(query);

        // now sift through the results for likely answers.
        // The best way to parse HTML is regex.

        List<String> possibleMonths = new ArrayList<>();
        Pattern pattern = Pattern.compile(shortMonthName + "[A-Za-z]+");
        Matcher matcher = pattern.matcher(response);
        while (matcher.find())
            possibleMonths.add(matcher.group(0));

        // And finally, choose the likeliest answer using 
        // the ineluctable laws of probability

        return possibleMonths.get(new Random().nextInt(possibleMonths.size()));

    } catch (Exception e) { return "August";}   // well, we tried.
}

明確でない場合、expandMonthName( "jan")は、「what month is jan」のGoogle結果から「jan」で始まるランダムに選択された単語を返します。プロキシの背後にいる場合を除き、その場合は「8月」を返します。


2

Bash + binutils

入力を日付オブジェクトに変換することで明白なことをしようとしましたが、惨めに失敗しました。最後に、ブルートフォースアプローチに頼りました。

while read -e line; do
  [[ "${line,,}" == "${1,,}"* ]] && o=$line && break
done < <(strings /bin/date)
o=${o:=$1}
o=${o,,}
echo ${o^}

テスト実行:

$ bash getmonth.sh jan
January
$ bash getmonth.sh may
May
$ bash getmonth.sh DEC
December

2

月の名前を確認することは非常に難しく、多くの計算と論理的思考が必要であることを理解しています。これは、月の名前をチェックするためのBuzz-Strahlemannアルゴリズムの最適化されたバージョンです。

PHP

$month = "Jan"; //Change this to search for a different month, noob :)
$time = time(); //This loads an extended time library
$ivefoundthismonthnowexit = false;
while (!$ivefoundthismonthnowexit) {
    $checkThis = date('F', $time); //"F" stands for "Find it"
    if (substr($checkThis, 1, 4) == $month) $ivefondthismonthnowexit = true; //You can also replace it with ($checkThis, 0, 3)
    //since PHP understands if you are counting from 0 or 1!
    $time++;
}

トロール:

  • この答え;

  • タイムゾーンを処理せず、警告メッセージを出力します。

  • 入力として月を受け入れませんが、ハードコードする必要があります。

  • ハードコーディングする場合でも、大文字と小文字は区別されます。

  • このコードは、現在の月を取得し、最初の3文字を取得して、と一致するかどうかを確認し$monthます。一致しない場合は、タイムスタンプを1増やしてから再試行します。これは非常に遅くなります。

  • このコードは何も出力しません(もちろん、警告を除く)。

  • コメントは非常に誤解を招く可能性time()があります。延長時間ライブラリはロードされませんが、現在のタイムスタンプは取得されます。substr($checkThis,1,4)月の最初の文字をスキップして、次の4(取得archのためにMarch例えば、); 正しい形式はコメント内の形式です。

  • 一致が見つかった場合でも、コードはループを終了しません。実際、設定される変数trueは異なります。


3
-1:コードトローリングタグwikiから、「タスクは機能するコードを提供することですが、役に立たず、OPを非常にイライラさせます。」あなたのコードは機能しません。
user12205 14

1
ん?それは機能し、役に立たない。無限ループが終了するまで10年待つのは、十分なイライラではありませんか?「動作する」とは(少なくとも、私にとっては)、コードが正常にコンパイルされて実行されることを意味します。ソリューションを終了または提供する必要があるという意味ではありません。
ヴェレオ14

@ace(前のコメントであなたに言及するのを忘れていました); そのコメントで私が言いたいのは、私の観点からは正しいからです。
ヴェレオ14

おそらくarch等しくなることはありませんのでMar
user12205

したがって、コードは月の名前を変換できないため、機能しません。
user12205

2

バッチ

あなたが求めているのは重要なことです。しかし、私はあなたにぴったりのソリューションを見つけました!これがどのように機能するかは、非常に複雑な英語のリストをハードディスクにダウンロードすることです。入力はダウンロードされたリストに対してチェックされ、月の最終名が与えられます!天才!

現在、このメソッドには他のメソッドよりも多くの長所があります。

  • 単語の省略形を使用できます!例えばJanまたはJanu1月の!
  • 「教皇や大統領がいつ私たちを別のカレンダーに切り替えさせようとすると、膨大な日付の解析/フォーマットコードがすぐに役に立たなくなるでしょう。」これは私たちの方法で問題になることはありません!
  • ユーザーには確認プロンプトが送信されます。申し訳ありませんが安全です!

コード:

@ECHO OFF
setlocal EnableDelayedExpansion
REM Remove this at the end ^^^
REM First off, we have to get the user's input
set /p abbreviatedUserInput= Please input your abbreviated form of the month: 
REM echo out confirmation message. Without this, the thing won't work
SET /P variableThatIsUsedForConfirmation= Are you sure you want to look for %abbreviatedUserInput% (Y/N)? 
REM if the user said no, send him elsewhere
if /i {%variableThatIsUsedForConfirmation%}=={n} (goto :hell)
REM to keep things clean, we clear the screen!
cls
ECHO Prepare for launch!
REM make sure the user reads what we wrote, we spent time on this and the user must understand that... 
REM BTW this pings an incorrect ip address and waits 3000 millisex for the output
ping 1.1.1.1 -n 1 -w 3000 > nul
REM to keep things clean, we clear the screen!
cls
REM We must inform the user that something is going on, otherwise they might get bored and quit the app
ECHO LOA-DING!
REM Now, how this works is by utilizing the dictionary.. I believe we all know what that is. First of all, let's get a dictionary!
powershell -Command "(New-Object Net.WebClient).DownloadFile('http://www.mieliestronk.com/corncob_caps.txt', 'dic.txt')"
REM to keep things clean, we clear the screen!
cls
REM The user probably already got bored, let's inform them that we're still working...
ECHO STILL WORKING...
REM wait what?!! The dictionary is all caps!! Lets fix that...
REM Lets loop through the file like so:

for /F "tokens=*" %%A in (dic.txt) do (
    SET "line=%%A"
    REM replace ALL the letters!!
    SET "line=!line:A=a!"
    SET "line=!line:B=b!"
    SET "line=!line:C=c!"
    SET "line=!line:D=d!"
    SET "line=!line:E=e!"
    SET "line=!line:F=f!"
    SET "line=!line:G=g!"
    SET "line=!line:H=h!"
    SET "line=!line:I=i!"
    SET "line=!line:J=j!"
    SET "line=!line:K=k!"
    SET "line=!line:L=l!"
    SET "line=!line:M=m!"
    SET "line=!line:N=n!"
    SET "line=!line:O=o!"
    SET "line=!line:P=p!"
    SET "line=!line:Q=q!"
    SET "line=!line:R=r!"
    SET "line=!line:S=s!"
    SET "line=!line:T=t!"
    SET "line=!line:U=u!"
    SET "line=!line:V=v!"
    SET "line=!line:W=w!"
    SET "line=!line:X=x!"
    SET "line=!line:Y=y!"
    SET "line=!line:Z=z!"
    ECHO !line! >> dic-tmp.txt
)

REM to keep things clean, we clear the screen!
cls
REM The user probably already got bored, let's inform them that we're still working...
:lookup
ECHO WOW! THAT TOOK LONG! ALMOST THERE...
REM Alright, now we need to find the correct date in the dictionary, we might need the users help in this...
REM Lets loop through ALL the lines again
set match=seriously?
for /F "tokens=*" %%a in (dic-tmp.txt) do (
    SET "line=%%a"
    REM to keep things clean, we clear the screen!
    cls
    REM replace the user input with some other stuff...
    SET "test=!line:%abbreviatedUserInput%=lol!"
    REM if the original line does not equal the test variable, then we have a match!
    IF NOT !line!==!test! (
        REM ask the user if the match is correct..
        set /P variableThatIsUsedForConfirmation= "Did you mean !line!? (Y/N): "
        REM if the user entered "y"
        IF /i {!variableThatIsUsedForConfirmation!}=={y} (
            REM set the variable "match" to the current line and goto the matchFound section...
            set match=!line!
            goto :matchFound
        )
    )
)
:matchFound
REM to keep things clean, we clear the screen!
cls
REM give the user their match
Echo Here's your month's full name: %match%
PAUSE
:hell
ECHO screw you!

トロルツ

-バッチ...-月を手動で入力できないため、単語のリストをダウンロードしています...-スイッチケースハックを使用していない-非常に 遅い-テキストファイルを小文字に変換して別のファイルに保存する-実行する作成されたテキストファイルを削除せずに2回目にするとさらに遅くなります-dic.txtファイルを小文字に変換するときにスクリプトがオフになり、エコーがオンに戻ります-このネタバレはフォーマットを台無しにしました...


2

!#/ bash

! #/bash

# Make the MONTH variable equal to the $1 variable
MONTH="$1"

# Run grep passing the $MONTH variable and the -i flag
# Then use the << operator followed by a list of months
grep -i "$MONTH" << January
March
May
July
August
0ctober
December
April
June                                      
September
November
February
January

プログラムの応答を速くするために、31日前の月をリストに追加しました。統計的に言えば、日付の分布が均等であれば、その月のいずれかにいる可能性が高くなります。

上司を感動させるために各行を文書化しました。

これをというファイルに保存しlookup_month_script.bash、次の行をコピーして貼り付けてテストします。

bash $PWD/lookup_month_script.bash "0ct"

あなたのプロジェクトで頑張ってください!


-2 リストされているにもかかわらず、1月は機能しません。(実際にJanuaryは、ヒアドキュメントの開始と終了の区切り文字として使用しています。)

-10月も機能しません。理由は誰にもわかりません。

-入力が空の場合、11か月すべてを返します。

-スクリプトをコピーして貼り付ける場合、6月の応答の長さは42文字になります。

マイナー:

-シバングは多少間違っていますが、警告は表示されません。

-それらの下の行が言っていることを言っているコメントであるコメント。

-プログラムが以前のエントリに対してより早く応答したとしても、それ以上速く完了しません。


1

JavaScript-209

日付に変換しないと言っていますが、これはここで行われていることではありません。私は単に日付を使用して短い名前の拡張子を生成しています。

function m(s){c=s.charAt(0).toUpperCase()+s.substr(1).toLowerCase();a="ember,ember,ober,tember,ust,y,e,,il,ch,uary,uary".split(",");b=[];for(i=12;i--;)b[(""+new Date(1,i,1)).slice(4,7)]=11-i;return c+a[b[c]];}

入力/出力のテスト:

jan: January
feb: Febuary
mar: March
apr: April
may: May
Jun: June
JUL: July
AuG: August
sEp: September
OCT: October
nov: November
dec: December

3
また、私はFebuaryをtrolledているように見える- R :)目的に、当然の...
マット・

誰かがWendsdaysのケースを持っているように聞こえます。
ジェイソンC 14

5
@Matt「pupose」という意味ではないですか?
ジャスティン14

@Quincunxのコース
マット

1

テスト入力を含むJava 696

public class DateConverter {
    String months[] = 
    {
        "January", "February","March","April","May","June","July",
        "August","September","October","November","December"
    };
    DateConverter(){}
    String LongMonth(String shortMonth)
    {
        String m = "Invalid";
        for(int i=0;i<months.length;i++)
        {
            if(months[i].toLowerCase().contains(shortMonth.toLowerCase()))
            {
                m=months[i];
                break;
            }
        }
        return m;
    }

    public static void main(String[] args) {

        String input[] = {"jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"};
        for(int i=0; i<input.length; i++)
        {
            System.out.println((new DateConverter()).LongMonth(input[i]));
        }
    }
}

1

プログラミング言語「Brainf * ck」は、これに最適なツールです!確かにあなたが探していたものではないかもしれませんが、それは仕事を完璧に完了させます!

>+<+[>[>[-]+<-]>[<+>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>>>>>>>
[<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+

This is the debug part of the code used when looping more than once

>>+++++++++++++++[>+++++>+++++++>++>+++++++>+++<<
<<<-]>--.>+++++.++.+++++.-.>++.<.>>-.---.<.<.>>+++.<<--.>>---..>.<<<------.>>.
<<++++++++..>>.<<--.>.>----.+..<<.>>+++.<<++++.>>++++.--------
.<<--.>>++++++++.<<-----.-.>+.>>[-]<[-]<[-]<[-]<[-]<++++++++++.[-]

It takes a dummy argument due to the nature of my interpreter 
If you're using some other intepreter I can rewrite the code for you

>>>>>>>>>>>>>>>>>>>>>>>,<+<<<<<<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>>>
[<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+

This is the normal part of the code, used when starting the programme the first time

>>+++++++++++++++[>+++++>+++++++>++>+++++++>+++<<<<<-]>--.>
+++++.++.+++++.-.>++.<.>>-.---.<.<.>>+++.<<--.>>---..>.<<<------.>>.<<++++++++..>>.<<-
-.>.>----.+..<<.>>+++.<<++++.>>++++.--------.<<--.>>++
++++++.<<-----.-.>+.>>[-]<[-]<[-]<[-]<[-]<++++++++++.[-]<-]>>>>>>>>>>>>>>>>>>>>>>>
[<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>-]<<<<<<
<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+

Here we take three arguments and assign them to variables; This is the three-letter 
abbreviation of the month

>>>>>>>>>>>>>>,<,<,

Now we check if the abbreviation is good; note that it will fail if it doesn't begin 
with a capital letter and isn't followed by two lowercase letters
In general it will print an error message and wait for you to input a letter 
(or just hit enter) before it exits

<<<[-]>>>>>[<<<<<+<<<<<<<+>>>>>>>>>>>>-]<<<<<<<<<<<<[>>>>>>>>>>>>+<<<<<<<
<<<<<-]>>>>>>>----------------------------------------------------------------->[-]    
<[<<<+>>>-]->[<<<<<<<+>+<<+>>>>>>>>-]<<<<<<<<[>>>>>>>>+<<
<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>
[>>>+<<<[-]]<<<[-]<->>>>>>>[<<<<<<<->>>>>>>-]<<<<<<<[>
>>>>>>+<<<<<<<-]>>>>>>>[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>[-]]<<<<<<<<-]
<[>[-]+<-]>[<+>>+++++++++++[>++++++>++++++++++>+++<<<-
]>+++.>++++..---.+++.>.[-]<[-]<[-]<++++++++++.[-]>>>>>>>>>>>>>>>,,<<<<<<<<<<<<<<<<<-<-
>>-]>>>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<<<+>>>
>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>[-]>>>>[<<<<+    
<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>
>>>>>-------------------------------->[-    
]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<[<<<+>>>-]>    
[<<<<<<<+>+<<+>>>>>>>>
-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]
<<<[>>[-]+<<-]>>-]<[>>>>>>-<<<<<<[-]]>>>[-]>>>>[-]>>
>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>---------------
----------------->[-]+++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<[<<<<+>>>>-]>[<<<<<<<<+>+
<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>[>>[<+<<
<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<<<[-]]<<<[-
]>>>>>>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>-<<<<<<<[-]]>
>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]<[>>>>>>>[-]-<<<<<<<[-]]->>>>>>>
[<<<<<<<->>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[>>>>
>>>>>>+<<<<<<<<<<<<<<<<<<<->>>>>>>>>[-]]<<<<<<<<-]<[>[-]+<-]>[<+>>+++++++++++
[>++++++>++++++++++>+++<<<-]>+++.>++++..---.+++.>.[-]<[-]<[-]<+
+++++++++.[-]>>>>>>>>>>>>>>>,,<<<<<<<<<<<<<<<<<-<->>-]>>>>>>>>>>>>>>>>>>
[<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<[>[-]+<
-]>[<+>>>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>-    
------------------------------->[-]+++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++<[<<<+>>>-]>[<<<<<<<+>+<<+>>>>>>>>-]
<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+
<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]<[>>>>>>-<<<<<<[-]]>>>[-]>>>>[-]>>[<<+
<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-
]>>>>>>>>-------------------------------->[-
]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<[<<<
<+>>>>-]>[<<<<<<<<+>+<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>[>>[<+<<<+>>>>-]
<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>
-]>>[>>>>-<<<<[-]]<<<[-]>>>>>>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>-<<<<<<<[-]]>>>>>>>>
[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]<[>>>>>>>[-
]-<<<<<<<[-]]->>>>>>>[<<<<<<<->>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[>>>>>>>>>>>+
<<<<<<<<<<<<<<<<<<<<->>>>>>>>>[-]]<<<<<<<<-]<[>[-]+<-]>[
<+>>+++++++++++[>++++++>++++++++++>+++<<<-]>+++.>++++..---.+++.>.[-]<[-]<[-]<++++++++++.    
[-]>>>>>>>>>>>>>>>,,<<<<<<<<<<<<<<<<<-<->>-]>>>>>>>>
>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+

This part of the code handles special exceptions to the pattern

>>>>>>>>>[-]>>>>>[<<<<<+<<<<<<<+>>>>>>>>>>>>-]<<<<<<<<<<<<[>>>>>>>>>>>>+<<<<<<<<<<<<-
]>>>>>>>>[-]++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++<[<<<<<<+>>>>>>-]->[<<<<<<<-<+>>>>>>>>-]    
<<<<<<<<[>>>>>>>>+<<<<<<<<-]>[>>>>>>+<<<<<<[-]]>>>>>>>[-]>
>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>[-    
]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++<[<<<<<<<+>>>>>>>-]->[<<<<<<<<-<+>>>>>>>>>-]
<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>[>>>>>>>+<<<<<<<[-]]>>>>>>[<<
<<<<<+>>>>>>>-]<<<<<<<[[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]
<[>>>>>>>-<<<<<<<[-]]]>>>>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]
<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>>>[-
]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++<[<<<<<<<+>>>>>>>-]->[<<<<<<<<-<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+
<<<<<<<<<-]>[>>>>>>>+<<<<<<<[-]]>>>>>>[<<<<<<<+>>>>>>>-]<<<<
<<<[[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]<[>>>>>>>-<<<<<<<[-]]]-
>>>>>>>[<<<<<<<->>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>
>[>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>[-]]<<<<<<<<-]<[>[-]+<-]>[<+>>++++++++++++
[>++++++>++++++++>+++++++++<<<-]>++.>+.>++.+++++++.<
.>---.+++++++.[-]<[-]<[-]<++++++++++.[-]>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<->-
]>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>-
]<<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+

This part of the code handles the regular pattern

>>>>>>>>>[-]>>>>>[<<<<<+<<<<<<<+>>>>>>>>>>>>-]<<<<<<<<<<
<<[>>>>>>>>>>>>+<<<<<<<<<<<<-]>>>>>>>.[-]>>>>[<<<<+<<<<<<<+>>>>>>>>>>>-]       
<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>.[-]>>>[<<<+<<<<<<<+>>>>
>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>.<<<<<<<++++++++++++
[>++++++++++>++++++++<<-]>---.>+.<---.+++++++.>[-]<[-]<++++++++++.[-]>>
>>>>>>>>>>>>+<<<<<<<<<<<<<<<<->-]<[>[-]+<-]>[<+

Here the programme checks if you want to insert another abbreviation or are done with the programme

>-]>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<[>[-]+<-]>
[<+>>+++++++++++++++[>+++++>++++++++>++>+++++++>++++>+
+++++<<<<<<-]>--.>-----.>++.<+.>>-.-------.<<.>.>.<<--------..>>>+++.<<.>>>+.--.
<<<+++++++++++++++.<<+++++.>>>----.>>[-]<[-]<[-]<[-]<[-]<[-]
<++++++++++.[-]>>>>>>>>>>>>>>>>>>>>>>>,<<<<<<<<<<,<<<<<<[-]>>>>>>[<<<<<<+
<<<<<<<+>>>>>>>>>>>>>-]<<<<<<<<<<<<<[>>>>>>>>>>>>>+<<<<<<<<<<<<<-]>
>>>>>>>[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<[<<<<<<+>>>>>>-]->[<<<<<<<-<+>>>>>>>>-]<<<<<<<<[>>>
>>>>>+<<<<<<<<-]>[>>>>>>+<<<<<<[-]]>>>>>>[>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>
[-]]<<<<<<<<-]<[>[-]+<-]>[<+>>>>>>>>>[-]>>>>>>[<<<<<
<+<<<<<<<+>>>>>>>>>>>>>-]<<<<<<<<<<<<<[>>>>>>>>>>>>>+<<<<<<<<<<<<<-]>>>>>>>>[-
]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++<[<<<<<<+>>>>>>-]->[<<<<<<<-<+>>>>>>>>-]<<<<<<<<[>>>>>>>>+
<<<<<<<<-]>[>>>>>>+<<<<<<[-]]<->>>>>>>[<<<<<<<->>>>>>>
-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<-
>>>>>>>>>[-]]<<<<<<<<-]<[>[-]+<-]>[<+-<->>-]>>>>>>>>>>>>>>>>
>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>-]
<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>+++++++++++[>++++++>++++++++++>+++
<<<-]>+++.>++++..---.+++.>.[-]<[-]<[-]<++++++++++.[-]<<<->>-]<<]

あなたが彼にこれを見せたら、あなたの先生は誇りに思うでしょう!


トローリング

プログラムはまず第一に、非常にひどく書かれています。より良い単語がないために、ランダムなエラー印刷と一般的な非機能性を引き起こすいくつかのループを作成しました。適切に機能するコード(主に最初の2つの段落)を取得するには少しクリーンアップが必要です。これは、「略語+ 'uary'」(1月、2月、1月など)の長い名前を与えるため、とにかく役に立たないプログラムです「January」の冗長コードが含まれています(例外として定義され、個別にコーディングされています)。Stackexchangeの最初の答えなので、これが基準を満たすことを願っています


1

Java

親愛なるコンピューター科学者見習い、

これは非常に難しい作業であり、私は部分的にしか解決していません。これはあなたの論文研究または何らかの研究目的のためだと思います。

これまで、私はベータ版のみにいくつかのマイナーなバグがありました。時には間違った結果を与えることがありますが、あなたの教授はあなたの努力を受け入れると確信しています。

ファイルMonth.java:

/**
 * This bean keep track of a month-code (e.g. Apr) and month-name (e.g. April)
 * pair.
 */
public class Month{
    String month_name;
    String month_code;
    public void Month(monthName,monthCode){
        setMonthName(monthName);
        setMonthCode(monthCode);
    }
    public String getMonthName(){
        return this.monthName;
    }
    public void setMonthName(String monthName){
        this.monthName=monthName;
    }
    public String getMonthCode(){
        return this.monthCode;
    }
    public void setMonthCode(String monthCode){
        this.monthCode=monthCode;
    }

ファイルEra.java:

/**
 * This bean keep contains every couple of month-code,month-name in a year.
 */
public class Era{
    List <Month>months;
    public void Era(){
        months.add(new Month("Jan","January"));
        months.add(new Month("Feb","Febrary"));
        months.add(new Month("Apr","March"));
        months.add(new Month("May","May"));
        months.add(new Month("June","June"));
        months.add(new Month("Jul","July"));
        months.add(new Month("Aug","August"));
        months.add(new Month("Sep","September"));
        months.add(new Month("Oct","October"));
        months.add(new Month("Nov","Novemeber"));
        months.add(new Month("Dec","December"));
   }
   public String getMonthByCode(String monthName){

       return String.format("[%s]",months.get(new Random().nextInt((11) + 1) + 0));
   }
   public static void main(String ... argv){
        String monthCode="jan";
       System.out.println(String.format("%s: %s",monthCode, new Era().getMonthByCode(monthCode));
   }

実行するには、次を実行します。

javac Month.java
javac Era.java
java Era jan

出力:

jan: [January]

コンパイラーがインストールされ%JAVAPATH%ているパスに忘れずに設定してくださいJava

ランダムな月を返すだけです。実際、私もそれをテストしませんでした。いくつかのインポートが欠落していると思います。


1

OPはJavaを使用しているため、Javaソリューションを提供します。アイデアは簡単です。

  1. Mapロングネームからショートネームまでを作成します。
  2. ランダムな文字列を生成し、短い名前にマッピングします。
  3. String.equalsIgnoreCaseショートネームが大文字小文字を無視して入力ショートネームと同じかどうかを確認するために使用します。その場合、成功、終了します。
  4. それ以外の場合は、手順2に進みます。

ソースは次のとおりです。

import java.util.*;

public class Short2Long {
    static final Map<String, String> long2Short = new HashMap<String, String>();
    static {
        long2Short.put("Janurary", "jan");
        long2Short.put("February", "feb");
        long2Short.put("March", "mar");
        long2Short.put("April", "apr");
        long2Short.put("May", "may");
        long2Short.put("June", "jun");
        long2Short.put("July", "jul");
        long2Short.put("August", "aug");
        long2Short.put("September", "sep");
        long2Short.put("October", "oct");
        long2Short.put("November", "nov");
        long2Short.put("December", "dec");
    }

    static Random rand = new Random();

    static String genString() {
        int len = rand.nextInt(9-3) + 3;
        StringBuffer res = new StringBuffer(len);
        res.append((char)('A' + rand.nextInt(26)));
        for (int i = 1; i < len; i ++) {
            res.append((char)('a' + rand.nextInt(26)));
        }
        return res.toString();
    }

    public static void main(String[] args) {
        String s = args[0];
        while (true) {
            String l = genString();
            if (s.equalsIgnoreCase(long2Short.get(l))) {
                System.out.println(s + " -> " + l);
                break;
            }
        }
    }
}

トローリング

プログラムには、高速のCPUと患者が必要です。マルチスレッドを学習し、マルチコアCPUを使用している場合は、高速化を試みることができます。


1


この考えを刺激し、元の質問を投稿していただきありがとうございます。Stack Overflowに回答を投稿する私たちは、このウェブサイトの目的がテキストブックや自発的な学習の必要性を時代遅れにするためにすべてのそのような質問をカタログ化することであるため、ポスターを助ける機会を楽しんでいます。この特定の質問を理解していないことを心配しないでください。これは、効果的な解決に必要な隠されたトリックのために尋ねられる一般的なタイプの質問です。講師は一般的にこの質問をして、言語の理解の深さだけでなく、この一般的なプログラマーの落とし穴である文字エンコードを知っているかどうかも判断します。あなたが知っているように、次のリンクを完全に読んだ後、あなたはより完全に理解するでしょう: link

あなたの教授はコードの再利用の重要性について非常に詳細に説明しているので、私が提供した文字エンコーディングのリンクを読んでいると、あなたはあなたがあなたが元の質問でこの要件が具体的に指定されていなかった場合でも、任意の言語を処理できます(要件を理解するのに役立つ要件仕様についても学習したい場合は、このリンクを読んでください:リンク

あなたはどこに非常にインテリジェントに使用しない示唆でデフォルト言語のコードを使用するため、提供されたDateオブジェクトでは、教授に言語の真の理解を示すことができません。

この難しい質問を解決するために、私はあなたの問題を解決するGroovyアプリケーションを作成しました。そして、その不可解なjavaよりも間違いなく理にかなっています。GroovyもJavaコードのようにJVM上で実行されるため、この答えにGroovyを使用しても心配する必要はありません。そのため、わずかな変更を加えるだけでこのコードを簡単にJavaクラスにドロップできます。このプロセスを支援するためのリンクを添付しましたが、1秒しかかからないため、朝まで心配することはありません(後のリンクは次のとおりです。 link。したがって、コードをコピーするだけです。適切に機能するコードのテストケースを多数表示するので、提出に自信を持てます。私はあなたが非常に忙しい熱心な学生であり、あなたの皿にたくさんの義務があることを間違いなく理解しています。あなたはおそらくここの貢献者がフルタイムで働いており、十分に補償されていることを知っているでしょう。

//Definetely leave the comments in so your instructor
//can see how well you document your code!

//see how easy it is to specify other languages!
//the users of your software will probably have an IDE just
//like yours, so they can easily come into the source
//code and edit these to their liking, That's Code Reuse!
def EnglishNames ="""January
February
March
April
May
June
July
August
October
November
December
"""

//change this to use other encodings, as discussed above
final String encodingToUseSoThatOurCodeIsSuperRobust = "UTF-8"

//it is a good idea to number your lists for clarity,
//just in case you need more
def list1 = []
def list2 = []

//specifying the method name like this will help make it
//easy to add more languages, another method for another
//language

//this is called a 'Closure', which is pretty much identical
//to that cool new Java thing called the 'Lambda', so if you
//wanted to turn this into Java code, it would be soo easy!
EnglishNames.eachLine() {
    //You probably remember you instructor telling you
    //never to do this String 1 == String 2
    //So to get around that, we will convert the String
    //to bytes, Easy huh!
    list1.add(it.getBytes(encodingToUseSoThatOurCodeIsSuperRobust))
}

//change this to run a different test, the IDE no doubt makes
//it very easy to do this!
//See the very very descriptive variable name for readability?
def iAmLookingForThisCountriesLongNameWithThisShortName = "Dec"
def theFoundAnswerInTheListIs

//this is the real important part as you can easily see
for(BigInteger index = 0; index < list1.size(); index ++){
    for(BigInteger indeX = 0; indeX < list1[index].size(); indeX ++){
        list2[index] = [list1[index][0],list1[index][1],list1[index][2]]
    }
}

boolean foundTheAnswerSoDontDoAnymore = false

//now we just find the correct answer in the list!
for(BigInteger index = 0; index < list1.size(); index ++){
    for(BigInteger indeX = 0; indeX < list1[index].size(); indeX ++){
        //see how readable the following code is!
        if((list2.get(index)) == iAmLookingForThisCountriesLongNameWithThisShortName.getBytes(encodingToUseSoThatOurCodeIsSuperRobust)){
            //see how we can now use the == so we can compare the two strings!
            if(!(new Boolean(foundTheAnswerSoDontDoAnymore))){
                println new String(list1[index], encodingToUseSoThatOurCodeIsSuperRobust)
                foundTheAnswerSoDontDoAnymore = true
            }
        }
    }
}

申し訳ありませんが、あなたがここでできることは何も残していませんでした。したがって、この応答をコピーして貼り付けてください。次のコードの実行からわかるように、ここで何ができるのかを示します。

input: Dec, output: December
input: Jan, output: January
input: Feb, output: February

1

ジュリア

ここでは、複数のディスパッチの力を使いたいと思うでしょう。最初に、各月のタイプを定義します。それから、希望する答えを与える各月タイプの簡単な関数定義を書くことができます。これによりnicename(Jan)、これらの迷惑な引用符に煩わされることなく、便利な形式を使用できます。さらに、文字列を受け入れて型に変換する便利な関数を定義し、以前に行ったすべての作業を再利用して、まったく新しいインターフェイスを提供できます。

abstract Month
abstract Jan <: Month
abstract Feb <: Month
abstract Mar <: Month
abstract Apr <: Month
abstract May <: Month
abstract Jun <: Month
abstract Jul <: Month
abstract Aug <: Month
abstract Sep <: Month
abstract Oct <: Month
abstract Nov <: Month
abstract Dec <: Month
nicename(::Type{Jan})="January"
nicename(::Type{Feb})="February"
nicename(::Type{Mar})="March"
nicename(::Type{Apr})="April"
nicename(::Type{May})="May"
nicename(::Type{Jun})="June"
nicename(::Type{Jul})="July"
nicename(::Type{Aug})="August"
nicename(::Type{Sep})="September"
nicename(::Type{Oct})="October"
nicename(::Type{Nov})="Novermber"
nicename(::Type{Dec})="December"

nicename(s::String)=nicename(eval(symbol(ucfirst(s))))



nicename(Jan)
nicename("jan")

それは何語ですか?
ウゴレン14

ジュリア、ばかげたこと。
gggg 14

0

Python 2.75

def getMonthName(short):
    from time import time, gmtime, strftime
    time = time()
    while not (lambda t:strftime("%B",t).upper().startswith(short.upper()))(gmtime(time)): time += 1
    return strftime("%B",gmtime(time))

真の美しさはシンプルさにあり、これはメモリ要件が低いことを意味します。これらの厄介な辞書とコードの段落を忘れてください。この関数は非常に優れているため、大文字小文字を問わず短い月名に一致します。観察する。

>>> getMonthName("Apr")
'April'
>>> getMonthName("apr")
'April'
>>> getMonthName("APR")
'April'

ボーナス:

最初の3文字以上を使用できます(例:「sept」、「febr」など)

これは、このコードを実行してから1秒ごとにループし、名前の先頭で一致するかどうかを確認するため、予想される結果が現在の月でない場合、実行に永遠に時間がかかります。また、多数のスタイルエラー。


0

、C#

 var Dictonery = "january,febuary,March,April,May,June,July,August,September,October,November,December";
                     var input = "jan";
                     var outpt= Regex.Match(Dictonery , input + "[a-z]*",
RegexOptions.IgnoreCase).Value;

0

以下は、あなたが要求したことを行う小さなプログラムです。

または実際には、13個。

それは何だので、私はC ++でそれを書いた私は、現時点で使用されますが、それは、Javaにはかなり簡単に変換します。献身的な学生であるので、あなたはそれを自分でやることができると確信しています。

#include <iostream>
#include <fstream>
#include <cstdlib>

int main()
{
   std::string months[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };

   for(int i = 0; i <= 12; ++i)
   {
       std::string filename = months[i] + ".cpp";
       std::ofstream myfile;
       myfile.open( filename.c_str() );
       myfile << "#include <iostream>\n\nint main()\n{\n\tstd::cout << \"" << months[i] << "\" << std::endl;\n return " << i << ";\n}";
       myfile.close();

       std::string compile = "g++ " + months[i] + ".cpp -o " +  months[i].substr(0, 3);
       system( compile.c_str() );
   }

   system("Dec");

   return 0;
}

ああ、私はループ内の小さなオフセットエラーを見落としているかもしれません。

私は素敵で、std::stringsの代わりにchar*s を使用することにしました。私はあなたのような構文であなたを混乱させたと確信しchar*[]ていてdelete、間違いなく電話するのを忘れていたか、またはのdelete代わりに電話のような愚かなことをしたでしょうdelete[]


0

C

略語から完全な単語への一般的な変換の一種で、data配列を調整するだけです...

#include <stdio.h>
#include <string.h>
#include <stdint.h>

const char* getLong(char *shrt) {
    size_t position;
    size_t found = 0;
    static int32_t data[19];

    data[000] = 0x756e614a;
    data[001] = 0x46797261;
    data[002] = 0x75726265;
    data[003] = 0x4d797261;
    data[004] = 0x68637261;
    data[005] = 0x69727041;
    data[006] = 0x79614d6c;
    data[007] = 0x656e754a;
    data[010] = 0x796c754a;
    data[011] = 0x75677541;
    data[012] = 0x65537473;
    data[013] = 0x6d657470;
    data[014] = 0x4f726562;
    data[015] = 0x626f7463;
    data[016] = 0x6f4e7265;
    data[017] = 0x626d6576;
    data[020] = 0x65447265;
    data[021] = 0x626d6563;
    data[022] = 0x00597265;

    for (position = 0; position < strlen(shrt); position++) {
        shrt[position] = position < 1 ? (shrt[position] >= 97 ?
        shrt[position] - 97 + 65 : shrt[position]) : (
        shrt[position] <= 90 ? shrt[position] - 90 + 122 : shrt[position]);
    }

    for (position = 0; position < strlen(((char*)data)); position++) {
        if (((char*)data)[position] == shrt[found]) {
            found++;
            if (found == strlen(shrt)) {
                found = position;
                position -= strlen(shrt);
                for (;((char*)data)[found] > 90; found++);
                ((char*)data)[found] = 0;
                return &(((char*)data)[position + 1]);
            }
        } else {
            found = data[0] - data[1] - 0x2EF4EEE9;
        }
    }
    return "not a month";
}

int main(int argc, char *argv[]) {
    if (argc != 2) return 1;
    printf("%s is %s\n", argv[1], getLong(argv[1]));
    return 0;
}

0

PHP

$month = strtolower($month);
if($month = 'jan') {
return 'January';
}
if($month = 'feb') {
return 'February';
}
if($month = 'mar') {
return 'March';
}
if($month = 'apr') {
return 'April';
}
if($month = 'may') {
return 'May';
}
if($month = 'jun') {
return 'June';
}
if($month = 'jul') {
return 'July';
}
if($month = 'aug') {
return 'August';
}
if($month = 'sep') {
return 'September';
}
if($month = 'oct') {
return 'October';
}
if($month = 'nov') {
return 'November';
}
if($month = 'dec') {
return 'December';
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.