Seite 2 von 2

Re: Spoj.com Dos Date

Verfasst: Freitag 24. Mai 2013, 19:27
von snafu
@BlackJack: Wenn ich allerdings "yyyy" angebe, dann macht er mir aus dem Jahr 1 z.B. ein 0001. Das ist ja dann auch nicht im Sinne des Erfinders. Ist ja echt "klasse", wie toll und konsistent das mit dem Datumsformatieren klappt.

Re: Spoj.com Dos Date

Verfasst: Samstag 25. Mai 2013, 05:46
von BlackJack
@snafu: Dann benutze es doch einfach nur zum Formatieren des Monatsnamens. Und nur zur Vorsicht die Englische Locale mitgeben, damit der bei SPOJ auf dem Server dann nicht am Ende noch polnische Monatsnamen ausspuckt. :-)

Re: Spoj.com Dos Date

Verfasst: Samstag 25. Mai 2013, 07:47
von snafu
Ich geb's jetzt auf in Java. Egal wie klein ich den Puffer für den `BufferedReader` setze, ich bekomme bei der Ausführung auf SPOJ jedes Mal ein überschrittenes Zeitlimit als Antwort und atemberaubenden "Memory Usage". Meine Lösung für `.decode()` war jedenfalls:

Code: Alles auswählen

public static String decode(int dosDate) {
    int day = dosDate & 31;
    int month = dosDate >> 5 & 15;
    int year = dosDate >> 9;
    cal.set(Calendar.MONTH, month - 1);
    return String.format("%d %tB %d", day, cal, year);
}
Und ich denke, das ist auch korrekt.

EDIT: Und das man die verschiedenen "Formatierungswelten" hier so schön mischen kann, finde ich sogar ganz cool. :)

Re: Spoj.com Dos Date

Verfasst: Samstag 25. Mai 2013, 09:17
von snafu
103 Zeichen in Ruby:

Code: Alles auswählen

ARGF.lines.next
ARGF.map{|l|d=l.to_i;printf"%d %s %d\n",d&31,Time.new(1,d>>5&15,1).strftime("%B"),d>>9}
EDIT: 99 Zeichen:

Code: Alles auswählen

ARGF.lines.next
ARGF.map{|s|d=s.to_i;puts"#{d&31} #{Time.new(1,d>>5&15,1).strftime("%B")} #{d>>9}"}
91 Zeichen:

Code: Alles auswählen

ARGF.drop(1).map{|s|d=s.to_i;puts"#{d&31} #{Time.new(1,d>>5&15,1).strftime("%B")} #{d>>9}"}

Re: Spoj.com Dos Date

Verfasst: Samstag 25. Mai 2013, 10:28
von numerix
@snafu: Wenn deine Lösungen noch kürzer werden, wäre es nett, wenn du die Quelltexte nicht mehr posten würdest ... :)