Chuyển đổi tên tháng ngắn thành đối tác dài hơn của họ [Đã kết thúc]


28

Thử thách này đã kết thúc! Xin chúc mừng Flonk !

Tôi chắc chắn mình sẽ đạt điểm cao, nhưng sau khi chuyển sang công việc của Flonk , giáo sư của tôi không tin đó là của tôi và cũng không thể hiểu tại sao nó lại phức tạp như vậy ... Tôi đã thất bại mẹ tôi đã từ chối Facebook và Minecraft trong một tháng Tôi không hiểu :

Cảm ơn tất cả các bài nộp của bạn! Một số câu trả lời tuyệt vời ở đây. Người chiến thắng chính thức là Flonk với số điểm 64 . Top 5 là:

  1. Flonk , 64 (Haskell, với toán học hiệu quả!)
  2. DigitalTrauma , 40 (Đám mây, tương lai là ngay bây giờ)
  3. primo , 38 (Python và sở thích cá nhân của tôi - và rất chuyên nghiệp!)
  4. Sylwester , 20 (Vợt, mặc dù Janember đang kéo dài nó!)
  5. ilmale , 16 (Một thuật toán được tối ưu hóa cao trong Lua)

Thử thách ban đầu dưới đây.


Xin hãy giúp tôi, nó rất khẩn cấp !!! :

Tôi cần chuyển đổi các phiên bản rút gọn của tên tháng thành các đại diện dài hơn của chúng (ví dụ: "Tháng 12" -> "Tháng 12"), không phân biệt chữ hoa chữ thường. Hiện tại tôi đang sử dụng Java; tên của tháng là một Chuỗi và trước tiên tôi không muốn chuyển đổi nó thành đối tượng Ngày. Bất kỳ ngôn ngữ sẽ làm, mặc dù.

Có cách nào làm dễ hơn không?? Đi dễ dàng xin vui lòng tôi là một người mới lập trình!


Đây là một cuộc thi trolling phổ biến (loại tốt nhất có!). Câu trả lời với nhiều sự ủng hộ nhất vào ngày 8 tháng 4 năm 2014 chiến thắng.


7
"Xin hãy giúp tôi, nó rất khẩn cấp !!! :(" <<< làm bài tập về nhà của tôi, làm nhanh không?

13
@yeti Nhanh nhất có thể !! Nhanh lên trước khi tôi thất bại trong lớp học của tôi!
Jason C

24
Cần có một tính năng bí mật sao chép các câu hỏi như vậy từ Stackoverflow sang codegolf.SE bằng thẻ trolling mã, và sau đó có câu trả lời từ codegolf.SE được chuyển trở lại bài đăng gốc với văn bản trong các thẻ spoiler bị xóa.
daniero

Mã trolling đang trong quá trình loại bỏ, theo lập trường chính thức. Câu hỏi này được bình chọn rất cao với nhiều câu trả lời, trong đó có nhiều câu được bình chọn cực kỳ cao. Nó chỉ nhận được hơn 50% phiếu "xóa" trong cuộc thăm dò ý kiến , nhưng điều độc đáo là nó nhận được rất nhiều câu trả lời và phiếu bầu, vì vậy tôi đang khóa nó vì ý nghĩa lịch sử.
Doorknob

Câu trả lời:


74

Nó thực sự đơn giản với một phép nội suy đa thức nhỏ!

Đầu tiên, tôi nhìn vào danh sách các tên tháng ngắn

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

và kiểm tra tổng các giá trị ký tự ASCII của chúng

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

sau đó trừ 300 từ những người đó để nắm bắt những gì tôi đang giải quyết ở đây và chuẩn bị một Mảng chứa tất cả các phiên bản dài hơn của tên tháng.

[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"]

Tôi đoán bạn có thể thấy những gì đang diễn ra bây giờ - tất cả những gì tôi cần là một hàm get Index ánh xạ 13 đến 0, 1 đến 1, 20 đến 2, v.v., vì vậy tôi chỉ có thể làm

getMonthName shortname = mons !! (getIndex shortname)

May mắn thay, Wolfram | Alpha có thể làm điều này cho tôi ! Các con số có được một chút lớn, nhưng Haskell có thể xử lý điều đó một cách duyên dáng. Chúng ta chỉ cần đảm bảo làm tròn kết quả, bởi vì số học dấu phẩy động là một chút không chính xác! Vì vậy, bạn đi, Haskell nhanh chóng, thanh lịch và thành ngữ:

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)

Chạy nó đơn giản như thế này:

λ> getMonthName "DeC"
"December"

λ> getMonthName "jan"
"January"

3
Rất tốt và số nguyên rất hiệu quả Tôi chắc chắn người hướng dẫn của tôi sẽ thích công việc của tôi!
Jason C

8
+1 để dạy tôi về interpolating polynomial.
primo

3
Tôi đã phải cười khi đọc câu đầu tiên của bạn.
Phản vệ

