Ruby/Практикум/Правила
Материал из Викиучебника
[править] Правила
[править] Дана строка. Необходимо найти все даты, которые описаны в виде "31 февраля 2007".
Возможное решение:
str = "Сегодня 3 декабря 2007... или 2 декабря 2007... хз, короче" p str.scan(/([1-9]|[12][\d]|[3][01]) (декабря|января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября) ([1-9]{1}\d{3})/)
Замечания по решению:
[править] Дана строка. Необходимо найти максимальное из имеющихся в ней вещественных чисел.
Возможное решение:
str = "2.2 1.34 1.11 -11.11" p( str.scan(/\-\d+\.\d+|\d+\.\d+/).map{ |n| n.to_f }.max )
Замечания по решению:
Возможное решение:
a = "1.2zm139.256" p( a.scan(/[-+]?\d+\.\d+/).map{ |e| e.to_f }.max )
Замечания по решению:
[править] Дана строка. Необходимо найти все строчные символы латиницы, которые в ней используются.
Возможное решение:
cTpoka = "Hello! I'am string!" p( cTpoka.scan(/[a-z]/) )
Замечания по решению:
[править] Дана строка. Необходимо найти общее количество русских символов.
Возможное решение:
cTpoka = "ПРАВИЛО" p( cTpoka.scan(/[а-яА-Я]/).size )
Замечания по решению:
Возможное решение:
string = "первый нах" a = string.scan(/[А-Яа-я]+?/) b = a.size p( b )
Замечания по решению:
[править] Дана строка. Необходимо подсчитать количество чисел в этой строке, значение которых меньше 5.
Возможное решение:
p( "строка5211397ABCDGD".scan(/[0-4]/).size )
Замечания по решению:
[править] Дана строка. Необходимо найти наибольшее количество идущих подряд символов кириллицы.
Возможное решение:
str = "АБВГ джз ИКЛМНО" p( str.scan(/[а-яА-Я]+/).sort_by{ |str| str.size }.pop.size )
Замечания по решению:
Возможное решение:
$KCODE='u' s="строка2134567stringстрочечкаfgh" p s.scan(/[А-я]+/).sort_by{|e| e.size}[-1].size/2
Замечания по решению:
Решение с учетом юникода.
[править] Дана строка. Необходимо подсчитать количество чисел в этой строке, значение которых больше 5.
Возможное решение:
s = "21341234213412342189989678" p( s.scan(/[6-9]/).size )
Замечания по решению:
[править] Дана строка. Необходимо найти минимальное из имеющихся в ней натуральных чисел.
Возможное решение:
a = "ab23ca3" p( ( a.scan(/\d*/) - [""] ).map{ |i| i.to_i }.min )
Замечания по решению:
Возможное решение:
cTpoka = "abc98cg1107" p cTpoka.scan(/\d+/).map{ |s| s.to_i }.min
Замечания по решению:
[править] Дана строка. Необходимо найти все используемые в ней строчные символы латиницы.
Возможное решение:
str = "test1234" p( str.scan(/[a-z]/) )
Замечания по решению:
[править] Дана строка. Необходимо найти минимальное из имеющихся в ней рациональных чисел.
Возможное решение:
s = "1/2+4/3-2.5/7.8=0.0" puts( s.scan(/[-+]?\d+\/(?:\d{2,}|[1-9])/).map{ |i| i.split("/").map{ |j| j.to_i } }.map{ |i| Rational(i[0], i[1]) }.min )
Замечания по решению:
[править] Дана строка. Необходимо найти количество задействованных символов латиницы в этой строке (без дубликатов).
Возможное решение:
a = "I'm string" p( a.scan(/[a-zA-Z]/).uniq.size )
Замечания по решению:
[править] Дана строка. Необходимо найти все незадействованные символы латиницы в этой строке.
Возможное решение:
a = "AczqhF321L5I" m = a.scan(/[a-zA-Z]/) b = ("a".."z").to_a + ("A".."Z").to_a p( b - m )
Замечания по решению:
[править] Дана строка. Необходимо найти те символы кириллицы, которые не задействованы в данной строке.
Возможное решение:
s = "абВГдеЖ" a = ("а".."я").to_a + ("А".."Я").to_a puts(( a - s.scan(/[а-яА-Я]/) ).to_s )
Замечания по решению:
[править] Дана строка. Необходимо найти максимальное из имеющихся в ней натуральных чисел.
Возможное решение:
a = "asdas100j459jj3492" p( a.scan(/\d+/).map{ |i| i.to_i }.max )
Замечания по решению:
Возможное решение:
cTpoka = "213 2314n 234 2134 4kj234" p( cTpoka.scan(/\d+/).map{ |i| i.to_i }.max )
Замечания по решению:
Возможное решение:
cTpoka = "слово24слово1слово21" p cTpoka.split(/\D+/).map{ |x| x.to_i }.max
Замечания по решению:
[править] Дана строка. Необходимо найти наибольшее количество идущих подряд цифр.
Возможное решение:
a = "0000000b09786" p( a.scan(/\d+/).map{ |i| i.size }.max )
Замечания по решению:
[править] Дана строка. Необходимо подсчитать количество цифр в этой строке, значение которых больше 5.
Возможное решение:
cTpoka = "1234567890" p( cTpoka.scan(/[6-9]/).size )
Замечания по решению:
Возможное решение:
cTpoka = "1234567890" p( cTpoka.scan(/\d/).select{ |i| i.to_i > 5 }.size )
Замечания по решению:
[править] Дана строка. Необходимо найти минимальное из имеющихся в ней целых чисел.
Возможное решение:
a = "jhfg jhg578df-12" p( a.scan(/-{0,1}\d+/).map{ |i| i.to_i }.min )
Замечания по решению:
Возможное решение:
str = "5 3 6 -11" p( str.scan(/\-\d+|\d+/).map{ |elem| elem.to_i }.min )
Замечания по решению:
Возможное решение:
str = "1.2sdaf3.21223sd-12.12" p( str.scan(/(?:[-+]?\d+\.\d+)/).map{ |i| i.to_f }.min )
Замечания по решению:
Возможное решение:
cTpoka = "бред -1,2,3,-123" p( cTpoka.scan(/\d+|-\d+/).map{ |i| i.to_i }.min )
Замечания по решению:
[править] Дана строка в которой записан путь к файлу. Необходимо найти имя файла без расширения.
Возможное решение:
m = "d:\\games.exe" a = m.split(/\\/) b = a[-1].to_s d = b.split(/\./) p d[0]
Замечания по решению:
Возможное решение:
cTpoka = "/home/lbn/practice_05.rb" a = cTpoka.split(".").shift puts( a.split("/").pop )
Замечания по решению:
неправильный ответ, если путь содержит `.`
Возможное решение:
s = "/home/.lbn/practice_05.rb" p s[(s.rindex('/') || -1)+1..-1].split('.')[0]
Замечания по решению:
Возможное решение:
s = "/home/.lbn/practice_05.rb" # s = "/home/.lbn/.5practice" s=~%r{^/?(?:[^/]+/)*(?:([^/]+)\.[^./]+|\.([^./]+))$} p $1 || $2
Замечания по решению:
Возможное решение:
s = "/home/.lbn/practice_05.rb" s.split('/')[-1]=~%r{^(?:([^/]+)\.[^./]+|\.([^./]+))$} p $1 || $2
Замечания по решению:
[править] Дана строка. Необходимо найти наибольшее количество идущих подряд цифр.
Возможное решение:
stroka="1234ab1 12345bc de" p( stroka.scan(/\d{0,}/).sort_by{ |i| i.size }[-1].size )
Замечания по решению:
Возможное решение:
cTpoka = "12ab34 abc 123" a = cTpoka.scan(/\d{1,}/) b = a.sort_by{ |i| i.size } c = b[-1] d = c.size p d
Замечания по решению:
Возможное решение:
cTpoka = "213 234поп2134" p( cTpoka.scan(/\d+/).sort_by{ |str| str.size }.pop.size )
Замечания по решению:
Возможное решение:
cTpoka = "123-123123*12312312+12312-312312=31" p( cTpoka.scan(/\d+/).map{ |i| i.size }.max )
Замечания по решению:
Возможное решение:
a = "12a8976b" p a.split(/\D+/).map{ |x| x.size }.max
Замечания по решению: