Kısa ay adlarını daha uzun meslektaşlarına dönüştürün [Sona erdi]


28

Bu zorluk sona erdi! Tebrikler Flonk !

Eminim iyi bir not alacağı, ama içinde açtıktan sonra Flonk var o kadar karışıktı neden anlayamadık da, benim profesör benimdi inanmıyordu benim çalışma ve ... ben başarısız ve annem Facebook ve Minecraft beni topraklı Bir ay için. Anlamadım :(

Tüm başvurularınız için teşekkürler! Burada bazı büyük cevaplar. Resmi kazanan Flonk bir skorla 64 . İlk 5:

  1. Flonk , 64 (Haskell, verimli matematikle!)
  2. DigitalTrauma , 40 (Bulut, gelecek şimdiki zaman)
  3. primo , 38 (Python ve benim kişisel favorim - ve çok profesyonel!)
  4. Sylwester , 20 (Raket, Ocak ayını uzatıyor olsa da!)
  5. ilmale , 16 ( Lua'da oldukça optimize edilmiş bir algoritma)

Aşağıdaki asıl sorun.


Lütfen bana yardım et, çok acil !!! :(

Ay adlarının kısaltılmış versiyonlarını daha uzun gösterimlerine (örn. "Aralık" -> "Aralık") dönüştürmem gerekiyor, büyük / küçük harf duyarlı. Şu anda Java kullanıyorum; ayın adı bir String'dir ve önce onu bir Date nesnesine dönüştürmemeyi tercih ederim. Yine de herhangi bir dil yapacak.

Bunu yapmanın kolay bir yolu var mı? Sakin ol, lütfen programlamaya yeni başlayan biriyim!


Bu bir kod trolling popülaritesi yarışmasıdır (en iyisi!). 8 Nis 2014 tarihindeki en çok oy alan yanıtı kazandı.


7
"Lütfen bana yardım et, çok acil !!! :(" <<< ödevimi iyi yap, hızlı mı?

13
@yeti Mümkün olduğu kadar çabuk !! Dersimde başarısız olmadan önce acele edin!
Jason C

24
Bu tür soruları gizlice Stackoverflow'dan codegolf.SE'ye bir kod trolling etiketiyle kopyalayan ve sonra da kodgolf.SE'den gelen cevapların orijinal yazıya geri gönderilmesi ve spoyler etiketlerinin kaldırıldığı bir özellik olması gerekir.
daniero

Kod trolling, resmi duruşa göre kaldırılma sürecindedir . Bu soru, çoğu son derece yüksek oy alan pek çok cevabı ile çok oy kullandı. Ankete oyların% 50'sinden biraz fazlasının "silme" oyu geldi , ancak çok fazla cevap ve oy alması benzersiz çünkü bu yüzden tarihi önem için kilitledim.
Doorknob

Yanıtlar:


74

Biraz polinom enterpolasyonu ile gerçekten basit!

İlk önce kısa ay isimleri listesine baktım.

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

ve ASCII değerlerinin karakterlerinin toplamını kontrol etti.

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

daha sonra, burada neyle uğraştığımı kavramak için 300 kişiyi çıkardı ve ayın tüm uzun versiyonlarını içeren bir Dizi hazırladı.

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

Sanırım şu an neler olup bittiğini görebiliyorsunuz - tek ihtiyacım olan, 13 - 0, 1 - 1, 20 - 2 gibi eşleştiren getIndex fonksiyonudur.

getMonthName shortname = mons !! (getIndex shortname)

Neyse ki, Wolfram | Alpha bunu benim için yapabilir ! Rakamlar biraz büyür ama Haskell bunu lütufla halledebilir. Kayan nokta-aritmetik biraz kesin değil çünkü sonuçları yuvarladığınızdan emin olmalıyız! İşte orda, hızlı, zarif ve aptalca Haskell:

import Data.Char

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

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

Basitçe bu şekilde çalıştırın:

λ> getMonthName "DeC"
"December"

λ> getMonthName "jan"
"January"

3
Çok iyi ve tamsayılar çok verimli. Eğitmenimin işimi seveceğinden eminim!
Jason C

8
Bana öğrettiğin için +1 interpolating polynomial.
primo

3
İlk cümlenizi okurken gülmek zorunda kaldım.
Anaphory

46

Bash + GNU araçları + "bulut"

Google’ın her şeye cevabı var ve kendimi şanslı hissediyorum :

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

Kullanımda:

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

1
İyi oynadım efendim!
ojblass

[a-zA-Z]Yerine geçmez mi [[:alpha:]]? (En azından denediğimde öyle görünüyor)? Bu 3 karakter kazandıracak. Sorgulama yoluyla birkaç karakter daha kaydedilebilirdi ask.com, ancak bu kadar güvenilir olmayabilir.
Michael,

7
Bu kod golf olsaydı önemli olurdu @Mic
undergroundmonorail

7
@JasonC "Bulut tabanlı" bir çözüm. Elbette başka bir gerekçeye gerek yoktur.
Dijital Travma

4
@DigitalTrauma Sevgili efendim ben bulut duydum ve çok profesyonel! Çok iyi! Çok ikna! Ty-JasonC
Jason C

43

piton

Bu fonksiyon çok önemli olduğu için muhtemelen çok kullanılacaktır, bu yüzden mümkün olduğu kadar çabuk yapmaya çalışmalısınız. Diğer posterler hashmap araması yapmayı tavsiye etti ... bunu yapma! Hashmapler dizilere kıyasla gerçekten yavaştır . Sadece her bir kısaltmayı bir sayıya dönüştürmeniz gerekir. Bunun için kullanılabilecek standart bir karma tekniği var:

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

Bu benzersiz olması neredeyse garanti edilir ve birçok profesyonel araç bunu kullanır.

Şimdi bir arama fonksiyonu oluşturmanız gerekiyor:

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

Ve bu şekilde kullanın:

print month_abbr_to_name("Dec")December

HTH!


Trolling

- Bu kod korkunç derecede yavaş. Her ne kadar dizi erişimi gerçekten hashmap'lerden daha hızlı olsa da, dizi gerekli hashmap'in alacağından binlerce kat daha büyükse bu geçerli değildir.
- Bu inanılmaz derecede büyük dizi tekrar yaratılır ve işlev her çağrıldığında tekrar yaratılır. Biraz daha fazla yer harcamak için her değer "Bilinmiyor" ile başlatılır.
- Karma işlevi, Python ile uyuşmayan birine karşı gizemli olmak anlamına gelir. Soruşturmayı engellemek için "çok sayıda profesyonel araçta kullanıldığını" ekliyorum.
- Karma işlevi, on iki ay arasında doğru bir şekilde ayrım yapabilecek kadar benzersizdir, ancak değiştirilen karakterler gibi pek çok yaygın yazım hatası yakalayamaz.
- 3 karakterden daha uzun olan herhangi bir dize, dizi dizininde sınırların dışına çökecek.
- "Şubat" yanlış yazılmış.
- "Bu fonksiyon çok önemlidir." OP için küçük ego-ovma.


12
İyi bak, millet; Bu uygun bir kod trolling cevap! Ps. Eminim bu konuda iyi bir not alacağım ve çok daha iyi bir şekilde yazacağım sloooow Java kabuk betiği ?! [Resim tanımını buraya girin]
Jason C

2
"Şubat" yanlış yazılmış. - bazı ciddi trolling :)
Jaa-c

10
Karma tablolarının verimsiz olduğunu söyleyen + 1, daha sonra gerçekten verimsiz karma tabloyu uygular
James_pic

1
"Hashmapler dizilere kıyasla gerçekten yavaştır. Her kısaltmayı bir sayıya dönüştürmeniz yeterlidir. Bunun için kullanılabilecek standart bir karma tekniği var ..." yani başka bir karma haritası yeniden uygular. Hah. +1
wchargin

25

raket

Bir KISS çözümü için gidiyorum . Doğru sonucun geri döndürülüp döndürülmediğini kontrol etmek için OP'nin "Dec" (Tümü) kullanım durumuyla tüm büyük harfleri kullandım. Uçan renklerle geçti.

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

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

Açıkçası burada trolling sadece birkaç durumda işe yarıyor, bu yüzden işe yaramaz :-)


Muhtemelen, çünkü, kod değiştirme etiketi wiki'den "Görev, çalışan, ancak işe yaramaz, OP'yi oldukça sinir bozucu olan kod vermek." Kodunuz çalışmıyor. Burada, başka bir oy ver.
user12205

@ as Herhangi bir hata atmaz ve doğru cevabı "Aralık" döndürür. Soru, diğer aylar boyunca çalışması gerektiğini ya da ne kadar isimleri olacağını belirtmedi, bu yüzden sonuna kadar "köz" eklemeyi umuyorum iyi bir trol cevabı.
Sylwester

1
"Ay adlarının kısaltılmış versiyonlarını daha uzun temsillerine dönüştürmem gerekiyor (örn." Aralık "->" Aralık ")" sorusu Aralık, her durumda değil, bir örnektir. Programınız tüm ay isimleri için çalışmalıdır.
user12205

9
@ ace Ve öyle. “Jan” ı “Janember” e çevirir. OP'nin istediği tam olarak bu örneğe bakarak. "Trolle kasıtlı olarak yanlış yorumlama" ve "soruyu aldatma" ifadelerinin cevap vermenin gerçekten iyi bir yolu olduğunu göremiyorum.
Sylwester

7
Bu tam olarak "reddi: acil olduğunu söylemiştin, bu yüzden koştum ve sadece 3 vakayı test ettim, ama hepsi için geçti" diyerek sunduğumu düşündüğüm çözümün türü.
AShelly

22

LUA

Benim çözümüm yerel dilde çalışacak, profesörünüz mutlu olacak

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

Ölçek

lua 25207.lua aPr
April

Geçerli ayın kısaltmasını kontrol edin, doğru ise uzun ipi döndürün, aksi takdirde tekrar deneyin .. BİR AY SONRA


Parlak! Eski
işimdeki

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 cehennemi. Umarım regex "belirsiz bir dille trolling" olarak sayılmaz.
- Son derece kırılgan. Bugsember'e destek eklemek için zor anlar yaşarsınız.
- Okunamıyor. Desen içindeki desen onu daha da kolaylaştırır.
- Haziran ve Temmuz aylarının tek bir ifadeye sıkıştırılması aslında hiçbir şeyi sıkıştırmıyor.
- gdiğerleri için görüntünün rasgele kullanımı, diğerleri ise yer değiştirme şeklini tekrar eder.
- use re 'eval'aslında gerekli değildir; sadece değişken bir desen istendiğinde kullanılır. Ayrıca, eval"biraz" sıkıştırma "kazanmak" kullanımı .


17
Bana normal Perl gibi görünüyor ...
Peter Olson 15

1
@PeterOlson, dil algoritmaya uyacak şekilde seçildi, ancak algoritma göreve hiç uymuyor, kabul etmiyor musunuz? :-)
John Dvorak

