Dado un patrón (formato de cadena o matriz) de Bits:
[0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1]
La tarea es reemplazar cualquier número de 1-Bits consecutivos con una secuencia numérica ascendente que comience en 1.
Entrada
- Patrón (se puede recibir como una cadena o matriz) Ejemplo:
- Cuerda:
1001011010110101001 - Formación:
[1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1]
- Cuerda:
Salida
- Secuencia numérica ascendente (se puede devolver como una cadena o matriz) Ejemplo:
- Cuerda:
1 0 0 1 0 1 2 0 1 0 1 2 0 1 0 1 0 0 1 - Formación:
[1, 0, 0, 1, 0, 1, 2, 0, 1, 0, 1, 2, 0, 1, 0, 1, 0, 0, 1]
- Cuerda:
Reglas
- (solo se aplican para cadenas) La entrada no contendrá espacios entre
1y0 - Asumir entrada
length > 0 - (solo se aplican para cadenas) La salida está separada por espacio (use cualquier otro separador si lo necesita, siempre que no sea un número o una letra del alfabeto)
Ejemplo:
Given [0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1]
Output [0,1,2,3,0,1,2,0,0,0,1,2,3,4,5,6]
--------------------------------------------------------------------------
Given 0110101111101011011111101011111111
Output 0 1 2 0 1 0 1 2 3 4 5 0 1 0 1 2 0 1 2 3 4 5 6 0 1 0 1 2 3 4 5 6 7 8
---------------------------------------------------------------------------
Given 11111111111101
Output 1 2 3 4 5 6 7 8 9 10 11 12 0 1
Criterios ganadores: Codegolf

