Nicht auf eine Programmiersprache beschränkt.
Was ich sage ist, dass Sie 1 übergeben und es Montag zurückgibt, 7 entspricht Sonntag und so weiter.
Ich habe eine 146-Byte-Anweisung in Java verwaltet, um dasselbe zu tun.
return (n<1?"invalid":(n<2?"monday":(n<3?"tuesday":(n<4?"wednesday":(n<5?"thursday":(n<6?"friday":(n<7?"saturday":(n<8?"sunday":"invalid"))))))));
Ihr Programm sollte:
- vollständige Wörter ausgeben (STDOUT)
- Nicht abstürzen, wenn die Eingabe kleiner als 1 oder größer als 7 ist
invalid
wenn die Eingabe ungültig ist? Die Frage besagt das nicht, aber das Beispiel legt dies nahe.Antworten:
Ruby, 69 oder 38 Bytes
Hier ist eine einfache Möglichkeit, Ihren Code zu verbessern (in Ruby geschrieben, funktioniert aber in Java ähnlich):
n
als Index.day
.Sie können es noch kürzer machen, wenn Sie die Namen der Wochentage aus einer Bibliothek wie Ruby's importieren:
Beachten Sie, dass ich jetzt dekrementieren nicht ,
n
sondern nehmen es Modulo 7 zur Karte7
zu0
. Dies liegt daran, dassDAYNAMES
mit Sonntag beginnt.quelle
Bash: 47 Bytes
Immer noch kein Bash-Eintrag? Ich bin enttäuscht ...
Es verwendet die Tage der aktuellen Woche und ersetzt einfach die letzte Ziffer (11.-17. August 2014 - 11 ist Montag, 12 ist Dienstag usw.).
quelle
date -d $1sept +%A
funktioniert auch (allerdings nur in diesem Jahr; reduziert die Bytes auf 6 * 9). GNUdate
ist in dieser Hinsicht sehr flexibel, daher sollte es zusätzliche Möglichkeiten geben.date
Bash posten , sind es nur14-08-1$1
9 Bytes!Marbelous
192191185181Exit-Code ungleich Null, wenn die Eingabe ungültig ist
Verwendungszweck:
quelle
Javascript,
9588 Bytes7 in binär ist 0111, was bedeutet, dass Sie einige Zeichen mit einer bitweisen Operation anstelle von rasieren können
x>0&&x<8
.Bearbeiten: Das
s
Array wurde mit Hilfe von edc65 entfernt .quelle
x=prompt();alert("Invalid 0Mon0Tue0Wednes0Thurs0Fri0Satur0Sun".split(0)[x&~7?0:x]+"day")
C # - 26 Bytes
Erwartet, dass der Tag im Inneren gespeichert wird
n
.Stürzt nicht wie erwartet ab.
Unterstützt von LINQPad ™
Besonderer Dank geht an bmarks und Stephan Schinkel für das Speichern von Bytes bzw. das Biegen von Regeln
quelle
C #, 95 Bytes
In C # können Sie so etwas tun:
quelle
i<1
, und Sie können 2 Byte sparen, indem Sie|
statt||
(nicht kurzschließen) die Klammern um die Bedingung entfernen. Es ist auch kürzer, eine Zeichenfolge zu erstellen und zu teilen," mon tues wednes thurs fri satur sun".Split()[i]
als ein Array von Zeichenfolgen dieser Größe zu erstellen (beachten Sie das Leerzeichen am Anfang der Zeichenfolge, wodurch das Subtrahieren von 1 von i erspart wird)Erweiterter BrainFuck : 104
Ungolfed (idiomatisch)
quelle
T-SQL 36
Angenommen, die Variable ist in @ gespeichert. Wenn es sich um eine ungültige Eingabe handelt (@> 7 oder @ <1), wird nichts ausgewählt.
Bearbeiten: Anscheinend kann ein Datum eine Zahl sein. Damit wurden 5 Zeichen entfernt.
Bearbeiten 2: Basierend auf der ersten Bearbeitung. Da es ein int ist, muss ich DATEADD () nicht verwenden; Ich kann stattdessen normale Addition verwenden.
quelle
Javascript 93 :(
quelle
q
ist-5
?Lua - 57 Bytes
Lua hat os.date () in seiner Standardbibliothek und es hat Formatierung. Sie können also eine Zeit vertreiben (in diesem Fall "9e4 * (n + 3)") und das Format "% A" zurückgeben, das die Namen der Wochentage sind. Sehr nützlich in Lua ist auch "a und b oder c". Wenn a wahr ist (im Code a ist "n> 0 und n <8"), gibt es b zurück, wenn a falsch (oder nil) ist, gibt es c zurück.
quelle
%A
notwendig istMathematica
1916 BytesWie Dr. Rebmu feststellte, ist der 1. Januar 1 n. Chr. Ein guter Anfang. Es fiel (vermutlich) an einem Montag.
quelle
Bash -
2119Angenommen, die Eingabe ist variabel
D
:HTML + PHP - 26
Sei
$d
ein EingabetextDer Zeitstempel 86400 * 3 ist der erste Sonntag seit Beginn der UNIX-Welt.
Sie können es testen, indem Sie Folgendes ausführen:
quelle
Perl, 60 Bytes
Etwas wie das:
Wenn Sie stattdessen eine Nachricht zurückgeben möchten und sich Sorgen über negative Indizes machen, können Sie stattdessen diese verwenden (8 weitere Zeichen):
quelle
Lua
13411911510098Grundsätzlich der gleiche Gedanke, den MartinButtner hatte, außer etwa
4,54,11,71,4-mal länger. Nimmt an, dassn
es anderswo als Variable gespeichert ist.quelle
n
, dass Sie in einer Variablen gespeichert werden, wie im OP-Snippet.Python (84)
Ich nehme an, es ist eine interessante Lösung. Es nimmt eine Idee von einer anderen Antwort, die ich irgendwo gelesen habe (kann sie nicht finden, ich weiß, dass sie auf dieser Site war. Wenn jemand weiß, kann er es mir gerne sagen.) Die Zeichenfolge wurde mit dem folgenden J-Programm generiert:
Nehmen Sie einige subtile Hinweise aus dieser Antwort:
quelle
Bash
7448 + FehlermeldungEin anderer Ansatz, da sich alle anderen Antworten darauf konzentrieren, die Zeichenfolgen in irgendeiner Form zu speichern.
quelle
sh
Antwort. In könnenbash
Sie die arithmetische Auswertung verwenden.read x;((0<x&&x<8))&&date -d2007010$x +%A||echo out of range
ist kürzer.||echo out of range
. In Anbetracht dessen, dass die akzeptierte Lösung nicht den Regeln entspricht (print to stdout) ... Wenn Sie jedoch dem Beispiel des OP folgen möchten, können Sieinvalid
stattdessen anstelle von verwendenout of range
.Perl, 54
Von STDIN zu STDOUT, keine Datumsfunktionen, kein Absturz.
quelle
PHP (56 Bytes)
quelle
Clojure - 99 Zeichen
Schlicht und einfach, trotz meiner besten (Anfänger-) Versuche:
quelle
JS: 58
Angenommen, n ist bereits als Variable gespeichert.
Als ES6-Funktion (gleiche Annahmen): 67
Dies gibt nur "Tag" für 0 aus und führt eine Schleife für n> 7 durch
quelle
day
für zurück8
und beginnt erneutMonday
bei9
.Rebmu : 21 Zeichen
Laufen:
Ungültige Zahlen geben "keine" zurück.
Für diejenigen, die mit Rebmu nicht vertraut sind, werden Fallübergänge verwendet, um die Notwendigkeit von Abständen zu beseitigen - innerhalb der Grenzen dessen, was gesetzlich analysiert werden kann. Anstatt InitialCapsToBreak zu verwenden, wird CASEtransitionsTObreak verwendet, da dadurch einem anfänglichen Großbuchstaben eine andere Bedeutung zugewiesen werden kann, als wenn der anfängliche Anfangslauf in Kleinbuchstaben geschrieben ist.
Es entspricht also dem Rebol-Programm
pick system/locale/days a
. (Rebmu benennt gemäß Konvention seinen Skriptparameter als "a").Speichert einen Charakter über
system/locale/days/(a)
:-)quelle
Haskell - 62
Umschlingt;
0
ist Sonntag,8
ist Montag und so weiter.Wenn ein Druck auf Standardausgabe erforderlich ist ( 68 Byte , Ausgabe in doppelten Anführungszeichen):
quelle
LiveScript - 49
Gibt zurück,
undefinedday
wenn die Eingabe ungültig ist. ;)Wenn ein Druck auf Standardausgabe erforderlich ist ( 60 Byte ):
quelle
Befunge-93 (206
208)Es hat Spaß gemacht, diesen zu schreiben. Ich bin sicher, es kann besser gemacht werden, aber ... es funktioniert! =) Kann ausprobiert werden hier .
Wäre noch kürzer gewesen, wenn der
#
über ganze Saiten und nicht nur über die einzelne Zelle gesprungen wäre.Die Grundidee dahinter: Holen Sie sich die Nummer und dekrementieren Sie sie weiter. Jedes Mal, wenn wir es dekrementieren, bewegt sich der Cursor nach rechts, dreht sich um und wird eine Ebene tiefer gesendet. Sobald wir Null erreicht haben, bewegen Sie sich stattdessen nach links und drücken Sie den (ersten Teil des) Tagesnamens. Von da an bewegt sich der Cursor direkt nach unten, wo die Zeichenfolge gedruckt und "Tag" angehängt wird.
Sie können sehen, wie es funktioniert, indem Sie die Funktion "Schritt" im Link zum Online-Interpreter verwenden.
Bearbeiten: Ich habe es geschafft, zwei Bytes zu rasieren, indem ich
>:#,_
stattdessen getan habe>,,,,,,
, was ebenfalls pretter ist.quelle
MATLAB: 33
MATLAB: 71
Haskell: 75
Haskell: 97
Python 3.4.1: 81
quelle
(0<n<8)
ist dann kürzer(n in range(8))
.split()
auch geteilte SaiteJava 8 -
6964 ZeichenHier ist ein Ausdruck in Java 8, einschließlich des Imports. Jetzt verbessert (dank Tomáš Dvořák ):
Druckt einfach
MONDAY
für falsche Werte voni
quelle
Python - 87
Ich sehe nicht genug Liebe für dikts .get (). Dieser erwartet
a
die Nummerquelle
day
in Ihrer Liste entfernen und+"day"
am Ende Ihres Codes hinzufügen ."mon,tues,...".split(",")
Python, 95 Bytes
quelle
%
Zeichenfolgen anstelle der Formatierung verwendet, die Liste aus einer Zeichenfolge erstelltsplit()
und unnötige Leerzeichen entfernt habe."mon tues wednes thurs fri satur sun".split()[n-1]+"day"if 0<n<8else"invalid"
Python 2,
848364Angenommen, n ist bereits als Variable gespeichert.
quelle
Cobra - 43
quelle