10

Java

Geçerli kodunuzun Java’da olduğunu söylemiştiniz, ben de sizin için işleri kolaylaştıracağını düşündüm.

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

Takvim sınıfı, ayların 0'dan başlayarak numaralandırıldığı, eğlenceli küçük bir kazanıma sahiptir - yani JANUARY == 0. Ancak, bu açıkça test ettiğimiz gibi kodumuzu etkileyemez, değil mi? ShortNameToNumber'da istenmeyen bir anahtar olduğuna dikkat edin, bu da her ayın 0 olduğu anlamına gelir JANUARY == 0.


1
Tanrım, anahtar açıklamasında araların kopmadığını fark etmedim. Bir anahtar kullanmamdan beri çok uzun zaman oldu.
Joe Z.

10

Bash + coreutils + paq8hp12

Şu anda en çok oy alan cevap, her sorgu için internete erişmek zorunda. Verimsiz olmasının yanı sıra, bu, internet yoksa betiğinizin de başarısız olacağı anlamına gelir.

Gerekli bilgileri sabit diskinizde saklamak daha iyidir. Elbette, sadece bu senaryo için gerekli olan verileri depolayabilirsiniz, ancak bu farklı görevler için farklı veriler gerektirir. Muhtemelen ihtiyaç duyabileceğiniz tüm verileri tek bir çok amaçlı dosyada saklamak çok daha iyidir.

