Angenommen, wir haben eine Zeichenfolge und möchten die maximal wiederholte Folge jedes Buchstabens ermitteln.
Beispiel für die Beispieleingabe:
"acbaabbbaaaaacc"
Die Ausgabe für die Beispieleingabe kann sein:
a=5
c=2
b=3
Regeln:
- Ihr Code kann eine Funktion oder ein Programm sein - Sie haben die Wahl
- Die Eingabe kann über Standard-, Datei- oder Funktionsparameter erfolgen
- Die Ausgabe sollte nur Zeichen enthalten, die in der Eingabe erscheinen
- Die maximale Länge der Eingabe beträgt 1024
- Die Ausgabereihenfolge spielt keine Rolle, muss jedoch in der Form [char] = [maximale Wiederholungssequenz] [Trennzeichen] ausgedruckt werden
- Die Zeichenfolge kann ein beliebiges Zeichen enthalten
Der Wettbewerb endet am Donnerstag, den 3. um 23:59 UTC.
l:S_&{'=L{2$+_S\#)}g,(N}/
in Produktionssystemen sehen! Und ich werde deinen Namen verfluchen.Antworten:
8086 Maschinencode,
8280Inhalt der
x.com
Datei:Es werden nur Wiederholungen mit bis zu 99 Zeichen unterstützt.
Quellcode (diente als Eingabe für den
debug.com
Assembler), mit Kommentaren!Hier sind einige Golftechniken, die meiner Meinung nach Spaß gemacht haben:
3d00
, wo3d
ist der ASCII-Code für=
. Auf diese Weisex
lautet die Adresse für den Zeicheneintrag des Arrays3d78
. Wenn es als 2-stellige Zeichenfolge interpretiert wird, ist esx=
.104
. Er überschreibt den nicht mehr benötigten Initialisierungscode. Die Zeilenende-Sequenz0D 0A 24
wird als harmloser Code ausgeführt.aam
Anweisung hier bietet keine Golf, obwohl es könnte ...11b
, die den erforderlichen Maschinencode enthältC3
.quelle
CJam,
272625 BytesProbieren Sie es online aus.
Beispiel
Wie es funktioniert
quelle
J - 52 Bytes
Nun, wieder ein einfacher Ansatz.
Erläuterung:
Beispiel:
Wenn die Ausgabe in freier Form zulässig ist (wie in vielen anderen Antworten), habe ich auch eine 45-Byte- Version. Diese Felder stellen eine Liste von Feldern dar (ja, sie werden so gedruckt, obwohl sie durch die Zeilenhöhe von SE unterbrochen werden).
quelle
Rubin, 72
Dadurch werden Eingaben von Befehlszeilenargumenten und Ausgaben an stdout gesendet.
quelle
chars
ist etwas kürzer alssplit("")
.chars
gibt einen Enumerator anstelle eines Arrays. Ich bin in 1.9.3, also ist es eine 2.0 Sache?chars
ein Array zurückgegeben.p
stattputs
?GolfScript, 26 Bytes
Probieren Sie es online aus.
Erläuterung:
:s
speichert die Eingabezeichenfolges
für die spätere Verwendung in der Variablen ..&
extrahiert die eindeutigen Zeichen in der Eingabe, die der Rest des Codes in der{ }%
Schleife dann durchläuft.61
Drückt die Zahl 61 (ASCII-Code für ein Gleichheitszeichen) über das aktuelle Zeichen im Stapel, um als Ausgabebegrenzer zu fungieren.{2$=}s%
Nimmt den Strings
und ersetzt seine Zeichen durch eine 1, wenn sie dem aktuellen Zeichen entsprechen, über das iteriert wird, oder 0, wenn sie dies nicht tun. (Außerdem bleibt das aktuelle Zeichen für die Ausgabe auf dem Stapel.)1,/
Nimmt diese Folge von Einsen und Nullen und teilt sie in Nullen auf.$
sortiert die resultierenden Teilzeichenfolgen,-1=
extrahiert die letzte Teilzeichenfolge (die, da sie alle aus Wiederholungen desselben Zeichens bestehen, die längste ist) und,
gibt die Länge dieser Teilzeichenfolge zurück.n+
stringifiziert die Länge und fügt eine neue Zeile hinzu.Ps. Wenn die Gleichheitszeichen in der Ausgabe optional sind,
61
kann das für eine Gesamtlänge von 24 Bytes weggelassen (und2$
durch ersetzt1$
) werden :quelle
61
zuerst::s.&{61{2$=}s%1,/$-1=,n+}%
.CoffeeScript, 109 Bytes
Ich mag Regex.
Hier ist das kompilierte JavaScript, das Sie in der Konsole Ihres Browsers testen können
Dann kannst du anrufen
bekommen
quelle
aaaabaa
.Pyth , 24
2526(oder 29)Test kann hier gemacht werden: Link
Ausgaben im Format:
Erläuterung:
Python:
Für eine korrekte Ausgabe (a = 5) verwenden Sie:
29 Zeichen
quelle
k=''
sie an anderer Stelle definiert ist.C
126125119 BytesLaufen:
quelle
getchar()>0
durch~getchar()
wie in dieser Antwortless than zero
ist das vollkommen in Ordnung,== EOF
ist aber klarer.EOF
ist garantiert negativ und -1 wird verwendet, auch wennchar
es signiert ist; siehe hierMathematica ,
74,72,69Nicht sehr gut, aber die Saiten sind nicht die besten in Mathematica . Es wird aber besser. :-)
quelle
First@*MaximalBy[Length] /@ GroupBy[First]@Split@Characters[#] &
Zumindest ist es ziemlich einfach und lesbar.GroupBy
undGatherBy
?GroupBy
zurückgibtAssociation
. Ich habe die anderen Unterschiede noch nicht im Detail untersucht. reference.wolfram.com/language/ref/GroupBy.html Sie können es in der Cloud mit einem kostenlosen Konto ausprobieren (so spiele ich mit diesen).C # (LinQPad)
146
Dies ist Tsavinos Antwort, aber kürzer. Hier habe ich
Distinct()
stattGroupBy(c=>c)
. Auch die geschweiften Klammern aus demforeach-loop
sind weggelassen:136
Ich habe versucht , eine mit
lambda expression
anstelle der normalen Abfragesyntax aber da ich ein notwendigenCast<Match>
ersten, der Code wurde 1 Zeichen mehr ... Wie auch immer, da es in LINQPad ausgeführt werden kann, können SieDump()
stattConsole.WriteLine()
:Weitere Studien des Codes brachten mich zum Nachdenken über
Max()
. Diese Funktion akzeptiert auch aFunc
. Auf diese Weise könnte ich denSelect
Teil überspringen, wenn ich die Lambda-Epxression verwende:Somit ist das Endergebnis:
128
Aktualisieren:
Dank dem Tipp von Dan Puzey konnte ich weitere 6 Zeichen speichern:
Länge:
122
quelle
Dump()
kurzem auch die Methode kennengelernt, die jedes Mal mehr als 10 Zeichen spart :) Die geschweiften Klammern waren einfach und der Rest war ein bisschen knackig: DIEnumerable
Anzeigestil verwenden, können Sie weitere 8 Zeichen speichern, und zwar als Ihren Körper:i.Distinct().Select(c=>c+"="+Regex.Matches(i,"["+c+"]+").Cast<Match>().Max(m=>m.Value.Length)).Dump();
Python 3 (70)
Sogar Golf-Python kann sehr gut gelesen werden. Ich denke, dieser Code ist bis auf Variablen mit einem Buchstaben und einer einzeiligen while-Schleife vollständig idiomatisch.
Beispiel läuft:
quelle
Rubin, 58
Übernimmt die Eingabe von STDIN und gibt sie im Formular an STDOUT aus
{"a"=>5, "c"=>2, "b"=>3}
quelle
C # in LINQPad - 159 Bytes
Nun, zumindest habe ich T-SQL besiegt; P Ich werde niemanden besiegen, aber ich dachte, ich würde es trotzdem teilen.
Verwendung:
Vorschläge sind immer willkommen!
quelle
Powershell
807772Sie müssen es auf der Konsole ausführen ...
quelle
$x
ist überflüssig. Sie sind drei Byte kürzer, wenn Sie es nicht verwenden. Auchsort -u
genügt. Es ist selten erforderlich, die vollständigen Parameternamen zu buchstabieren. Dies schlägt jedoch für bestimmte Zeichen fehl, da die Regex-Zeichen nicht weiter verwendet werden. Je nachdem, wie »Der String kann ein beliebiges Zeichen enthalten« zu verstehen ist, könnte dies ein Problem sein.[char[]]"$args"|sort -u|%{"$_="+($args-split"[^$_]"|sort)[-1].length}
Laufen bringen, es scheint, dass die zweiten $ args leer sind ... - darkajax vor 17 Minuten$args
das Skript ist nicht mehr vorhanden).Perl - 65
7176ZeichenMein erster Code Golf!
Kopieren Sie für jede Antwort auf golf.pl und führen Sie Folgendes aus:
Meine kürzeste Lösung gibt jedes Zeichen so oft aus, wie es angezeigt wird, da dies durch die Regeln nicht verboten ist.
Meine nächstkürzere Lösung (85 bis
90Zeichen) druckt jedes Zeichen nur einmal aus:quelle
F # - 106
In FSI anrufen
gibt
Um es jedoch ohne die zusätzlichen Informationen zu drucken, rufen Sie es folgendermaßen auf:
was gibt
quelle
Javascript, 116 Bytes
Beispielausgabe:
quelle
T-SQL (2012)
189171Bearbeiten: entfernt,
ORDER BY
da Regeln eine Ausgabereihenfolge zulassen.Nimmt Eingaben von einer CHAR-Variablen entgegen
@a
und erstellt mithilfe eines rekursiven CTE eine Zeile für jedes Zeichen in der Zeichenfolge und ermittelt sequenzielle Vorkommen.Danach ist es eine einfache
SELECT
undGROUP BY
mit Rücksicht auf die Reihenfolge der Ausgabe.Probieren Sie es auf SQL Fiddle aus.
Zuweisen der Variablen:
Beispielausgabe:
quelle
str
Funktion anstelle vonltrim
. Sie können Ihrer Variablen auch einen Namen geben@
, um ein Zeichen zu speichern. Dadurch können Sie diei
Variable in der Datei verlieren . Ich denke, Sie können sich auf diese Weise einige Zeichen rasieren. Möglicherweise können Sie die Abfrage auch mit einer Fensterfunktion wie Summe über Zeilen vor oder Verzögerung neu schreiben. Ich habe noch nicht genau herausgefunden, wie es Ihnen geht.str
immer 10 Zeichen ausgegeben werden, aber das ist Golfen: PHaskell - 113
120BytesGetestet mit
quelle
.
Funktion (komponieren) können Sie vermeiden, dass ein Lambda erstellt wird, bei dem der Parameter erst nach dem Ende einer Kette$
verbundener Funktionen angezeigt wird . Ändern Sie dazu einfach alle$
s in.
s (Beispiel:(\i->reverse$sort$group i)
wird zureverse.sort.group
.JavaScript [83 Bytes]
Führen Sie diesen Code in der Browserkonsole aus.
Bei "
acbaabbbaaaaacc
" Eingaben sollte die Konsole "Object {a: 5, b: 3, c: 2}
" ausgeben .quelle
JavaScript - 91
BEARBEITEN: Meine erste Lösung befolgt die Regeln, gibt jedoch mehrere Male einzelne Zeichen wie
abab
=> aus,a=1,b=1,a=1,b=1
so dass ich dies herauskam ( 101 Zeichen), für diejenigen, die mit meiner ersten nicht zufrieden sind:quelle
Julia, 85 Jahre alt
quelle
Python3 -
111,126,115114111 BytesAusführbarer Code, der 1 Zeile liest (nur Kleinbuchstaben az verwenden)
Bearbeiten: Nicht benötigte Ausgabe auf Anfrage von @Therare ausschließen
Die Ausgabe sieht gut aus
quelle
for
oder entfernenif
.l=2
undo=1
für "helloworld"JavaScript -
141137125Ich mag Regex nicht :)
Lauf
Ausgänge
quelle
Javascript,
10910410098 BytesAnwendungsbeispiel:
Ausgänge:
quelle
PHP,
10410296Verwendung
gedruckt
quelle
Java 247
quelle
import java.util.*;
in Java?acbaabbbaaaaacc
Ausgängea=8; b=4; c=3
statta=5; b=3; c=2
.C 169
Durchläuft jedes druckbare Zeichen in der ASCII-Tabelle und zählt maximal die eingegebene Zeichenfolge.
quelle
JavaScript 116
quelle
Groovy - 80 Zeichen
Basierend auf dieser cleveren Antwort von xnor :
Ausgabe:
Ungolfed:
quelle