46

Bash + công cụ GNU + "đám mây"

Google có câu trả lời cho tất cả mọi thứ và tôi cảm thấy may mắn :

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

Đang sử dụng:

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

1
Cũng chơi ạ!
ojblass

Sẽ không [a-zA-Z]hoạt động như một sự thay thế cho [[:alpha:]](có vẻ như vậy khi tôi thử ít nhất)? Điều đó sẽ tiết kiệm 3 ký tự. Một vài ký tự có thể được lưu bằng cách truy vấn ask.com, nhưng điều đó có thể không đáng tin cậy.
Michael

7
@Mic đó sẽ quan trọng nếu này là đang chơi golf
undergroundmonorail

7
@JasonC Đó là một giải pháp "dựa trên đám mây". Chắc chắn không cần biện minh nào khác.
Chấn thương kỹ thuật số

4
@DigitalTrauma Thưa ông Ive nghe nói về đám mây và nó rất chuyên nghiệp! Rất tốt! Rất thuyết phục! Ty -JasonC
Jason C

43

Con trăn

Bởi vì chức năng này rất quan trọng, có lẽ nó sẽ được sử dụng rất nhiều, vì vậy bạn nên cố gắng làm cho nó càng nhanh càng tốt. Các áp phích khác đã khuyến nghị sử dụng tra cứu hashmap ... đừng làm điều này! Hashmap rất chậm so với mảng. Bạn chỉ cần chuyển đổi mỗi chữ viết tắt thành một số. Có một kỹ thuật băm tiêu chuẩn có thể được sử dụng cho việc này:

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

Điều này gần như được đảm bảo là duy nhất và rất nhiều công cụ chuyên nghiệp sử dụng điều này.

Bây giờ bạn cần tạo một chức năng tra cứu:

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

Và sử dụng nó như thế này:

print month_abbr_to_name("Dec")December

HTH!


Trolling

- Mã này chậm khủng khiếp. Mặc dù truy cập mảng thực sự nhanh hơn so với hashmap, nhưng điều này không áp dụng nếu mảng lớn hơn hàng nghìn lần so với hashmap cần thiết.
- Mảng cực lớn này được tạo lại, và một lần nữa, mỗi khi hàm được gọi. Để lãng phí thêm một chút dung lượng, mỗi giá trị được khởi tạo bằng "Không xác định".
- Hàm băm có nghĩa là tối nghĩa với một người không hài lòng với Python. Tôi nói thêm rằng nó "được sử dụng trong nhiều công cụ chuyên nghiệp" để ngăn cản điều tra.
- Hàm băm đủ độc đáo để phân biệt chính xác giữa mười hai tháng, nhưng sẽ không bắt được nhiều lỗi chính tả phổ biến, chẳng hạn như các ký tự được hoán đổi.
- Chỉ cần bất kỳ chuỗi nào dài hơn 3 ký tự sẽ bị lỗi trên chỉ mục mảng ngoài giới hạn.
- "Tháng Hai" bị sai chính tả.
- "Chức năng này rất quan trọng." Bản ngã nhỏ cho OP.


12
Hãy nhìn kỹ, folks; Đây là một câu trả lời đúng mã trolling ! Thi thiên Tôi chắc chắn rằng tôi sẽ đạt điểm cao với điều này và nó tốt hơn nhiều so với kịch bản shell Java sloooow mà tôi cố gắng viết ?! [Nhập mô tả hình ảnh ở đây]
Jason C

2
"Tháng hai" là sai chính tả. - một số trò troll nghiêm trọng :)
Jaa-c

10
+1 để nói rằng các bảng băm là không hiệu quả, sau đó thực hiện một bảng băm thực sự không hiệu quả
James_pic

1
"Hashmap rất chậm so với mảng. Bạn chỉ cần chuyển đổi mỗi chữ viết tắt thành một số. Có một kỹ thuật băm tiêu chuẩn có thể được sử dụng cho việc này ..." vì vậy, nói cách khác là thực hiện lại bản đồ băm. Hah +1
wchargein

25

Vợt

Tôi đi cho một giải pháp KISS . Tôi đã kiểm tra nó với trường hợp sử dụng của OP "Dec" với tất cả các mũ để kiểm tra xem kết quả đúng có được trả về không. Nó trôi qua với màu sắc bay.

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

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

Rõ ràng sự trolling ở đây là nó chỉ hoạt động trong một vài trường hợp nên nó vô dụng :-)


Có lẽ bởi vì, từ wiki thẻ mã trolling, "Nhiệm vụ là cung cấp mã hoạt động, nhưng vô dụng, làm nản lòng nghiêm trọng OP." Mã của bạn thậm chí không hoạt động. Ở đây, có một downvote khác.
dùng12205

@ace Nó không ném bất kỳ lỗi nào và nó trả về câu trả lời đúng "Tháng 12". Câu hỏi không chỉ định nó sẽ hoạt động trong những tháng khác hoặc họ sẽ có những cái tên dài bao nhiêu vì vậy tôi hy vọng việc thêm "ember" vào cuối là một câu trả lời hay.
Sylwester