# 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

  • STDERR'yi kapatır, böylece başarısız olursa komut dosyasını hata ayıklayamayız.

  • Komut dosyası bittikten sonra da devam eden giriş yankısını devre dışı bırakır. Bir terminalden çalıştırılırsa , terminalinizi tekrar kullanılabilir hale getirmek için stty echo komutunu çalıştırmanız gerekir. Bir terminalden çalıştırılmazsa, bu komut dosyası çökebilir.

  • Önce goto uygulanmasını gerektirir . Bu, kendi başına yeterince kötü değildi gibi , betiğin dosya adı boşluk içeriyorsa , goto işlevi çalışmaz.

  • Geçerli dizinde enwik8 dizesini içeren bir dosya varsa, arşivi indirmeyiz . Bu işe yarayabilir.

  • 100 MB'lık bir dosyayı indirmek (36 MB'a kadar sıkıştırılmış olsa bile) bu görevi üstlenmez. Ayrıca, enwik8 ilk 4 MB'lık bir Vikipedi çöplüğünün ilk 100 MB'ını içerir, bu nedenle belirli bir görev için herhangi bir faydalı bilgi içermesi olası değildir.

  • Dosyayı paq8hp12 ile sıkıştırmak 16 MB'a kadar küçültür, ancak sıkıştırma ve dekompresyon işlemi bir saat sürer. Aslında bu komut dosyası ilk çalıştırıldığında her ikisini de yapacak.

  • Komut enwik8'in sıkıştırılmış veya ham versiyonunu silmez , bu yüzden 16 MB'a kadar küçültmek daha fazla sabit disk alanı harcar .

  • Sıkıştırma yardımcı programı yalnızca 64 bit işlemcilerde çalışır.

  • İndirilen veya çıkartılan tüm dosyaları geçerli dizinde bırakır.

  • Regex-pipe canavarı olan betiğin en zor kısmını açıklamıyor. Temelde, öncü ve sonda basamağı olan 4 ile 19 bayt arasındaki tüm dizeleri çıkarır, bu dizeleri sayı sayısına göre sıralar, kısa ay adını içeren dizeleri filtreler, tekrar sayılarına göre sıralar ve en sık görüntüler.

  • Yukarıda bile oldu iyi bir fikir, kedi başında gereksiz olduğunu, egrep oldukça yavaş bu görev için ise, düzenli ifade dönecektir çok yanlış pozitif (her şey tek bir regex ile yapılabilir), birinci sıralama | uniq -c | sıralama -n | tac kesinlikle hiçbir şey yapmıyor, sıralama kullanıyor | sort -r ve cut yerine tac , başlangıçtaki boşlukların sayısı değişken olduğu için güvenilir bir şekilde çalışmaz.

  • Düzenli ifade bir Genişletilmiş POSIX Düzenli İfadesidir, bu nedenle BRE sözdizimini googling yapmak hiç yardımcı olmaz.

  • İade Kas yerine Kasım ve 6 yerine Ağustos .


