Вы можете сделать что-то вроде этого, чтобы нажать на вторую ячейку:
let secondCell = app.collectionViews.children(matching:.any).element(boundBy: 1)
if secondCell.exists {
secondCell.tap()
}
или использовать предикат:
let predicate = NSPredicate(format: "label BEGINSWITH 'test'")
let cell = app.collectionViews.cells.element(matching: predicate)
Следующее, кажется, работает. Я вынул арифметику с плавающей точкой и в квадрате вместо квадратного укоренения. Я также заменил цикл удаления "избранным" вызовом.
while primes[index]**2 <= primes.last
prime = primes[index]
primes = primes.select { |x| x == prime || x%prime != 0 }
index += 1
end
Править: Я думаю, что выяснил, как Вы пытаетесь сделать это. Следующее, кажется, работает и, кажется, больше соответствует Вашему исходному подходу.
while Math.sqrt(primes.last).ceil >= primes[index]
(primes[index] * 2).step(primes.last, primes[index]) do
|x|
primes.delete(x)
end
index += 1
end
Существует быстрое внедрение по www.scriptol.org:
def sieve_upto(top)
sieve = []
for i in 2 .. top
sieve[i] = i
end
for i in 2 .. Math.sqrt(top)
next unless sieve[i]
(i*i).step(top, i) do |j|
sieve[j] = nil
end
end
sieve.compact
end
Я думаю, что это может быть изменено к лучшему немного таким образом:
def better_sieve_upto(n)
s = (0..n).to_a
s[0] = s[1] = nil
s.each do |p|
next unless p
break if p * p > n
(p*p).step(n, p) { |m| s[m] = nil }
end
s.compact
end
... в основном из-за более быстрой инициализации массива, я думаю, но это крайне. (Я добавил #compact
обоим для устранения нежелательного nil
s)