1
Từ câu hỏi, "Tôi cần chuyển đổi các phiên bản rút gọn của tên tháng thành các đại diện dài hơn của chúng (ví dụ:" Tháng 12 "->" Tháng 12 ")" Tháng 12 là một ví dụ, không phải tất cả các trường hợp. Chương trình của bạn nên hoạt động cho tất cả các tên tháng.
dùng12205

9
@ace Và nó làm được. Nó biến "Jan" thành "Janember" Nhìn vào ví dụ chính xác là những gì OP muốn. Tôi thực sự không thể thấy làm thế nào người ta có thể hạ thấp câu trả lời cho các thẻ trolling mã vì "Cố tình hiểu sai câu hỏi" và "gian lận trong câu hỏi" đều là những cách tốt để trả lời nó.
Sylwester

7
Đây chính xác là loại giải pháp tôi đã nghĩ đến để cung cấp, với "từ chối trách nhiệm: bạn nói rằng đó là khẩn cấp, vì vậy tôi đã vội vàng và chỉ thử nghiệm 3 trường hợp, nhưng nó đã vượt qua cho tất cả chúng".
AShelly

22

LUA

Giải pháp của tôi sẽ làm việc trong ngôn ngữ địa phương của bạn, giáo sư của bạn sẽ được hạnh phúc

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')

Kiểm tra

lua 25207.lua aPr
April

Kiểm tra tên viết tắt của tháng hiện tại, nếu đúng, hãy trả lại chuỗi dài nếu không hãy thử lại .. MỘT THÁNG SAU


Rực rỡ! Nhắc nhở tôi về thời gian trong công việc cũ của tôi khi tôi còn <<< Lỗi: hết thời gian kết nối. >>>
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;

- Regex địa ngục. Tôi hy vọng regex không được tính là "trolling bởi ngôn ngữ tối nghĩa".
- Cực kỳ mong manh. Bạn sẽ có một thời gian khó khăn để thêm một hỗ trợ cho Bugsember.
- Không thể đọc được. Hoa văn bên trong mô hình làm cho nó thậm chí nhiều hơn như vậy.
- Nén tháng sáu và tháng bảy vào một tuyên bố duy nhất không thực sự nén bất cứ điều gì.
- sử dụng ngẫu nhiên lookbehind cho g, trong khi những người khác lặp lại mô hình thay thế.
- use re 'eval'thực sự không cần thiết; nó chỉ được sử dụng khi muốn có một mẫu biến. Ngoài ra, sử dụng evalđể "đạt được" một chút "nén".


17
Trông giống như Perl bình thường đối với tôi ...
Peter Olson

1
@PeterOlson ngôn ngữ đã được chọn để phù hợp với thuật toán, nhưng thuật toán hoàn toàn không phù hợp với nhiệm vụ, bạn có đồng ý không? :-)
John Dvorak

10

Java

Bạn đã nói mã hiện tại của bạn bằng Java, vì vậy tôi nghĩ rằng tôi sẽ làm mọi thứ dễ dàng cho bạn.

// 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");
  }
}

Lớp Lịch có một gotcha nhỏ thú vị trong đó các tháng được đánh số bắt đầu từ 0 - vì vậy JANUARY == 0. Tuy nhiên, điều này rõ ràng không thể ảnh hưởng đến mã của chúng tôi, như chúng tôi đã kiểm tra nó, phải không? Lưu ý rằng có một sự chuyển đổi dự phòng không mong muốn trong shortNameToNumber, có nghĩa là mỗi tháng kết thúc là 0. Handily JANUARY == 0, vì vậy bài kiểm tra của chúng tôi đã vượt qua.


1
Chúa ơi, tôi đã không nhận thấy sự thiếu sót trong tuyên bố chuyển đổi. Lâu lắm rồi tôi mới dùng công tắc.
Joe Z.

10

Bash + coreutils + paq8hp12

Câu trả lời hiện đang được nâng cao nhất phải truy cập internet cho mọi truy vấn. Ngoài việc rất không hiệu quả, điều này cũng có nghĩa là kịch bản của bạn sẽ thất bại nếu không có internet.

Tốt hơn là lưu trữ thông tin cần thiết trên đĩa cứng của bạn. Tất nhiên, bạn chỉ có thể lưu trữ dữ liệu cần thiết cho chính tập lệnh này, nhưng điều đó sẽ yêu cầu dữ liệu khác nhau cho các tác vụ khác nhau. Sẽ tốt hơn nhiều khi lưu trữ tất cả dữ liệu bạn có thể cần trong một tệp đa mục đích.

# 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.