1
Bunlar çok yardımcı tavsiyeler! Kuşkusuz bu daha verimli ve eğitmenim bana profesyonellerin OOP için yeniden kullanılabilir kılar yaptığını söyledi ve OOP hızlı ve daha iyi!
Jason C

9

Python + SQLite

Şu ana kadarki cevapların çoğu ay adlarını zor kodlama hatası yapıyor. Ancak, ne zaman bir Papa veya Başkanın başka bir takvime geçmemizi sağlayacağını asla bilemezsiniz, daha sonra tonlarca tarih ayrıştırma / biçimlendirme kodu anında değersiz hale gelir! (Ya da daha yaygın olarak, programınızı uluslararası hale getirmeniz gerektiğinde.)

İhtiyacın olan bir veritabanı.

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;

Ardından, sorgulamak için basit bir program yazı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 & arkadaş (tarih)

İşlev:

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

Test etmek:

$ 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

Kısa ... ama "karakter başına kötülük" oranını hesapla ... mwhuaaahahahaaa ...


Dilini bilmiyorum bu yüzden burada kötü bir şey göremiyorum. Düşüşlerinizin başkalarından benzer bir konumda olduğunu varsayıyorum. Lütfen neler olduğunu ve neden kötü olduğunu açıkla. Merak ediyorum.
Seviye River St

dateTarih formatlama özelliklerinin bir (n) (ab) kullanımıdır . Ve datesaygılar bu yerelleştirme eşleşen ay oluşturduğu, lokalizasyon. -d"a_month_name 1tarihi, belirtilen ayın 1’ine (belki kısa adı) ayarlar ve eksik yıl, bu ay gelecek ay olacak şekilde ayarlanır. +%Bverilen tarihi prnting formatıdır ve 'ayın soyadı' anlamına gelir. Tüm tat bir kabuk işlevine sarılır ve orada BASH'e özgü bir şey olmadığından, SH onu çalıştırmak için yeterli olacaktır. Yani temelde datetüm alkışları hakediyor, beni değil! Codegolf'taki indirimler umrumda değil! : -Þ

