Codegolf/3: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(Testcases erweitert) |
||
Line 37: | Line 37: | ||
assert_eq `#{ARGV[0]} 1. März 2000`, "Mittwoch\n" | assert_eq `#{ARGV[0]} 1. März 2000`, "Mittwoch\n" | ||
assert_eq `#{ARGV[0]} 1. Januar 1712`, "Freitag\n" | assert_eq `#{ARGV[0]} 1. Januar 1712`, "Freitag\n" | ||
assert_eq `#{ARGV[0]} 1. Februar 2000`, "Dienstag\n" | |||
(Score: | (Score: 553) | ||
./test.rb ./wochentag | ./test.rb ./wochentag | ||
Line 56: | Line 57: | ||
t "1. März 2000" "Mittwoch" | t "1. März 2000" "Mittwoch" | ||
t "1. Januar 1712" "Freitag" | t "1. Januar 1712" "Freitag" | ||
t "1. Februar 2000" "Dienstag" | |||
(Score: | (Score: 364) | ||
./test.sh ./wochentag | ./test.sh ./wochentag |
Revision as of 16:30, 26 July 2008
Challenge #3: Wochentagberechnung
"Wie ist der Wochentag eines bestimmten Datums?"
$ ./wochentag 1. Januar 1970 Donnerstag $
Siehe: http://de.wikipedia.org/wiki/Wochentagsberechnung
Um es ein wenig golfbarer zu machen, rechnen wir nur mit dem
gregorianischen Kalender.
Man kann davon ausgehen, dass das Programm immer mit einem legitimen Datum aufgerufen wird. Der Aufruf ist immer in der Form
\d{1,2}\. (Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember) \d{4}
Die Ausgabe muss:
(Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonntag)\n
entsprechen.
sur5r ist der Schiedsrichter dieser Challenge.
Es dürfen keine generischen/speziellen Datumsumrechnungsmodule der Sprache benutzt werden, auch wenn sie Bestandteil der Distribution der Sprache sind.
Das Programm darf nichts nach STDERR schreiben
Test
#!/usr/bin/ruby def assert_eq(a, b) raise Exception.new("assertion failed: "+a+"!="+b) if a!=b end assert_eq `#{ARGV[0]} 14. Juli 1789`, "Dienstag\n" assert_eq `#{ARGV[0]} 23. Mai 1949`, "Montag\n" assert_eq `#{ARGV[0]} 20. März 1983`, "Sonntag\n" assert_eq `#{ARGV[0]} 9. November 1989`, "Donnerstag\n" assert_eq `#{ARGV[0]} 12. Januar 2006`, "Donnerstag\n" assert_eq `#{ARGV[0]} 1. Januar 2000`, "Samstag\n" assert_eq `#{ARGV[0]} 1. März 2000`, "Mittwoch\n" assert_eq `#{ARGV[0]} 1. Januar 1712`, "Freitag\n" assert_eq `#{ARGV[0]} 1. Februar 2000`, "Dienstag\n"
(Score: 553)
./test.rb ./wochentag
Der Test ist genau dann erfolgreich, wenn keinerlei Ausgabe erfolgt.
Test in Shellscript
Für alle Rubyhasser oder Nicht-Ruby-Haber:
#!/bin/sh T=$1;t(){ o=$($T $1|tr '\n' X);[ "$o" = "$2X" ]||echo "Assertion failed ($1): ${o/X/} != $2";} t "14. Juli 1789" "Dienstag" t "23. Mai 1949" "Montag" t "20. März 1983" "Sonntag" t "9. November 1989" "Donnerstag" t "12. Januar 2006" "Donnerstag" t "1. Januar 2000" "Samstag" t "1. März 2000" "Mittwoch" t "1. Januar 1712" "Freitag" t "1. Februar 2000" "Dienstag"
(Score: 364)
./test.sh ./wochentag
Inoffizielle, vom Schiri nicht bestätigte Scores
Shellscripting
- sECuRE / zsh (neu): 132
- sECuRE / zsh (alt): 148
- jiska / bash: 227
- cato / bash: 274
- CentronX / PowerShell: ca. 800 (Ja, I know!)
Perl
- mxf: 153
- urs: 171
- yath: 188
- downhill: 245
Python
- Nicolas / Python: 190
- Kungi / Python: 257
Ruby
- PhilFry / Ruby: 181
C
- sECuRE / C: 261 byte (normal), 221 byte (obfuscated, ohne compileraufruf), 133 byte (obfuscated, nicht rules-compliant, ohne compileraufruf)
ABAP
- SdK / ABAP: 1586
PHP
- BugBlue / PHP: 345