Spoj.com Dos Date

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
snafu
User
Beiträge: 5836
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 24. Mai 2013, 19:27

@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.
BlackJack

Samstag 25. Mai 2013, 05:46

@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. :-)
Benutzeravatar
snafu
User
Beiträge: 5836
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Samstag 25. Mai 2013, 07:47

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. :)
Benutzeravatar
snafu
User
Beiträge: 5836
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Samstag 25. Mai 2013, 09:17

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}"}
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 25. Mai 2013, 10:28

@snafu: Wenn deine Lösungen noch kürzer werden, wäre es nett, wenn du die Quelltexte nicht mehr posten würdest ... :)
Antworten