Trolling

  • Đóng STDERR, vì vậy chúng tôi sẽ không thể gỡ lỗi tập lệnh nếu thất bại.

  • Tắt tiếng vang đầu vào, vẫn tồn tại sau khi tập lệnh kết thúc. Nếu được thực hiện từ một thiết bị đầu cuối, bạn phải thực hiện echo stty để thiết bị đầu cuối của bạn có thể sử dụng lại được. Nếu không được thực thi từ một thiết bị đầu cuối, điều này có thể làm hỏng tập lệnh.

  • Yêu cầu thực hiện goto trước. Như thể bản thân nó không đủ tệ, chức năng goto sẽ không hoạt động nếu tên tệp của tập lệnh chứa khoảng trắng.

  • Chúng tôi sẽ không tải xuống kho lưu trữ nếu một tệp chứa chuỗi enwik8 tồn tại trong thư mục hiện tại. Điều này có thể làm việc.

  • Tải xuống tệp 100 MB (ngay cả khi được nén thành 36 MB) rõ ràng là quá mức cần thiết cho tác vụ này. Thêm vào đó, enwik8 chứa 100 MB đầu tiên của kết xuất Wikipedia hơn 4 GB, do đó, đối với một tác vụ cụ thể, không thể chứa bất kỳ thông tin hữu ích nào.

  • Nén tệp với paq8hp12 thu nhỏ nó xuống 16 MB, nhưng nén và giải nén cả hai mất một giờ. Nó thực sự sẽ làm cả hai lần đầu tiên kịch bản này được chạy.

  • Kịch bản không xóa phiên bản nén hoặc thô của enwik8 , do đó việc thu nhỏ nó thành 16 MB đã tiêu tốn dung lượng đĩa cứng nhiều hơn.

  • Tiện ích nén sẽ chỉ hoạt động trên bộ xử lý 64 bit.

  • Nó để lại tất cả các tệp đã được tải xuống hoặc trích xuất trong thư mục hiện tại.

  • Nó không giải thích phần khó nhất của kịch bản, đó là quái vật regex-pipe. Về cơ bản, nó trích xuất tất cả các chuỗi từ 4 đến 19 byte có chữ số đầu và cuối, sắp xếp các chuỗi đó theo số lần xuất hiện, lọc các chuỗi chứa tên tháng ngắn, sắp xếp lại theo số lần xuất hiện và hiển thị thường xuyên nhất.

  • Ngay cả khi những điều trên một ý tưởng tốt, con mèo không cần thiết ngay từ đầu, egrep khá chậm đối với nhiệm vụ này, regex sẽ trả về rất nhiều kết quả sai (mọi thứ có thể được thực hiện với một regex), loại đầu tiên | uniq -c | sắp xếp -n | tac hoàn thành không có gì, nó sử dụng sort | tac thay vì loại -rcắt sẽ không làm việc đáng tin cậy vì số lượng các khoảng trắng ở đầu có thể thay đổi.

  • Regex là một biểu thức chính quy POSIX mở rộng , do đó, việc đánh dấu cú pháp BRE sẽ không giúp ích gì cả.

  • Trả về tháng 11 thay vì tháng 116 thay vì tháng 8 .


1
Đây là những lời khuyên rất hữu ích! Chắc chắn điều này hiệu quả hơn và người hướng dẫn của tôi nói với tôi rằng các chuyên gia làm cho dữ liệu có thể tái sử dụng cho OOP và OOP nhanh và tốt hơn!
Jason C

9

Python + SQLite

Nhiều câu trả lời cho đến nay đã phạm sai lầm của mã hóa tên tháng. Nhưng, bạn không bao giờ biết khi nào một Giáo hoàng hoặc Tổng thống sẽ khiến chúng ta chuyển sang lịch khác, và sau đó hàng tấn mã phân tích / định dạng ngày sẽ ngay lập tức trở nên vô giá trị! (Hoặc, thông thường hơn, khi bạn cần quốc tế hóa chương trình của mình.)

Những gì bạn cần là một cơ sở dữ liệu.

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;

Sau đó, chỉ cần viết một chương trình đơn giản để truy vấn nó.

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 và một người bạn (ngày)

Chức năng:

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

Kiểm tra nó:

$ 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

Nó ngắn ... nhưng tính toán tỷ lệ "ác trên mỗi nhân vật" ... mwhuaaahahahaaa ...


Tôi không biết ngôn ngữ nên tôi không thể thấy bất cứ điều gì xấu ở đây. Tôi giả sử downvote của bạn là từ những người khác ở một vị trí tương tự. Hãy giải thích những gì đang xảy ra và tại sao nó là xấu xa. Tôi tò mò.
Cấp sông St