Bunu seviyorum! Suiistimal.
ojblass

4

perl

İyi bir kaba kuvvet hakkında ne düşünüyorsun?

$|++;

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

Neden bu harika:

  • kaba kuvvet her zaman bunu yapmanın en kolay yoludur.
  • Rahatlığınız için, kısmi cevabı bildiği anda basar ("Feb" ın "Feb ..." ile başlayan bir şey için kısa olduğunu bilmiyorsunuzdur ???)
  • maksimum güvenlik için özel karma işlevi.
  • perl'in dahili operatör aşırı yüklenmesinin kullanılması (tellerdeki artış) bu kodu doğal C kodu kadar hızlı yapar. O sıfıra bak, ne kadar hızlı çalıştığını göster!

    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 sezgisel olarak apaçıktır ve okuyucunun alıştırması olarak bir kanıt olarak bırakıyorum, ancak sadece her durumda çalıştığından emin olmak için, Ağustos ayını, aylardan birini ve bizlerden birini hiçbir şey kaçırmadı:

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

Trollage:

Damian Conway'in gözle görülür şekilde ölmesine neden olacak kodlama uygulamalarını bir kenara bırakmak, bu kod zaman zaman yanlıştır ve zaman zaman son derece yavaştır. "Feb", "may", "jun" veya "jul" den daha yavaş - bir milyon kez - yaklaşık 6 büyüklük sırası veriyor. Feboapic, Sepibnd, Novgpej ve Decabjuj ay değil (telaffuz etmeyi denemek için eğlenceli olsalar da).

    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 - Çalışma sürelerinin daha da genişlemesine neden olan bazı kodlarım vardı, ancak her durumda doğru cevabı sıkıca çıkarıyor, ki bu çok daha az eğlenceli.


3

JavaScript - Dallar, Yapraklar ve katar varillerle optimize edilmiş Düğüm kümesi.

// 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 ve Olasılık

Cevap, internette kolayca erişilebilir olduğunda buradaki çözümlerin birçoğunun "tekerleği yeniden icat ettiği" için hayal kırıklığına uğradım.

İşte programımın çıktısı:

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

Mükemmel değil, ama KG'ye gönderecek kadar iyi. Crowdsourcing'in gücünden yararlanarak bu sonuçları elde edebildim:

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

Eğer net değilse, genişletmeMoNeniAdı ("jan") "hangi ay jan" için Google sonucundan "jan" ile başlayan, rastgele seçilen bir kelime döndürür. Proxy'nin ardında değilseniz, bu durumda "Ağustos."


2

Bash + binutils

Girdiyi bir tarih nesnesine dönüştürerek açık olanı yapmak için çok uğraştım, ancak başarısız oldum. Sonunda kaba kuvvet yaklaşımına başvurdum.

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

Test çalıştırması:

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

2

Ayların adlarını kontrol etmenin çok zor olduğunu ve çok fazla hesaplama ve mantıksal düşünme gerektirdiğini biliyorum. İşte ayların adlarını kontrol etmek için Buzz-Strahlemann algoritmasının optimize edilmiş bir versiyonu .

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

Troller:

  • Bu cevap;

  • Saat dilimlerini işlemez ve bir uyarı mesajı verir;

  • Ayı girdi olarak kabul etmiyor, ancak kod yazmanız gerekiyor;

  • Sabit kodladığınızda bile, büyük / küçük harf duyarlıdır;

  • Bu kodun yapmaya çalıştığı şey mevcut ayı almak, ilk üç harfi almak ve eşleşip eşleşmediğini kontrol etmektir $month. Eşleşmezse, zaman damgasını 1 artırır ve sonra yeniden dener. Bu son derece yavaş olur .

  • Bu kod hiçbir şey çıkarmaz (uyarı hariç elbette);

  • Yorumlar çok yanıltıcı: time()genişletilmiş bir zaman kitaplığı yüklemiyor, ancak geçerli zaman damgasını alıyor; substr($checkThis,1,4)Ayın ilk harfi atlar ve alır Aşağıdaki 4 ( archiçin March, örneğin); Doğru form, yorumlardaki formdur;

  • Bir eşleşme bulunsa bile, kod döngüden çıkmaz: aslında, ayarlanan değişken truefarklıdır.


