Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > Ruby
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 31.01.2013, 17:15   #1
Rigby
Новичок
 
Регистрация: 31.01.2013
Сообщений: 1
Репутация: 10
По умолчанию Ruby, задачки для начинающих

Добрый день. Решила несколько задачек, вроде бы всё (более-менее) работает, но хотелось бы, чтобы специалисты дали комментарии относительно правильности и оптимальности - как можно было бы всё это сделать поизящнее? Заранее спасибо.

Код:

#1. Дана строка слов, разделённых пробелами. Вывести длиннейшее слово.

sentence = "Дана строка слов,    разделёных! пробелами. Вывести все   длиннейшие? слова."
array = sentence.scan(/[a-zA-zА-Яа-яё]+/)
maximum = array.max_by{|elem| elem.size}
p array.find_all{|e| e.size==maximum.size}

#=> ["разделёных", "длиннейшие"]

Код:

#2. Дана строка, содержащая кириллицу, латиницу и цифры. Вывести все слова, длина которых равна средней.

sentence = "Дана stroka, содержащая 15558.98 кириллицу, латиницу и цифры. Vyvesty все слова, qwqwqw длина которых равна средней."
array = sentence.scan(/[a-zA-ZА-Яа-яё]+/)
size = array.size
result = 0.0
array.each do |elem|
	result = result + elem.size
end
medium = (result/size).round

p array.find_all {|e| e.size==medium}

#=> ["stroka", "qwqwqw"]

Код:

#3. Найти в строке первое целиком кириллическое слово.

sentence = "Attention 58999777 На9йти three вt строке первое целиком кириллическое слово."
array = sentence.scan(/\b[А-Яа-яё]+\b/)
p array[0]

#=> "строке"

Код:

#5. Найти в тексте время в формате «часы:минуты:секунды».