Đó là (n) (ab) sử dụng các datetính năng định dạng ngày. Và datetôn trọng nội địa hóa, nó tạo ra tháng phù hợp với nội địa hóa. -d"a_month_name 1đặt ngày thành ngày đầu tiên của tháng được đặt tên (có thể là tên viết tắt) và năm mất tích được đặt để nó sẽ là tháng tiếp theo. +%Blà định dạng cho ngày tháng nhất định và có nghĩa là 'tên dài của tháng'. Tất cả các tat được gói vào một hàm shell và vì không có thứ cụ thể BASH nào trong đó, SH sẽ đủ để chạy nó. Vì vậy, về cơ bản datexứng đáng với tất cả các tràng pháo tay, không phải tôi! Và tôi không quan tâm đến downvote trong codegolf! : -Þ

Tôi thích điều này! Kẻ lạm dụng.
ojblass

4

perl

Làm thế nào về một số lực lượng vũ phu ol 'tốt?

$|++;

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";

Tại sao điều này là tuyệt vời:

  • lực lượng vũ phu luôn là cách tốt nhất để làm điều đó.
  • để thuận tiện cho bạn, hãy in câu trả lời một phần ngay khi biết (Tôi cá là bạn không biết rằng "Tháng Hai" là viết tắt của từ bắt đầu bằng "Tháng Hai ..." ???)
  • chức năng băm tùy chỉnh để bảo mật tối đa.
  • việc sử dụng quá tải toán tử tích hợp sẵn của perl (gia tăng trên chuỗi) làm cho mã này nhanh như mã C gốc. Nhìn vào tất cả các số không, cho thấy nó chạy nhanh như thế nào!

    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
    
  • Thuật toán rõ ràng bằng trực giác và tôi để lại bằng chứng là một bài tập cho người đọc, nhưng chỉ để đảm bảo nó hoạt động trong mọi trường hợp, hãy kiểm tra tháng 8, một trong những tháng cuối cùng và một trong những thông tin để đảm bảo rằng chúng tôi không bỏ lỡ bất cứ điều gì:

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

Quỷ dữ:

Bỏ qua các thực hành mã hóa sẽ khiến Damian Conway chết trong tầm nhìn, mã này bị gián đoạn và gián đoạn cực kỳ chậm. "Tháng hai" chạy khoảng 6 đơn hàng độ lớn - một triệu lần - chậm hơn "có thể", "tháng sáu" hoặc "tháng sáu". Feboapic, Sepibnd, Novgpej và Decabjuj không phải là tháng (mặc dù chúng rất vui khi thử phát âm).

    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

Tái bút - Tôi đã có một số mã có độ lây lan thậm chí còn lớn hơn, nhưng nó nhàm chán đưa ra câu trả lời đúng trong mọi trường hợp, điều này ít thú vị hơn nhiều.


3

JavaScript - Cụm nút được tối ưu hóa với các nhánh, lá và chuỗi thùng.

// 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 và Xác suất

Tôi thất vọng vì rất nhiều giải pháp ở đây "phát minh lại bánh xe" khi câu trả lời dễ dàng có sẵn trên internet.

Đây là đầu ra của chương trình của tôi:

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

Không hoàn hảo, nhưng đủ tốt để gửi đến QA. Tôi đã có thể đạt được những kết quả này bằng cách tận dụng sức mạnh của dịch vụ cộng đồng:

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.
}

Nếu nó không rõ ràng, extendMonthName ("jan") trả về một từ được chọn ngẫu nhiên bắt đầu bằng "jan" từ kết quả của Google cho "tháng nào là tháng một". Trừ khi bạn đứng sau một proxy, trong trường hợp đó, nó sẽ trả về "Tháng Tám".


2

Bash + binutils

Tôi đã cố gắng làm điều hiển nhiên bằng cách chuyển đổi đầu vào thành một đối tượng ngày, nhưng thất bại thảm hại. Cuối cùng tôi dùng đến phương pháp vũ phu.

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

Chạy thử:

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

2

Tôi hiểu rằng việc kiểm tra tên của tháng rất khó khăn và nó đòi hỏi rất nhiều tính toán và tư duy logic. Đây là phiên bản tối ưu của đại số Buzz-Strahlemann để kiểm tra tên của tháng .

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++;
}

Quỷ dữ:

  • Câu trả lời này;

  • Không xử lý múi giờ và sẽ đưa ra một thông báo cảnh báo;

  • Không chấp nhận tháng làm đầu vào, nhưng bạn cần mã hóa nó;

  • Ngay cả khi bạn mã hóa nó, nó vẫn phân biệt chữ hoa chữ thường;

  • Những gì mã này cố gắng làm là để có được tháng hiện tại, nhận ba chữ cái đầu tiên và kiểm tra xem nó có khớp với không $month. Nếu nó không khớp, nó sẽ tăng dấu thời gian lên 1 và sau đó thử lại. Điều này kết thúc là TUYỆT VỜI ;

  • Mã này không có kết quả gì (ngoại trừ cảnh báo, tất nhiên);

  • Nhận xét rất sai lệch: time()không tải thư viện thời gian kéo dài, nhưng có dấu thời gian hiện tại; substr($checkThis,1,4)bỏ qua chữ cái đầu tiên của tháng và nhận được sau 4 ( archcho March, ví dụ); Các hình thức chính xác là một trong các ý kiến;

  • Ngay cả khi tìm thấy kết quả khớp, mã sẽ không thoát khỏi vòng lặp: trên thực tế, biến được đặt thành truekhác.


