var QUESTION_ID=127261,OVERRIDE_USER=56433;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/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} /* font fix */ body {font-family: Arial,"Helvetica Neue",Helvetica,sans-serif;} /* #language-list x-pos fix */ #answer-list {margin-right: 200px;}
<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>Score</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>
-n
für Perl zur Punktzahl? Es zählt traditionell als 1 Byte, da der Bearbeitungsabstand zwischen dem Standardperl -e
undperl -ne
1 ist. Wird bei dieser Herausforderung dien
Zählung zum Zählen von Duplikaten durchgeführt?n
ist die fairste Option.how often this character has already occurred in the string
, ich würde wahrscheinlich ändern,how many times the character has occurred up to this point
um es klarer zu machen, dass die erste Verwendung 1 kostet, nicht 0Antworten:
MATL , Punktzahl 4
Probieren Sie es online!
Erläuterung
Betrachten Sie die Eingabe
'ABBA'
als Beispiel.quelle
Python , Punktzahl 49
Probieren Sie es online!
Es gibt einen Vorsprung danach
in
.Aufschlüsselung der Punkte:
()Camnou
S
quelle
T-SQL, Ergebnis
775 579!580BEARBEITEN : Einige Variablen entfernt, etwas komprimiert. Bis 16
@
Anstelle von 22 Symbole reduziert das meine Punktzahl um satte 117 Punkte!Netter Wettbewerb, mir gefällt die Forderung, nicht nur die Gesamtcharakterzahl zu optimieren.
Die Eingabe erfolgt über varchar Feld q in bereits bestehenden Tabelle z , gemäß unseren IO Regeln . In der Datenbank, die diese Eingabetabelle enthält, muss zwischen Groß- und Kleinschreibung unterschieden werden .
Formatiert:
Bei SQL-Schlüsselwörtern wird nicht zwischen Groß- und Kleinschreibung unterschieden, daher habe ich die Anzahl der doppelten Buchstaben in Groß- und Kleinschreibung minimiert ( aaAA generiert eine bessere / niedrigere Bewertung als aaaa ).
Die Hauptschleife vergleicht die Länge vor und nach dem Entfernen aller Instanzen des ersten Zeichens. Diese Differenz n * (n + 1) / 2 wird zu einer laufenden Summe addiert.
Die SQL-
LEN()
Funktion ignoriert ärgerlicherweise nachfolgende Leerzeichen, daher musste ich ein Steuerzeichen anhängen und am Ende 1 subtrahieren.BEARBEITEN : Eine Fehleinschätzung meiner eigenen Punktzahl um 2 Punkte (Problem mit Anführungszeichen) wurde behoben, die durch Ändern der Groß- und Kleinschreibung um 1 verringert wurde
R
. Ich arbeite auch an einer völlig anderen Strategie und werde dies als eigene Antwort veröffentlichen.quelle
579! ≈ 8.22 x 10^1349
C (gcc) , Punktzahl:
1131031009691Vielen Dank an @ugoren, @CalculatorFeline, @gastropner, @ l4m2 und @ JS1 für ihre Tipps.
Initialisiert ein Array mit Nullen und verwendet dann die ASCII-Werte der Zeichen in der Zeichenfolge als Indizes für dieses Array, um die Anzahl der Instanzen jedes Zeichens in der Zeichenfolge zu verfolgen.
Probieren Sie es online!
quelle
z
werdenx
, zc
.char
enthältc
...\x7f
nicht gedruckt werden) und fügen Sie eine Erklärung hinzu.z;g(char*s){int y[238]={z=0};while(*s)z+=--y[*s++];z/=~0;}
g(char*s){int y[238]={};while(*s)*y+=--y[*s++];*y/=~0;}
JavaScript (ES6), Partitur
81783 Punkte gespart dank @Arnauld
Meine ursprüngliche rekursive Score-81-Lösung:
quelle
Haskell , Punktzahl 42
Probieren Sie es online!
Anonymisierung
\l->
ergibt die gleiche Punktzahl.quelle
Gelee , Punktzahl 6
Probieren Sie es online!
quelle
Retina , 34 Punkte
Probieren Sie es online!
Erläuterung
Wir beginnen damit, alle Zeichen in der Eingabe so zu sortieren, dass identische Zeichen zu einem einzigen Lauf zusammengefasst werden. Der
s(
Aktiviert den Single-Line-Modus für alle Stufen (dh führt.
Match-Linefeeds durch).Das Ziel ist es, eine Folge von n Zeichen in T n Zeichen (die n- te dreieckige Zahl) umzuwandeln, da dies die Punktzahl für das Auftreten dieses Zeichens ist. Dazu finden wir überlappende Übereinstimmungen. Insbesondere werden wir für jedes i in [1, n] i-1 Zeichen in die Übereinstimmung aufnehmen. Wir erhalten alle diese Übereinstimmungen aufgrund der überlappenden Flagge
&
. Das ergibt n * (n-1) / 2 = T n-1 = T n - n Zeichen nur aus den Übereinstimmungen. Aber die Match-Phase wird diese mit Linefeeds verbinden, für die es sich um n Linefeeds handelt n sindStreichhölzer. Es gibt nur ein Problem. Nach der letzten Übereinstimmung wird kein Zeilenvorschub ausgegeben, sodass die Gesamtanzahl der Zeichen in der Ausgabe um eins geringer ist als benötigt. Wir beheben dies, indem wir auch den Anfang der Eingabe anpassen, wodurch wir einen einzelnen Zeilenvorschub erhalten, wenn mindestens eine andere Übereinstimmung vorliegt.Schließlich zählen wir nur, wie viele Zeichen sich in der Zeichenfolge befinden.
quelle
Haskell, Ergebnis
5251Es gibt eine Lasche zwischen
f
und_
.Probieren Sie es online!
Der Wert der leeren Zeichenfolge ist 0. Der Wert der Zeichenfolge s, wobei
a
das erste Zeichen undb
der Rest der Zeichenfolge 1 plus das Auftreten vona
inb
plus einen rekursiven Aufruf mit b ist.quelle
J , Punktzahl 16
Probieren Sie es online!
Erläuterung
Verwenden Sie
1#.
statt+/@
für die Summe, die einige Punkte gespeichert hat, und&
können Sie statt@
in einem monadischen Kontext verwenden, um einen weiteren Punkt zu speichern. Die Wiederholung1
kostet mich einen zusätzlichen Punkt, aber ich habe es nicht geschafft, es loszuwerden.quelle
R , Punktzahl: 67
8395128-61 dank Top-Tipps von Giuseppe
Probieren Sie es online!
Die Zeichenfolge wird mit geteilt
utf8ToInt
und jeder ASCII-Wert wird gezählttable
. Das Ergebnis wird berechnet, indem eine Matrixmultiplikation%*%
über den Wert von + 1 durchgeführt und schließlich halbiert wird.quelle
table
anstelle vonrle
; Sie können das auch loswerdensort
(und Sie müssen nicht[[1]]
in das Ergebnis von indizierenstrsplit
)n
(da erfunction
zweimal vorhanden ist) verwenden und auch(n+1)
zu{n+1}
05AB1E , Punktzahl 6
Probieren Sie es online!
quelle
Pyth , Punktzahl 6
1 byte dank isaacg.
Testsuite.
Wie es funktioniert
quelle
s+0
ist das gleiche wie+F
.usaShHGrScQ1 8Z
für 16. Können Sie eine Erklärung hinzufügen?s/LQ
ist Punktzahl 4, verwendet diese Funktion Funktionen, die die Herausforderung datieren?J , Punktzahl:
14 1211Probieren Sie es online!
quelle
$
.1#.2!1+1#.=
Jelly , Punktzahl von 7
Erläuterung:
Probieren Sie es online!
quelle
C, 60 Bytes, Ergebnis
10895Probieren Sie es online!
Normalerweise sind Pre- und Post-Increment-Operatoren großartig für Code-Golf, aber sie tun dieser Herausforderung wirklich weh!
BEARBEITEN: Indem ich negative Zählungen abzog, anstatt positive zu addieren, sparte ich eine ganze Menge Punkte. Durch Ersetzen
for()
mit wird auchwhile()
ein Semikolon entfernt.quelle
Perl 6 , Punktzahl
61 56 53 4644Versuch es
Versuch es
Versuch es
Versuch es
Versuch es
quelle
C # (.NET Core) , Score score (ich meine, 209)
Probieren Sie es online!
Die Partitur beinhaltet Folgendes:
quelle
return w*(w+1)/2
zureturn-~w*w/2
(Punktzahl 196) wechseln . BEARBEITEN: Sie können einen Port für meine Java 8-Antwort für eine Punktzahl von 149 erstellen :using System.Linq;b=>{int[]x=new int[256];return\nb.Select(z=>++x[z]).Sum();}
Probieren Sie es online aus.b=>{var x=new int[256];return\nb.Sum(z=>++x[z]);}
Gelee , Punktzahl 5
Probieren Sie es online!
Danke an Leaky Nun für -2 (vorher auf seine Antwort )
quelle
ĠJ€ẎS
PowerShell, Punktzahl 64
(Die Bewertung basiert auf einem Zeilenvorschub, der nicht dem Windows-Standard entspricht, aber in PS funktioniert.)
@{}
$args
ist ein Array von Parametern - in diesem Fall wird es durch die Eingabezeichenfolge zu einem einzelnen Elementarray.|%
Führt eine foreach-Schleife über die Elemente aus und verwendet diegetE*
Verknüpfung, um dieGetEnumerator()
Zeichenfolgemethode abzugleichen. Ruft sie auf, um die Zeichenfolge in einen Zeichenstrom umzuwandeln.|%
Durchlaufen Sie die Zeichen und erhöhen Sie ihren Hashtabelleneintrag. Fügen Sie ihn zu einer laufenden Summe hinzu. Das($x+=1)
Formular mit Parens ändert sowohl die Variable als auch gibt den neuen Wert zur Verwendung aus.(Als ich es zum ersten Mal schrieb, hatte ich
$c=@{};$t=0;[char[]]"$args"|%{$c[$_]++;$t+=$c[$_]};$t
eine Punktzahl von 128 und hatte das Gefühl, dass es nicht viel niedriger ausfallen würde. Es ist sehr erfreulich, es auf 64 zu halbieren.)quelle
Julia 0,6 , 45 Bytes, Score: 77
Inspiriert von der MATL-Lösung:
Probieren Sie es online!
Eine weniger hübsche Lösung mit Zählungen:
Julia 0,6 , Score: 82
Probieren Sie es online!
Vielen Dank an Guiseppe für den Hinweis auf die Wertung und für Tipps. Diese Kommentare haben mir sehr geholfen.
quelle
(x+1)
mit ,[x+1]
um die Punktzahl zu reduzieren.[x+1]
anstelle(x+1)
senkt es auf eine Punktzahl von 98 .Java 10, Partitur:
149138137134133130103102101100( Bytes:
72737475646261 )Bytes steigen, aber die Punktzahl sinkt. : D-28 Punkte (und -11 Bytes) dank @Nevay .
-1 Punktzahl (und -2 Bytes) dank @ OlivierGrégoire .
-1 Punktzahl (und -1 Byte) durch Konvertieren von Java 8 in Java 10.
Erläuterung:
Probieren Sie es hier aus.
quelle
~
wenn Siej=0
undreturn-j;
(133) verwenden.x->{int[]q=new int[256];return\nx.chars().map(v->++q[v]).sum();}
j
anstelle vonu
(return
enthältu
) und eine neue Zeilen und Register anstelle der Räume. EDIT: Hehe, Sie haben richtig bearbeitet, als ich diesen Kommentar gemacht habe. :)F #,
120118 Punkte-2 Danke an Kevin Cruijssen !
Probieren Sie es online!
Nimmt ein
string
als Eingabe.Seq.countBy
Paart jedes einzelne Zeichen mit seiner Anzahl (id
ist die Identitätsfunktion), sodass Sie eine Sammlung wie'a' = 4, 'b' = 2
usw. erhalten.Der
Seq.sumBy
Zähler zählt für jeden Buchstaben und summiert alle Zahlen von0
bis zum Zähler für diesen Buchstaben. Also wenn'a' = 4
die sammlung0, 1, 2, 3, 4
welche summiert wäre ist10
. DannSeq.sumBy
fasst alle diese Summen.quelle
let q
zulet j
, da dieq
bereits in den beiden verwendet wirdSeq
.APL (Dyalog) , Punktzahl 15
Probieren Sie es online!
⍞
Texteingabe erhalten∘.=⍨
Gleichheitstabelle mit sich selbst+\
kumulative Summe über1 1⍉
Diagonale (buchstäblich beide Dimensionen in Dimension eins reduzieren)+/
Summequelle
Retina , Ergebnis
684543Probieren Sie es online! Link zeigt Punktzahl. Bearbeiten: Dank an @MartinEnder, der 20 Bytes durch Verwendung überlappender Übereinstimmungen anstelle von Lookaheads und weitere drei Bytes durch Gruppieren der Stufen gespart hat, sodass das
s
Flag nur einmal angewendet werden muss. Durch eine andere Berechnung der Dreieckszahl wurden zwei weitere Bytes gespart, sodass keine Sortierung erforderlich war.quelle
PHP , 45 Bytes, Score 78
Probieren Sie es online!
PHP , 46 Bytes, Score 79 Bytes
Probieren Sie es online!
PHP , 56 Bytes, Score 92
Probieren Sie es online!
quelle
Perl 5 Score
9183Verwendet das
-p
Flag, das 2 addiert, weil p geteilt wird.quelle
$` is automatically
printed after each call so we can use that to store the score and
/./g` gibt eine Liste aller Zeichen in zurück$_
, die billiger ist alssplit//
.Oktave , 39 Bytes, Score 69
Probieren Sie es online!
Auch wenn es eine andere Antwort von Octave gibt, ist diese ganz meine eigene und eine andere Herangehensweise, und sie erzielt weniger Punkte :).
Der Ansatz läuft darauf hinaus, zuerst die Zählung (b) jedes einzelnen Zeichens zu ermitteln, was unter Verwendung der Histogrammfunktion erreicht wird. Dann berechnen wir für jedes Element die Summe von 1 bis b, die mit der Formel durchgeführt wird
(b*(b+1))/2
. Dann werden die einzelnen Summen zum Endergebnis addiert.Beim Testen scheinen Klammern in der Wertung sehr kostspielig zu sein, da viele benötigt werden. Ich habe von einer anfänglichen Punktzahl von etwa 88 durch Umordnen der Fragen eine Optimierung vorgenommen, um die Anzahl der Klammern zum Öffnen / Schließen zu minimieren. Daher nehmen wir jetzt die / 2 für die Endsumme vor und nicht für einzelne Fragen. Außerdem habe ich die Formel in geändert
(b^2+b)/2
Das erfordert weniger Klammern.quelle
error: hist: subscript indices must be either positive integers less than 2^31 or logicals
Common Lisp, Punktzahl
286232222Hochwertige Punktzahl aufgrund der wortreichen Syntax der eingebauten Operatoren von Common Lisp.
Probieren Sie es online!
Der ungolfed Code:
quelle
Mathematica, Punktzahl 54
Eingang
danke an hftf
quelle
Total[#(#+1)/2&@Counts@Characters@#]&
Ergebnisse 54.