Ubah nama bulan pendek menjadi rekan yang lebih panjang


28

Tantangan ini telah berakhir! Selamat Flonk !

Saya yakin saya akan mendapat nilai bagus, tetapi setelah menyerahkan Flonk pada pekerjaan saya, profesor saya tidak percaya itu milik saya dan juga tidak bisa mengerti mengapa itu begitu rumit ... saya gagal dan ibu saya mengirim saya ke Facebook dan Minecraft untuk sebulan. Saya tidak mengerti. :(

Terima kasih atas semua kiriman Anda! Beberapa jawaban bagus di sini. Pemenang resmi adalah Flonk dengan skor 64 . 5 teratas adalah:

  1. Flonk , 64 (Haskell, dengan matematika yang efisien!)
  2. DigitalTrauma , 40 (Awan, masa depan sekarang)
  3. primo , 38 (Python, dan favorit pribadi saya - dan sangat profesional!)
  4. Sylwester , 20 (raket, meskipun Janember merentangkannya!)
  5. ilmale , 16 ( Algoritma yang sangat optimal di Lua)

Tantangan asli di bawah ini.


Tolong bantu saya, ini sangat mendesak !!! :(

Saya perlu mengonversi versi singkat dari nama bulan ke representasi yang lebih panjang (mis. "Des" -> "December"), tidak peka huruf besar-kecil. Saat ini saya menggunakan Java; nama bulan adalah String dan saya lebih suka tidak mengubahnya menjadi objek Date terlebih dahulu. Namun, bahasa apa pun akan berhasil.

Apakah ada cara mudah untuk melakukan ini ?? Mudah saja, saya pemula dalam pemrograman!


Ini adalah kontes popularitas kode trolling (jenis terbaik yang ada!). Jawaban dengan suara terbanyak pada 8 April 2014 menang.


7
"Tolong bantu saya, ini sangat mendesak !!! :(" <<< kerjakan PR saya, lakukan dengan cepat?

13
@yeti Secepat mungkin !! Cepat sebelum saya gagal di kelas saya!
Jason C

24
Seharusnya ada fitur yang secara diam-diam akan menyalin pertanyaan semacam itu dari Stackoverflow ke codegolf.SE dengan tag kode-trolling, dan kemudian mendapatkan jawaban dari codegolf.SE ditransfer kembali ke pos asli dengan teks pada tag spoiler dihapus.
daniero

Code-trolling sedang dalam proses dihapus, sesuai dengan posisi resmi. Pertanyaan ini sangat dipilih dengan banyak jawaban, banyak di antaranya sangat sangat. Ini menerima lebih dari 50% "hapus" suara pada polling , tetapi unik karena menerima begitu banyak jawaban dan suara, jadi saya menguncinya untuk signifikansi historis.
Gagang Pintu

Jawaban:


74

Ini sangat sederhana dengan sedikit interpolasi polinomial!

Pertama, saya melihat daftar nama-nama bulan pendek

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

dan memeriksa jumlah nilai karakter ASCII mereka

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

kemudian kurangi 300 dari mereka untuk memahami apa yang saya hadapi di sini, dan menyiapkan Array yang berisi semua versi yang lebih panjang dari nama-nama bulan.

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

Saya kira Anda dapat melihat apa yang terjadi sekarang - yang saya butuhkan adalah fungsi getIndex yang memetakan 13 ke 0, 1 ke 1, 20 ke 2, dan seterusnya, jadi saya bisa melakukan

getMonthName shortname = mons !! (getIndex shortname)

Untungnya, Wolfram | Alpha dapat melakukan ini untuk saya ! Jumlahnya agak besar, tetapi Haskell dapat mengatasinya dengan anggun. Kita hanya perlu memastikan untuk membulatkan hasil, karena floating-point-aritmatika sedikit tidak tepat! Jadi begitulah, Haskell yang cepat, elegan, dan idiomatis:

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)

Jalankan saja seperti ini:

λ> getMonthName "DeC"
"December"

λ> getMonthName "jan"
"January"

3
Sangat bagus dan bilangan bulat sangat efisien. Saya yakin instruktur saya akan menyukai pekerjaan saya!
Jason C

8
+1 untuk mengajari saya tentang interpolating polynomial.
Primo

3
Aku memang harus tertawa ketika membaca kalimat pertamamu.
Anaforis

46

Bash + alat GNU + "the cloud"

Google memiliki jawaban untuk semuanya, dan saya merasa beruntung :

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

Digunakan:

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

1
Pak dimainkan dengan baik!
ojblass

Tidak akan [a-zA-Z]berfungsi sebagai pengganti [[:alpha:]](sepertinya begitu ketika saya mencobanya setidaknya)? Itu akan menghemat 3 karakter. Beberapa karakter lagi dapat disimpan dengan permintaan ask.com, tetapi itu mungkin tidak dapat diandalkan.
Michael

7
@Mic yang akan jadi masalah jika ini kode golf
undergroundmonorail

7
@JasonC Ini adalah solusi "berbasis cloud". Tentunya tidak diperlukan pembenaran lain.
Digital Trauma

4
@DigitalTrauma Dear Sir Ive pernah mendengar tentang cloud dan ini sangat profesional! Sangat bagus! Sangat yakin! Ty -JasonC
Jason C

43

Python

Karena fungsi ini sangat penting, mungkin akan banyak digunakan, jadi Anda harus mencoba membuatnya secepat mungkin. Poster lain merekomendasikan penggunaan hashmap look-up ... jangan lakukan ini! Hashmaps sangat lambat dibandingkan dengan array. Anda hanya perlu mengubah setiap singkatan menjadi angka. Ada teknik hashing standar yang dapat digunakan untuk ini:

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

Ini hampir dijamin unik, dan banyak alat profesional yang menggunakannya.

Sekarang Anda perlu membuat fungsi pencarian:

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

Dan gunakan seperti ini:

print month_abbr_to_name("Dec")December

HTH!


Trolling

- Kode ini sangat lambat. Meskipun akses array memang lebih cepat daripada hashmaps, ini tidak berlaku jika array ribuan kali lebih besar dari hashmap yang diperlukan.
- Array yang sangat besar ini dibuat lagi, dan lagi, setiap kali fungsi dipanggil. Untuk menyia-nyiakan lebih banyak ruang, setiap nilai diinisialisasi dengan "Tidak Dikenal". - "Febuary" salah eja. - "Fungsi ini sangat penting." Gosok ego kecil untuk OP.
- Fungsi hashing dimaksudkan untuk mengaburkan kepada seseorang yang tidak terbiasa dengan Python. Saya menambahkan bahwa ini "digunakan dalam banyak alat profesional" untuk mencegah penyelidikan.
- Fungsi hashing cukup unik untuk membedakan antara dua belas bulan dengan benar, tetapi tidak akan menangkap banyak kesalahan ketik umum, seperti karakter bertukar.
- Hampir semua string yang lebih panjang dari 3 karakter akan terhenti pada indeks array di luar batas.


12
Lihatlah baik-baik, teman-teman; ini adalah jawaban kode-troll yang tepat ! Ps. Saya yakin saya akan mendapatkan nilai bagus dengan ini dan jauh lebih baik daripada skrip shell Java sloooow yang saya coba tulis?! [Masukkan deskripsi gambar di sini]
Jason C

2
"Febuary" salah eja. - beberapa trolling serius :)
Jaa-c

