! Copyright (C) 2013 Loryn Jenkins. ! See http://factorcode.org/license.txt for BSD license. USING: kernel sequences sequences.extras combinators locals namespaces accessors math math.functions math.ranges utils ; IN: lamps : >>the-lamps>> ( seq -- seq ) the-lamps set the-lamps get ; : new-lamps ( -- seq ) 100 [1,b] [ drop t ] map ; : lamps ( -- seq ) the-lamps get [ new-lamps >>the-lamps>> ] unless* ; : reset ( -- ) f the-lamps set ; : people ( -- seq ) 100 [1,b] [ ] map ; : toggle ( ? -- ? ) not ; : toggle? ( person-index lamp-index -- ? ) swap divisor? ; : toggle-switches ( n -- ) lamps [ toggle? [ toggle ] when ] with map-index+! drop ; : do-switching ( -- ) people [ toggle-switches ] each ; : execute ( -- seq ) do-switching lamps reset ;