Shift

Stato
Discussione chiusa ad ulteriori risposte.

~TLA

Utente Bronze
28 Dicembre 2010
0
0
0
49
Salve a tutti,
Come ben sapete, questo comando nella sintassi Perl esegue le seguenti operazioni:
Estrae il primo elemento del vettore
Riduce di uno la dimensione del vettore
Fa slittare avanti di uno tutti i vari elementi

Ossia:
Codice:
[ 1, 2, 3, 4, 5, 6, 7, 8, 9]
=> [2, 3, 4, 5, 6, 7, 8, 9]

Ecco il mio [Ruby]:
Codice:
$a = ARGV
exit if ARGV.size < 1
def shift(other)
	x = other.size - 1 and tot = []
	while x >= 1
		tot << other[x]
		x = x - 1
	end
	return tot.reverse
end
print "FIRST\t=>\t["
$a.each do |x|
	print x,","
end
print "\b]\nAFTER\t=>\t["
(shift($a)).each do |x|
	print x,","
end
print "\b]\n"
Dovrete fornire l'array come parametri del programma ossia:
Codice:
tla@TLA-Winteriscoming:~/prog/Ruby$ ruby shift.rb 1 2 3 4 5 6 7 8 9
oppure ho scritto un piccolissimo script che crea un array casuale e lo avvia con quello:
Codice:
tla@TLA-WinterIsComing:~/prog/Ruby$ cat shift-launcher.rb
t = []
30.times do
	t << rand(100)
end
f = "ruby shift.rb #{t.join(" ")}"
system(f)
tla@TLA-WinterIsComing:~/prog/Ruby$ ruby shift-launcher.rb
FIRST	=>	[39,20,99,94,33,94,66,27,99,5,14,16,16,26,48,59,96,65,85,92,41,31,26,63,94,18,61,0,55,60]
AFTER	=>	[20,99,94,33,94,66,27,99,5,14,16,16,26,48,59,96,65,85,92,41,31,26,63,94,18,61,0,55,60]
tla@TLA-WinterIsComing:~/prog/Ruby$

Esercizio:

Scrivete un programma che faccia questa operazione ( non è necessario che restituisca il valore estratto )
 
e avete sbagliato tutti :D
shift toglie il valore in cima e lo ritorna, in più il parametro è una referenza, in modo da poterlo modificare.
Soluzione giusta:
Codice:
def shift(x)
  ret = x[0]
  x.replace(x[1, x.size])
  ret
end
 
Stato
Discussione chiusa ad ulteriori risposte.