10
+1 untuk mengatakan bahwa tabel hash tidak efisien, kemudian menerapkan tabel hash yang benar-benar tidak efisien
James_pic

1
"Hashmaps benar - benar lambat dibandingkan dengan array. Anda hanya perlu mengkonversi setiap singkatan menjadi angka. Ada teknik hashing standar yang dapat digunakan untuk ini ..." jadi dengan kata lain menerapkan kembali peta hash. Hah. +1
wchargin

25

Raket

Saya mencari solusi CIUMAN . Saya sudah mengujinya dengan use case OP "Des" dengan semua huruf besar untuk memeriksa apakah hasil yang benar dikembalikan. Itu berlalu dengan warna terbang.

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

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

Jelas trolling di sini adalah hanya berfungsi untuk beberapa kasus jadi tidak berguna :-)


Mungkin karena, dari wiki tag troll kode, "Tugasnya adalah memberikan kode yang berfungsi, tetapi tidak berguna, sangat membuat OP frustrasi." Kode Anda bahkan tidak berfungsi. Di sini, dapatkan downvote lainnya.
user12205

@ace Tidak menimbulkan kesalahan dan mengembalikan jawaban yang benar "Desember". Pertanyaannya tidak menentukan apakah itu akan bekerja untuk bulan lain atau nama panjang apa yang akan mereka miliki jadi saya berharap menambahkan "bara" di akhir adalah jawaban troll yang baik.
Sylwester

1
Dari pertanyaan, "Saya perlu mengonversi versi pendek dari nama bulan ke representasi yang lebih panjang (mis." Des "->" Desember ")" Desember adalah contoh, tidak semua kasus. Program Anda harus bekerja untuk semua nama bulan.
user12205

9
@ace Dan itu. Ternyata "Jan" menjadi "Janember" Melihat contoh yang persis seperti yang diinginkan OP. Saya tidak dapat benar-benar melihat bagaimana seseorang dapat menurunkan jawaban untuk tag troll kode karena "Sengaja salah mengartikan pertanyaan" dan "curang pada pertanyaan" adalah cara yang baik untuk menjawabnya.
Sylwester

7
Ini adalah jenis solusi yang saya pikirkan untuk ditawarkan, dengan "disclaimer: Anda mengatakan itu mendesak, jadi saya bergegas dan hanya menguji 3 kasus, tetapi itu berlaku untuk semuanya".
AShelly

22

LUA

Solusi saya akan bekerja dalam bahasa lokal Anda, profesor Anda akan senang

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

Uji

lua 25207.lua aPr
April

Periksa singkatan dari bulan ini, jika benar kembalikan string panjang jika tidak coba lagi .. SATU BULAN KEMUDIAN


Cemerlang! Mengingatkan saya pada waktu dalam pekerjaan lama saya ketika saya <<< Kesalahan: koneksi habis. >>>
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 neraka. Saya harap regex tidak dihitung sebagai "trolling oleh bahasa yang tidak jelas".
- Sangat rapuh. Anda akan kesulitan menambahkan dukungan untuk Bugsember.
- Tidak bisa dibaca. Pola di dalam pola membuatnya lebih dari itu.
- Kompresi Juni dan Juli menjadi satu pernyataan tidak benar-benar memampatkan apa pun.
- Penggunaan acak gtampilan di belakang, sementara yang lain mengulangi pola dalam substitusi.
- use re 'eval'sebenarnya tidak diperlukan; ini hanya digunakan ketika pola variabel diinginkan. Juga, gunakan evaluntuk "mendapatkan" sedikit "kompresi".


17
Sepertinya Perl normal bagi saya ...
Peter Olson

1
@PeterOlson bahasa dipilih untuk disesuaikan dengan algoritme, tetapi algoritme tidak sesuai dengan tugas sama sekali, bukankah Anda setuju? :-)
John Dvorak

10

Jawa

Anda mengatakan kode Anda saat ini di Jawa, jadi saya pikir saya akan mempermudah Anda.

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

Kelas Kalender memiliki gotcha kecil yang menyenangkan di mana bulan diberi nomor mulai dari 0 - jadi JANUARY == 0. Namun, ini jelas tidak dapat memengaruhi kode kami, saat kami mengujinya, bukan? Perhatikan bahwa ada pergantian sakelar yang tidak disengaja di shortNameToNumber, yang berarti setiap bulan berakhir dengan 0. Mudah JANUARY == 0, jadi tes kami lolos.


1
Ya Tuhan, saya tidak melihat kurangnya istirahat dalam pernyataan switch. Sudah lama sekali sejak saya menggunakan saklar.
Joe Z.

10

Bash + coreutils + paq8hp12

Jawaban yang saat ini paling banyak dibatalkan adalah mengakses internet untuk setiap permintaan. Selain sangat tidak efisien, ini juga berarti bahwa skrip Anda akan gagal jika tidak ada internet.

Lebih baik menyimpan informasi yang diperlukan di hard disk Anda. Tentu saja, Anda dapat menyimpan hanya data yang diperlukan untuk skrip ini, tetapi itu akan membutuhkan data yang berbeda untuk tugas yang berbeda. Jauh lebih baik untuk menyimpan semua data yang mungkin Anda perlukan dalam satu file multi-guna.

# 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

  • Menutup STDERR, jadi kami tidak akan dapat men-debug skrip jika gagal.

  • Menonaktifkan gema input, yang berlanjut setelah skrip selesai. Jika dijalankan dari terminal, Anda harus menjalankan stty echo agar terminal Anda dapat digunakan kembali. Jika tidak dieksekusi dari terminal, skrip ini bisa macet.

  • Perlu menerapkan goto terlebih dahulu. Seolah itu tidak cukup buruk dengan sendirinya, fungsi goto tidak akan berfungsi jika nama file skrip berisi spasi.

  • Kami tidak akan mengunduh arsip jika file yang berisi string enwik8 ada di direktori saat ini. Ini mungkin berhasil.

  • Mengunduh file 100 MB (bahkan jika dikompresi hingga 36 MB) jelas berlebihan untuk tugas ini. Plus, enwik8 berisi 100 MB pertama dari dump Wikipedia 4+ GB, jadi untuk tugas tertentu, tidak mungkin berisi informasi yang berguna.

  • Memampatkan file dengan paq8hp12 menyusut menjadi 16 MB, tetapi kompresi dan dekompresi keduanya memakan waktu satu jam. Ini sebenarnya akan melakukan keduanya saat pertama kali skrip ini dijalankan.

  • Script tidak menghapus versi zip atau mentah enwik8 , jadi menyusutnya menjadi 16 MB menghabiskan lebih banyak ruang hard disk.

  • Utilitas kompresi hanya akan bekerja pada prosesor 64-bit.

  • Itu meninggalkan semua file yang telah diunduh atau diekstrak dalam direktori saat ini.

  • Itu tidak menjelaskan bagian paling rumit dari skrip, yaitu monster regex-pipe. Ini pada dasarnya mengekstraksi semua string antara 4 dan 19 byte yang memiliki digit terkemuka dan tertinggal, mengurutkan string tersebut dengan jumlah kemunculan, memfilter string yang berisi nama bulan pendek, mengurutkan lagi berdasarkan jumlah kemunculan dan menampilkan yang paling sering.

  • Bahkan jika hal di atas adalah ide yang bagus, kucing tidak dibutuhkan di awal, egrep agak lambat untuk tugas ini, regex akan mengembalikan banyak positif palsu (semuanya bisa dilakukan dengan satu regex), jenis pertama | uniq -c | sort -n | tac sama sekali tidak menghasilkan apa-apa, ia menggunakan sort | | tac bukannya sort -r and cut tidak akan bekerja dengan andal karena jumlah spasi di awal adalah variabel.

  • Regex adalah diperpanjang POSIX Regular Expression, sehingga googling sintaks BRE tidak akan membantu sama sekali.

  • Mengembalikan November, bukan November dan 6 bukannya Agustus .


1
Ini adalah saran yang sangat membantu! Tentunya ini lebih efisien dan instruktur saya memberi tahu saya bahwa para profesional membuat data yang dapat digunakan kembali untuk OOP dan OOP lebih cepat dan lebih baik!
Jason C

9

Python + SQLite

Banyak jawaban sejauh ini membuat kesalahan dengan mengkodekan nama bulan. Tapi, Anda tidak pernah tahu kapan beberapa Paus atau Presiden akan membuat kita beralih ke kalender lain, dan kemudian banyak kode parsing / pemformatan tanggal akan langsung menjadi tidak berharga! (Atau, lebih umum, ketika Anda perlu menginternasionalkan program Anda.)

Yang Anda butuhkan adalah database.

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;

Kemudian, cukup tulis program sederhana untuk menanyakannya.

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 & seorang teman (tanggal)

Fungsi:

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

Mengujinya:

$ 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

Ini pendek ... tapi hitunglah rasio "jahat per karakter" ... mwhuaaahahahaaa ...


Saya tidak tahu bahasanya sehingga saya tidak bisa melihat sesuatu yang jahat di sini. Saya menganggap downvotes Anda berasal dari orang lain di posisi yang sama. Tolong jelaskan apa yang terjadi dan mengapa itu jahat. Saya penasaran.
Level River St

Ini adalah (n) (ab) penggunaan datefitur format tanggal. Dan datemenghormati lokalisasi, menghasilkan bulan yang cocok dengan lokalisasi. -d"a_month_name 1menetapkan tanggal ke tanggal 1 bulan yang ditentukan (mungkin nama pendek) dan tahun yang hilang ditetapkan sehingga akan menjadi bulan berikutnya. +%Badalah format untuk prnting tanggal yang diberikan dan berarti 'nama panjang bulan'. Semua tat dibungkus ke dalam fungsi shell dan karena tidak ada hal spesifik BASH di sana, SH akan cukup untuk menjalankannya. Jadi pada dasarnya datelayak mendapat tepuk tangan, bukan aku! Dan saya tidak peduli tentang downvotes dalam codegolf! : -Þ

Aku suka ini! Pelaku.
ojblass

4

perl

Bagaimana dengan kekuatan kasar yang bagus?

$|++;

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

Kenapa ini luar biasa:

  • brute force selalu merupakan cara termanis untuk melakukannya.
  • untuk kenyamanan Anda, cetak sebagian jawaban segera setelah diketahui (saya yakin Anda tidak tahu bahwa "Feb" adalah kependekan dari sesuatu yang dimulai dengan "Feb ..." ???)
  • fungsi hashing khusus untuk keamanan maksimal.
  • penggunaan operator built-in perl yang berlebih (kenaikan string) membuat kode ini secepat kode C asli. Lihatlah semua nol itu, menunjukkan seberapa cepat itu berjalan!

    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
    
  • Algoritma ini jelas secara intuitif, dan saya meninggalkan bukti sebagai latihan untuk pembaca, tetapi hanya untuk memastikan itu berfungsi dalam semua kasus, mari kita periksa Agustus, salah satu dari -ber bulan, dan salah satu dari -uaries untuk memastikan kita tidak ketinggalan apa-apa:

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

Trollage:

Mengesampingkan praktik pengkodean yang akan membuat Damian Conway mati pada pandangan, kode ini sesekali salah, dan sangat lambat. "Feb" beroperasi sekitar 6 kali lipat - satu juta kali - lebih lambat dari "mungkin", "jun", atau "jul". Feboapic, Sepibnd, Novgpej, dan Decabjuj bukan bulan (meskipun mereka menyenangkan untuk diucapkan).

    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 - Saya memiliki beberapa kode yang memiliki penyebaran runtimes yang lebih besar, tetapi dengan membosankan menampilkan jawaban yang benar dalam semua kasus, yang jauh lebih tidak menyenangkan.


3

JavaScript - Cluster Node yang dioptimalkan dengan Branches, Leaves, dan string barrel.

// 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, dan Probabilitas

Saya kecewa karena begitu banyak solusi di sini "menemukan kembali roda" ketika jawabannya mudah tersedia di internet.

Ini adalah output program saya:

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

Tidak sempurna, tetapi cukup baik untuk dikirim ke QA. Saya dapat mencapai hasil ini dengan memanfaatkan kekuatan crowdsourcing:

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

Jika tidak jelas, expandMonthName ("jan") mengembalikan kata yang dipilih secara acak yang dimulai dengan "jan" dari hasil Google untuk "bulan apa Januari". Kecuali Anda berada di belakang proxy, dalam hal ini mengembalikan "Agustus."


2

Bash + binutils

Saya berusaha keras untuk melakukan yang jelas dengan mengubah input ke objek tanggal, tetapi gagal total. Akhirnya saya menggunakan pendekatan brute-force.

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

Tes berjalan:

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

2

Saya mengerti bahwa memeriksa nama-nama bulan sangat sulit, dan itu membutuhkan banyak perhitungan dan pemikiran logis. Berikut adalah versi yang dioptimalkan dari algorythm Buzz-Strahlemann untuk memeriksa nama-nama bulan .

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

Troll:

  • Jawaban ini;

  • Tidak menangani zona waktu dan akan menampilkan pesan peringatan;

  • Tidak menerima bulan sebagai input, tetapi Anda perlu meng-hardcode-nya;

  • Bahkan ketika Anda melakukan hardcode, itu case-sensitive;

  • Apa yang kode ini coba lakukan adalah untuk mendapatkan bulan berjalan, dapatkan tiga huruf pertama, dan periksa apakah cocok dengan $month. Jika tidak cocok, itu menambah stempel waktu oleh 1 dan kemudian coba lagi. Ini akhirnya menjadi sangat lambat ;

  • Kode ini tidak menghasilkan apa-apa (kecuali peringatan, tentu saja);

  • Komentar sangat menyesatkan: time()tidak memuat pustaka waktu lama, tetapi mendapat cap waktu saat ini; substr($checkThis,1,4)melompati huruf pertama bulan itu dan mendapatkan 4 berikut ( archuntuk March, misalnya); Bentuk yang benar adalah yang ada di komentar;

  • Bahkan ketika kecocokan ditemukan, kode tidak akan keluar dari loop: pada kenyataannya, variabel yang diset menjadi trueberbeda.


3
-1: Dari tag wiki troll kode, "Tugasnya adalah memberikan kode yang berfungsi, tetapi tidak berguna, sangat membuat OP frustrasi." Kode Anda bahkan tidak berfungsi.
user12205

1
Hm? Ini bekerja dan tidak berguna. Menunggu 10 tahun untuk menyelesaikan tanpa akhir tidak cukup membuat frustrasi? "Berhasil" berarti (setidaknya berarti bagi saya), bahwa kode mengkompilasi dan berjalan dengan sukses, itu tidak berarti bahwa ia harus mengakhiri atau memberikan solusi apa pun.
Vereos

@ace (saya lupa menyebutkan Anda di komentar sebelumnya); Yang ingin saya katakan dalam komentar itu adalah bahwa saya ingin lebih memahami apa yang Anda maksudkan, karena itu benar dari sudut pandang saya.
Vereos

Mungkin karena archtidak akan pernah sama Mar?
user12205

Jadi kode Anda tidak dapat mengonversi nama bulan, karena itu tidak berfungsi.
user12205

2

Batch

Apa yang Anda minta itu tidak sepele. Namun saya telah menemukan solusi yang tepat untuk Anda! Cara kerjanya adalah dengan mengunduh daftar bahasa Inggris yang sangat rumit ke hard-disk Anda. Masukan kemudian diperiksa terhadap daftar yang diunduh dan nama akhir bulan diberikan! Jenius!

Sekarang, metode ini memiliki banyak kelebihan dibandingkan metode lain, beberapa diantaranya adalah:

  • Anda dapat memiliki singkatan kata! Misalnya Janatau Januuntuk Januari!
  • "Kau tidak pernah tahu kapan beberapa Paus atau Presiden akan membuat kita beralih ke kalender lain, dan kemudian banyak kode penguraian / pemformatan tanggal akan langsung menjadi tidak berharga!" Ini tidak pernah menjadi masalah dengan metode kami!
  • Pengguna mengirim konfirmasi konfirmasi, lebih baik aman daripada menyesal!

Kode:

@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 ... - Mengunduh daftar kata-kata, karena kita tidak dapat mengetikkan bulan secara manual ... - Tidak menggunakan peralihan kasus sakelar - SANGAT PERLAHAN - mengonversi file teks menjadi huruf kecil dan menyimpannya di file lain - jalankan kedua kalinya tanpa menghapus file teks yang dibuat dan itu akan lebih lambat - Sesuatu menandai script off saat mengubah file dic.txt menjadi huruf kecil, ini membuat gema kembali - Hal spoiler ini telah mengacaukan pemformatan dengan cara ...


2

! #/pesta

! #/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

Untuk membuat program Anda merespons lebih cepat, saya telah memasukkan bulan dengan 31 hari sebelumnya dalam daftar. Secara statistik, dengan distribusi tanggal yang merata, Anda lebih mungkin berada di salah satu bulan itu.

Saya mendokumentasikan setiap baris untuk mengesankan atasan Anda.

Simpan ini dalam file yang disebut lookup_month_script.bashdan salin-tempel baris berikut untuk mengujinya:

bash $PWD/lookup_month_script.bash "0ct"

Semoga berhasil dengan proyek Anda!


- Tidak berfungsi untuk Januari, meskipun terdaftar dua kali . (Kami sebenarnya menggunakan Januarysebagai pembatas untuk awal dan akhir heredoc.)

- Juga tidak berfungsi untuk bulan Oktober. Tidak ada yang bisa melihat alasannya.

- Jika inputnya kosong, kembalikan semua 11 bulan.

- Jika skrip di-paste, respon Juni akan menjadi 42 karakter.

Kecil:

- Shebang agak salah, tetapi tidak ada peringatan yang diberikan.

- Komentar yang merupakan komentar yang mengatakan apa yang dikatakan garis di bawahnya.

- Bahkan jika program merespons lebih cepat untuk entri sebelumnya, masih tidak akan selesai lebih cepat


1

JavaScript - 209

Ia mengatakan tidak mengkonversi ke Tanggal, yang bukan apa yang terjadi di sini, saya hanya menggunakan Tanggal untuk menghasilkan ekstensi nama pendek.

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

Tes Input / Output:

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
Saya juga tampaknya telah mengendalikan Febuary - r :) Dengan sengaja, tentu saja ...
Matt

