Tarea
Defina un pliegue mod en función de la forma f (x) = x% a 1 % a 2 %…% a k , donde a i son enteros positivos yk ≥ 0 . (Aquí, % es el operador de módulo asociativo a la izquierda).
Dada una lista de n enteros y 0 , ..., y n − 1 , determine si existe un pliegue mod f para que cada y i = f (i) .
Puede elegir y corregir dos salidas Y y N para su función / programa. Si existe tal f , siempre debe devolver / imprimir exactamente Y ; si no, siempre hay que volver / imprimir exactamente N . (Estos podrían ser true
/ false
, o 1
/ 0
, o false
/ true
, etc.) Mencione estos en su respuesta.
La presentación más corta en bytes gana.
Ejemplo
Definir f (x) = x% 7% 3 . Sus valores comienzan:
| x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ...
| f(x) | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | ...
Por lo tanto, dado 0 1 2 0 1 2 0 0 1 2
como entrada a nuestra solución, imprimiríamos Y , ya que esta f genera esa secuencia. Sin embargo, dado 0 1 0 1 2
como entrada, imprimiríamos N , ya que no f genera esa secuencia.
Casos de prueba
Las fórmulas dadas cuando la salida es Y son solo para referencia; en ningún momento debe imprimirlos.
0 1 2 3 4 5 Y (x)
1 N
0 0 0 Y (x%1)
0 1 2 0 1 2 0 0 1 2 Y (x%7%3)
0 0 1 N
0 1 2 3 4 5 6 0 0 1 2 Y (x%8%7)
0 1 2 0 1 2 0 1 2 3 N
0 2 1 0 2 1 0 2 1 N
0 1 0 0 0 1 0 0 0 0 1 Y (x%9%4%3%2)
Respuestas:
Pyth, 14 bytes
Las devoluciones
True/False
. Pruébelo en línea: Demostración o conjunto de pruebasExplicación:
Pyth, 11 bytes
Basado en la idea de @ ferrsum . De hecho, pensé en usar los índices cero para la generación de subconjuntos, pero no me di cuenta de que todos los índices cero ya deben ser la solución.
fuente
Python 3,
239218 bytesUna función anónima que toma la entrada de una lista
z
y devuelveTrue
oFalse
paraY
yN
.Esto utiliza un método similar a la respuesta de @Jakube y, aunque es esencialmente una fuerza bruta, se ejecuta muy rápidamente.
Pruébalo en Ideone
fuente
Python 2, 69 bytes
Usos
True
/False
.La respuesta a lo que caracteriza a una serie plegable mod resulta ser menos interesante de lo que parece al principio. Es una serie de la forma 0, 1, ..., M - 1, 0, 1, ... x 1 , 0, 1, ..., x 2 , ... de modo que para todo i, 0 <= x i <M. Dicha secuencia puede ser producida por la cadena de modulación de todos los índices (basados en 0) de los ceros en la matriz, excluyendo el primero.
fuente
Jalea ,
191514 bytesDevuelve 1 para la verdad, 0 para la falsedad. Pruébalo en línea!
El algoritmo es O (n n ) , donde n es la longitud de la lista, por lo que es demasiado lenta y requiere mucha memoria para la mayoría de los casos de prueba.
Se puede usar una versión modificada, que reemplaza la segunda
L
con a5
, para verificar todos los casos de prueba . Tenga en cuenta que esta versión modificada no funcionará para listas arbitrariamente largas.Cómo funciona
fuente
JavaScript (ES6),
98bytesAhorró 48 bytes al cambiar al descubrimiento de @ Feersum. Cualquier valor dado
n
en la matriz es cero, en cuyo caso la próxima predicciónp
es 1, o es igual a la siguiente predicción, en cuyo casop
se incrementa. También medimos la longitudl
de la secuencia inicial mediante la comparaciónp
dei
, comon
debe ser siempre menor quel
en todo momento.fuente
Python 2,
10399 bytesImprime 1 para la verdad y 0 para la falsedad. Pruébalo en Ideone .
fuente