Los interruptores del laboratorio
- O(2ⁿ) · Legendaria
- Plan completo
- Python
- JavaScript
- recursión
- listas
Enunciado
En el laboratorio viejo nadie sabe qué interruptor es de qué lámpara. Anders Lund, el técnico, ya lo averiguó: cada interruptor está conectado a varias lámparas, y al oprimirlo todas esas cambian: las apagadas se prenden y las prendidas se apagan. Ahora quiere prenderlas todas oprimiendo los menos interruptores posibles.
Escribe una función que reciba n, cuántas lámparas hay (de 1 en adelante; se numeran de 0 a n - 1), e interruptores, una lista donde cada elemento es la lista de las lámparas que cambia ese interruptor (sin repetir lámparas; la lista de interruptores puede venir vacía).
Al principio todas las lámparas están apagadas, y oprimir un interruptor cambia cada una de sus lámparas: la apagada se prende y la prendida se apaga. Cada interruptor se oprime una vez o ninguna, y da igual en qué orden. Regresa un entero: el menor número de interruptores que hay que oprimir para que queden todas prendidas al mismo tiempo, o -1 si no hay manera.
Con 3 lámparas e interruptores [[0, 1], [1, 2], [1]] hay que oprimir los tres: el primero prende la 0 y la 1, el segundo prende la 2 pero apaga la 1, y el tercero la vuelve a prender. Regresa 3. Con 3 lámparas e interruptores [[0, 1], [1, 2]], la 1 siempre acaba apagada si prendes la 0 y la 2, así que regresa -1.
Ejemplos
El ejemplo
3, [[0, 1], [1, 2], [1]] → 3
No hay manera
3, [[0, 1], [1, 2]] → -1
El que prende más no va primero
6, [[0, 1, 2, 3], [0, 1, 2], [3, 4, 5], [4], [5]] → 2
Uno solo las prende todas
4, [[0, 1, 2, 3]] → 1
Además de estas, el reto tiene pruebas ocultas que se revelan al enviar tu solución.
Empiezas con esto
Python
def oprimir(n, interruptores):
passJavaScript
function oprimir(n, interruptores) {
}Se abre en el navegador, con el editor y las pruebas. Este reto es del plan completo; los de O(1) y O(log n) son gratis.
Más retos de O(2ⁿ)
- Los módulos en cohetesrecursión · listas · booleanos · división
- Los quirófanos del lunesrecursión · listas · comparaciones
- Los remeros de Puntrecursión · listas · comparaciones
- Los votos de la Hansarecursión · listas · comparaciones
- Miel a mediasrecursión · listas · comparaciones
- Ritmos sin choquerecursión · textos · listas