3
-1: Code-trolling etiketinden wiki, "Görev işe yarayan kod vermek, ancak işe yaramaz, OP'yi oldukça sinir bozucu yapmaktır." Kodunuz bile çalışmıyor.
user12205

1
Hımm? Çalışır ve işe yaramaz. Sonsuz bir döngünün bitmesi için 10 yıl beklemek yeterince sinir bozucu değil mi? "Çalışıyor", (en azından benim için anlamına gelir), kodun başarılı bir şekilde derlenip çalıştırıldığı anlamına gelir, sona ermesi veya herhangi bir çözüm sağlaması gerektiği anlamına gelmez.
Vereos

@ace (Önceki yorumda sizden bahsetmeyi unuttum); Bu yorumda söylemeye çalıştığım, ne demek istediğinizi daha iyi anlamak istediğimdir, çünkü benim açımdan doğru.
Vereos

Belki de archasla eşit olmayacak diye Mar?
user12205

Bu nedenle kodunuz ay adlarını dönüştüremez, bu nedenle çalışmaz.
user12205

2

yığın

İstediğiniz şey önemsiz değil. Ancak sizin için mükemmel çözümü buldum! Bunun nasıl bir İngilizce dilinin karmaşık bir listesini sabit diskinize indirerek yapılmasıdır. Giriş daha sonra indirilen listesine göre kontrol edilir ve ayın adı verilir! Genius!

Şimdi, bu yöntemin bazıları olmak üzere diğer yöntemlere göre birçok avantajı var:

  • Kelimenin herhangi bir kısaltmasına sahip olabilirsiniz! Örneğin Janya da JanuOcak için!
  • “Bir Papa veya Başkanın başka bir takvime geçmemizi ne zaman sağlayacağını asla bilemezsiniz, daha sonra tonlarca tarih ayrıştırma / biçimlendirme kodu anında değersiz hale gelir!” Bu asla yöntemimizle ilgili bir sorun değil!
  • Kullanıcıya onay istemleri gönderildi, üzgünümden daha güvenli!

Kod:

@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

- Toplu iş ... - Ayları manuel olarak yazamadığımız için bir sözcük listesi indiriliyor ... - Anahtar taşıma hackini kullanmıyoruz - ÇOK YAVAŞ - metin dosyasını küçük harfe dönüştürmek ve başka bir dosyaya kaydetmek Oluşturulan metin dosyalarını silmeden ikinci bir kez ve daha da yavaş olacaktır - Dic.txt dosyasını küçük harfe dönüştürürken bir şey betiği kapatır, bu da yankıyı ayarlar - Bu spoiler olayı biçimlendirdi ...


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

Programınızın daha hızlı yanıt vermesi için, ayları 31 gün ile listeye koydum. İstatistiksel olarak konuşursak, tarihlerin eşit dağılması durumunda, o aylardan birinde bulunma ihtimaliniz daha yüksektir.

Patronunu etkilemek için her çizgiyi belgeledim.

Bunu adı verilen bir dosyaya kaydedin lookup_month_script.bashve test etmek için aşağıdaki satırı kopyalayıp yapıştırın:

bash $PWD/lookup_month_script.bash "0ct"

Projenizde iyi şanslar!


- İki defa listelenmesine rağmen Ocak ayında çalışmaz . (Aslında Januaryheredocun başlangıcı ve sonu için sınırlayıcı olarak kullanıyoruz .)

- Ayrıca Ekim için çalışmıyor. Nedenini kimse göremez.

- Giriş boş kalırsa, 11 ayın sonunda geri döner.

- Komut dosyası kopyalandığında, Haziran yanıtı 42 karakter uzunluğunda olur.

Küçük:

- Shebang biraz yanlıştır, ancak uyarı verilmez.

- Altlarındaki çizginin ne dediğini söyleyen yorumlar.

- Program daha önceki kayıtlar için daha önce yanıt vermiş olsa bile, daha hızlı bir şekilde tamamlanmayacaktır.


1

JavaScript - 209

Burada olanları değil bir Tarihe dönüştürmemeyi söylüyor, sadece kısa adın bir uzantısını oluşturmak için Tarih'i kullanıyorum.

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

