var QUESTION_ID=66656,OVERRIDE_USER=16196;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/66656/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}#answer-list{padding-right: 100px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Antworten:
Gelee, 9 Bytes
Dies ist eine monadische Kette, die ein ganzzahliges Befehlszeilenargument als Eingabe verwendet. Es benutzt meinen
(x+5+(x%4)**3%7)
Algorithmus.Probieren Sie es hier aus . Obwohl dies die aktuelle Version von Jelly ist, funktioniert sie auch in dieser Version , die der Herausforderung vorausgeht. (Danke @Dennis!)
quelle
Mathematica,
45372724 BytesVerbesserungen dank @ MartinBüttner (10 Bytes) und @ChipHurst (weitere 3 Bytes).
quelle
#+5[6,6,11][[#~Mod~4]]&
5[6, 6, 11][[0]]
:)CJam,
211211 Bytes@ Martin fand eine sehr einfache Methode!
Probieren Sie es hier aus .
EDIT: Danke, Dennis!
quelle
5 6 6 11
Trick implementiert, der auch in anderen Antworten verwendet wird, aber die Liste wird als "die Ziffern von 9587 in Basis 12" codiert .gs2, 12 bytes
Übersetzung meiner CJam-Antwort. Wie gewohnt in CP437 codiert. Probieren Sie es online !
quelle
JavaScript (ES6),
504920 Bytes (keine Boni)Der Algorithmus von @martin erweist sich als viel kleiner, also habe ich mich entschieden.
Ich habe mich für einen mathematischen Ansatz entschieden, da JavaScript in der Regel ausführlich ist. Der Code ist so kurz, dass Boni ihn nur verlängern.
Hier ist meine vorherige Antwort (49 Bytes) und meine ursprüngliche Antwort (50 Bytes):
F=(a,b=a)=>((a+--a/4|0)-(b++/4+b|0))%7?F(++a,b):b
F=(a,b=a)=>(f=c=>(c--+c/4|0)%7)(a)-f(++b)?F(a,b):b
Sie arbeiten, indem sie das Jahr nehmen und eine Zahl (0-6) berechnen, um den "Starttag des Jahres" darzustellen. Da der Datumsbereich für diese Herausforderung im Bereich von Jahren liegt, die einfachen Schaltjahrregeln folgen (kein Überspringen bei 2000), ist die Berechnung relativ einfach. Dann ist es nur eine Frage des Vorwärtsvergleichs, um Jahre zu finden, die mit demselben Wert beginnen. Die Rekursion erwies sich als der prägnanteste Weg, dies zu tun.
quelle
Pyth,
141211 BytesDie vier Bytes in der Zeichenfolge sollten sein
05 06 06 0B
.EDIT: Danke, FryAmTheEggman!
EDIT: Danke, Dennis!
quelle
JavaScript (ES6), 104 Byte - 50% Bonus = 52
Erläuterung
Prüfung
Code-Snippet anzeigen
quelle
Z80-Maschinencode, 12 Byte
Eine zu speichernde Z80-Prozedur
0000h
, die mit der Eingabe in aufgerufen wirdHL
, und alle anderen Register löschen:Die ersten drei Befehle sind "NOPs", werden jedoch später im Code als Daten indiziert. Bei der Rückkehr ist die Ausgabe in
HL
.quelle
DE
und Sie daher verwenden könnenLD A, 3; AND E; LD L, A; LD L, (HL);
?Python 3,
14010010284,5154 * 0,5 = 77 ByteIch könnte wahrscheinlich eine bessere Lösung mit Sakamotos Algorithmus schreiben, aber das wird vorerst reichenIch lag richtig. Hier ist eine Implementierung unter Verwendung des Sakamoto-Algorithmus.
Erläuterung:
quelle
w="SMTWTFSuouehranneduit"
und dann druckenw[d(i)::7]
?Im Ernst,
3517 Bytes[5,6,6,11]
Trick rettet den Tag.Probieren Sie es online aus
Erläuterung:
Alte Version:
Probieren Sie es online aus
Erläuterung:
Sakamotos Algorithmus:
quelle
C 31 Bytes
Nach der Bearbeitung der Frage, die den Eingabebereich auf 1970-2090 einschränkt, wird dies ziemlich trivial:
Ohne die Nicht-Schaltjahre des Jahrhunderts gibt es eine einfache Folge von 5,6,6,11 Intervallen für die erste Wiederholung desselben Tages.
Vollständige Lösung des ursprünglichen Problems (nicht auf 2090 beschränkt), 90 Bytes:
Testprogramm:
Testlauf:
quelle
R
143136 * 0,5 = 68 BytesVerwenden Sie den Namen
%A
für den ganzen Tag anstelle von `% a, abhängig vom gewünschten Status.R, 120 · 0,7 = 84 Bytes
R, 90 Bytes
Alle obigen Antworten sind abgeleitete Arbeiten, die auf der Antwort von @plannapus basieren. Verwenden Sie das
;
Trennzeichen, um zu vermeiden, dass Siesource
die Datei benötigen, oder führen Sie sie als Skript in der Befehlszeile aus.quelle
weekdays
, nett.R, 145 Bytes -50% -> 72,5
Beispiele:
R, 97 Bytes (ohne Bonus)
Mit neuen Zeilen eingerückt:
Testfälle:
quelle
;
y=scan;
und unter Verwendungx=y<-scan()+1
Ich denkeas.POSIXlt(paste(y,1),,"%Y %j")$wday
als Funktionskörperscan
wird in der zweiten Zeile als Eingabe gelesen.x=y<-scan()+1
mit 2014 als stdin geben Sie x = 2015 und y = 2015 (dh die Zuordnungy <- scan()+1
) , und wenn Sie versuchen zu tun ,x=1+y<-scan()
es wird Ihnen ein Fehler (Error in 1 + y <- scan() : target of assignment expands to non-language object
) , weil es zu zuweisen versuchtscan()
zu1+y
....$wday
die Wochentagsnummer: aber hier brauche ich den Wochentagsnamen, damit ich drucken kannAdvance Happy New Year, 2012 (Sun)
VBA, 130 * 0,50 = 65 Bytes
VBA macht das Auffinden von Wochentagen so einfach. Wenn es nur nicht so ausführlich wäre.
quelle
PHP, 120
139Bytes - 50% = 60 BytesEin funktionaler Ansatz:
Nimmt eine Eingabe von der Kommandozeile, wie:
Der OOP-Weg scheint wie immer länger zu sein (143 Bytes):
Bearbeitungen
+1year
ich jetzt einfach das angegebene Jahr.-1-1
in einer Variablen.quelle
C, Ergebnis
5352 (104 Bytes)Idee von Toby Speight entlehnt ; Die Bonusanzeige des Wochentags wurde hinzugefügt.
Verkürzt die Zeichenfolge, indem die Zeichencodes auf einen bequemeren Bereich verschoben werden. Musste den richtigen Verschiebungsbetrag (z. B. 43) auswählen, damit der Berechnungscode für den kurzen Wochentag
x*5/4%7
funktioniert.quelle
" !!&"
.Mathematica, 145 * 50% =
7473,572,5 BytesVerwendet Standard-Datumsfunktionen.
quelle
Pyth, 23 Bytes
Qualifiziert sich nicht für einen der Boni.
Probieren Sie es hier aus .
Ähnlich wie bei der reinen Python-Antwort.
quelle
Java,
(1-2) * 323(1-5) *350348339 =258,4175174169,5 BytesPfui.
Ungolfed:
Probieren Sie es online!
Vielen Dank an @Kenney für den Hinweis, dass ich mit
new Long
und kürzen könnteprintf
! : Dquelle
long y=new Long(a[0])
Speichert 6 (12) Bytes undprintf
speichert weitere 3 (6) Bytes .GNU Coreutils,
525149 Bytes(98-Byte-Programm - 50% Bonus)
Die Eingabe erfolgt über das Befehlszeilenargument und die Ausgabe erfolgt über stdout.
Erläuterung
Testlauf:
Alle Gebietsschemaeinstellungen können
C
oder seinPOSIX
.Einschränkung: Dies funktioniert nur bis zum Jahr 2147485519 (obwohl die Frage jetzt geändert wurde, um eine Untergrenze zuzulassen).
quelle
MATL , 28 Bytes
Beispiel
Code erklärt
quelle
Perl 6 ,
7023 BytesVerwendungszweck:
quelle
J, 14 Bytes
quelle
Japt, 12 Bytes
Wie bei der Pyth-Antwort sollten die vier Bytes in der Zeichenfolge sein
05 06 06 0B
. Probieren Sie es online!quelle
Jelly , 14 Bytes
Probieren Sie es online!
Bis heute hatte Jelly keine Array-Indizierung. Seit dem letzten Festschreiben wurde die Array-Indizierung wie
ị
folgt implementiert: ( 10 Byte ).Probieren Sie es online!
quelle
Pyth, 35 Bytes
Probieren Sie es online aus.
quelle
C # (6.0) .Net Framework 4.6 173 Bytes - 30% = 121,1 Bytes
quelle
Javascript ES7, 17 Bytes
Ich benutze JS zum ersten Mal. Ich habe dies mit einem Python-Skript gefunden und halte es für optimal. Es funktioniert, weil
0**3
0 mod 7 ist1**3
und2**3
beide 1 und3**3
6 sind.quelle
**
eine ES7- Funktion? Oder benutzt du Babel ?Python, 23 Bytes
Ein Port meiner JavaScript-Antwort.
quelle
Pyth , 12 Bytes
Probieren Sie es online! oder Schauen Sie sich die Test Suite an.
Pyth , 18 Bytes
Dieser zweite Ansatz ist hauptsächlich ein Golf von @ wizzwizz4s Pyth-Antwort .
Probieren Sie es online! oder Schauen Sie sich die Test Suite an.
Erläuterung
quelle