Kedengarannya seperti seseorang yang punya kasus hari Rabu.
Jason C

5
@ Mat Bukankah maksudmu "On pupose"?
Justin

Of couse @Quincunx
Matt

1

Java 696 termasuk input tes

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

Bahasa pemrograman "Brainf * ck" adalah alat yang sempurna untuk ini! Mungkin tidak persis apa yang Anda cari, tentu saja, tapi itu menyelesaikan pekerjaan dengan sempurna!

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

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

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

Saya yakin guru Anda akan bangga ketika Anda menunjukkan ini padanya!


Trolling

Pertama-tama, program ini ditulis dengan sangat buruk. Saya telah membuat beberapa loop yang menyebabkan cetakan kesalahan acak dan ketidakaktifan secara umum karena tidak ada kata yang lebih baik. Dibutuhkan sedikit pembersihan untuk mendapatkan kode yang layak bekerja (terutama dalam dua paragraf pertama) yang bagaimanapun tidak berguna karena memberikan nama panjang sebagai "singkatan + 'uary'" (Januari, Februari, Maruari dll.) Program ini juga termasuk kode redundan untuk "Januari" (didefinisikan sebagai pengecualian dan dikodekan secara terpisah). Jawaban pertama di Stackexchange, jadi saya harap ini memenuhi kriteria


1

Jawa

Magang Ilmuwan Komputer Yang Terhormat,

Ini adalah tugas yang cukup sulit, dan saya telah menyelesaikan hanya sebagian: Saya kira ini untuk pekerjaan tesis Anda atau beberapa tujuan penelitian.

Hingga kini saya hanya memiliki versi beta dengan beberapa bug kecil: kadang-kadang memberikan hasil yang salah, tapi saya yakin profesor Anda akan menerima upaya Anda.

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

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

Untuk menjalankannya jalankan:

javac Month.java
javac Era.java
java Era jan

keluaran:

jan: [January]

Ingatlah untuk mengatur Anda %JAVAPATH%ke jalur di mana Javakompiler Anda diinstal!

Itu hanya mengembalikan bulan acak. Sebenarnya saya bahkan tidak mengujinya. Saya kira beberapa impor hilang.


1

Karena OP menggunakan Java, saya akan memberikan solusi Java. Idenya sederhana:

  1. Buat Mapdari nama panjang ke nama pendek.
  2. Hasilkan String acak, petakan ke nama pendek.
  3. Menggunakan String.equalsIgnoreCase untuk memeriksa apakah nama pendek sama dengan nama pendek input mengabaikan kasus. Jika demikian, sukses, keluar.
  4. Kalau tidak, lanjutkan ke Langkah 2.

Inilah sumbernya:

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

Program ini membutuhkan CPU yang cepat dan pasien Anda. Ketika Anda belajar multi-threading dan memiliki cpu multi-core, Anda dapat mencoba membuatnya lebih cepat.


1


Terima kasih telah memposting pertanyaan yang membangkitkan semangat dan pertanyaan asli ini. Kita yang memposting jawaban di Stack Overflow menikmati kesempatan untuk membantu poster, karena tujuan dari situs web ini adalah untuk membuat katalog semua pertanyaan seperti itu untuk membuat kebutuhan akan buku teks dan pembelajaran motivasi diri menjadi usang. Jangan khawatir dengan kurangnya pemahaman Anda tentang pertanyaan khusus ini, karena ini adalah jenis pertanyaan umum yang diajukan karena trik tersembunyi yang diperlukan untuk menyelesaikannya secara efektif. Instruktur biasanya akan mengajukan pertanyaan ini untuk menentukan tidak hanya kedalaman pemahaman Anda tentang bahasa, tetapi juga apakah Anda mengetahui kesalahan umum programmer ini: pengkodean karakter. Anda akan memahami lebih lengkap setelah Anda benar-benar membaca tautan berikut, seperti yang saya tahu Anda akan: tautan .