Giriş / Çıkış Testleri:

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
Ayrıca Şubat Troll gibi görünüyor - r :) Bilerek, elbette ...
Matt

Görünüşe göre birileri Wendsdays davası almış.
Jason C

5
@Matt "On pupose" demek istemiyor musunuz?
Justin,

Tabiki @Quincunx
Matt

1

Test girişi dahil Java 696

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

    public static void main(String[] args) {

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

1

"Brainf * ck" programlama dili bunun için mükemmel bir araçtır! Tam olarak aradığın şey olmayabilir, elbette, ama işi kusursuz yapıyor!

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

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

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

Ona bunu gösterdiğinde öğretmeninin gurur duyacağına eminim!


Trolling

Program, her şeyden önce oldukça kötü yazılmış. Daha iyi bir kelime olmamasından dolayı rastgele hata baskılarına ve genel olarak çalışmamaya neden olan bazı döngüler yaptım. “Kısaltma + 'uary'” olarak uzun isimler verdiği için (her nasılsa, işe yaramaz) düzgün çalışan bir kod (birazdan ilk iki paragrafında) almak için biraz temizleme gerekir. "Ocak" için yedek kod içerir (istisna olarak tanımlanır ve ayrı olarak kodlanır). Stackexchange'in ilk cevabı, umarım bu kriterleri karşılamaktadır


1

Java

Sevgili Bilgisayar Bilimcisi Çırak,

Bu oldukça zor bir iştir ve sadece kısmen çözdüm: Sanırım bu tez çalışmanız ya da bir araştırma amacınız için.

Şimdiye kadar bazı küçük hatalara sahip sadece beta sürümüm var: bazen yanlış sonuçlar veriyor, ancak profesörünüzün çabalarınızı kabul edeceğinden eminim.

Month.java dosyası:

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

Era.java dosyası:

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

Çalıştırmak için yürütmek:

javac Month.java
javac Era.java
java Era jan

çıktı:

jan: [January]

Kümenizle unutmayın %JAVAPATH%sizin yoluna Javaderleyici yüklü!

Sadece rastgele bir ay döndürür. Aslında test bile etmedim. Sanırım bazı ithalatlar eksik.


1

OP, Java kullandığından, bir Java çözümü vereceğim. Fikir basit:

  1. Bir Mapuzun ismin kısa ismine oluşturun.
  2. Rasgele bir String oluşturun, kısa isimle eşleyin.
  3. String.equalsIgnoreCaseKısa adın, görmezden gelinen vakaların giriş kısa adıyla aynı olup olmadığını kontrol etmek için kullanın . Eğer öyleyse, başarı, çıkın.
  4. Aksi takdirde Adım 2'ye gidin.

İşte kaynak:

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 hızlı bir işlemciye ve hastaya ihtiyaç duyuyor. Çok iş parçacıklı öğrenmeyi ve çok çekirdekli işlemciniz olduğunda, daha hızlı hale getirmeyi deneyebilirsiniz.


1


Bu düşünceyi kışkırtan ve orijinal soruyu gönderdiğiniz için teşekkür ederiz. Stack Overflow'a cevap gönderen bizler, posterlere yardım etme fırsatından yararlanırlar, çünkü bu web sitesinin amacı ders kitaplarına ve kendi kendine motive olmuş öğrenime duyulan ihtiyacı ortadan kaldırmak için bu tür soruları kataloglamaktır. Etkili bir şekilde çözmesi için gereken gizli numara nedeniyle sorulan yaygın bir soru türü olduğundan, bu belirli soruyu anlamadığınız için endişe etmeyin. Eğitmenler genellikle bu dili sadece dili anlama konusundaki derinliğini değil, aynı zamanda bu ortak programcı tuzağının farkında olup olmadığını da belirlemeyi ister: karakter kodlaması. Aşağıdaki bağlantıyı tamamen okuduktan sonra daha iyi anlayacaksınız, bildiğiniz gibi: bağlantı .

Şimdiye dek profesörünüzün kod kullanımının önemini ayrıntılı olarak açıkladığından eminim, böylece sağladığım karakter kodlama bağlantısını okuduğunuzda, kesinlikle yeterince genel bir sınıf yapmak zorunda kalacağınızı anlamaya başlıyorsunuz. Orijinal soru bu gereksinimi spesifik olarak belirtmemiş olsa bile, herhangi bir dili idare edebilir (gereklilikleri anlamanıza yardımcı olacak gereklilik belirtimi hakkında bilgi edinmek isteyebilirsiniz, bu bağlantıyı okuyun: link).

sen kullanımını öneren nerede çok zeki Sağlanan Date nesnesi, kodu varsayılan dillerde kullanmak gibi, dili tam olarak anladığınızı profesörünüze göstermenize izin vermez.

Bu zor soruda size yardımcı olmak için, size sorununuzu çözecek bir Groovy uygulaması yazdım ve şüphesiz bu şifreli java'dan daha mantıklı olacak. Groovy, Java kodu gibi JVM'de de çalıştığından, bu yanıt için Groovy kullanımında endişe etmeyin, bu yüzden bu kodu java sınıfınıza yalnızca birkaç değişiklikle kolayca bırakabilirsiniz. Bu süreçte size yardımcı olmak için bir bağlantı ekledim, ancak sabaha kadar endişelenmem, çünkü sadece bir saniye sürecek (işte o zaman için bağlantı: link. Bu nedenle, kodu şu anda kopyalayın, kodun uygun şekilde çalıştığını gösteren birçok test vakası göstereceğim, böylece gönderiminizden emin olabilirsiniz. Tabii ki çok fazla istekli bir öğrenci olduğunuzu, tabağınızda bir sürü zorunluluk olduğunu kesinlikle biliyorum. Muhtemelen burada katkıda bulunanların tam gün çalıştığını ve iyi karşılandığını biliyorsunuzdur.

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

Burada yapabileceğin bir şey yapmadığım için üzgünüm, düşünceni kışkırtan soruyu yanıtlamaktan kaçındım. Bu yüzden sadece bu cevabı kopyalayıp yapıştırın. Aşağıdaki kod çalıştırmalarından görebileceğiniz gibi, yapabilecekleri:

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

1

Julia

Burada birden fazla gönderimin gücünü kullanmak isteyeceksiniz. İlk önce her ayın bir türünü tanımlayacağız. Ardından, istenen cevabı veren her ay tipi için basit fonksiyon tanımları yazabiliriz. Bu nicename(Jan)rahatsız edici tırnak işaretleri ile uğraşmak zorunda kalmadan uygun bir şekilde kullanmanıza izin verecektir . Ayrıca, dizeleri kabul etmek ve bunları türlere dönüştürmek için bir kolaylık işlevi tanımlayabiliriz, tamamen yeni bir arayüz sağlamak için yaptığımız tüm işleri yeniden kullanın.

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

Hangi dil
ugoren

Julia, dışarıda bırakmak aptalca bir şey.
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))

