Supongamos que tenemos una cadena y queremos encontrar la secuencia máxima repetida de cada letra.
Por ejemplo, dada la entrada de muestra:
"acbaabbbaaaaacc"
La salida para la entrada de muestra puede ser:
a=5
c=2
b=3
Reglas:
- Su código puede ser una función o un programa, para que usted elija
- La entrada puede ser por stdin, archivo o parámetro de función
- La salida debe contener solo caracteres que aparecen en la entrada
- La longitud máxima de entrada es 1024
- El orden de salida no importa, pero debe imprimirse en la forma [char] = [secuencia repetida máxima] [delimitador]
- La cadena puede contener cualquier caracter
La competencia termina el jueves 3 a las 23:59 UTC.
l:S_&{'=L{2$+_S\#)}g,(N}/
en los sistemas de producción! Y maldeciré tu nombre.Respuestas:
8086 código máquina,
8280Contenido del
x.com
archivo:Solo admite repeticiones de hasta 99 caracteres.
Código fuente (servido como entrada para el
debug.com
ensamblador), ¡con comentarios!Aquí hay algunas técnicas de golf utilizadas que creo que fueron divertidas:
3d00
, donde3d
está el código ascii=
. De esta manera, la dirección para la entrada de la matriz para el carácterx
es3d78
. Cuando se interpreta como una cadena de 2 caracteres, esx=
.104
; sobrescribe el código de inicialización que ya no es necesario. La secuencia de fin de línea0D 0A 24
se ejecuta como código inofensivo.aam
instrucción aquí no proporciona ningún juego de golf, aunque podría ...11b
, que contiene el código de máquina necesarioC3
por suerte.fuente
CJam,
272625 bytesPruébalo en línea.
Ejemplo
Cómo funciona
fuente
J - 52 bytes
Bueno, un enfoque simple de nuevo.
Explicación:
Ejemplo:
Si se permite la salida de forma libre (como en muchas otras respuestas), también tengo una versión de 45 bytes . Estos cuadros representan una lista de cuadros (sí, se imprimen así, aunque la altura de línea de SE los separa).
fuente
Rubí, 72
Esto toma la entrada de los argumentos de la línea de comandos y las salidas a stdout.
fuente
chars
es un poco más corto quesplit("")
.chars
da un enumerador en lugar de una matriz. Estoy en 1.9.3, entonces, ¿es una cosa 2.0?chars
devuelve una matriz.p
lugar deputs
?GolfScript, 26 bytes
Pruébalo en línea.
Explicación:
:s
guarda la cadena de entrada en la variables
para su uso posterior..&
extrae los caracteres únicos en la entrada, que el resto del código en el{ }%
bucle repite.61
empuja el número 61 (código ASCII para un signo igual) en la parte superior del carácter actual en la pila, para actuar como un delimitador de salida.{2$=}s%
toma la cadenas
y reemplaza sus caracteres con un 1 si son iguales al carácter actual que se está iterando, o 0 si no lo hacen. (También deja el carácter actual en la pila para la salida).1,/
toma esta cadena de unos y ceros, y la divide en ceros.$
ordena las subcadenas resultantes,-1=
extrae la última subcadena (que, dado que todas consisten en repeticiones del mismo carácter, es la más larga) y,
devuelve la longitud de esta subcadena.n+
stringifica la longitud y le agrega una nueva línea.PD. Si los signos de igual en la salida son opcionales,
61
se pueden omitir (y2$
reemplazar por1$
), para una longitud total de 24 bytes :fuente
61
primera::s.&{61{2$=}s%1,/$-1=,n+}%
.CoffeeScript, 109 bytes
Me gusta la expresión regular.
Aquí está el JavaScript compilado que puede probar en la consola de su navegador
Entonces puedes llamar
Llegar
fuente
aaaabaa
.Pyth , 24
2526(o 29)La prueba se puede hacer aquí: enlace
Salidas en el formato:
Explicación:
Pitón:
Para una salida adecuada (a = 5), use:
29 caracteres
fuente
k=''
se define en otro lugar.C,
126125119 bytesCorriendo:
fuente
getchar()>0
por~getchar()
como en esta respuestaless than zero
está perfectamente bien, pero== EOF
es más claro.EOF
se garantiza que es negativo y -1 se usa incluso sichar
está firmado; ver aquíMathematica ,
747269No es muy bueno, pero las cuerdas no son la mejor área de Mathematica . Sin embargo, cada vez mejor. :-)
fuente
First@*MaximalBy[Length] /@ GroupBy[First]@Split@Characters[#] &
al menos es bastante sencillo y legible.GroupBy
yGatherBy
?GroupBy
devuelve unAssociation
. Todavía no he estudiado las otras diferencias en detalle. reference.wolfram.com/language/ref/GroupBy.html Puedes probarlo en la nube con una cuenta gratuita (así es como estoy jugando con estos).C # (LinQPad)
146
Esta es la respuesta de tsavino pero más corta. Aquí, usé en
Distinct()
lugar deGroupBy(c=>c)
. También se omiten las llaves delforeach-loop
:136
Intenté usar una
lambda expression
sintaxis de consulta en lugar de la normal, pero como necesitaba unaCast<Match>
primera, el código se convirtió en 1 carácter más largo ... De todos modos, ya que se puede ejecutar en LinQPad, puede usar enDump()
lugar deConsole.WriteLine()
:Un estudio posterior del código me hizo pensar en el
Max()
. Esta función también acepta aFunc
. De esta manera, podría omitir laSelect
parte al usar la lambda epxression:Por lo tanto, resultado final:
128
Actualizar:
Gracias al consejo de Dan Puzey, pude guardar otros 6 caracteres:
Longitud:
122
fuente
Dump()
método recientemente, te ahorra más de 10 caracteres cada vez :) Las llaves fueron fáciles y el resto fue un poco de braincracking: DIEnumerable
estilo de visualización de LinqPad, puede guardar otros 8 caracteres, con esto como su cuerpo:i.Distinct().Select(c=>c+"="+Regex.Matches(i,"["+c+"]+").Cast<Match>().Max(m=>m.Value.Length)).Dump();
Pitón 3 (70)
Incluso Python golfizado puede ser muy legible. Creo que este código es completamente idiomático, excepto por las variables de una letra y un bucle while de una línea.
Ejecuciones de ejemplo:
fuente
Rubí, 58
Toma información de STDIN, la envía a STDOUT en el formulario
{"a"=>5, "c"=>2, "b"=>3}
fuente
C # en LINQPad - 159 bytes
Bueno, al menos vencí a T-SQL; P no vencerá a nadie más, pero pensé en compartirlo de todos modos.
Uso:
Las sugerencias son siempre bienvenidas!
fuente
Powershell
807772Necesitas ejecutarlo en la consola ...
fuente
$x
es superfluo Eres tres bytes más corto sin usarlo. tambiénsort -u
suficiente Rara vez es necesario deletrear los nombres completos de los parámetros. Sin embargo, esto fallará para ciertos caracteres debido al uso sin escape en la expresión regular. Según cómo debe entenderse »La cadena puede contener cualquier carácter«, esto podría ser un problema.[char[]]"$args"|sort -u|%{"$_="+($args-split"[^$_]"|sort)[-1].length}
, parece que el segundo $ args se vacía ... - darkajax hace 17 minutos$args
ya no existe el del script).Perl - 65
7176caracteresMi primer código de golf!
Para cada respuesta, copie a golf.pl y ejecútelo como:
Mi solución más corta imprime cada personaje tantas veces como parece, ya que las reglas no lo prohíben.
Mi siguiente solución más corta (85
90caracteres) solo imprime cada carácter una vez:fuente
F # - 106
En FSI, llamando
da
Sin embargo, para imprimirlo sin la información adicional, llámelo así:
lo que da
fuente
Javascript, 116 bytes
Salida de muestra:
fuente
T-SQL (2012)
189171Editar: eliminado
ORDER BY
porque las reglas permiten cualquier orden de salida.Toma datos de una variable CHAR
@a
, y usa un CTE recursivo para crear una fila para cada carácter en la cadena y descubre sucesos secuenciales.Después de eso, es un simple
SELECT
yGROUP BY
con consideración para el orden de la salida.Pruébelo en SQL Fiddle.
Asignando la variable:
Salida de muestra:
fuente
str
función, en lugar deltrim
. También puede nombrar su variable@
para guardar un carácter. Esto le permite perder lai
variable en el rcte. Creo que puedes afeitarte bastantes caracteres de esa manera. También podría reescribir la consulta utilizando una función de ventana como la suma sobre las filas anteriores o lag. No he formado aún cómo te importa.str
siempre genera 10 caracteres, pero esto es golf: PHaskell - 113
120bytesProbado con
fuente
.
(componer) para evitar crear una lambda donde el parámetro solo aparece después del final de una cadena de$
funciones conectadas. Para hacer esto, simplemente cambie todas las$
s a.
s (ejemplo: se(\i->reverse$sort$group i)
convierte enreverse.sort.group
.JavaScript [83 bytes]
Ejecute este código en la consola del navegador.
Para la entrada "
acbaabbbaaaaacc
" la consola debería salir "Object {a: 5, b: 3, c: 2}
".fuente
JavaScript - 91
EDITAR: Mi primera solución obedece las reglas, pero imprime varias veces ocurrencias de caracteres individuales como
abab
=>,a=1,b=1,a=1,b=1
así que salí con esto ( 101 caracteres), para aquellos que no están satisfechos con el primero:fuente
Julia, 85
fuente
Python3 -
111,126,115114111 bytesCódigo ejecutable que leerá 1 línea (solo use letras minúsculas az)
Editar: salida innecesaria excluida a petición de @Therare
La salida se ve bien
fuente
for
oif
.l=2
yo=1
para "helloworld"JavaScript -
141137125No me gusta la expresión regular :)
correr
salidas
fuente
Javascript,
10910410098 bytesEjemplo de uso:
salidas:
fuente
PHP,
10410296uso
impreso
fuente
Java 247
fuente
import java.util.*;
Funciona en Java?acbaabbbaaaaacc
salidas ena=8; b=4; c=3
lugar dea=5; b=3; c=2
.C 169
Itera cada carácter imprimible en la tabla ASCII y cuenta el máximo de la cadena de entrada.
fuente
JavaScript 116
fuente
Groovy - 80 caracteres
Basado en esta inteligente respuesta de xnor :
Salida:
Sin golf:
fuente