3
-1: Từ wiki thẻ trolling mã, "Nhiệm vụ là cung cấp mã hoạt động, nhưng vô dụng, làm nản lòng nghiêm trọng OP." Mã của bạn thậm chí không hoạt động.
dùng12205

1
Hửm Nó hoạt động và nó vô dụng. Chờ đợi 10 năm để một vòng lặp vô tận kết thúc không đủ bực bội? "Nó hoạt động" có nghĩa là (ít nhất, nó có nghĩa đối với tôi), rằng mã biên dịch và chạy thành công, điều đó không có nghĩa là nó phải kết thúc hoặc đưa ra bất kỳ giải pháp nào.
Vereos

@ace (Tôi quên đề cập đến bạn trong bình luận trước); Điều tôi đang cố gắng nói trong bình luận đó là tôi muốn hiểu rõ hơn ý của bạn là gì, bởi vì nó đúng theo quan điểm của tôi.
Vereos

Có lẽ vì archsẽ không bao giờ bằng Mar?
dùng12205

Vì vậy, mã của bạn không thể chuyển đổi tên tháng, do đó nó không hoạt động.
dùng12205

2

Mẻ

Những gì bạn đang yêu cầu là không tầm thường. Tuy nhiên tôi đã tìm thấy giải pháp hoàn hảo cho bạn! Cách thức hoạt động của nó là bằng cách tải xuống một danh sách rất phức tạp của ngôn ngữ tiếng Anh vào đĩa cứng của bạn. Đầu vào sau đó được kiểm tra đối với danh sách đã tải xuống và tên cuối cùng của tháng được đưa ra! Thiên tài!

Bây giờ, phương pháp này có nhiều ưu điểm so với các phương thức khác, một số là:

  • Bạn có thể có bất kỳ chữ viết tắt của từ! Ví dụ Janhoặc Janucho tháng một!
  • "Bạn không bao giờ biết khi nào một Giáo hoàng hoặc Tổng thống sẽ bắt chúng tôi chuyển sang lịch khác, và sau đó hàng tấn mã phân tích / định dạng ngày sẽ ngay lập tức trở nên vô giá trị!" Điều này không bao giờ là một vấn đề với phương pháp của chúng tôi!
  • Người dùng được gửi lời nhắc xác nhận, an toàn tốt hơn xin lỗi!

Mật mã:

@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!

Trollz

- Batch ... - Tải xuống danh sách các từ, vì chúng ta không thể gõ các tháng theo cách thủ công ... - Không sử dụng hack case - RẤT SLOW - chuyển đổi tệp văn bản thành chữ thường và lưu nó trong tệp khác - chạy nó lần thứ hai mà không xóa các tệp văn bản được tạo và nó sẽ còn chậm hơn - Một cái gì đó đánh dấu tập lệnh tắt trong khi chuyển đổi tập tin dic.txt thành chữ thường, điều này đặt lại tiếng vang - Điều này spoiler đã làm rối định dạng bằng cách ...


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

Để làm cho chương trình của bạn phản hồi nhanh hơn, tôi đã đưa các tháng có 31 ngày trước đó vào danh sách. Nói theo thống kê, được phân phối ngày tháng đều nhau, bạn có nhiều khả năng sẽ ở một trong những tháng đó.

Tôi ghi lại từng dòng để gây ấn tượng với sếp của bạn.

Lưu cái này trong một tệp được gọi lookup_month_script.bashvà sao chép-dán dòng sau để kiểm tra nó:

bash $PWD/lookup_month_script.bash "0ct"

Chúc may mắn với dự án của bạn!


- Không hoạt động cho tháng một, mặc dù nó được liệt kê hai lần . (Chúng tôi thực sự đang sử dụng Januarylàm dấu phân cách cho sự khởi đầu và kết thúc của di sản.)

- Cũng không hoạt động cho tháng Mười. Không ai có thể thấy tại sao.

- Nếu đầu vào xảy ra trống, trả về tất cả 11 tháng.

- Nếu tập lệnh được dán sao chép, phản hồi tháng 6 sẽ có độ dài 42 ký tự.

Tiểu tiết:

- Shebang có phần không chính xác, nhưng không có cảnh báo nào được đưa ra.

- Nhận xét đó là những bình luận cho biết dòng bên dưới họ đang nói gì.

- Ngay cả khi chương trình đã phản hồi sớm hơn cho các mục trước đó, nó vẫn không hoàn thành nhanh hơn.


1

JavaScript - 209

Nó nói không chuyển đổi thành Ngày, đó không phải là điều đang xảy ra ở đây, tôi chỉ đơn giản là sử dụng Ngày để tạo phần mở rộng của tên ngắn.

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]];}