03 B3 20 AC 01 B6 02 DC) o 9 bytes (utf-8:)CE B3 E2 82 AC C6 B6 CB 9Co 10 bytes (por ejemplo, UTF-16, incluida la lista de materiales de 2 bytes) en cualquier codificación que no sea de juguete? (Sí, uno podría construir una codificación de 8 bits de juguete similar a las codificaciones iso-8859 con estos 4 símbolos representados como 1 byte, pero eso parece una trampa.)γ€ƶ˜se representaría como04 80 8F 98. La página de códigos existe principalmente para facilitar la escritura de códigos. Para ejecutar este archivo de 4 bytes, deberá ejecutar el intérprete con la--osabiebandera.Haskell , 15 bytes
Pruébalo en línea!
Explicación / Ungolfed
scanl1itera desde la izquierda sobre una lista utilizando una función que toma el último resultado y el elemento actual que genera una nueva lista con los resultados, dejando listas vacías y singletons "sin modificar".(*).succes el equivalente de\x y-> (x+1)*yUsar esa función junto con
scanl1solo funciona porque las secuencias crecientes ( 1, 2, 3, ... ) comienzan con 1 y no tienen ningún elemento precedente (en cuyo caso es el primer elemento en la lista que no se "modificará") o tienen un 0 inicial .fuente
Python 2 , 36 bytes
Pruébalo en línea!
fuente
Casco ,
5 43 bytesPruébalo en línea!
Explicación
Editar historial
-1 byte usando
scanl1overzipWith-1 byte al portar la solución de Dennis
fuente
APL (Dyalog Unicode) , 5 bytes
Pruébalo en línea!
Cómo funciona
fuente
⊥⍨truco.JavaScript (ES6), 22 bytes
Toma la entrada como una matriz.
Pruébalo en línea!
a=>a.map(n=>a=n*-~a)Desafortunadamente, el más corto (20 bytes) fallará[1]debido a la coerción de matrices singleton al entero que están sosteniendo.fuente
J , 4 bytes
Un puerto de la solución APL de Bubbler
Pruébalo en línea!
J , 8 bytes
¿Cómo?
Es simplemente la distancia al precedente
0Pruébalo en línea!
fuente
Python 2 ,
3938 bytes-1 byte gracias a Erik the Outgolfer
Pruébalo en línea!
fuente
,.,ya no estás en el código, pero siempre estarás en mi corazónJalea , 4 bytes
Pruébalo en línea!
fuente
K (oK) ,
118 bytesSolución:
Pruébalo en línea!
Explicación:
Iterar sobre la lista. Incremente el acumulador, multiplique por el elemento actual (que restablece el acumulador si el elemento es 0)
fuente
Jalea , 4 bytes
Pruébalo en línea!
Cómo funciona
fuente
R ,
4631 bytesPruébalo en línea!
sequence, que "existe principalmente en reverencia a la historia muy temprana de R" , es bastante útil aquí.fuente
RAD, 8 bytes
Pruébalo en línea!
¿Cómo?
(⊢×1+⊣), si el argumento correcto es0, regresar0, de lo contrario, incremente el argumento izquierdo⍂, Escaneo LTR (en(A f B) f Clugar deA f (B f C)), aplique esto en toda la matrizfuente
Japt,
765 bytesIntentalo
Explicación
fuente
Java 8,
5548 bytesModifica la matriz de entrada en lugar de devolver una nueva para guardar bytes.
-7 bytes gracias a @TimSeguine .
Pruébalo en línea.
Explicación:
fuente
a->{int p=0,i=0;for(int b:a)a[i++]=b<1?p=0:++p;}a->{int i=0;for(int v:a)a[i]+=v*i++<1?0:a[i-2];}TIS , 68 + 33 = 101 bytes
Código (68 bytes):
Diseño (33 bytes):
Pruébalo en línea!
Explicación:
fuente
Gaia , 5 bytes
Pruébalo en línea!
Explicación
Ugh, pensé que las fuentes del código SE eran monoespaciales ...
fuente
C (gcc) ,
454438 bytesPruébalo en línea!
¡Ahorre un byte gracias a Toby Speight!
Ahorre 6 bytes usando * = y una condición while más inteligente.
fuente
*(a-1)→a[-1]Perl 6 ,
29 2418 bytes-6 bytes gracias a Sean!
Pruébalo en línea!
La función interna podría por
($+=1)*=*, pero la variable anónima persistiría en las llamadas de función. Obtenemos esto envolviéndolo en un bloque de código explícito.Explicación:
fuente
*.map(($+=1)*=*). Esta solución tiene la condición de que la variable de estado$persista entre las llamadas a la función, por lo que si el elemento final pasado a una llamada y el primer elemento pasado a la siguiente llamada son ambos distintos de cero, entonces el conteo comenzará con el número incorrecto.*.map:{...}.Jalea , 5 bytes
Pruébalo en línea!
fuente
Haskell , 19 bytes
Pruébalo en línea!
Explicación: El código es equivalente a
scanl1(\b a->(b+a)*a), dondebestá el bit actual yaes el acumulador.scanl1toma una lista, crea una instancia del primer elemento de la lista como acumulador, se pliega sobre la lista y recopila los valores intermedios en una nueva lista.Editar: BMO me ganó por unos segundos y 4 bytes .
fuente
Pyth , 6 bytes
Pruébalo aquí!
Cómo funciona
fuente
Quería obtener una respuesta al usar expresiones regulares. Probablemente hay una solución más fácil que dejo como ejercicio para el lector.
PowerShell Core , 86 bytes
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) , 16 bytes
Pruébalo en línea!
fuente
QBasic, 60 bytes
Toma la entrada como una cadena; da la salida como números separados por nuevas líneas.
Explicación
Leemos la cadena
s$y lazoide1la altura de su longitud.MID$(s$,i)obtiene la subcadena desde el carácteri(1 indexado) hasta el final de la cadena. Si esto comienza con a1, será lexicográficamente>=la cadena"1"; si comienza con a0, no lo será. Así sebobtiene0si el carácter en el índiceies0, o-1si el carácter es1.A continuación, actualizamos el valor actual
v. Si solo leemos un0, queremosvllegar a ser0; de lo contrario, queremos aumentarven uno. En otras palabrasv = (-b) * (v+1),; La simplificación de las matemáticas da la expresión más corta que se ve en el código. Finalmente, imprimimosvy repetimos.fuente
Brain-Flak , 60 bytes
Pruébalo en línea!
Explicación:
fuente
Retina , 14 bytes
Pruébalo en línea!
fuente
C (gcc),
575251 bytesLa respuesta JavaScript del puerto de Arnauld modifica la matriz en el lugar. Pruébelo en línea aquí .
fuente
f(a,l,c)int*a;{for(c=0;l--;)c=*a++*=c+1;}Shakespeare, 365 bytes
pruébalo aquí
versión menos golfizada
fuente
C ++, 47 bytes
Una lambda que modifica una matriz en su lugar, dados los punteros de inicio y fin.
Pruébalo en línea! (requiere Javascript)
Versión genérica de 55 bytes (esto funciona para cualquier contenedor con elementos de tipo aritmético):
fuente