/* Configuration */
var QUESTION_ID = 111758; // Obtain this from the url
// It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 60042; // This should be the user ID of the challenge author.
/* App */
var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page;
function answersUrl(index) {
return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var SCORE_REG = /<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var OVERRIDE_REG = /^Override\s*header:\s*/i;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
answers.forEach(function(a) {
var body = a.body;
a.comments.forEach(function(c) {
if(OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});
var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
link: a.share_link,
});
});
valid.sort(function (a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});
var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function (a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;
var answer = jQuery("#answer-template").html();
answer = answer.replace("{{PLACE}}", lastPlace + ".")
.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)
.replace("{{LINK}}", a.link);
answer = jQuery(answer);
jQuery("#answers").append(answer);
var lang = a.language;
if (/<a/.test(lang)) lang = jQuery(lang).text();
languages[lang] = languages[lang] || {lang: a.language, user: a.user, size: a.size, link: a.link};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function (a, b) {
if (a.lang > b.lang) return 1;
if (a.lang < b.lang) return -1;
return 0;
});
for (var i = 0; i < langs.length; ++i)
{
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
.replace("{{LINK}}", lang.link);
language = jQuery(language);
jQuery("#languages").append(language);
}
}
body { text-align: left !important}
#answer-list {
padding: 10px;
width: 290px;
float: left;
}
#language-list {
padding: 10px;
width: 290px;
float: left;
}
table thead {
font-weight: bold;
}
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>
||
aufgelistet und das ist0111110001111100
.Antworten:
Gelee , 18 Bytes + 0 Strafen = 18
Gibt zurück,
1
ob in der 8-Bit-Wortdarstellung der ASCII-Zeichenfolgeingabe keine gleichen Bitfolgen mit einer Länge von 4 oder mehr vorhanden sind0
.Probieren Sie es online! (Testsuite mit einigen zusätzlichen Fällen hinzugefügt)
Mit Jellys Codepage gibt es keine 4 oder längeren Teilzeichenfolgen mit gleichen Bits:
Bei bitgleichen Lauflängen von:
Wie?
Tricks, um Fehler zu vermeiden, sind:
Um die "Konvertierung von Zeichen in Ordnungszahl" zu vermeiden,
O
konvertieren Sie die Zahl79
in ein Zeichen,Ọ
gefolgt von einer "Bewertung des Jelly - Codes mit Eingabe"v
.Vermeidung der direkten Umwandlung in eine Binärdatei unter Verwendung von
B
(0x42
,1000010
) durch die einfache Zwei-Byte-Alternative unterb2
Verwendung der generischen dyadischen Basenkonvertierung.Um einige normale Auswahlmöglichkeiten für das Zählen der Läufe gleicher Bits zu vermeiden, wäre die erste Wahl "alle überlappenden Schichten mit gegebener Länge"
ṡ
(0xF5
oder11110101
). Eine zweite Möglichkeit könnte darin bestehen, "alle Unterlisten"Ẇ
(0xCF
oder11001111
) zu verwenden.Eine Problemumgehung, die ich vor der aktuellen verwendet habe, bestand darin, die Inkremente (zwischen aufeinanderfolgenden Elementen) mit
I
(Nullen und Einsen auf die gleiche Basis stellen) zu setzen und nach jedem Auftreten von drei Nullen in einer Reihe zu suchen. Zu tun , dass ich alle Nullen zu Einsen durch die Verwendung der binomischen Funktion mit umgerechnet2c
also 2Cx - Herstellung der-1
s geworden0
s die1
s werden2
s, und die0
s werden1
s; Auf diese Weise kann der Code nach dem ersten Vorkommen der Unterliste[1,1,1]
mit suchenw111
.Es zeigte sich jedoch ein kürzerer Weg - um die Wirkung von "allen überlappenden Scheiben gegebener Länge" nachzuahmen
ṡ
, kann man mit einer Dyade eine 4- fach überlappende Reduktion verwenden<dyad>4\
. Wenn dies mit der Zugabe durchgeführt wird,+4\
zählt es die1
s, so ist, dann jedes0
oder4
vorhanden ist der Indikator einen truthy Wert zurückzukehren. Das Problem hierbei ist , dass der nächste offensichtliche Schritt der Modulo zu nehmen wäre 4 davon die setzen0
und4
Einträge auf gleiche Ebene , während die anderen möglichen Werte (Abfahrt1
,2
und3
) unverändert, aber+\%4
hat\%
inside, der den Bitwert 010111 0000 100100 hat. Um diese Strafe zu vermeiden, werden alle Zahlen mit (Mapping auf , auf , auf , auf und auf ) zur Basis 4 konvertiert und die gesamte Liste wird mit abgeflacht . Jetzt ist der letzte Test einfach zu überprüfen, ob es irgendwelche s in der Liste gibt, die direkt mit der Monade erreichbar sind .b4
0
[0]
1
[1]
2
[2]
3
[3]
4
[1,0]
F
0
Ạ
Hinweis: Der Grund, warum eine 2 mit der Ordnungsliste verknüpft ist, liegt darin, dass die Kantenfälle behandelt werden, in denen sich der einzige 4er- Lauf in der Eingabezeichenfolge in den führenden Nullen des allerersten Zeichens befindet. Diese Zeichen sind: tab; Zeilenvorschub; und Wagenrücklauf. Ohne dies entfernt die Basis-256-Konvertierung effektiv führende Nullen aus der (vollständig verketteten) Binärzeichenfolge; mit der führenden 2 werden die führenden Nullen da sein und eine zusätzliche Eins und Null vor ihnen. Da kein druckbares ASCII genau drei führende Nullen hat, müssen diese zusätzlichen Bits vor dem Rest der Prüfung nicht verworfen werden.
quelle
0
und,1
falls erforderlich, angibt.Java 7,
812726673644634616599588145 Bytes + 10 * 44 = 585Ich benutze Zeilenumbrüche anstelle von Leerzeichen, um die Strafe so gering wie möglich zu halten ...
Probieren Sie es online!
Binär
Alte Bitverschiebungslösung 141 Bytes + 10 * 101 = 1.151
Probieren Sie es online!
Binär
quelle
00000
/11111
als zwei Läufe000000
/111111
als drei usw. Ich zähle insgesamt 101 Läufe.APL (Dyalog Classic) , 26 + 1 × 10 = 36 Bytes
Anmerkungen
Enthält einen 4-Run von 1s. Benötigt,
⎕IO←0
was auf vielen Systemen Standard ist. Beachten Sie, dass dies muss auf einem klassischen Interpreter ausgeführt werden , so dass Strings ein Byte pro Zeichen sind.Einreichung
1≠⊃⌽⌈\∊(×4\¨⍳≢⍬⍬)⍷¨⊂11⎕DR⍞
Probieren Sie es online!
Binäre Quelle
001100011010110010011100101100101001011101011100101110010010100011010111010100010111001010100010 1111 00101110111010101110101011001010111010101010100011000100010001100011000
Erläuterung
⍞
Eingabeaufforderung für Zeichenfolge11 ⎕DR
umwandeln 1 -Bit Boolean ( 1 ) D ata R ePresentation⊂
umschließen, damit wir mehrere Dinge darauf anwenden können(
…) ⍷¨
Binäre Indikatoren, bei denen jede der folgenden Sequenzen beginnt…×
sign (no-op für binäre Daten, aber als Spacer zum Teilen von Läufen enthalten)4 \¨
erweitere (kopiere) jedes auf die Länge vier⍳
die ganzen Zahlen bis zu≢
die Bilanz von⍬⍬
Die Liste besteht aus zwei leeren numerischen Listen∊
eintreten (abflachen)⌈\
kumulatives Maximum⌽
umkehren⊃
wähle den ersten aus1 ≠
unterscheidet man sich von? (dh NICHT)Begehbar
Wir werden "48" in die ungolfed un-de-runed Version eingeben
~ ∨/ ∊ (0 0 0 0)(1 1 1 1) ⍷¨ ⊂ 11 ⎕DR ⍞
:11 ⎕DR ⍞
konvertiert "48" in 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 (dh Dec 52 56, Hex 34 38)(0 0 0 0)(1 1 1 1) ⍷¨ ⊂
findet Anfänge von 0-Runs und 1-Runs; (0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)∨/ ∊
prüft, ob es eine Wahrheit gibt (dh irgendwelche Läufe); 1~
negiert das; 0quelle
Jelly 28 + 140 Fehler = 168
Erläuterung
Konvertiert das Argument in eine Liste ihrer Binärkodierungen, z
Das nächste Stück
behebt die Tatsache, dass in der obigen Liste Zeichen fehlen können, da
B
führende Nullen nicht enthalten sind.Ç€
ruft die zuvor definierte Verknüpfung über jedem Element auf, wodurch diese wiederhergestellt wirdDieser Link ist äquivalent zu
Beispielsweise
Wir aktualisieren die Liste vor und nach dieser Operation (die beiden
U
Aufrufe in dieser Liste), um zu erreichen, dass dies eher ein Präpend als ein Append ist. Das nächste StückReduziert die Liste (
F
) und gibt die gesamte Binärzeichenfolge der ASCII-Codierung an. Die Lauflänge codiert die Ausgabe (Œr
). Also zum Beispielund
Abschließend prüfen wir, ob jedes Element <4 ist (zum Glück gilt dies immer für 0,1) mit
Beispielsweise
Endlich
Gibt 0 zurück, wenn eine dieser Angaben falsch ist (in diesem Fall 0).
Codeseiten
In Jellys Codepage ist dieser Code 20 Byte groß, weist jedoch Regelverletzungen im Wert von 27 Läufen auf. In UTF-8 sind es 28 Bytes, aber mit nur 14 Durchläufen sind Verstöße möglich.
quelle
05AB1E , 22 + 3 * 10 = 52
2 Elfmeter geliehen und den Delta- Trick von Jonathan Allans Gelee-Antwort entfernt
Probieren Sie es online!
Erläuterung
Binäre Darstellung des Codes
Die 3 Strafläufe stammen von
vy¦}
denen verwendet wird, um das erste Byte in jeder Binärzeichenfolge abzuschneiden, aber es ist immer noch billiger als die 4 Läufe, die wir von den kürzeren bekommen würden€¦
.quelle
€
in CP-125210000000
die Strafe von 4 für sich.# coding: cp1252
> _ <nach oben stelltePerl , 33 + 160 = 193
32 Byte Code + 1 Byte für
-n
Flag.(Die Eingabe muss ohne abschließenden Zeilenumbruch erfolgen. Der Link " Online testen" hat das
-l
Flag zum Entfernen von Zeilenumbrüchen aktiviert, für eine einzelne Eingabe ist dies jedoch nicht erforderlich.)Probieren Sie es online!
xxd dump:
Ein paar Anmerkungen:
(.)\1\1\1
spart ein paar Strafen über(.)\1{3}
,1111|0{4}
oder jede andere Regex ich denken konnte (mit0
oder{}
kommt zu einem hohen Preis).print
spart ~ 8 Punkte über Verwendung-p
und$_=
dap
enthält einen Lauf von 4 ,0
währendn
dies nicht tut.+
als Begrenzer für die Regex spart man einen Lauf davon1
ein/
.!~
spart zwei Läufen (~
ist01111110
in binär).unpack"B*"
ist ziemlich teuer (4 Läufe), aber ich konnte nicht billiger finden (Lösungen basierend auford
wird noch teurer sein).quelle
PHP, 98 + 270 = 368 Bytes
Ich wollte einen anderen Ansatz verfolgen als Titus und endete mit einem etwas längeren, aber weniger belasteten Programm.
Outputs
1
für Wahres, nichts für Falsches.Probieren Sie es hier aus!
Binär codiert:
(22 Vorkommen von
0000
und 5 Vorkommen von1111
, daher 270 Bytes Strafe)quelle
PHP, 86 Bytes + 370 = 456
Erstellt die Binärzeichenfolge und verwendet einen regulären Ausdruck, um Streifen zu erkennen. Die Ausgabe ist
1
für die Wahrheit; leer für falsch.Laufen Sie mit
echo '<string>' | php -nR '<code>'
.Optimierungen
aufgegebene Ideen
join(array_map(str_split()))
würde 31 Bytes und 90 Strafe kosten<?=
/$argv[1]
anstelle vonecho
/$argn
weitere 2 + 40 kosten.str_pad(decbin())
ist teurer alssprintf
: 7 Bytes und 110 Penalty.strtr
spart 80 Strafpunkte für 13 zusätzliche Bytes, aber Rückverweise sind besser.#(.)\\1{3}
3 Bytes gespart, aber 10 Strafpunkte hinzugefügt .foreach
kostet 3 + 50.quelle
§
atfor(§;
für hinzu-9
.MATL, 16 Bytes + 60 = 76 Bytes
Probieren Sie es bei MATL Online aus
quelle
JavaScript (ES8), 91 Bytes + 430 Strafe = 521 insgesamt
Dies wird
1
fürtrue
und0
für ausgegebenfalse
.Versuch es
quelle
padStart
ist nicht in ES6.Array.includes()
) - danke, @Neil.CJam , 23 Bytes
Verwendet Jonathan Allans Idee , mit Deltas zu arbeiten.
Probieren Sie es online!
Binäre Darstellung:
Erläuterung:
quelle
Pyth, 19 + 12 · 10 = 139
Binär
Erläuterung
quelle
JavaScript, 173 + 89 * 10 = 1063
JavaScript ist nicht gut darin, Zeichenfolgen in Binärdateien umzuwandeln, aber ich dachte, ich würde diese Herausforderung nur zum Spaß ausprobieren.
Code:
Binär:
Erläuterung:
Erstellen Sie eine Zeichenfolge, mit der Sie arbeiten möchten:
Schleife über jedes Zeichen in der Zeichenkette:
Erstellen Sie ein Array und konvertieren Sie die Zeichenfolge mit dem folgenden Zeichencode in eine Binärdatei:
Fügen Sie dem Array die führenden Nullen hinzu:
Fügen Sie das Array wieder zu einer Zeichenfolge zusammen:
Gibt mit einem regulären Ausdruck zurück, ob eine Zeichenfolge aus vier oder mehr Einsen oder Nullen im binären Ergebnis gefunden wurde:
Geige:
https://jsfiddle.net/vrtLh97c/
Statistiken:
Länge: 173 Bytes Strafe: 890 Gesamt: 1063
Code Golf ist schwer :)
quelle
1-1
anstelle von0
an wenigen Stellen könnte Ihnen einige Nachteile ersparen.Pyth, 21 + 2 · 10 = 41
Probieren Sie es online!
Binäre Darstellung:
quelle
Retina, 101 + 1390 = 1491
Der Code enthält nicht druckbare Zeichen, die jedoch in Chrome angezeigt werden, wenn Sie den Beitrag bearbeiten.
-
ist\x01-\x7f
.Probieren Sie es online aus
Dieser Code verwendet dies
ord
, gefolgt von der Konvertierung in eine Binärdatei und einer einfachen Überprüfung auf überlappende Sequenzen von vier.In binärer Form:
Mit diesem Python-Programm gezählte Strafen .
quelle
Python 2 , 74 (Länge) + 130 (Strafe) = 204
Die Ausgabe erfolgt über den Exit-Code. 0 ist wahr, 1 ist falsch. Erzeugt eine Müllausgabe an STDOUT und STDERR.
Probieren Sie es online!
Binärdump
quelle
0
es ziemlich schlecht ist, das aufzunehmen. Es ist besser zu verwenden1-1
0
.JavaScript (ES6),
8788 +390380 =477468 ByteIn binärer Form:
Mehr als die Hälfte der Strafe ist zu Nullen in der Überlappung nach unten zwischen dem Bytes, anstatt den Läufen in den folgenden Zeichen:
=>//pa//=>aCoAo
.Da die
/
s (00101111
) eine Strafe zahlen, habe ich versucht, a) vontest
zu wechseln ,match
b) vonreplace
zu zu wechseln ,map
aber die Punktzahl war immer höher. Allerdings habe ich festgestellt, dass dies[\S\s]
eine Verbesserung gegenüber war[^]
. Bearbeiten: Insgesamt 9 Bytes dank @Shaggy gespeichert.quelle
|
in der Charakterklasse soll nicht da sein!
mit1-
für insgesamt 468 rasieren. Und Sie könnten eine weitere Einsparung von 5 Bytes durch Ersetzen von[\S\s]
mit.
für insgesamt 463 machen.Pyth , 16 + 1 × 10 = 26 Bytes
Probieren Sie es online!
Binär
Tricks
Die folgenden Änderungen werden vorgenommen, um die Nachteile zu vermeiden:
qZ
(ist gleich Null) anstelle von!
(negieren):xy0
(Suchen nach) anstelle von}xy
(ist Unterliste)Z
(Variable, Standard auf Null) anstelle von0
(Null selbst)Verbesserungen
Ich finde keine Möglichkeit, die Strafe zu umgehen. Wir haben diese Befehle im Zusammenhang mit binären:
.B
binär (00101110 01[0000]10
)C
charcode (01[0000]11
).O
Oktar (00101110 0100[1111]
).H
hexadezimal (00101110 01001[000
)Beachten Sie, dass dies
.H
ebenfalls zu einer Strafe führt, da jedes druckbare Zeichen eine Binärdarstellung hat, die mit beginnt0
. Daher habe ich die direkteste verwendet, nämlich.B
direkte Konvertierung in eine Binärdatei.Ich kann damit enden
.H
, um die Strafe zu vermeiden, aber es kostet mich 27 Bytes ...Generation
Ich habe alle erlaubten Zeichen gefunden, die keine
0000
oder enthalten1111
und nicht mit enden000
(weil das nächste Zeichen mit beginnen muss0
):"#$%&')*+,-.12345679:;DEFGIJKLMNQRSTUVWYZ[\]bcdefgijklmnqrstuvw
Hier sind die Zeichen, die mit enden
1000
. Sie können nur am Ende verwendet werden:(8HXhx
quelle