Как найти наибольшее значение символа в рубине? - PullRequest
0 голосов
/ 08 октября 2018

Предположим, мне дана строка "Nas".Я хочу выбрать символ, который имеет наибольшее целочисленное значение.Как я могу сделать это в Ruby?

Моя реализация включала создание хеша с числовым значением для каждого символа:

alpha = {}
('a'...'z').zip(1. .26).each do |x| alpha[x[0]] = x[1] end

И тогда я бы повторил свое слово так:

word.each_char do |c |
    puts c
end

Я определил метод, который принимает два параметра, первый параметр - это массив, который определяет «важность символа», а второй параметр принимает слово:

def designer_pdf(h, word)
  alpha = {}
  ('a'...'z').zip(1..26).each do |x|
    alpha[x[0]] = x[1]
  end

  word.each_char do |c|
    puts c
  end
end

designer_pdf (
  [1, 3, 1, 3, 1, 4, 1, 3, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
  'abc'
)

Цель состоит в том, чтобы два возвращали наибольшее значение из массива h на основе символа из word.

Например, word: 'abc':

a = 1
b = 3
c = 1

Так верните 3, потому что bсамый высокий.

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Вы можете передать любой приоритет array и любой word в качестве аргументов:

def designer_pdf(h, word)
  alpha =  Hash[('a'..'z').zip(h)]

  # if you want only character from word with highest priority
  character = word.chars.max_by{|e| alpha[e]}

  # if you want only highest char value
  value = alpha[character]

  # if you want both character and value
  [character, value]
end

> designer_pdf([1, 3, 1, 3, 1, 4, 1, 3, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], "abc")
#=> ["b", 3] 

> designer_pdf([1, 3, 1, 3, 1, 4, 1, 3, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], "zeb")
#=> ["z", 5] 
0 голосов
/ 08 октября 2018

Нет необходимости создавать хеш.

def largest_mapped_value(word, values)
  base = 'a'.ord
  values[word.each_char.max_by { |c| values[c.ord-base] }.ord-base]
end

  #       a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t
values = [1, 3, 1, 3, 1, 4, 1, 3, 2, 5, 6, 5, 5, 7, 5, 5, 5, 5, 5, 1,
          5, 5, 5, 5, 5, 5]
  #       u  v  w  x  y  z

%w| cat kite zebra fined a |.each { |word|
  puts "#{word}: #{largest_mapped_value(word, values)}" }
cat:   1
kite:  6
zebra: 5
fined: 7
a:     1

Вариант следующий.

word = "fined"
base = 'a'.ord
  #=> 97
word.each_char.map { |c| values[c.ord-base] }.max
  #=> 7
0 голосов
/ 08 октября 2018

Вы можете сделать это

Для zep строки

p [*'a'..'z'].zip([1, 3, 1, 3, 1, 4, 1, 3, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5])
    .select{|x|("zeb".chars).include?x[0]}.max_by{|x|x[1]}

вывода

["z", 5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...