Ruby/Практикум/Строки
Материал из Викиучебника
[править] Строки
[править] Дана строка в которой числа перечислены через пробел. Необходимо найти максимальное из этих чисел.
Возможное решение:
s = "123 123 3254 2345 13" p( s.split(" ").map{ |m| m.to_i }.max )
Замечания по решению:
Возможное решение:
a = "5 6 42 31 93 4" m = a.split(" ") p( m.map{ |i| i.to_i }.max )
Замечания по решению:
Возможное решение:
cTpoka = "134 2134 1234 1234 123422 2342" a = cTpoka.split(" ") p( a.map{ |i| i.to_i }.max )
Замечания по решению:
Возможное решение:
s="1 2 8 4" p s.split(/ /).max
Замечания по решению: Решение неверно.
Возможное решение:
s="1 12 41 8" p s.split.map(&:to_i).max
Замечания по решению: Ruby 1.9
[править] Дана строка. Необходимо найти общее количество русских символов.
Возможное решение:
str = "ывfgфеф" p( str.split("").select{ |n| ( n>="а" || n>="А" )&&( n<= "я" || n<="Я" ) }.size )
Замечания по решению: Нижеследующее проще.
Возможное решение:
str = "ывfgфеф" p str.scan(/[А-я]/).size
Замечания по решению:
Возможное решение:
str = "ывЛgфmю" p str.count "А-я"
Замечания по решению: Ruby 1.9.1
[править] Дана строка, состоящая из символов латиницы. Необходимо проверить, упорядочены ли строчные символы этой строки по возрастанию.
Возможное решение:
str = "lol" a = str.split("") b = a.select{ |i| ("a".."z").include?(i) } p( b == b.sort )
Замечания по решению:
Возможное решение:
cTpoka = "acBdeFg" bb = ("A".."Z").to_a sbb = cTpoka.split("") - bb p( sbb == sbb.sort )
Замечания по решению:
Возможное решение:
str = "acBdeFg" a=str.scan(/[a-z]/) p a==a.sort
Замечания по решению:Решение правильно частично. Правильное решение
str = "acBdeFg" a=str.scan(/\w/) p a==a.sort
Замечания по решению: Нифига подобного. Решение правильное. "\w" кроме строчных латинских букв еще включает прописные, а они отбрасываются по условию.
[править] Дана строка в которой слова записаны через пробел. Необходимо перемешать все слова этой строки в случайном порядке.
Возможное решение:
str="Point Line Triangle Square Pentagon" puts str.split(" ").sort_by{ rand }.join(" ")
Замечания по решению:
[править] Дана строка. Необходимо проверить, является ли она палиндромом.
Возможное решение:
cTpoka = "бред" p( cTpoka.reverse.eql?( cTpoka ) )
Замечания по решению:
Возможное решение:
a = "geg" p( a.reverse == a )
Замечания по решению:
Возможное решение:
str="Are we not drawn onward, we few, drawn onward to new era?" str2 = str.downcase.scan(/\w+/).join p str2.reverse == str2
Замечания по решению:
Работает только для латиницы.
Возможное решение:
str="а роза упала на лапу азора" p str.delete(" ").reverse == str.delete(" ")
Замечания по решению:
Работает для палиндромов, не содержащих символы в разных регистрах и знаки препинания.
[править] Дана строка. Необходимо перемешать все символы строки в случайном порядке.
Возможное решение:
a = "privet poka" p a.split("").sort_by{rand}.to_s
Замечания по решению:
Возможное решение:
s = "134saddfs a123" puts s.split("").sort_by{rand}.join
Замечания по решению:
Возможное решение:
cTpoka="всякий бред" maccuB=cTpoka.split("") maccuB=maccuB.sort_by{rand} puts maccuB.to_s
Замечания по решению:
[править] Дана строка в которой записаны слова через пробел. Необходимо перемешать в каждом слове все символы в случайном порядке кроме первого и последнего.
Возможное решение:
a = "start checking" v = a.split(" ") n = v.map{ |t| c = t[1..-2].split('').sort_by{ rand }.to_s; t[0..0] + c + t[-1..-1] } p n.join(" ")
Замечания по решению:
[править] Дана строка, состоящая из символов латиницы. Необходимо проверить, образуют ли прописные символы этой строки палиндром.
Возможное решение:
a = "123f" b = a.reverse p a == b
Замечания по решению: Решение неверное. Не учтено, что палиндром должны образовать прописные символы.
Возможное решение:
str = "PAS11asdsadsaHSAP" a = str.split("").select{ |elem| (elem>="A")&&(elem<="Z") }.join p( a == a.reverse )
Замечания по решению: Решение слишком громоздкое. Нет нужды преобразовывать строку в массив, а потом назад.
Возможное решение:
str = "PAS11asdsadsaHSAP" a = str.scan(/[A-Z]/) p a == a.reverse
Замечания по решению:
[править] Дана строка в которой записаны слова через пробел. Необходимо посчитать количество слов с четным количеством символов.
Возможное решение:
str = "bla blah blah" p str.split.count{|i| i.size.even?}
Замечания по решению: Ruby 1.9.1
Возможное решение:
str = "bla blah blah" a = str.split p a.select{ |n| n.size%2 == 0 }.size
Замечания по решению:
Возможное решение:
stroka = "abc cbur cbo64" a = stroka.split(" ").select{ |i| i.size % 2 == 0} p( a.size )
Замечания по решению:
Возможное решение:
m = "a aa aa a aa".split(" ") p( m.select{ |i| i.size % 2 == 0 }.size )
Замечания по решению:
Возможное решение:
string = "oguH gBa Tpu" a = string.split(' ') c = a.find_all{ |elem| elem.size%2 == 0 } d = c.size p d
Замечания по решению:
[править] Дана строка. Необходимо проверить образуют ли строчные символы латиницы палиндром.
Возможное решение:
a = "Abbabb123" b = ('A'..'Z').to_a + ('0'..'9').to_a + "!@\"$%^&*()_+-=`~{}[](),.;:|\//".split("") p( ( a.split("") - b ).join("") == (a.split("") - b ).join("").reverse )
Замечания по решению: Просто жуть какая-то.
Возможное решение:
str = "Abbabb123" a = str.scan /[a-z]/ p a == a.reverse
[править] Дана строка. Необходимо подсчитать количество букв "А" в этой строке.
Возможное решение:
cTpoka = "тестовая строка" p( cTpoka.split("").select{ |i| i=="А" || i=="а" }.size )
Замечания по решению: Длинно.
Возможное решение:
str = "Abbabb123" p str.scan(/[Aa]/).size
Возможное решение:
str = "Abbabb123" p str.count 'Aa'
Замечания по решению: Ruby 1.9.1
[править] Дана строка в которой записаны слова через пробел. Необходимо посчитать количество слов.
Возможное решение:
m = "pa3 gBa Tpu" p m.split(" ").size
Замечания по решению:
Возможное решение:
cTpoka = "поезд ехал быстро" p cTpoka.split.size
Замечания по решению:
[править] Дана строка в которой содержатся цифры и буквы. Необходимо расположить все цифры в начале строки, а буквы -- в конце.
Возможное решение:
s = "абв1где25жзи" mac = s.split("") a,b = mac.partition{ |e| ("0".."9").include?(e) } s_1 = a+b puts( s_1.to_s )
Замечания по решению:
Возможное решение:
cTpoka = "12а3буква" puts cTpoka.split('').partition{ |elem| (elem >= "0")&&(elem <= "9") }.flatten.join("")
Замечания по решению:
Возможное решение:
s = "абв1где25жзи" print s.split('').sort.join
Замечания по решению:
Возможное решение:
str="fghfg567fhf35fghf!*6111фыва8" print str.split("").partition{|e| e=~/\d/}.flatten.join
Замечания по решению:
[править] Дана строка в которой записаны слова через пробел. Необходимо перемешать все слова в случайном порядке (спонсор задачи Мастер Йода).
Возможное решение:
m = "pa3 gBa Tpu" m.split(" ").sort_by{ rand }.join(" ")
Замечания по решению:
Возможное решение:
cTpoka = "МИР ТРУД МАЙ" puts cTpoka.split.sort_by{ rand }.join(" ")
Замечания по решению:
[править] Дана строка в которой записаны слова через пробел. Необходимо упорядочить слова по количеству букв в каждом слове.
Возможное решение:
s="aa daaaa qaaa" p s.split(/ /).sort_by{|i| i.size}.join(" ")
Замечания по решению:
Возможное решение:
m = "i got co" p m.split.sort_by(&:size).join(' ')
Замечания по решению: Ruby 1.9.1
Возможное решение:
str = "slo va" a = str.split(" ").sort_by{ |i| i.size } p( a.to_s )
Замечания по решению:
Возможное решение:
m = "Tpu gBa pa3" m.split(" ").sort_by{ |str| str.size }
Замечания по решению:
[править] Дано натуральное число. Необходимо найти количество различных цифр в его десятичной записи.
Возможное решение:
a = 123415 b = a.to_s( 10 ).split("") c = b.uniq p c.size
Замечания по решению:
Возможное решение:
a = 1234 p a.to_s(10).split('').uniq.size
Замечания по решению:
Возможное решение:
x = 12344721 p( x.to_s.split('').uniq.size )
Замечания по решению:
[править] Дан массив в котором находятся строки "белый", "синий" и "красный" в случайном порядке. Необходимо упорядочить массив так, чтобы получился российский флаг.
Возможное решение:
s = ["синий","белый","красный"] puts s.sort.sort_by{ |i| i.size }
Замечания по решению:
[править] Дана строка в которой записан путь к файлу. Необходимо найти имя файла без расширения.
Возможное решение:
a = "i/input/jnd/file.ext" puts( a.split("/")[-1].split('.')[0] )
Замечания по решению:
Возможное решение:
a = "i/input/jnd/file.ext" puts a.split(/\W/)[-2]
Замечания по решению: Ошибка, если в имени файла присутствует точка.