PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.ruby > Scrabble Stems Ruby Quiz question.
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Scrabble Stems Ruby Quiz question.

Réponse
 
LinkBack Outils de la discussion
Vieux 02/12/2007, 02h48   #1
Mark Woodward
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Scrabble Stems Ruby Quiz question.

Hi all,

could someone explain the line:
(STEMS[stem] ||= {})[letter] = 1
in the code below?
This is a solution (Carlos) from the Scrabble Stems Ruby quiz.

---------------------------------------------------------------
DICT = "/usr/share/dict/words"
CUTOFF = ARGV[0].to_i

STEMS = {}

File.open(DICT) do |f|
f.each do |word|
word.chomp!
next if word.length != 7
word.downcase!
letters = word.split(//).sort!
uniques = letters.uniq
word = letters.join
uniques.each do |letter|
stem = word.sub(letter, "")
(STEMS[stem] ||= {})[letter] = 1
end
end
end

result = STEMS.delete_if { |k,v| v.size < CUTOFF }.
sort_by { |k,v| v.size }.
reverse!.
collect! { |k,v| [k, v.size] }

result.each do |stem, combining| puts "#{stem} #{combining}" end
---------------------------------------------------------------


cheers,

--
Mark
  Réponse avec citation
Vieux 02/12/2007, 04h05   #2
yermej
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Scrabble Stems Ruby Quiz question.

On Dec 1, 8:48 pm, Mark Woodward <markonli...@internode.on.net> wrote:
> Hi all,
>
> could someone explain the line:
> (STEMS[stem] ||= {})[letter] = 1
> in the code below?


It's equivalent to:

STEMS[stem] = STEMS[stem] || {}
STEMS[stem][letter] = 1

Where that first line means: if STEMS[stem] isn't defined, assign a
new Hash to it.

It could also be done like this:

STEMS = Hash.new {|h, k| h[k] = {}} # near the top of your example
code

STEMS[stem][letter] = 1 # and this in place of the line you asked
about

Hash.new allows you to use a block to define the behavior of the hash
if the element isn't found. With no block (as in the example code you
posted), nil is returned.
  Réponse avec citation
Vieux 02/12/2007, 04h39   #3
Mark Woodward
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Scrabble Stems Ruby Quiz question.

Hi Yermej,

On Sat, 1 Dec 2007 20:05:45 -0800 (PST)
yermej <yermej@gmail.com> wrote:

> On Dec 1, 8:48 pm, Mark Woodward <markonli...@internode.on.net> wrote:
> > Hi all,
> >
> > could someone explain the line:
> > (STEMS[stem] ||= {})[letter] = 1
> > in the code below?

>
> It's equivalent to:
>
> STEMS[stem] = STEMS[stem] || {}
> STEMS[stem][letter] = 1


The '[letter] = 1' appended to the end was the bit I didn't understand.

Definitely easier to read as your e.g. above. But I guess once you know
the syntax (STEMS[stem] ||= {})[letter] = 1 makes sense. A bit too
'Perlish' for a newbie though ;-)

>
> Where that first line means: if STEMS[stem] isn't defined, assign a
> new Hash to it.
>
> It could also be done like this:
>
> STEMS = Hash.new {|h, k| h[k] = {}} # near the top of your example
> code
>
> STEMS[stem][letter] = 1 # and this in place of the line you asked
> about
>
> Hash.new allows you to use a block to define the behavior of the hash
> if the element isn't found. With no block (as in the example code you
> posted), nil is returned.



thanks,


--
Mark

  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 08h00.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,08611 seconds with 11 queries