Título mal escrito a propósito. Lea más para descubrir por qué.
Su tarea: dada una cadena o lista delimitada que incluye los caracteres A,B,C,D
, genera los índices de todos los caracteres iguales adyacentes. La salida puede ser múltiples cadenas / enteros en varias líneas, una lista / matriz o una cadena delimitada.
Todos los resultados deben estar en una lista o cadena, o en varias líneas impresas. Cada línea impresa, si hay varias, solo debe contener 1 cadena o número. Todo lo que sigue está bien.
Métodos estándar de entrada / salida. Se aplican lagunas estándar.
Por ejemplo, la entrada 'ABCDDCBA'
debe salir 3,4
o 4,5
, dependiendo de si está indexada de 0 a 1, porque esos números son los índices de D
y los D
siguientes.
Casos de prueba:
Los casos de prueba tienen entrada dada como una sola cadena, y salida como una ,
cadena delimitada. Las salidas están indexadas en 0, agregue 1 a cada elemento de salida para que se indexe en 1.
Input: 'ABCDCABCD'
Output: ''
Input: 'AABBCCDD'
Output: '0,1,2,3,4,5,6,7'
Input: 'ABCDDDCBA'
Output: '3,4,5'
Input: 'ABBCDD'
Output: '1,2,4,5'
Este es el código de golf , ¡el código más corto gana!
3,4,4,5
válido también?AABBCD
->
1,2,3,4
Respuestas:
MATL ,
87 bytesLa salida está basada en 1.
Pruébalo en línea!
Explicación con ejemplo
Considere la entrada
'ABCDDDCBA'
.fuente
Retina ,
332923 bytesGuardado 6 bytes gracias a Martin Ender
Emite una lista de índices separados por salto de línea.
Pruébalo en línea!
Explicación
Translitera las corridas del mismo personaje en dos puntos, para marcar las posiciones donde hay caracteres duplicados.
Luego, reemplace cada dos puntos con la longitud del texto anterior, seguido de un salto de línea.
Finalmente, elimine las letras restantes.
fuente
Jalea , 7 bytes
Basado en 1; devuelve una lista de listas de las ejecuciones de índices según lo permitido por el OP.
Pruébalo en línea!
¿Cómo?
fuente
ṁ
- Cosas que deseo que 05AB1E pueda hacer por 500, por favor.Brain-Flak ,
5746 bytesIncluye +2 para
-ar
Utiliza indexación basada en 0.
Pruébalo en línea!
fuente
Mathematica, 32 bytes
Función pura que devuelve las posiciones indexadas en 1 de los caracteres adyacentes a un carácter idéntico.
Explicación:
StringPosition["string","sub"]
proporciona una lista de las posiciones de los caracteres iniciales y finales en las que"sub"
aparece como una subcadena de"string"
.x_~~x_
es unStringExpression
que coincide con dos caracteres adyacentes idénticos. Por ejemplo,StringPosition["ABCDDDCBA",x_~~x_]
da{{4, 5}, {5, 6}}
. La aplicación seUnion
une a las listas, ordena y elimina duplicados.fuente
Brain-Flak ,
69, 59, 56 bytesPruébalo en línea!
+2 bytes para las
-ar
banderas que permiten la entrada ASCII e invierten la pila.Utiliza indexación basada en 0. Ahorré 10 bytes al reducir mi redundancia push-pop . Ahorró otros 4 bytes al cambiar de indexación basada en 1 a 0.
Este es prácticamente el único desafío basado en cadenas en el que Brain-Flak es bueno. Esto se debe a que Brain-Flak es excelente para comparar caracteres consecutivos, a pesar de que es horrible en el procesamiento de cadenas en general. Aquí hay una versión legible del código con comentarios para explicar cómo funciona:
fuente
-r
. Eso me lleva a 46.Brachylog , 19 bytes
Pruébalo en línea!
Explicación
Brachylog suele ser terrible con los índices, que nuevamente se muestra aquí.
Si
false.
es un resultado aceptable en los casos en que no hay caracteres adyacentes, entonces sería 1 byte menos reemplazándoloᶠd
porᵘ
.fuente
Octava , 35 bytes
Pruébalo en línea!
Similar a mi respuesta MATL . Aquí
unique
se ordena automáticamente. La entrada a sediff
debe convertir adouble
, lo que realiza el unario+
.fuente
Cubix,
37 32 31 2928 bytesGracias a ETHProductions por guiarme en la dirección de un ahorro de tres bytes
Pruébalo aquí ! Tenga en cuenta que los índices de salida están basados en 1 y no en orden ascendente.
Expandido:
Explicación
Esto funciona leyendo la entrada carácter por carácter. Para comparar dos caracteres, simplemente restamos sus códigos de caracteres, y si el resultado es 0, imprimimos la longitud actual de la pila, un espacio, la longitud actual de la pila - 1 y otro espacio. Luego limpiamos un poco la pila y comenzamos con el ciclo de lectura nuevamente. Si se alcanza el final de la cadena de entrada, el programa se detiene.
fuente
#
para obtener la longitud de la pila cuando la necesites. (Además, LOL'ed en el;_;
en el código;))!$w
lugar de!w
y moviste parte de la lógica de la quinta fila a la cuarta fila? (No puedo intentarlo ahora porque salgo por la puerta)C, 75 bytes
Utiliza espacios como delimitadores. (Una coma final no se ve muy bien).
Pruébalo en línea!
fuente
C # , 115 bytes
Golfed
Sin golf
Legible sin golf
Código completo
Lanzamientos
115 bytes
- Solución inicial.Notas
Nada que añadir
fuente
Jalea , 8 bytes
Pruébalo en línea!
fuente
Ṗ=ḊTµ2Ḷ+€
k, 18 bytes
Ejemplos:
La traducción a
q
es más fácil de entender:fuente
JavaScript, 52 bytes
Gracias @Neil por jugar golf en 1 byte
Recibe la entrada como una matriz de caracteres indexados a 0
Devuelve la salida como una matriz indexada a 1
Explicación
Para cada caracter en la cadena
Si es igual al carácter anterior o al siguiente, devuelva el índice + 1; de lo contrario, no regrese (se deja sin definir en la matriz)
Eliminar todos los elementos indefinidos de la matriz resultante
Pruébalo en línea!
fuente
&&i
Ahorraría un byte(...)*i
?0|0&&6
es 0,1|0&&6
es 6,0|1&&6
es 6,1|1&&6
es 6. ¿No es eso lo que quieres?Python 2,
5554 bytesPruébalo en línea!
Emite índices separados por espacios (tenga en cuenta que esto muestra algunos índices el doble de lo permitido por OP)
fuente
Perl 5 , 37 bytes
35 bytes de código +
pl
banderas.Pruébalo en línea!
(?<=(.))\1|(.)(?=\2)
coincidirá entre dos caracteres repetidos ((?<=(.))\1
) o antes de un carácter que se repite ((.)(?=\2)
).Luego,
print pos
imprime la posición del partido. (pos
contiene el índice de la coincidencia actual cuando se usa en una expresión regular con/g
modificador).fuente
Perl 6 ,
6657 bytesIntentalo
Intentalo
fuente
PHP, 100 bytes
fuente
Ruby , 51 + 1 = 52 bytes
Usa la
-n
bandera.Pruébalo en línea!
fuente
Lote, 139 bytes
Toma entrada en STDIN. Funciona haciendo un seguimiento de cuántos números imprimir en la
c
variable, que se restablece a 2 cuando se detecta un par. Nota: Con un costo de 6 bytes, podría endurecerse para trabajar con la mayoría de los caracteres ASCII y no soloABCD
.fuente
C #, 89 bytes
Si hay tres o más caracteres seguidos, los índices se repiten. Que @Comrade SparklePony permitió en los comentarios.
Programa completo sin golf:
fuente
QBIC , 42 bytes
Salida de muestra:
Explicación:
EDITAR: ¡QBIC ahora tiene una subcadena! Este desafío ahora se puede resolver en 32 bytes:
Dónde:
fuente
k, 14 bytes
Esta es una función, toma una cadena y devuelve una lista de índices.
Explicación:
Pruébalo en línea!
Cómo utilizar:
fuente
PHP, 70 bytes
toma entrada de STDIN; correr con
-R
.fuente