Stavo guardando il problema delle 100 porte e le soluzioni nei vari linguaggi.
Ad esempio ecco la versione ottimizzata in Go package main import "fmt" func main() { var door int = 1 var incrementer = 0 for current := 1; current <= 100; current++ { fmt.Printf("Door %d ", current) if current == door { fmt.Printf("Open\n") incrementer++ door += 2*incrementer + 1 } else { fmt.Printf("Closed\n") } } } quella Java public class Doors{ public static void main(String[] args){ int i; for(i = 1; i < 101; i++){ double sqrt = Math.sqrt(i); if(sqrt != (int)sqrt){ System.out.println("Door " + i + " is closed"); }else{ System.out.println("Door " + i + " is open"); } } } } Gia meglio quello Javascript (che sto comunque riscoprendo ed apprezzando) for (var door = 1; door <= 100; door++) { var sqrt = Math.sqrt(door); if (sqrt === (sqrt | 0)) { console.log("Door %d is open", door); } } Anche quella in C non mi spiace #include <stdio.h> int main() { int i; for (i = 1; i * i <= 100; i++) printf("door %d open\n", i * i); return 0; } ora tocca a C++ #include <iostream> //compiled with "Dev-C++" , from RaptorOne int main() { for(int i=1; i*i<=100; i++) std::cout<<"Door "<<i*i<<" is open!"<<std::endl; } Il mio primo linguaggio, il Forth : squared ( n -- n' ) dup * ; : doors ( n -- ) 1 begin 2dup squared >= while dup squared . 1+ repeat 2drop ; 100 doors Il solito Perl while( ++$i <= 100 ) { $root = sqrt($i); if ( int( $root ) == $root ) { print "Door $i is open\n"; } else { print "Door $i is closed\n"; } } tocca al php <?php for ($i = 1; $i <= 100; $i++) { $root = sqrt($i); $state = ($root == ceil($root)) ? 'open' : 'closed'; echo "Door {$i}: {$state}\n"; } ?> Il Prolog (che come leggibilita' si batte per il trofeo al contrario, ovvero chi ci capisce nulla doors_optimized(N) :- Max is floor(sqrt(N)), forall(between(1, Max, I), ( J is I*I,format('Door ~w is open.~n',[J]))). L'ultimo "gioiello" di Cupertino /* declare enum to identify the state of a door */ enum DoorState : String { case Opened = "Opened" case Closed = "Closed" } /* declare list of doors state and initialize them */ var doorsStateList = [DoorState](count: 100, repeatedValue: DoorState.Closed) /* set i^2 doors to opened */ var i = 1 do { doorsStateList[(i*i)-1] = DoorState.Opened ++i } while (i*i) <= doorsStateList.count /* print the results */ for (index, item) in enumerate(doorsStateList) { println("Door \(index+1) is \(item.rawValue)") } Restando in tema di gemme, Ruby doors = [false] * 100 100.times do |i| (i ... doors.length).step(i + 1) do |j| doors[j] = !doors[j] end end puts doors.map.with_index(1){|d,i| "Door #{i} is #{d ? 'open' : 'closed'}."} e per finire il nostro amato Python(e) print '\n'.join(['Door %s is %s' % (i, ('closed', 'open')[(i**0.5).is_integer()]) for i in xrange(1, 101)]) Io mi astengo dal commentare (sono di parte dite?) ma mi piacerrebbe sentire commenti sui vari modi di risoluzione. Perche' preferite una data soluzione? Carlos -- EZLN ... Para Todos Todo ... Nada para nosotros
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python