Entrada
La primera línea será una cierta cadena repetida cualquier cantidad de veces. Por ejemplo, podría ser abcabcabcabc
, [];[];[];
, etc. Puede ser cortada; por ejemplo: 1231231231
. Encuentra siempre la cuerda más corta; por ejemplo, si la línea es 22222
, entonces la cadena es 2
, no 22
o 22222
o cualquier otra cosa. La cadena siempre se repetirá al menos 2 veces completas.
Todas las líneas posteriores serán ese patrón compensado por cualquier número. Por ejemplo, podría ser:
abcabcabc
cabcabcab
bcabcabca
(compensado por 1), o podría ser:
abcdefabcdefabcdefabc
cdefabcdefabcdefabcde
efabcdefabcdefabcdefa
(compensado por 4).
Uno de los caracteres en la entrada estará equivocado. (Se garantiza que no estará en la primera línea). Por ejemplo, en esta entrada:
a=1a=1a=1
=1a=1a=1a
1a=11=1a=
a=1a=1a=1
=1a=1a=1a
el 1
de la línea 3 es el extraño.
Salida
Debe generar las coordenadas (basadas en cero, comenzando desde la parte superior izquierda) de la impar. Por ejemplo, en la entrada anterior, la salida correspondiente es 4,2
. También puede generar 4 2
, o "4""2"
, o incluso[[4],[2]]
, o cualquier otro formato, siempre que pueda saber cuál se supone que es la salida.
Casos de prueba
Entrada:
codegolfcodegolfco
egolfcodegolfcodeg
lfcodegolfcodegoff
odegolfcodegolfcod
golfcodegolfcodego
fcodegolfcodegolfc
Salida: 16,2
Entrada:
][[][][[][][[][][[][][[
[][][[][][[][][[][][[][
[][[][][[][][[][][[][][
[[][][[]]][[][][[][][[]
Salida: 8,3
Entrada:
...
. .
...
Salida: 1,1
Entrada:
ababa
babab
ababb
babab
Salida: 4,2
abc/cab/abc
- y salida0 2
aquí?Respuestas:
BashPerl,23122921817816416613810674 bytesLa secuencia de comandos requiere el uso del
-n
interruptor, que representa dos de los bytes.La idea de agregar dos copias de todas las repeticiones completas del patrón ha sido tomada de la respuesta de MT0 .
A diferencia de todas las otras respuestas, este enfoque intenta extraer el patrón de la línea de entrada actual en cada iteración; fallará en la línea que contiene el carácter impar (y usará el patrón de la línea anterior). Esto se hace para incluir la extracción del patrón en el bucle, que logra guardar algunos bytes.
Versión sin golf
Ejemplo
Para el caso de prueba
la salida de la versión de golf es
lo que significa que el personaje impar tiene las coordenadas
16,2
.Estos
abusos descaradosaprovechan el formato de salida liberal.Justo antes de salir, el contenido de algunas de las variables especiales de Perl son:
(
$n
contiene la coincidencia del subpatrón accesible a través de la referencia inversa\n
).fuente
^((.*?)(.*?))(?=\1+\2$)
Perl,
212191181168 byteschomp
lugar dechop
debe usarse.Versión anterior, 212 bytes:
Versión sin golf:
fuente
chop
es innecesario, debe eliminarse. el finalexit print
se puede reemplazar condie
(agregar,$/
para ocultar las cosas adicionales (si es necesario)). tambiénlength$_
se puede reemplazar cony///c
chop
, porque$
coincide antes de la nueva línea al final de la cadena. Ocultar las cosas adicionales adie
través de la nueva línea agregada me parece necesario. Tambiény///c
es mucho más corto quelength$_
y un byte más corto quelength
sin lo innecesario$_
.C, 187 bytes
Limitaciones
Versión de golf
Versión sin golf
fuente
Python,
303292La entrada pasa por stdin. Lo explicaré si hay alguna demanda, pero no parece que vaya a ganar de todos modos.
fuente
Perl,
157154Editar : -3 gracias a la sugerencia de ardnew.
Me tomó algo de tiempo (dentro y fuera, por supuesto, no 5 días ;-)), y la idea sobre el algoritmo fue inicialmente difícil de alcanzar (aunque sentí que estaba allí), pero finalmente (y de repente) se hizo evidente.
Si la longitud de la cadena es múltiplo de la longitud del patrón, e incluso si la cadena no comienza con el comienzo del patrón, la cadena de concatenación producirá un patrón en lugar de la concatenación (imagine la repetición infinita de una palabra en la cinta circular, el lugar de la soldadura no es importante). Por lo tanto, la idea es recortar la línea a varias unidades de longitud y concatenar el original. El resultado, incluso para la cadena que contiene el carácter incorrecto, se garantiza que coincida con el patrón al menos una vez. A partir de ahí, es fácil encontrar la posición del personaje ofensivo.
La primera línea se toma prestada descaradamente de la respuesta de Heiko Oberdiek :-)
fuente
/.{$n}/;$_=$&.$_;
cons/.{$n}/$&$&/;
JavaScript (ES6) -
147133136 CaracteresEspera que la cadena que se probará esté en la variable
s
y envía el resultado a la consola.Caso de prueba 1
Salidas
Caso de prueba 2
Salidas
Caso de prueba 3
Salidas
Caso de prueba 4
Salidas
Caso de prueba 5
Salidas
Caso de prueba 6
Salidas
fuente
s="xyxy\nyyxy"
. Para la segunda línea,match[4]
seráyy
; Debería ser justoy
.abab
el patrón deababaababa
; Necesitas usar^…$
./^…\n/
funciona o/^…$/m
^
(al menos no lo necesita para ninguno de los 6 casos de prueba que he enumerado, pero probablemente haya un contraejemplo donde lo haga, así que lo dejé).