Esercizio 1

Stato
Discussione chiusa ad ulteriori risposte.
shura ha detto:
Non capisco perché quel "to_enum", Range ha il metodo each o_O
Un'altra variante è 1.upto(999), che sarebbe più carino nel tuo caso.

[ot]quello è già deprecato per quanto riguarda la documentazione delle classi builtin, cioè, ora ci sono più metodi e non so se ne hanno tolto qualcuno, tieni conto che quello è per 1.9.1, ora siamo a 1.9.2, non ci dovrebbe essere un grande divario[/ot]
si Effettivamente il to_enum non so perchè l'ho messo...
[ot]Bah ^^ comunque me lo studio comunque, il sapere non fa mai male :p[/ot]
 
Malex ha detto:
Bronsa ha detto:
(apply + (filter #(or (zero? (rem % 3)) (zero? (rem % 5))) (range 1 999)))

^ e questo, a parere di bronsa, è il linguaggio più bello e più elegante...

beh lo è
comunque ho usato una sintassi speciale per le lamda, piace di più così?
Codice:
(apply +
  (filter (fn (x) (or
                     (zero? (rem x 3))
                     (zero? (rem x 5))))
          (range 1 999)))
 
Ruby:
Codice:
NORMAL, GREEN = "\033[0m","\033[92m"
alias _puts_ puts
def puts(*e)
	t = "Ex 1: "
	e.to_a.collect {|x| t+=x.to_s }
	_puts_ t
end
class Integer
	def valid?
		return true if self.to_i % 3 == 0 or self.to_i % 5 == 0
	end
end
s = 0
(1..1000).collect {|x| s+= x if x.valid? }
puts GREEN,s,NORMAL
 
shura ha detto:
puoi togliere tutta la roba di puts e alla fine scrivere:
Codice:
puts GREEN+s+NORMAL
sisi ovvio, ho aggiunto la roba del puts cosi...
ovvio che potevo solo scrivere:
Codice:
puts "Ex1: "+GREEN+s+NORMAL
^_^
 
visto che è la gara delp iù corto lo faccio in c così perdo
Codice:
#include<stdio.h>

int main(void){
	int i,s=0;
	for(i=0;i<1000;i++) s+=i*(i%3==0 || i%5==0);
	printf("%d",s);
	return 0;
}
per questo genere di cose sarebbe piu interessante il tempo impiegato che la lunghezza del codice
 
cyd ha detto:
per questo genere di cose sarebbe piu interessante il tempo impiegato che la lunghezza del codice

Ma pure questo non è un termine di paragone, poiché cambia da PC a PC , e poi è ovvio che i linguaggi di basso livello siano teoricamente più efficaci... caso mai il confnonto tra come ha detto shura e il mio è minima, il mio risulta leggermente più veloce:
Codice:
yaoq@yaoq-Netbook:~/prog/Rb$ time ruby 1.rb
Ex 1: 234168

real	0m0.036s
user	0m0.024s
sys	0m0.012s
yaoq@yaoq-Netbook:~/prog/Rb$ geany 1.rb
yaoq@yaoq-Netbook:~/prog/Rb$ time ruby 1.rb
Ex 1: 234168

real	0m0.038s
user	0m0.028s
sys	0m0.008s
yaoq@yaoq-Netbook:~/prog/Rb$
IMHO paragoni del genere non sono in alcuna maniera sensati ^_^
 
Ma pure questo non è un termine di paragone, poiché cambia da PC a PC , e poi è ovvio che i linguaggi di basso livello siano teoricamente più efficaci... caso mai il confnonto tra come ha detto shura e il mio è minima, il mio risulta leggermente più veloce:
beh mi pare abbastanza ovvio che i confronti li farai tra script scritti nello stesso linguaggio -_-'
ma dato che gli esercizi del progetto eulero puntano molto all'abilità di rendere minimo il numero di calcoli e confronti e quindi di tempo d'esecuzione , ha perfettamente senso confrontare due programmi usando (non solo) ma in buona parte parametri come questo, dato che non siamo in gara e uno può confrontarli sulla propria macchina.
(poi questo è un esercizietto del pazzo, ce ne sono alcuni in cui script corti e stupidi ci arrivano dopo 6000 anni)
 
Certo che non siamo in gara, ma è interessante trovare soluzioni intelligenti e rapide :)
Si dovrebbe fare uno studio analitico sulla complessità computazionale degli algoritmi scelti...
Però dico grossomodo un tempo anche in queste condizioni può dare degli indizi sulla qualità dell'algoritmo....
Diciamo che si possono solo dividere in fasce, non fare una scaletta precisa della qualità :)
Ormai mi è venuto il pallino della teoria della complessità, avrete mie notizie xD
 
Stato
Discussione chiusa ad ulteriori risposte.