Saya yakin sekarang bahwa profesor Anda telah menjelaskan dengan sangat rinci pentingnya penggunaan kembali kode, sehingga ketika Anda telah membaca tautan pengkodean karakter yang saya berikan, Anda benar-benar memahami bahwa Anda harus membuat kelas yang cukup generik sehingga dapat menangani bahasa apa pun, bahkan jika pertanyaan awal tidak secara spesifik menentukan persyaratan ini (Anda mungkin juga ingin mempelajari tentang spesifikasi persyaratan, yang akan membantu Anda memahami persyaratan, baca tautan ini: tautan.

Anda yang sangat cerdas dalam menyarankan tidak menggunakan objek Date yang disediakan, karena menggunakan kode dalam bahasa default tidak akan memungkinkan Anda untuk menunjukkan pemahaman bahasa Anda yang sebenarnya kepada profesor Anda.

Untuk membantu Anda melalui pertanyaan yang sulit ini, saya telah menulis aplikasi Groovy yang akan menyelesaikan masalah Anda, dan tidak diragukan lagi akan lebih masuk akal daripada java samar itu. Jangan khawatir tentang penggunaan Groovy untuk jawaban ini, karena Groovy juga berjalan pada JVM seperti kode Java, sehingga Anda dapat dengan mudah memasukkan kode ini ke kelas java Anda dengan hanya beberapa modifikasi. Saya telah melampirkan tautan untuk membantu Anda melalui proses ini, tetapi saya tidak akan khawatir tentang hal itu sampai pagi, karena hanya perlu satu detik (di sini adalah tautan untuk nanti: tautan. Jadi, cukup salin kode untuk saat ini, karena saya akan menunjukkan banyak kasus uji kode yang berfungsi dengan baik, sehingga Anda dapat merasa yakin dengan pengiriman Anda. Saya pasti mengerti bahwa Anda adalah siswa yang sangat sibuk, dengan banyak kewajiban di piring Anda. Anda mungkin menyadari bahwa kontributor di sini bekerja penuh waktu, dan diberi kompensasi dengan baik.

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

Maaf karena saya tidak meninggalkan apa pun untuk Anda lakukan di sini, saya terbawa untuk menjawab pertanyaan yang memancing pikiran Anda. Jadi, cukup salin dan tempel respons ini. Seperti yang dapat Anda lihat dari kode berikut, inilah yang dapat dilakukannya:

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

1

Julia

Anda akan ingin menggunakan kekuatan pengiriman ganda di sini. Pertama, kita akan menentukan tipe setiap bulan. Kemudian kita dapat menulis definisi fungsi sederhana untuk setiap jenis bulan yang memberikan jawaban yang diinginkan. Ini akan memungkinkan Anda untuk menggunakan bentuk nyaman nicename(Jan)tanpa harus repot dengan tanda kutip yang mengganggu. Plus, kita dapat mendefinisikan fungsi kenyamanan untuk menerima string dan mengubahnya menjadi tipe, menggunakan kembali semua pekerjaan yang sudah kita lakukan untuk menyediakan antarmuka yang sama sekali baru.

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

Bahasa apa itu?
ugoren

Julia, hal konyol yang harus ditinggalkan.
gggg

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

Keindahan sejati adalah kesederhanaan, yang berarti persyaratan memori rendah. Lupakan kamus dan paragraf kode yang sial itu. Fungsi ini sangat bagus, itu akan cocok dengan nama bulan pendek menggunakan kasus apa pun. Mengamati.

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

BONUS:

Anda dapat menggunakan lebih dari 3 karakter pertama (mis. "Sept", "febr", dll.)

Ini akan berulang setiap detik sejak Anda menjalankan kode ini, memeriksa kecocokan di awal nama, sehingga akan diperlukan selamanya untuk dijalankan jika hasil yang diharapkan bukan bulan Anda saat ini. Juga banyak kesalahan gaya.


0

dalam 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

Berikut adalah program kecil yang melakukan apa yang Anda minta.

Atau sebenarnya, 13 di antaranya.

Saya telah menulisnya di C ++ karena itulah yang saya gunakan saat ini, tetapi cukup mudah dikonversi ke Java. Menjadi siswa yang berdedikasi, saya yakin Anda bisa mengatasi itu sendiri.

#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 dan saya mungkin telah mengabaikan sedikit kesalahan offset dalam loop.

Saya memutuskan untuk bersikap baik dan menggunakan std::strings bukannya char*s. Aku yakin aku akan bingung Anda dengan sintaks seperti char*[]dan saya pasti lupa panggilan delete, atau dilakukan sesuatu yang bodoh seperti panggilan deletebukan delete[].


0

C

Semacam transformasi generik singkatan ke kata-kata penuh, cukup sesuaikan dataarray ...

#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';
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.