Gerçek güzellik basitliktedir, bu da düşük bellek gereksinimi anlamına gelir. Bu sinir bozucu sözlükleri ve kod paragraflarını unut. Bu işlev çok iyi, herhangi bir durumda kısa ay isimleriyle eşleşecek. Gözlemek.

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

BONUS:

İlk 3 karakterden daha fazlasını kullanabilirsiniz (ör. "Sept", "febr" vb.)

Bu, kodu çalıştırdığınız andan itibaren her saniyede bir döngü kurar, adın başında eşleşmeyi kontrol eder, bu nedenle beklenen sonuç geçerli ayınız değilse, sürmesi sonsuza kadar sürecektir. Ayrıca çok sayıda stil hataları.


0

içinde 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

İşte istediğinizi yapan küçük bir program.

Ya da aslında 13 tanesi.

C ++ 'da yazdım çünkü şu anda kullandığım şey bu , ancak oldukça kolay bir şekilde Java'ya çevriliyor. Kendini adamış bir öğrenci olarak, kendin için çalışabileceğinden eminim.

#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 ve ben döngüde biraz ofset hatası gözden kaçırmış olabiliriz.

İyi olmaya ve std::strings yerine char*s kullanmaya karar verdim . Eminim gibi sözdizimi ile karıştırılmamalıdır olurdu ediyorum char*[]ve kesinlikle çağrısına unutulmuş olurdu deleteya çağrısı gibi aptal bitti şey deleteyerine delete[].


0

C

Bazı kısaltmaların tam kelimelere genel olarak dönüşümü, sadece datadiziyi düzeltmek ...

#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';
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.