Kiểm tra đầu vào / đầu ra:

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
Tôi cũng có vẻ đã trolled
Matt

Âm thanh như ai đó có một trường hợp của Wendsday.
Jason C

5
@Matt Ý bạn là "Trên đồng tử"?
Justin

Của couse @Quincunx
Matt

1

Java 696 bao gồm đầu vào thử nghiệm

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

Ngôn ngữ lập trình "Brainf * ck" là một công cụ hoàn hảo cho việc này! Nó có thể không chính xác những gì bạn đang tìm kiếm, chắc chắn, nhưng nó hoàn thành công việc một cách hoàn hảo!

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

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

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

Tôi chắc rằng giáo viên của bạn sẽ tự hào khi bạn chỉ cho anh ấy điều này!


Trolling

Chương trình này, trước hết, được viết khá tệ. Tôi đã thực hiện một số vòng lặp gây ra lỗi in ngẫu nhiên và không hoạt động chung vì thiếu từ tốt hơn. Phải mất một chút dọn dẹp để có được mã hoạt động tốt (chủ yếu trong hai đoạn đầu của nó), dù sao nó cũng vô dụng vì nó đặt tên dài là "viết tắt + 'th' '(tháng 1, tháng 2, tháng ba, v.v.) bao gồm mã dự phòng cho "Tháng một" (được định nghĩa là một ngoại lệ và được mã hóa riêng). Câu trả lời đầu tiên trên Stackexchange, vì vậy tôi hy vọng điều này đáp ứng các tiêu chí


1

Java

Kính gửi các nhà khoa học máy tính,

Đây là một nhiệm vụ khá khó khăn và tôi chỉ giải quyết được một phần: tôi đoán đây là cho công việc luận án của bạn hoặc một số mục đích nghiên cứu.

Cho đến nay tôi chỉ có phiên bản beta với một số lỗi nhỏ: đôi khi nó cho kết quả sai, nhưng tôi chắc rằng giáo sư của bạn sẽ chấp nhận nỗ lực của bạn.

tập tin Year.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;
    }

tệp 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));
   }

Để chạy nó thực thi:

javac Month.java
javac Era.java
java Era jan

đầu ra:

jan: [January]

Hãy nhớ đặt %JAVAPATH%đường dẫn của bạn vào Javatrình biên dịch được cài đặt!

Nó chỉ trả lại một tháng ngẫu nhiên. Thật ra tôi thậm chí không kiểm tra nó. Tôi đoán một số hàng nhập khẩu bị thiếu.


1

Vì OP đang sử dụng Java, tôi sẽ đưa ra giải pháp Java. Ý tưởng rất đơn giản:

  1. Tạo một Maptên từ tên dài đến tên ngắn.
  2. Tạo một chuỗi ngẫu nhiên, ánh xạ nó đến tên ngắn.
  3. Sử dụng String.equalsIgnoreCaseđể kiểm tra xem tên ngắn có giống như các trường hợp bỏ qua tên ngắn đầu vào không. Nếu vậy, thành công, thoát.
  4. Nếu không, hãy đến Bước 2.

Đây là nguồn:

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;
            }
        }
    }
}

Trolling

Chương trình cần một CPU nhanh và bệnh nhân của bạn. Khi bạn học đa luồng và có cpu đa lõi, bạn có thể thử làm cho nó nhanh hơn.


1


Cảm ơn bạn đã đăng suy nghĩ này kích thích và câu hỏi ban đầu. Những người trong chúng tôi đăng câu trả lời trên Stack Overflow tận hưởng cơ hội để giúp người đăng, vì mục đích của trang web này là lập danh mục tất cả các câu hỏi như vậy để làm cho nhu cầu về sách giáo khoa và tự học bị lỗi thời. Đừng hoảng hốt vì sự thiếu hiểu biết của bạn về câu hỏi đặc biệt này, vì đây là một loại câu hỏi phổ biến được hỏi vì thủ thuật ẩn của nó cần thiết để giải quyết nó một cách hiệu quả. Các giảng viên thường sẽ hỏi câu hỏi này để xác định không chỉ mức độ hiểu biết về ngôn ngữ của bạn, mà còn cho dù bạn biết về cạm bẫy lập trình phổ biến này: mã hóa ký tự. Bạn sẽ hiểu hoàn toàn hơn sau khi bạn đọc kỹ thông qua liên kết sau, vì tôi biết bạn sẽ: liên kết .