sentence = "Найти 1:45:17 в 22:am:08 тексте 56:10:00 время 15:48:00 в формате 11-03-15 «часы:минуты:секунды»."
p array = sentence.scan(/(\b([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\b)/)
# => [["1:45:17", "1"], ["15:48:00", "15"]]

И вот по последнему вопрос: почему я в результате получаю двумерный массив, и как избавиться от "вторых" значений?
Большое спасибо.


UPD: разобралась с последним. В качестве "вторых" элементов массива выступает переменная, куда заносится результат совпадения с круглыми "сохраняющими" скобками. Чтобы получить правильный ответ, нужно использовать "несохраняющие" круглые скобки: вместо (...) нужны (?:...)
таким образом:
Код:

#5. Найти в тексте время в формате «часы:минуты:секунды».

sentence = "Найти 1:45:17 в 22:am:08 тексте 56:10:00 время 15:48:00 в формате 11-03-15 «часы:минуты:секунды»."
p array = sentence.scan(/\b(?:[01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\b/)
# => ["1:45:17", "15:48:00"]


Последний раз редактировалось Rigby; 01.02.2013 в 13:09.
Rigby вне форума   Ответить с цитированием
Старый 20.04.2017, 14:23   #2
Guitarfreak
 
Регистрация: 03.04.2017
Сообщений: 5
Репутация: 10
По умолчанию

Было интересно почитать. Жаль что никто так ничего и не ответил.
Guitarfreak вне форума   Ответить с цитированием
Старый 02.05.2017, 17:21   #3
domenianna
Новичок
 
Регистрация: 02.05.2017
Адрес: ул. Проездная 2
Сообщений: 2
Репутация: 10

icq: 896567876
По умолчанию

Промолчали все потому видимо, что задачка для начинающих! А для меня вроде и не как для начинающих. Решение себе взяла на вооружение в прогу всуну по замене слов на ссылки.
domenianna вне форума   Ответить с цитированием
Старый 02.05.2017, 17:32   #4
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 14,711
Репутация: 2887

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Скорее потому что на этом форуме примерно полтора человека пишущих на Руби.
Alex11223 на форуме   Ответить с цитированием
Старый 15.10.2017, 22:26   #5
fenek644
 
Регистрация: 15.10.2017
Адрес: Санкт-Петербург, Россия
Сообщений: 9
Репутация: 10
По умолчанию

Может быть здесь найдете баг

def stock_picker(a)
l = a.length
jim = (0..l-2).to_a
m = a
#Sc = a
puts "hiii"
puts a
(0..l-2).each do |i|
#jim[i] = i
#m[i] = a[i]
puts a[i]
puts i
(i+1..l-1).each do |j|
if a[j] > m[i]
# do
m[i] = a[j]
jim[i] = j
end
puts j
puts i
puts a[i]
end

puts a[i]

#c[i] = m[i]-a[i]
end
#c = m-a
puts jim
puts m
puts a
f_i = 0
#(0..l-2).each do |i|
#f_i = 0
(0..l-2).each do |j|

if (m[j]-a[j]) > (m[f_i]-a[f_i])
f_i = j
puts j.to_s
end
end
#end
result = [f_i, jim[f_i]]
end

b = [17,3,6,9,15,8,6,1,10]

puts stock_picker(b)
Когда первый раз печатаю a[i], стр 11, - получается заданный a[i], а после цикла по j, стр 21, - он превращается в максимальный элемент массива a с номерами большими i.
fenek644 вне форума   Ответить с цитированием
Старый 16.10.2017, 01:40   #6
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 520
Репутация: 397
По умолчанию

Без описания задачи, без форматирования, без единого комментария..

От того, что Вы написали
Код:

m = a

, у Вас не стало два разных массива..
Код:

irb(main):001:0> b = [17,3,6,9,15,8,6,1,10]
=> [17, 3, 6, 9, 15, 8, 6, 1, 10]
irb(main):002:0> a = b
=> [17, 3, 6, 9, 15, 8, 6, 1, 10]
irb(main):003:0> a[0] = 777
=> 777
irb(main):004:0> a
=> [777, 3, 6, 9, 15, 8, 6, 1, 10]
irb(main):005:0> b
=> [777, 3, 6, 9, 15, 8, 6, 1, 10]


Последний раз редактировалось Black Fregat; 16.10.2017 в 01:50.
Black Fregat на форуме   Ответить с цитированием
Старый 16.10.2017, 02:03   #7
fenek644
 
Регистрация: 15.10.2017
Адрес: Санкт-Петербург, Россия
Сообщений: 9
Репутация: 10
По умолчанию

, у Вас не стало два разных массива..
то есть m и а - один массив а как мне сделать два массива - один m а второй а

Спасибо Это и есть баг. Только как его преодолеть я не понимаю

я мыслил так - у меня есть а, я делаю его копию с именем m, а затем m - меняю

Последний раз редактировалось fenek644; 16.10.2017 в 02:05.
fenek644 вне форума   Ответить с цитированием
Старый 16.10.2017, 02:04   #8
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 520
Репутация: 397
По умолчанию

Код:

m = a.clone

Black Fregat на форуме   Ответить с цитированием
Старый 16.10.2017, 02:06   #9
fenek644
 
Регистрация: 15.10.2017
Адрес: Санкт-Петербург, Россия
Сообщений: 9
Репутация: 10
По умолчанию

попробую
fenek644 вне форума   Ответить с цитированием
Старый 16.10.2017, 02:11   #10
fenek644
 
Регистрация: 15.10.2017
Адрес: Санкт-Петербург, Россия
Сообщений: 9
Репутация: 10
По умолчанию

Все - заработало - Спасибо - до новых встреч
fenek644 вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ для начинающих Haruko_ Помощь студентам 0 23.10.2012 21:41
Pascal (задачки для начинающих) Pontiac228 Помощь студентам 11 12.05.2011 07:25
Круглый стол: Ruby on Rails для начинающих айтишников BelOlga Свободное общение 0 17.06.2010 21:57
С++ для начинающих Maxim1 Общие вопросы C/C++ 10 31.05.2010 00:22
Ruby, Ruby on Rails разработчик, Спб Ludmila.K Работа на постоянной основе 0 14.07.2009 12:29




15:30.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru