Dado un número entero n > 0, genera la longitud de la secuencia contigua más larga de 0o 1en su representación binaria.
Ejemplos
6está escrito110en binario; la secuencia más larga es11, así que deberíamos volver216→10000→4893→1101111101→51337371→101000110100000011011→61→1→19965546→100110000000111111101010→7
code-golf
sequence
binary
subsequence
Arnaud
fuente
fuente

Respuestas:
Python 2 ,
4645 bytesPruébalo en línea!
Cómo funciona
Al XORing n y n / 2 (dividiendo por 2 esencialmente corta el último bit), obtenemos un nuevo entero m cuyos bits sin establecer indican bits adyacentes coincidentes en n .
Por ejemplo, si n = 1337371 , tenemos lo siguiente.
Esto reduce la tarea de encontrar la ejecución más larga de ceros. Dado que la representación binaria de un entero positivo siempre comienza con un 1 , trataremos de encontrar la cadena de dígitos 10 * más larga que aparece en la representación binaria de m . Esto se puede hacer de forma recursiva.
Inicialice k como 1 . Cada vez que se ejecuta f , primero probamos si la representación decimal de k aparece en la representación binaria de m . Si lo hace, multiplicamos k por 10 y llamamos a f nuevamente. Si no lo hace, el código a la derecha de
andno se ejecuta y devolvemos False .Para hacer esto, primero calculamos
bin(k)[3:]. En nuestro ejemplo,bin(k)devuelve'0b111100101110000010110', y0b1al principio se elimina con[3:].Ahora,
-~antes de que la llamada recursiva incremente False / 0 una vez por cada vez que f se llama recursivamente. Una vez que 10 {j} ( 1 seguido de j repeticiones de 0 ) no aparece en la representación binaria de k , la ejecución más larga de ceros en k tiene longitud j - 1 . Como j - 1 ceros consecutivos en k indican j que coinciden con los bits adyacentes en n , el resultado deseado es j , que es lo que obtenemos al incrementar Falso / 0un total de j veces.fuente
Python 2, 46 bytes
Pruébalo en línea
Extrae dígitos binarios de forma
ninversa al tomar repetidamenten/2yn%2. Realiza un seguimiento de la longitud de la ejecución actualrde dígitos iguales restableciéndolo a 0 si los dos últimos dígitos son desiguales, y luego suma 1.La expresión
~-n/2%2es un indicador de si los dos últimos dígitos son iguales,nes decir, es 0 o 3 módulo 4. Comprobar los dos últimos dígitos juntos resultó más corto que recordar el dígito anterior.fuente
05AB1E , 6 bytes
Pruébalo en línea!
Explicación
fuente
.¡, puedo dejar de obligarme a tratar de usarlo.Mathematica, 38 bytes
o
fuente
Python, 53 bytes
Función lambda anónima.
fuente
Jalea , 6 bytes
Pruébalo en línea!
Cómo funciona
fuente
Ruby,
4140 bytesEncuentre la secuencia más larga de '1' en bo su inversa.
Gracias a manatwork por guardar 1 byte.
fuente
%b's.JavaScript (ES6), 54 bytes
Una solución recursiva con mucha manipulación de bits.
nalmacena la entrada,ralmacena la duración de la ejecución actual,lalmacena la duración de la ejecución más larga ydalmacena el dígito anterior.Fragmento de prueba
fuente
f=(x,b,n,m)=>x?f(x>>1,x&1,n=x&1^b||-~n,m>n?m:n):mRuby,
514443 bytesSolución funcional.
@manatwork está hecho de magia
fuente
0s consecutivos ?->s{s.to_s(2).scan(/0+|1+/).map(&:size).max}.Python 2, 57 bytes
Una solución recursiva. Puede haber una forma más corta para la magia de bits.
fuente
Perl, 43 bytes
Contando el shebang como uno, la entrada se toma de stdin.
Pruébalo en línea!
fuente
#!perlcuenta como cero, no#!perl -p.-pcosto 1, suponiendo que su línea de comando Perl tendría un argumento de todos modos (por ejemplo,-eo-M5.010), por lo que puede ingresar unppoco después de uno de los guiones. El#!perles gratis (aunque innecesario).Pipa , 16 bytes
Parece que debe haber una forma más corta de obtener las corridas del mismo dígito ...
Toma entrada como argumento de línea de comando. Pruébalo en línea!
Explicación
fuente
Perl 6 , 36 bytes
Explicación:
Pruébalo en línea .
fuente
Haskell, 79 caracteres
dónde
O en versión sin golf:
Explicación:
intToBinconvierte un int en una lista de dígitos binarios (lsb primero).groupagrupa secuencias contiguas, de modo que se[1, 1, 0, 0, 0, 1]convierte en[[1, 1],[0, 0, 0],[1]].maximum . map lengthcalcula para cada lista interna su longitud y devuelve la longitud de la más larga.Editar: Gracias a @xnor y @Laikoni por guardar bytes
fuente
groupno está en Prelude de forma predeterminada, debe hacerimport Data.Listpara usarlo.let:i n|(q,r)<-n`quotRem`2=r:i q. Vea nuestros consejos de golf Haskell .quotRempuede serdivMod. Creo que puedes usarloi 0=[]como el caso base.divymoddirecta es aún más corto:i n=mod n 2:i(div n 2).Pyth, 7 bytes
Ejecute la codificación de longitud en la cadena binaria, luego ordénela de modo que las ejecuciones más largas sean las últimas, luego tome el primer elemento (la longitud) del último elemento (la ejecución más larga) de la lista.
En pseudocódigo:
fuente
J , 21 bytes
Pruébalo en línea!
Explicación
fuente
MATLAB 71 bytes
Esto convierte la variable entera 'a' en una matriz binaria int8 y luego cuenta el número de veces que el resultado debe diferenciarse hasta que no haya cero en el resultado.
Soy nuevo aquí. ¿Este tipo de entrada y una línea están permitidas por las reglas PCG?
fuente
acona=input('');. Además, algunos consejos de golf: en~alugar dea==0. ¿Realmente necesitasint8)?Octava , 31 bytes
Pruébalo en línea!
Explicación
Esta es una traducción de mi respuesta MATL. Mi plan inicial fue un enfoque diferente, a saber
@(n)max(diff(find(diff([0 +dec2bin(n) 0])))). Pero resulta que Octave tiene unarunlengthfunción (que acabo de descubrir). Por defecto, solo genera el conjunto de longitudes de ejecución, por lo que el resultado deseado es elmaxde ese conjunto. La salida dedec2bin, que es una matriz de caracteres (cadena) que contiene'0'y'1', debe convertirse a una matriz numérica usando+, porquerunlengthespera una entrada numérica.fuente
Utilidades Bash / Unix,
666542 bytesGracias a @DigitalTrauma por mejoras significativas (¡23 bytes!).
Pruébalo en línea!
fuente
Bash (+ coreutils, + GNU grep),
33, 32 bytesEDICIONES:
Golfed
Explicado
¡Pruébelo en línea!
fuente
Brachylog , 9 bytes
Pruébalo en línea!
Explicación
fuente
C #, 106 bytes
Versión formateada:
Y un enfoque alternativo para acceder a la cadena por índice a 118 bytes, con espacios en blanco eliminados:
fuente
Javascript, 66 bytes
Gracias a manatwork por el código.
Explicación
Convertir número a cadena binaria.
Dividir cada carácter diferente (0 o 1) (esta expresión regular captura espacios vacíos pero pueden ignorarse)
Para cada elemento de la matriz, obtenga su longitud y colóquela en la matriz devuelta.
Convertir matriz en lista de argumentos ([1,2,3] -> 1,2,3)
Obtenga el mayor número de argumentos.
fuente
x=>x.toString(2).split(/(0+|1+)/g).map(y=>y.length).sort().pop()x=>Math.max(...x.toString(2).split(/(0+|1+)/g).map(y=>y.length))sort((a,b)=>b-a). Por defecto, la función de clasificación se ubica10entre1y2.Maravilla , 27 bytes
Uso:
Convierte a binario, coincide con cada secuencia de 0 y 1, obtiene la duración de cada coincidencia y obtiene el máximo.
fuente
Lote, 102 bytes
Respuesta del puerto de @ edc65.
%2..%4estará vacío en la primera llamada, así que tengo que escribir las expresiones de tal manera que aún funcionen. El caso más general es el%3que tuve que escribir(%3+0).%2es más fácil, ya que solo puede ser0o1, que son iguales en octal, por lo que0%2funciona aquí.%4resultó ser aún más fácil, ya que solo necesito restarlo.(%4-r>>5)se utiliza para compararlconrtan lotes deset/ano tiene un operador de comparación.fuente
Dyalog APL , 22 bytes
Tren de funciones anónimo
⌈/∘(... El máximo de los resultados del siguiente tren de funciones anónimo ...≢¨el recuento de cada⊢⊂⍨partición del argumento, donde la partición está determinada por los que están en1,uno antepuesto a2≠/la desigual desigual de⊢el argumento)aplicado a2⊥⍣¯1from-base-2 aplicado negativo una vez (es decir, to-base-2, una vez) a⊢el argumentoTryAPL en línea!
fuente
Japt, 15 bytes
¡Pruébalo en línea! o Verificar todos los casos de prueba a la vez .
Cómo funciona
fuente
R,
4534 bytesSe corrigió un malentendido tonto gracias a @rturnbull y @plannapus.
fuente
0o de1, no solo0, ¿verdad?PowerShell ,
787473 bytesPruébalo en línea!
Ugh esos métodos .Net.
Esto solo usa una expresión regular para encontrar (y hacer coincidir) secuencias contiguas de unos y ceros, luego toma la
Lengthpropiedad (con un nuevo patrón que encontré que usa un conjunto de parámetros poco conocido deForEach-Object, para guardar 1 byte) de los objetos de coincidencia resultantes, los ordena y genera el último (el más grande).fuente
J, 27 bytes
Un enfoque ligeramente diferente (y desafortunadamente más largo) para la respuesta de millas .
Uso:
Explicación
fuente