Wenn Sie einen Beitrag in SE bearbeiten, werden alle weiteren Bearbeitungen innerhalb einer Nachfrist von 5 Minuten darin zusammengeführt. Wenn Sie eine Liste der Bearbeitungszeitpunkte für einen Beitrag angegeben haben, zählen Sie die Änderungen, die sich nicht in einem Kulanzzeitraum befinden.
Angenommen, Sie bearbeiten in Minuten [0,3,4,7,9,10,11,12]
. Dies führt zu 3 zeitweiligen Änderungen [0,7,12]
, wobei der Rest in den Kulanzfristen erfolgt.
0: [3,4]
7: [9,10,11]
12: []
- Die erste Bearbeitung findet in Minute 0 statt. Die Änderungen in den Minuten 3 und 4 liegen innerhalb der 5-minütigen Schonfrist und werden daher nicht gezählt.
- Die zweite Bearbeitung findet in Minute 7 statt. Die Bearbeitungen in den Minuten 9, 10, 11 liegen innerhalb der Schonfrist.
- Die dritte Bearbeitung in Minute 12 ist kurz nach dem Ende der 5-Minuten-Schonfrist, die in Minute 7 beginnt.
Die Ausgabe ist also 3.
Die Liste der Zeiten in Minuten ist eine Liste mit aufsteigenden ganzen Zahlen. Die erste Zahl ist immer 0 für die Erstbuchung, die wir als Bearbeitung betrachten.
Testfälle:
[0]
[0,3,5,7]
[0,3,4,7,9,10,11,12]
[0,30,120]
[0,4,8,12,16]
[0,4,8,12,16,20]
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
[0,5,10,15,20]
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
[0,1,4,5,9,11,12,14,16,18,23,24,26,28,29,30]
Ausgänge:
1
2
3
3
3
3
4
5
5
6
Um das Kopieren zu vereinfachen, sind hier die Eingänge, Ausgänge und Ein- / Ausgangspaare:
[[0], [0, 3, 5, 7], [0, 3, 4, 7, 9, 10, 11, 12], [0, 30, 120], [0, 4, 8, 12, 16], [0, 4, 8, 12, 16, 20], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [0, 5, 10, 15, 20], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [0, 1, 4, 5, 9, 11, 12, 14, 16, 18, 23, 24, 26, 28, 29, 30]]
[1, 2, 3, 3, 3, 3, 4, 5, 5, 6]
[([0], 1), ([0, 3, 5, 7], 2), ([0, 3, 4, 7, 9, 10, 11, 12], 3), ([0, 30, 120], 3), ([0, 4, 8, 12, 16], 3), ([0, 4, 8, 12, 16, 20], 3), ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 4), ([0, 5, 10, 15, 20], 5), ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], 5), ([0, 1, 4, 5, 9, 11, 12, 14, 16, 18, 23, 24, 26, 28, 29, 30], 6)]
Bestenliste:
var QUESTION_ID=141949,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/141949/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}
<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:
JavaScript, 36 Bytes
Probieren Sie es online!
Wie es funktioniert
In jedem rekursiven Aufruf löschen wir alle Elemente aus dem Array, die mehr als 4 Minuten vom ersten Element entfernt sind.
Es gibt einen kleinen Trick mit Variablennamen
$
. Die Prüfung$>f
konvertiert zuerst das Array in eine Zeichenfolge und vergleicht es dann mit der Zeichenfolgendarstellung der Funktionf
und vergleicht sie dann lexikografisch. Das erste Zeichen eines Zeichenketten-Arrays ist eine Ziffer und daher nur ein einziger Variablenname, dessen ASCII-Index kleiner ist als die Indizes aller Ziffern$
. Das Ersetzen$
durch einen anderen Variablennamen wird immer zurückgegebenfalse
.quelle
Mathematica,
46403733 BytesErläuterung
Setzen Sie
i
auf1
undj
auf0
.Auf alle Elemente der Eingabe abbilden ...
Wenn
(element) - j < 5
falsch, dann inkrementiereni
undj
auf das Element setzen (Kurzschlussauswertung).Ausgabe
i
.quelle
Schale , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2 , 58 Bytes
Probieren Sie es online!
49 Bytes
Verwenden Sie die in der @ ThePirateBay- Lösung gezeigte rekursive Methode .
Probieren Sie es online!
quelle
and 1+f(...)
kann durchand-~f(...)
für 49 Bytes ersetzt werdenx=a[:1]
ist äquivalent zux=[0]
, da die Frage explizit angibt, dass das erste Element immer0
( 62 Bytes ) istJ , 20 Bytes
Probieren Sie es online!
Erläuterung
quelle
MATLAB, 34 Bytes
Anonyme Funktion, die ein Array eingibt und eine Zahl ausgibt.
Dabei wird die
uniquetol
Funktion verwendet, insbesondere ihre Formy = uniquetol(x, t)
, diey
eindeutige Elementex
mit Toleranz enthältt
. Dabei scheint die Funktion einem "trägen" Ansatz zu folgen: Sortierenx
, Auswählen des ersten Eintrags und Überspringen von Einträgen, solange sie innerhalb der Toleranz des zuletzt ausgewählten Eintrags liegen. Genau das ist hier gefragt.Die
uniquetol
Funktion skaliert die angegebene Toleranz automatisch um den maximalen Absolutwert ina
. Deshalb brauchen wir hier die Aufteilung.x+1
wird anstelle von verwendetx
, um eine Division durch 0 zu vermeiden.Überprüfung von Testfällen:
quelle
uniquetol
... Eingeführt in R2015a . Ich habe R2014b :( Nette Antwort :)05AB1E ,
201918151411 BytesErläuterung:
Probieren Sie es online!
Bearbeiten
quelle
¼4¹vDy‹i¼y4+}}¾
v®y‹iy4+©\¼
Schale, 6 Bytes
Probieren Sie es online!
quelle
ü
funktioniert! Das ist sehr praktisch.ġ
aber es funktioniert nicht, während HaskellsgroupBy
Werke:length.groupBy((>).(+5))
. Dann fand ichü
was dazu führt auch zu einer kürzeren Haskell - Äquivalent:nubBy
.Haskell ,
31-30BytesProbieren Sie es online!
1 Byte dank Zgarb gespeichert
quelle
z-4>x
sollte ein Byte speichern.05AB1E , 14 Bytes
Probieren Sie es online!
quelle
æ
für Superset, das ist ein toller Trick!æ
bedeutet "Powerset".MATL ,
13 -12 BytesProbieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Pyth , 14 Bytes
Dies ist eine rekursive Funktion. Nennen Sie es mit
y[0 1 2 3 4 5 6 7 8)
, wo[...)
ist Ihre Liste.Alternativ können Sie es hier ausprobieren! oder Überprüfen Sie alle Testfälle.
Erläuterung
Dies entspricht in etwa der Python-Lösung. Eine Übersetzung würde zu folgenden Ergebnissen führen:
Code-Aufschlüsselung
quelle
.U
. Vorschläge sind willkommenJava 8,
7861605956 BytesPort von @ JungHwanMins Antwort
Probieren Sie es online!
quelle
a->{int i=0;for(int l:a)if(l-a[i]>4)a[++i]=l;return-~i;}
C # .NET, 63 Bytes
Erläuterung:
Probieren Sie es hier aus.
quelle
Perl 5 , 54 Bytes
52 Byte Code +2 für
-ap
Probieren Sie es online!
quelle
Pyth, 25 Bytes
Versuchen Sie es hier: http://pyth.herokuapp.com
quelle
Proton , 40 Bytes
Stark von der Python-Lösung inspiriert .
Probieren Sie es online!
quelle
Ly , 29 Bytes
Probieren Sie es online!
Es hat lange gedauert, hierher zu kommen.
quelle
Retina ,
3226 BytesProbieren Sie es online! Erläuterung:
Konvertieren Sie zu Unary, aber addieren Sie 1, da 0 in Retina ein schwieriges Konzept ist.
Zählen Sie die Anzahl der Bearbeitungen, schließen Sie jedoch alle Kulanzbearbeitungen in jede Übereinstimmung ein.
quelle
Kotlin, 52 Bytes
Posting als Funktion, wenn dies nicht akzeptabel ist, werde ich es in eine Methode ändern
Einreichung
Verschönert
Prüfung
TryItOnline
quelle
PowerShell , 74 Byte
Iterative Lösung. Langwierig, da Zaunpfosten auf der
for
Schlaufe eine zusätzliche Kontrolle am Ende erfordern. Golfvorschläge sind willkommen.Wir nehmen die Eingabe
$args[0]
als Literal-Array, schälen das erste Element in$x
und das verbleibende in ab$y
. Dann, solange es noch Elemente gibt$y
, wird eine Schleife ausgeführt.Jede Iteration, prüfen wir , ob der aktuelle Zeitstempel
$x
ist5
oder mehr weg von den$l
ast bearbeiten Zeitstempeln. In diesem$i++
Fall erhöhen wir unseren Zähler und setzen unseren Zeitstempel auf den aktuellen Stand. Dann schälen wir bei der Iteration der Schleife das nächste Element ab$x
und lassen das verbleibende in$y
.Sobald wir die Schleife verlassen haben, geben wir
$i
plus1
für die anfängliche Bearbeitung plus aus, ob der endgültige Zeitstempel mehr als fünf von der letzten Bearbeitung entfernt ist (wobei der Boolesche Wert implizit in eine Ganzzahl umgewandelt wird). Dieses Ergebnis verbleibt in der Pipeline und die Ausgabe ist implizit.Probieren Sie es online!
quelle
R , 52 Bytes
Probieren Sie es online!
Einfache anonyme Funktion, die iterativ Elemente aus der Liste entfernt, die weniger als 5 vom ersten Element entfernt sind, bis die Liste leer ist, und dann den Zähler zurückgibt.
quelle
Clojure, 53 Bytes
Dies verfolgt die "Bearbeitungsstartzeiten" und gibt dann ihre eindeutige Anzahl zurück.
quelle
Japt , 14 Bytes
Versuch es
Erläuterung
Implizite Eingabe eines Arrays
U
Holen Sie sich die Länge von
U
.Logisches AND (
&&
) -Ê
Führt nur dann Folgendes aus, wenn es wahr ist (nicht Null).Rekursiver Aufruf.
Filter (
f
),U
indem jedes Element durch eine Funktion geleitet wird.Ermitteln Sie die Differenz (
a
) zwischen dem aktuellen Element und dem ersten Element (g
) vonU
.Größer als 4?
Hinzufügen
1
.Implizite Ausgabe der resultierenden Ganzzahl.
quelle
Jelly , 11 Bytes
Probieren Sie es online!
Erläuterung
12 Bytes
Probieren Sie es online!
Erläuterung
quelle