Supposons que nous ayons une chaîne et que nous voulons trouver la séquence répétée maximale de chaque lettre.
Par exemple, étant donné l'exemple d'entrée:
"acbaabbbaaaaacc"
La sortie pour l'entrée échantillon peut être:
a=5
c=2
b=3
Règles:
- Votre code peut être une fonction ou un programme - à vous de choisir
- L'entrée peut être par stdin, fichier ou paramètre de fonction
- La sortie ne doit contenir que des caractères qui apparaissent dans l'entrée
- La longueur maximale d'entrée est de 1024
- L'ordre de sortie n'a pas d'importance, mais il doit être imprimé sous la forme [char] = [séquence répétée maximale] [délimiteur]
- La chaîne peut contenir n'importe quel caractère
La compétition se termine le jeudi 3 à 23h59 UTC.
l:S_&{'=L{2$+_S\#)}g,(N}/
dans les systèmes de production! Et je maudirai ton nom.Réponses:
8086 code machine,
8280Contenu du
x.com
dossier:Il ne prend en charge que les répétitions de 99 caractères maximum.
Code source (servi d'entrée pour l'
debug.com
assembleur), avec commentaires!Voici quelques techniques de golf utilisées ici qui, je pense, étaient amusantes:
3d00
, où3d
est le code ascii pour=
. De cette façon, l'adresse d'entrée du tableau pour le caractèrex
est3d78
. Interprété comme une chaîne de 2 caractères, il l'estx=
.104
; il écrase le code d'initialisation qui n'est plus nécessaire. La séquence de fin de ligne0D 0A 24
est exécutée en tant que code inoffensif.aam
instructions ici ne fournissent pas de golf, bien que cela puisse ...11b
, qui contientC3
par chance le code machine nécessaire .la source
CJam,
272625 octetsEssayez-le en ligne.
Exemple
Comment ça marche
la source
J - 52 octets
Eh bien, encore une fois une approche simple.
Explication:
Exemple:
Si la sortie de forme libre est autorisée (comme dans beaucoup d'autres réponses), j'ai aussi une version de 45 octets . Ces cases représentent une liste de cases (oui, elles sont imprimées comme ça, bien que la hauteur de ligne de SE les casse).
la source
Rubis, 72
Cela prend l'entrée des arguments de ligne de commande et les sorties vers stdout.
la source
chars
est un peu plus court quesplit("")
.chars
donne un énumérateur plutôt qu'un tableau. Je suis en 1.9.3, est-ce donc une chose 2.0?chars
renvoie un tableau.p
place deputs
?GolfScript, 26 octets
Essayez-le en ligne.
Explication:
:s
enregistre la chaîne d'entrée dans la variables
pour une utilisation ultérieure..&
extrait les caractères uniques de l'entrée, que le reste du code de la{ }%
boucle réitère ensuite.61
pousse le nombre 61 (code ASCII pour un signe égal) au-dessus du caractère actuel sur la pile, pour agir comme un délimiteur de sortie.{2$=}s%
prend la chaînes
et remplace ses caractères par un 1 s'ils sont égaux au caractère en cours d'itération, ou 0 s'ils ne le sont pas. (Il laisse également le caractère actuel sur la pile pour la sortie.)1,/
prend cette chaîne de uns et de zéros et la divise en zéros.$
trie les sous-chaînes résultantes,-1=
extrait la dernière sous-chaîne (qui, puisqu'elles sont toutes constituées de répétitions du même caractère, est la plus longue), et,
renvoie la longueur de cette sous-chaîne.n+
stringifie la longueur et y ajoute une nouvelle ligne.Ps. Si les signes égaux dans la sortie sont facultatifs, ils
61
peuvent être omis (et2$
remplacés par1$
), pour une longueur totale de 24 octets :la source
61
premier::s.&{61{2$=}s%1,/$-1=,n+}%
.CoffeeScript, 109 octets
J'aime l'expression régulière.
Voici le code JavaScript compilé que vous pouvez essayer dans la console de votre navigateur
Ensuite, vous pouvez appeler
obtenir
la source
aaaabaa
.Pyth , 24
2526(ou 29)Le test peut être fait ici: lien
Sorties au format:
Explication:
Python:
Pour une sortie correcte (a = 5), utilisez:
29 caractères
la source
k=''
est définie ailleurs.C,
126125119 octetsFonctionnement:
la source
getchar()>0
par~getchar()
comme dans cette réponseless than zero
c'est parfaitement OK, mais== EOF
c'est plus clair.EOF
est garanti négatif et -1 est utilisé même s'ilchar
est signé; voir iciMathematica ,
747269Pas très bon mais les cordes ne sont pas le meilleur domaine de Mathematica . De mieux en mieux. :-)
la source
First@*MaximalBy[Length] /@ GroupBy[First]@Split@Characters[#] &
au moins c'est assez simple et lisible.GroupBy
etGatherBy
?GroupBy
renvoie unAssociation
. Je n'ai pas encore étudié les autres différences en détail. reference.wolfram.com/language/ref/GroupBy.html Vous pouvez l'essayer dans le cloud avec un compte gratuit (c'est comme ça que je joue avec ces derniers).C # (LinQPad)
146
C'est la réponse de tsavino mais plus courte. Ici, j'ai utilisé
Distinct()
au lieu deGroupBy(c=>c)
. Les accolades de laforeach-loop
sont également laissées de côté:136
J'ai essayé d'utiliser une
lambda expression
au lieu de la syntaxe de requête normale mais comme j'avais besoin d'uneCast<Match>
première, le code est devenu 1 caractère plus long ... Quoi qu'il en soit, puisqu'il peut être exécuté dans LinQPad, vous pouvez utiliser à laDump()
place deConsole.WriteLine()
:Une étude plus approfondie du code m'a fait penser au
Max()
. Cette fonction accepte également aFunc
. De cette façon, je pourrais ignorer laSelect
partie lors de l'utilisation de l'expression lambda:Ainsi, résultat final:
128
Mise à jour:
Grâce au conseil de Dan Puzey, j'ai pu enregistrer 6 autres caractères:
Longueur:
122
la source
Dump()
méthode, vous permet d'économiser plus de 10 caractères à chaque fois :) Les accolades étaient faciles et le reste était un peu de casse-tête: DIEnumerable
style d'affichage de LinqPad, vous pouvez enregistrer 8 autres caractères, avec ceci comme corps:i.Distinct().Select(c=>c+"="+Regex.Matches(i,"["+c+"]+").Cast<Match>().Max(m=>m.Value.Length)).Dump();
Python 3 (70)
Même le golf Python peut être très lisible. Je pense que ce code est entièrement idiomatique, sauf pour les variables à une seule lettre et une boucle while d'une ligne.
L'exemple s'exécute:
la source
Rubis, 58
Prend l'entrée de STDIN, la renvoie à STDOUT sous la forme
{"a"=>5, "c"=>2, "b"=>3}
la source
C # dans LINQPad - 159 octets
Eh bien, au moins j'ai battu T-SQL; P ne battra personne d'autre, mais j'ai pensé que je le partagerais de toute façon.
Usage:
Les suggestions sont toujours les bienvenues!
la source
Powershell
807772Vous devez l'exécuter sur la console ...
la source
$x
est superflu. Vous êtes trois octets plus court sans l'utiliser.sort -u
Suffit également . Il est rarement nécessaire de préciser les noms de paramètres complets. Cependant, cela échouera pour certains personnages en raison de l'utilisation non échappée dans l'expression régulière. Selon la façon dont »la chaîne peut contenir n'importe quel caractère« doit être comprise, cela pourrait être un problème.[char[]]"$args"|sort -u|%{"$_="+($args-split"[^$_]"|sort)[-1].length}
, il semble que le deuxième $ args soit vide ... - darkajax il y a 17 minutes$args
il n'y a plus celui du script).Perl - 65
7176caractèresMon premier golf de code!
Pour chaque réponse, copiez sur golf.pl et exécutez comme:
Ma solution la plus courte imprime chaque caractère autant de fois qu'il apparaît, car cela n'est pas interdit par les règles.
Ma solution la plus courte (85
90caractères) n'imprime chaque caractère qu'une seule fois:la source
F # - 106
Dans FSI, appeler
donne
Cependant, pour l'imprimer sans les informations supplémentaires, appelez-le comme ceci:
qui donne
la source
Javascript, 116 octets
Exemple de sortie:
la source
T-SQL (2012)
189171Modifier: supprimé
ORDER BY
car les règles autorisent tout ordre de sortie.Prend l'entrée d'une variable CHAR
@a
et utilise un CTE récursif pour créer une ligne pour chaque caractère de la chaîne et détermine les occurrences séquentielles.Après cela, c'est simple
SELECT
etGROUP BY
en tenant compte de l'ordre de sortie.Essayez-le sur SQL Fiddle.
Affectation de la variable:
Exemple de sortie:
la source
str
fonction, au lieu deltrim
. Vous pouvez également nommer votre variable@
pour enregistrer un caractère. Cela vous permet de perdre lai
variable dans le rcte. Je pense que vous pouvez raser pas mal de caractères de cette façon. Vous pouvez également être en mesure de réécrire la requête en utilisant une fonction de fenêtrage comme sum sur les lignes précédant ou lag. Je ne sais pas encore comment vous déranger.str
sort toujours 10 caractères, mais c'est du golf: PHaskell - 113
120octetsTesté avec
la source
.
(composer) pour éviter de créer un lambda où le paramètre n'apparaît qu'après la fin d'une chaîne de$
fonctions connectées. Pour ce faire, changez simplement tous les$
s en.
s (exemple:(\i->reverse$sort$group i)
se transforme enreverse.sort.group
.JavaScript [83 octets]
Exécutez ce code dans la console du navigateur.
Pour l'entrée "
acbaabbbaaaaacc
", la console doit afficher "Object {a: 5, b: 3, c: 2}
".la source
JavaScript - 91
EDIT: Ma première solution obéit aux règles, mais elle imprime plusieurs fois des occurrences de caractère unique comme
abab
=>a=1,b=1,a=1,b=1
alors je suis sorti avec ceci ( 101 caractères), pour ceux qui ne sont pas satisfaits de ma première:la source
Julia, 85 ans
la source
Python3 -
111,126,115114111 octetsCode exécutable qui lira 1 ligne (utilisez uniquement des lettres minuscules az)
Edit: Exclusion de sortie inutile sur demande de @Therare
La sortie a l'air sympa
la source
for
ouif
.l=2
eto=1
pour "helloworld"JavaScript -
141137125Je n'aime pas regex :)
Courir
les sorties
la source
Javascript,
10910410098 octetsExemple d'utilisation:
les sorties:
la source
PHP,
10410296usage
imprimé
la source
Java 247
la source
import java.util.*;
en Java?acbaabbbaaaaacc
sortiesa=8; b=4; c=3
au lieu dea=5; b=3; c=2
.C 169
Itère chaque caractère imprimable dans la table ASCII et compte le maximum à partir de la chaîne d'entrée.
la source
JavaScript 116
la source
Groovy - 80 caractères
Sur la base de cette réponse intelligente de xnor :
Sortie:
Non golfé:
la source