Ruby/Практикум/Итераторы: различия между версиями

Содержимое удалено Содержимое добавлено
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 5:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5, 6, 7, 8]
p a.select{ |i| i.even? }.size</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 12:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5, 6, 7, 8]
p a.select{ |i| i%2 == 0 }.size</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 19:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5, 6, 7, 8]
p a.select{ |i| i[0].zero? }.size</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 26:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5, 6, 7, 8]
p a.find_all{ |i| i%2 == 0 }.size</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 33:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>
a = [1, 2, 3, 4, 5, 6, 7, 8]
p a.inject(0){ |sum, i| (i%2 == 0) ? (sum+1) : sum }
</syntaxhighlight>
</source>
 
'''Замечания по решению:'''
Строка 42:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>
a = [1, 2, 3, 4, 5, 6, 7, 8]
p a.count{ |i| i.even? }
</syntaxhighlight>
</source>
 
'''Замечания по решению:''' Ruby 1.9.1
Строка 51:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>
a = [1, 2, 3, 4, 5, 6, 7, 8]
p a.delete_if{ |i| i.odd? }.size
</syntaxhighlight>
</source>
 
'''Замечания по решению:'''
Строка 62:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = 20
a = Array.new(m-1){ |i| i+1 }
b = a.select{ |x| m % x == 0 }
p( b.inject(0){ |result,elem| result+elem } == m )</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 73:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>n=8128
n1=0
(1...n).each{|d| n1+=d if n%d==0}
p n==n1</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 83:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>
def is_perfect(num)
((1...num).to_a.select {|n| num%n == 0}).reduce(:+) == num
end
</syntaxhighlight>
</source>
 
'''Замечания по решению:'''
Строка 95:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1,2,3,2,3,4,2,4,6,7]
p( (1..m.size-2).to_a.select{ |i| (m[i] > m[i-1])&&(m[i] > m[i+1]) }.size )</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 105:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>maccuB = [4, 8, 6, 5, 1, 2, 3, 5, 4, 8, 9, 6]
p (1...maccuB.size-1).select{ |x| (maccuB[x] > maccuB[x-1])&&(maccuB[x] > maccuB[x+1]) }.size</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 114:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>
require 'enumerator'
m = [1,2,3,2,3,4,2,4,6,7]
cnt=0
m.each_cons(3){|a,b,c| cnt+=1 if a<b and b>c}
p cnt</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 127:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [5, -12, 5, -12, 9, -25]
p (1...m.size-1).all?{ |i| ((m[i-1] < 0) && (m[i+1] < 0)) || ((m[i-1] > 0) && (m[i+1] > 0)) }</sourcesyntaxhighlight>
 
'''Замечания по решению:''' тут ошибка - не работает для полностью положительного или полностью отрицательного массива. Не хватает проверки текущего значения:
<sourcesyntaxhighlight lang=ruby>
((m[i] > 0) && (m[i-1] < 0) && (m[i+1] < 0)) || ((m[i] < 0) && (m[i-1] > 0) && (m[i+1] > 0))
</syntaxhighlight>
</source>
 
 
Строка 139:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>maccuB = [1, -2, 5, -4]
p (0..maccuB.size-2).all?{ |x| (maccuB[x] * maccuB[x+1]) < 0 }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 146:
 
'''Возможное решение:'''
<sourcesyntaxhighlight lang=ruby>array = [1,-2,3,-4]
(0..array.size - 1).all? { |i| (array[0] < 0) ? (i.even? ? array[i] < 0 : array[i] >= 0 ) : (i.even? ? array[i] >= 0 : array[i] < 0) }</sourcesyntaxhighlight>
 
=== Дан целочисленный массив и отрезок a..b. Необходимо найти элементы, значение которых принадлежит этому отрезку. ===
Строка 153:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>
m = [1, 2, 3, 4, 5]
ab = (3..5)
p m&ab.to_a</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 162:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1, 2, 3, 4, 5]
ab = (3..5)
p m.select{ |i| ab.include?( i ) }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 170:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1, 2, 3, 4, 5]
a = 1
b = 20
p m.select{ |x| x>=a && x<=b }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 179:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1, 2, 3, 4, 5]
a,b = 2,5
p ( m - (m - ((a..b).to_a)) )</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 189:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>A,N = 5,7
diapazon = 4..N
p diapazon.inject(1 + A + A*2 - A*3){ |sum,i| sum + (-1**i)*A*i }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 202:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>R,macc = 13.0, [3.1, 7.2, 10.3, 15.5]
macc = macc.sort
b = macc.select{ |i| i<R }
Строка 212:
else
puts d
end</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 221:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a, R = [1.2,2.5,3.1,4.3,2.1,3.6,5.7], 4.0
p a.sort_by{ |i| (i-R).abs }[0]</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 232:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>R,arr = 13.0, [3.1, 7.2, 10.3, 10.6, 15.5]
require 'enumerator'
arr.each_cons(2){|a,b| if a <=R and b>=R then if R-a<=b-R then p a else p b end end}</sourcesyntaxhighlight>
 
'''Замечания по решению:''' неправильно и не читабельно, насколько я понял, ошибка в том что не дописан else для первого if.
 
'''Возможное решение:'''
<sourcesyntaxhighlight lang=ruby>arr, a = [ 1.3, 1.51, 1.46, 0.33, 2.45 ], 1.48
arr.map! { |l| (l-a).abs }.index(arr.min)</sourcesyntaxhighlight>
 
'''Замечания по решению:''' неточность - нужно найти элемент массива, а не его индекс<br/>
Строка 246:
 
'''Возможное решение:'''
<sourcesyntaxhighlight lang=ruby>
R,m = 13.0, [3.1, 7.2, 10.3, 15.5]
dif = m.map{|elem| (R - elem).abs}
p m[dif.index(dif.min)]
</syntaxhighlight>
</source>
[[Участник:BlindMan|BlindMan]] ([[Обсуждение участника:BlindMan|обсуждение]]) 22:12, 28 сентября 2012 (UTC)
 
'''Возможное решение:'''
<sourcesyntaxhighlight lang=ruby>
arr_f = Array.new(100){|x| x = rand(0.0 .. 1.5)}
r = rand(0.0 .. 1.5)
Строка 263:
end
print("---Наболее близкое значение к #{r} это #{val} ", "\n")
</syntaxhighlight>
</source>
 
=== Дан целочисленный массив. Необходимо найти максимальный нечетный элемент. ===
Строка 269:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5, 6, 7, 8]
p a.select{ |i| i.odd? }.max</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 276:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5, 6, 7, 8]
p( a.select{ |i| i%2 == 1 }.max )</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 283:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5, 6, 7, 8]
p a.reject{ |i| i.even? }.max</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 292:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = 12
b = (1..a)
p( b.select{ |n| (a%n==0) } )</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 303:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>n = 20
mas = (1..n).to_a
p( mas.find_all{ |x| x%n == 0 } )</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 315:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [5, 4, 1, 3, 2, 7, 0, 1, 7]
temp = (1...m.size).select{ |x| m[x] < m[x-1] }
p temp, temp.size</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 325:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1, 2, 3, 4, 5]
ab = (3..5)
p m.count{ |i| ab === i }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 333:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1, 2, 3, 4, 5]
a,b = 3,5
m.select{ |i| (a..b).include?( i ) }.size</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 341:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1, 3, 4, 5, 6, 9, 3]
indd = 0..m.size-1
a,b = 3,7
p indd.select{ |n| (m[n] >= a)&&(m[n] <= b) }.size</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 350:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [10,1,51,12,14,100]
s = (1..10)
p m.select{|i| s === i}.length</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 360:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1,2,3,4,5,6,7]
s = (0..m.size-1).to_a
p s.partition{ |i| i[0].zero? }.flatten.map{ |i| m[i] }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 371:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1,2,3,4,5,6]
(0...a.size).partition{ |x| x%2 == 0 }.flatten.map{ |x| a[x] }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 381:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>arr = [3, 7, 10, 6, 15]
 
p arr.partition{|e| arr.index(e)%2 == 0}</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 390:
 
'''Возможное решение:'''
<sourcesyntaxhighlight lang=ruby>m = [1,2,3,4,5,6,7,8,9,10]
0.step(m.size-1, 2){|i| print "#{m[i]} " }
1.step(m.size-1, 2){|i| print "#{m[i]} " }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 399:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [7,0,4,6,0,3,6,9,0]
(0...a.size).each { |i| i.odd? a.push(a.delete_at(i)) }</sourcesyntaxhighlight>
 
'''Замечания по решению:''' - не правильное решение, i.odd? проверяет индексы от а, а в этот момент a.delete_at(i) уже изменил массив, уменьшив его на один элемент
Строка 406:
 
'''Возможное решение: к чему сложности...'''
<sourcesyntaxhighlight lang=ruby>
arr = Array.new(100){|x| x = rand(0..100000)}
even_ ={}; noeven_= {}
Строка 413:
end
print(even_,"\n", noeven_, "\n")
</syntaxhighlight>
</source>
 
=== Дан целочисленный массив. Необходимо найти минимальный четный элемент. ===
Строка 419:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5]
p a.select{ |i| i.even? }.min</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 426:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5]
p a.reject{ |i| i.odd? }.min</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 433:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5]
p a.select{ |i| i[0] == 0 }.min</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 440:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5]
p a.select{ |i| i%2 == 0 }.min</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 449:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5]
p (a.inject(0){ |sum, i| sum + i.abs }.to_f) / a.size</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 456:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>mac = [1, 2, 3, 4, 5]
d = mac.size
jopa = mac.map{ |jo| jo.abs }
j = jopa.inject(0){ |c,jo| c+jo }
j/d</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 468:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5]
b = a.inject(0){ |b,c| b + c }.to_f / a.size
a.select{ |i| i < b }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 476:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, 3, 4, 5, 6]
b = a.inject(:+).to_f / a.size
a.select{ |i| i < b }</sourcesyntaxhighlight>
[[Участник:BlindMan|BlindMan]] ([[Обсуждение участника:BlindMan|обсуждение]]) 12:00, 29 сентября 2012 (UTC)
 
Строка 485:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 1, 1, 2, 3, 4]
p a.count{ |i| i == a.min }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 492:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1, 1, 1, 2, 3, 4]
a = m.min
b = m.select{ |i| i == a }
p b.size</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 501:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1, 2, 3, 4, 5]
p m.select{ |x| x == m.min }.size</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 510:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>A,N = 10,15
p (1..N).inject(1){ |s,i| s+A*i }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 520:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>A,N = 20,15
(0..N).map{ |x| x*A }.inject(1){ |x,y| x+y }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 532:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>n = 15
maccuB = (1..n).to_a
maccuB = maccuB.partition{ |i| i[0].zero? }[ n%2 ]
p( maccuB.inject(1){ |result,elem| result*elem } )</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 544:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>n = 23
a = (1..n).to_a
p( a.partition{ |x| x%2 == 0 }.select{ |x| x.index( a[-1] ) }.flatten.inject(1){ |rez,x| rez*x } )</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 555:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>n=7
product=1
n.step(1,-2){|v| product*=v}
p product</sourcesyntaxhighlight>
 
'''Замечания по решению:''' вот это красота! Только лучше .inject(:*) для произведения использовать
Строка 567:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>n = 11
p (1..n).inject(1){|pr,e| pr= (e%2 ==n%2)? pr*e : pr}</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 576:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>ab = (2..6)
p ab.inject(1){ |pr, i| pr = i.odd? ? pr*(i**3) : pr }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 583:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a,b = 4,19
p( (a..b).to_a.select{ |i| i[0]==1 }.map{ |elem| elem**3 }.inject(1){ |pe3yJIbTaT,nepemeHHa9| pe3yJIbTaT*nepemeHHa9 } )</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 592:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1, 2.5, 3, 3.5, 4, 4.5]
p s = (1...m.size-1).all?{ |i| (m[i-1]*m[i]).integer? == (m[i+1]*m[i]).integer? }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 603:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>array=[1.1,1,2.2,3,7.5]
int=array[0].integer? ? 0 : 1
p array.partition{|v| v.integer?}.flatten==(0..array.size-1).partition{|i| (i+int)[0].zero?}.flatten.map{|i| array[i]}
</syntaxhighlight>
</source>
 
'''Замечания по решению:'''
Строка 614:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>arr = [1, 2.5, 3, 3.5, 5, 4.5]
 
tmp = arr.partition{|e| arr.index(e)%2==0}
p tmp.select{|e| e.all?{|el| el.to_s.include? '.'}}.size==1</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 623:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>
 
array=[1.1,1,2,3,7.5]
p array.map!{|i| i.integer? ? 0 : 1}.all?{|i| array[i]!=array[i+1]}
</syntaxhighlight>
</source>
 
'''Замечания по решению:'''
Строка 635:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1, 2, 3, 4, 5, 6, 7, 8]
ab = (3..5)
p m.select{ |i| ab === i }.reduce(:+)</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 643:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>m = [1, 3, 7, 8, 9]
a = 1
b = 8
p m.select{ |i| (a..b).include?(i) }.inject(0){ |s,i| s+i }</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 652:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>arr = [1, 5, 3, 7, 4, 8]
a,b=3,7
p arr.inject(0){|s,e| s= (a..b).include?(e) ? s+e : s}</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 662:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, 2, -3, 3, 7, -4, 6]
p a.sort.reverse
</syntaxhighlight>
</source>
 
'''Замечания по решению:'''
Строка 670:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [5, -3, 6, 0, -6]
p a.partition{ |i| i >= 0 }.flatten</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 677:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>a = [1, -1, 3, 0, 5, -7]
k = a.select{ |i| i >= 0 }
s = a.select{ |i| i < 0 }
p k + s</sourcesyntaxhighlight>
 
'''Замечания по решению:'''
Строка 686:
'''Возможное решение:'''
 
<sourcesyntaxhighlight lang=ruby>array1 = [1, -2, 3, -4, 5, -6]
array2 = array1.find_all{ |elem| elem >= 0 }
array3 = array1.find_all{ |elem| elem < 0 }
p array2 + array3</sourcesyntaxhighlight>
 
'''Замечания по решению:'''