[ruby quiz] per gli appassionati degli array

Domandona

Come trasformare

[[[“a”, 1],[“b”, 2],[“c”, 3]],[[“a”, 4],[“b”, 5],[“c”, 6]]]

in

[a,[1,4]], [b,[2,5]], [c,[3,6]]

Con una mossa gobba?

5 kudos a chi vince :slight_smile:

Jeko

P.s.
Ho anche il livello 2

— Stefano G. [email protected] wrote:

Domandona

Come trasformare

[[[“a”, 1],[“b”, 2],[“c”, 3]],[[“a”,
4],[“b”,5],[“c”, 6]]]

in

[a,[1,4]], [b,[2,5]], [c,[3,6]]

Con una mossa gobba?

come si definisce una mossa gobba?

Comunque:

assoc, il metodo meno utile al mondo in azione!

ary[0].map { |k,v| [k,[v,ary[1].assoc(k)[1]]] }

Oppure:

nifty parameter unpacking:

ary[0].zip(ary[1]).map { |(a,b),(c,d)| [a,[b,d]] }

O anche:

1.9 love

ary[0].map.with_index { |(a,b),i| [a,[b,ary[i][1]]] }

ma forse volevi dire evitando di accedere ai singoli sub-array?

  ___________________________________________________________

Yahoo! Answers - Got a question? Someone out there knows the answer. Try
it
now.

Beh le tue mosse sono parecchio gobbe! :slight_smile:

Ti sei aggiudicato il livello 2

E’ possibile fare la stessa cosa con dei valori mancanti, computandoli
comunque come zero?

[[[“a”, 1],[“b”, 2]],[[“a”,4],[“c”, 6]]]

diventa

[a,[1,4]], [b,[2,0]], [c,[0,6]]

Jek

P.s.
Questo vale per la coppa array :wink:

gabriele renzi ha scritto:

Comunque:

assoc, il metodo meno utile al mondo in azione!

ary[0].map { |k,v| [k,[v,ary[1].assoc(k)[1]]] }

La mia soluzione è simile:

a[0].map {|ar| [ar[0], [ar[1], a[1].assoc(ar[0])[1]]]}

Stefano G. ha scritto:

Sporco che di più non si
può:
a[0].map {|ar| [ar[0], [ar[1], (b = a[1].assoc(ar[0])).nil? ? 0 :
b[1]]]}

On 5/29/07, gabriele renzi [email protected] wrote:

Oppure:

nifty parameter unpacking:

ary[0].zip(ary[1]).map { |(a,b),(c,d)| [a,[b,d]] }

uhm, io sono giunto alla stessa soluzione con il parameter unpacking
riuscendo però a risparmiarmi l’orrendo zip e sfruttando invece
transpose (rb 1.8):

ary.transpose.map { |(a,b),(c,d)| [a,[b,d]] }

per il secondo livello passo, ho esaurito l’ultimo barlume di luciditÃ
per oggi (in realtà lo avevo già esaurito, ma ho scavato un po’ per
l’occasione :-D)

Daniele A. ha scritto:

ary.transpose.map { |(a,b),(c,d)| [a,[b,d]] }

Mi devo inchinare perché questa soluzione è veramente veramente
elegante.

— Stefano G. [email protected] wrote:

Beh le tue mosse sono parecchio gobbe! :slight_smile:

Ti sei aggiudicato il livello 2

alé

E’ possibile fare la stessa cosa con dei valori
mancanti, computandoli
comunque come zero?

[[[“a”, 1],[“b”, 2]],[[“a”,4],[“c”, 6]]]

diventa

[a,[1,4]], [b,[2,0]], [c,[0,6]]

mh… avendo garanzia che ci siano a sinistra ma non a
destra e non il contrario andrebbe

a[0].map do |k,v| [k,[v,(a[1].assoc(k)[1]rescue
0)]]end

altrimenti temo che la soluzione più semplice sia
ricorrere ad un hash :

a=[[[“a”, 1],[“b”, 2]],[[“a”,4],[“c”, 6]]]
=> [[[“a”, 1], [“b”, 2]], [[“a”, 4], [“c”, 6]]]
hsh=Hash.new {[]}
=> {}
tmp=nil # questa si può evitare con inject
=> nil
a.flatten.each_with_index {|k,i| i%2==0 ? tmp=k :
hsh[tmp]+=[k] }
=> [“a”, 1, “b”, 2, “a”, 4, “c”, 6]
hsh
=> {“a”=>[1, 4], “b”=>[2], “c”=>[6]}
hsh.to_a
=> [[“a”, [1, 4]], [“b”, [2]], [“c”, [6]]]

  ___________________________________________________________

Yahoo! Mail is the world’s favourite email. Don’t settle for less, sign
up for
your free account today
http://uk.rd.yahoo.com/evt=44106/*http://uk.docs.yahoo.com/mail/winter07.html

On 5/29/07, Stefano G. [email protected] wrote:

Clap clap clap clap… :slight_smile:

Questa è veramente fine e raffinata! :slight_smile:

J.

ma che vi siete fumati? :wink:

Clap clap clap clap… :slight_smile:

Questa è veramente fine e raffinata! :slight_smile:

J.

— Daniele A. [email protected] wrote:

uhm, io sono giunto alla stessa soluzione con il
parameter unpacking
riuscendo però a risparmiarmi l’orrendo zip e
sfruttando invece
transpose (rb 1.8):

ary.transpose.map { |(a,b),(c,d)| [a,[b,d]] }

bellissimo, e transpose non lo conoscevo, novità nella
1.8.5 ?

  ___________________________________________________________

Yahoo! Answers - Got a question? Someone out there knows the answer. Try
it
now.

On 5/29/07, gabriele renzi [email protected] wrote:

ary.transpose.map { |(a,b),(c,d)| [a,[b,d]] }
bellissimo, e transpose non lo conoscevo, novità nella
1.8.5 ?

E’ stato introdotto nella 1.8.0, io però l’ho scoperto (per caso) ai
tempi della 1.8.4.

1.7.3 → 1.8.0 preview1 (2002-12-24)
2002-11-19
Array#transpose [new]