Bây giờ tôi chắc chắn rằng giáo sư của bạn đã mô tả rất chi tiết về tầm quan trọng của việc sử dụng lại mã, vì vậy khi bạn đọc liên kết mã hóa ký tự mà tôi cung cấp, bạn hoàn toàn hiểu được rằng bạn sẽ phải tạo một lớp đủ chung chung có thể xử lý bất kỳ ngôn ngữ, ngay cả khi câu hỏi ban đầu đã không đặc biệt chỉ định yêu cầu này (bạn cũng có thể muốn tìm hiểu về đặc điểm kỹ thuật yêu cầu, mà sẽ giúp bạn hiểu các yêu cầu, đọc qua liên kết này: . link

bạn nơi rất thông minh trong việc đề xuất không sử dụng đối tượng Ngày được cung cấp, vì sử dụng mã trong các ngôn ngữ mặc định sẽ không cho phép bạn thể hiện sự hiểu biết thực sự về ngôn ngữ của mình cho giáo sư của bạn.

Để giúp bạn vượt qua câu hỏi khó này, tôi đã viết một ứng dụng Groovy sẽ giải quyết vấn đề của bạn và chắc chắn sẽ có ý nghĩa hơn so với java khó hiểu đó. Đừng lo lắng về việc sử dụng Groovy cho câu trả lời này, vì Groovy cũng chạy trên JVM giống như mã Java, vì vậy bạn có thể dễ dàng thả mã này vào lớp java của mình chỉ với một vài sửa đổi. Tôi đã đính kèm một liên kết để giúp bạn trong quá trình này, nhưng tôi sẽ không lo lắng về nó cho đến sáng, vì nó chỉ mất một giây (đây là liên kết cho sau này: liên kết. Vì vậy, chỉ cần sao chép mã ngay bây giờ, vì tôi sẽ hiển thị nhiều trường hợp thử nghiệm của mã hoạt động phù hợp, để bạn có thể cảm thấy tự tin khi gửi. Tôi chắc chắn hiểu rằng bạn là sinh viên rất háo hức, rất nhiều nghĩa vụ trong đĩa của bạn. Bạn có thể nhận thức được rằng những người đóng góp ở đây làm việc toàn thời gian, và được đền bù xứng đáng.

//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
            }
        }
    }
}

Xin lỗi vì tôi đã không để lại bất cứ điều gì cho bạn làm ở đây, tôi đã mang đi trả lời câu hỏi kích thích suy nghĩ của bạn. Vì vậy, chỉ cần sao chép và dán phản hồi này. Như bạn có thể thấy trong các lần chạy mã sau đây, đây là những gì nó có thể làm:

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

1

Julia

Bạn sẽ muốn sử dụng sức mạnh của nhiều công văn ở đây. Đầu tiên chúng ta sẽ xác định một loại mỗi tháng. Sau đó, chúng ta có thể viết các định nghĩa hàm đơn giản cho từng loại tháng đưa ra câu trả lời mong muốn. Điều này sẽ cho phép bạn sử dụng các hình thức thuận tiện nicename(Jan)mà không phải bận tâm với các dấu ngoặc kép gây phiền nhiễu. Ngoài ra, chúng ta có thể định nghĩa một hàm tiện lợi để chấp nhận các chuỗi và chuyển đổi chúng thành các loại, sử dụng lại tất cả các công việc chúng ta đã làm để cung cấp một giao diện hoàn toàn mới.

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")

Đây là ngôn ngữ gì?
ugoren

Julia, điều ngớ ngẩn để rời khỏi.
gggg

0

Con trăn 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))

Vẻ đẹp thực sự là ở sự đơn giản, có nghĩa là yêu cầu bộ nhớ thấp. Quên những từ điển pesky và đoạn mã. Chức năng này là rất tốt, nó sẽ phù hợp với tên tháng ngắn bằng cách sử dụng bất kỳ trường hợp. Quan sát.

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

TIỀN THƯỞNG:

Bạn có thể sử dụng nhiều hơn 3 ký tự đầu tiên (ví dụ: "sept", "febr", v.v.)

Điều này sẽ lặp qua từng giây kể từ khi bạn chạy mã này, kiểm tra sự trùng khớp ở đầu tên, do đó, sẽ mất mãi mãi để chạy nếu kết quả dự kiến ​​không phải là tháng hiện tại của bạn. Cũng nhiều lỗi phong cách.


0

trong 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

Đây là một chương trình nhỏ làm những gì bạn yêu cầu.

Hoặc thực sự, 13 trong số họ.

Tôi đã viết nó bằng C ++ vì đó là những gì tôi sử dụng vào lúc này, nhưng nó chuyển đổi khá dễ dàng sang Java. Là một sinh viên tận tụy, tôi chắc chắn bạn có thể tự mình làm việc đó.

#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;
}

Oh và tôi có thể đã bỏ qua một chút lỗi bù trong vòng lặp.

Tôi quyết định là tốt đẹp và sử dụng std::strings thay vì char*s. Tôi chắc chắn rằng tôi sẽ nhầm lẫn bạn với cú pháp như thế char*[]và tôi chắc chắn đã quên gọi delete, hoặc làm điều gì đó ngu ngốc như gọi deletethay vì delete[].


0

C

Một số loại chuyển đổi chung của chữ viết tắt thành từ đầy đủ, chỉ cần điều chỉnh datamảng ...

#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';
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.