Прохождение на любой процент (Any%). Игрок сам устанавливает для себя процент от игры, который он собирается пройти — только основной сюжет или со сбором некоторых предметов, получение определенных способностей или наград. Это может быть неполное прохождение, а лишь определенный уровень или локация.

Полное прохождение всего (100%). В этом случае требуется пройти игру полностью: все доступные основные и дополнительные квесты, все испытания и посещение всех локаций. Сюда входит сбор всех возможных коллекционных предметов, умений и прочих наград.

Прохождение с наименее возможным процентом (Low%) заключается в том, что спидраннер должен пройти игру, поучаствовав в как можно меньшем количестве активностей.

Прохождение без использования игровых глюков (Glitchless) — это прохождение, где спидраннеру запрещено использовать любые недоработки. Игру нужно проходить максимально честно и так, как это задумывалось разработчиками, без всевозможных лазеек.

Источник: otvet.mail.ru

самый глючный сид в minecraft…

Эффективное использование any и all в Python

Вот вам задача: надо проверить, входит ли число 200 миллионов в диапазон от 0 до 1 миллиарда. Знаю, что на Python её решение выглядит до крайности примитивно — достаточно воспользоваться функцией any и списковым включением:

def find_200_million() -> bool: return any([number == 200_000_000 for number in range(1_000_000_000)])

Правда, работает это всё не так уж и быстро. Всё же, речь идёт о миллиарде чисел… Программа просто «подвисает» на то время, что нужно для её выполнения. В моём случае это «подвисание» растянулось на 42 секунды.

Почему? Можно ли обойтись без «подвисания»?

Для начала разберёмся с тем, что тут происходит, а потом подумаем о том, можно ли как-то ускорить эту программу.

Когда мы вызываем функцию — происходит две вещи:

  1. Запускается механизм спискового включения, генерирующий список из примерно 1 миллиарда логических значений, указывающих на то, равно ли каждое из чисел 200 миллионам.
  2. Затем запускается функция any . Она перебирает этот список, проверяя, равен ли какой-нибудь из его элементов значению True . А как только это значение будет обнаружено, функция возвращает результаты своей работы.

Получается, что тут имеется два цикла, в ходе выполнения которых происходит 1,2 миллиарда итераций! Функция any доберётся до 200-миллионного значения достаточно быстро. А вот списковое включение, с другой стороны, создаёт «тяжёлый» список из 1 миллиарда логических значений. Это занимает много времени. Когда я запустил эту программу, формирование списка заняло примерно 40 секунд.

А функция any нашла в нём первое значение True всего за 2 секунды.

Теперь, когда мы выяснили, что тут происходит — зададимся вопросом о том, можно ли улучшить производительность программы. Главные проблемы здесь — необходимость работы с огромным количеством значений, и то, что создание списка занимает определённое время. А значит — если мы сократим количество значений, добавляемых в список, это должно привести к тому, что программа будет работать быстрее.

Майнкрафт «Удивительное Обновление» 22w13oneBlockAtATime | Майнкрафт Открытия

Более эффективная реализация механизма спискового включения

Наш список можно сделать меньше, пользуясь фильтрующей конструкцией if спискового включения. Это приведёт к генерированию списка, содержащего только значения True :

def find_200_million() -> bool: return any([True for number in range(1_000_000_000) if number == 200_000_000])

Теперь мы генерируем список, который содержит лишь один элемент — для каждого числа, равного 200 миллионам. В нашем случае это значит, что получится список, содержащий лишь один элемент. Тестируя это решение, я обнаружил, что список формируется за 33 секунды — примерно на 7 секунд быстрее.

А функция any завершает работу почти мгновенно, так как ей надо проверить список, в котором содержится лишь один элемент. Поэтому теперь вместо 42 секунд на решение задачи уходит лишь 33 секунды!

Можно ли это ещё как-нибудь ускорить?

33 секунды — это всё ещё серьёзное время. Как его улучшить? Сейчас механизм спискового включения перебирает 1 миллиард элементов, каждый из них проверяет, а потом выдаёт список. Что если вместо этого использовать генераторное выражение? Принесёт ли это пользу?

Читайте также:  Фпс бустер Майнкрафт пе

def find_200_million() -> bool: return any(True for number in range(1_000_000_000) if number == 200_000_000)

Этот вариант программы выдаёт результат всего за 6 секунд!

Почему генераторное выражение оказывается таким быстрым?

Генераторные выражения не быстрее списковых включений. Единственное их преимущество заключается в том, что они создают следующий элемент списка по запросу. А списковые включения заранее генерируют весь список. При использовании any ценность генераторных выражений в том, что они останавливаются при обнаружении совпадения.

Пошагово разберём вышеприведённый код для того чтобы лучше понять то, как он работает:

  1. Создаётся генератор, который идёт по значениям от 0 до 999,999,999 и выдаёт True для каждого значения, равного 200 миллионам.
  2. Функция any получает генератор и запрашивает из него первое значение.
  3. Генератор начинает проходиться по числам до тех пор, пока не выдаст то, которое соответствует условию равенства 200 миллионам. После этого он выдаёт True . Это значение получает any .
  4. Когда функция any получает True , она завершает работу, ничего больше не проверяя.

Получается, что эта программа быстрее из-за того, что она не перебирает числа диапазона, превышающие 200 миллионов!

Если же, с другой стороны, мы искали бы последнее число в диапазоне (999,999,999), скорость нашего решения была бы практически такой же, как при использовании спискового включения. Новое решение быстрее старого только в том случае, когда первое значение, удовлетворяющее условию, не находится в конце пространства поиска.

Хорошо, а что если бы мы не воспользовались фильтрацией с помощью if?

А тут появляется такой вопрос: что если бы мы построили условие с использованием получаемого значения и не пользовались бы фильтром if в генераторном выражении?

def find_200_million() -> bool: return any(number == 200_000_000 for number in range(1_000_000_000))

Этот вариант решения задачи завершает работу примерно за 9 секунд. То есть — он примерно на 3 секунды медленнее, чем при использовании фильтра if . Это так из-за того, что теперь генератор получает False для чисел от 0 до 199,999,999, а any , до завершения работы, приходится делать 200 миллионов проверок. А это на 199,999,999 больше проверок, чем тогда, когда мы пользовались фильтрацией с помощью if .

Итоги

Использование фильтрации, основанной на if , сужает пространство поиска, которое нужно просматривать any . При правильном использовании фильтрации функции any приходится проверить лишь первое полученное значение. Кроме того, в ситуациях, подобной нашей, рекомендуется пользоваться генераторными выражениями. Они не всегда быстрее списковых включений, но они останавливаются сразу после того, как any завершает работу. Это часто приводит к экономии времени и всегда позволяет экономить память!

Так, погодите, а что там с функцией all?

Применимо ли это всё к функции all ? Можно ли ускорить и её? Да! Это возможно!

Функция any интересуется значениями True и возвращает True , находя первое из них, или False — если не нашла ни одного. А функция all действует с точностью до наоборот. Она ищет значения False и возвращает False , когда найдёт первое такое значение, или возвращает True , если ни одного значения False не нашла. Поэтому те же подходы к оптимизации кода можно применить и к all , перенастроив if на поиск состояния отказа и выдавая False , а не True !

def all_not_equal_to_200_million() -> bool: return all(False for number in range(1_000_000_000) if number == 200_000_000)

В этом коде False выдаётся только в том случае, если будет найдено число, удовлетворяющее состоянию отказа, соответствующего равенству значения 200 миллионам. Если ни одно число не равно 200 миллионам — ничего не будет выдано и all вернёт True , так как генератор окажется пустым.

В итоге оказывается, что выжать максимальную производительность из any и all можно, пользуясь генераторными выражениями и фильтрами, основанными на if .

Читайте также:  Где можно найти картошку в Майнкрафте

О, а приходите к нам работать?

Мы в wunderfund.io занимаемся высокочастотной алготорговлей с 2014 года. Высокочастотная торговля — это непрерывное соревнование лучших программистов и математиков всего мира. Присоединившись к нам, вы станете частью этой увлекательной схватки.

Мы предлагаем интересные и сложные задачи по анализу данных и low latency разработке для увлеченных исследователей и программистов. Гибкий график и никакой бюрократии, решения быстро принимаются и воплощаются в жизнь.

Сейчас мы ищем плюсовиков, питонистов, дата-инженеров и мл-рисерчеров.

Источник: habr.com

Как использовать Some и Any в английском языке (правила и примеры)

местоимения some и any

Слова some и any используются в разных значениях, также есть производные от них местоимения со схожими значениями. Основное правило заключается в том, что обычно (но не всегда) some используется в утвердительных предложениях, а any в отрицаниях и вопросах.

«Обычно, но не всегда», потому что some может использоваться и в вопросах, об этом я подробнее рассказал в пункте «Когда some используется в вопросах вместо any».

Содержание:

  • Some и Any в значении «несколько, какое-то, какие-нибудь» — перед существительным во мн. числе.
  • Some и Any в значении «некоторое количество, немного» — перед неисчисляемым существительным.
  • Some в значении «некий, какой-то» — перед исчисляемым существительным в ед. числе.
  • Some в значении «некоторые» — перед существительным во мн. числе.
  • Any в значении «любой, всякий».
  • Когда Some используется в вопросах вместо Any.
  • Местоимения, производные от Some и Any.

Some и any в значении «несколько, какое-то, какие-нибудь» — перед существительным во множественном числе

Some и any могут использоваться в значениях «несколько, какое-то, какие-нибудь» перед исчисляемыми существительными во множественном числе (some и any выступают как местоимения-прилагательные, то есть заменять прилагательное). В этом случае на русский язык some обычно не переводится.

Пройдите тест на уровень английского:

There are some books on the shelf. — На полке есть книги (несколько книг, какие-то книги).

I am going to feed some birds. — Я собираюсь покормить птичек (некоторое количество птиц, каких-то птичек).

Have you got any yellow bricks? — У вас есть желтые кирпичи? (какое-то количество кирпичей)

Jack doesn’t have any matches. — У Джека нет спичек (никаких).

They asked me some questions. — Они задали мне несколько вопросов.

Примечание: some и any могут также использоваться вместо существительных во множественном числе, выступая как местоимения-существительные.

They wanted to see some samples of our product, and we sent them some. — Они хотели увидеть образцы нашей продукции (некое кол-во), и мы отправили им несколько (образцов).

I needed some nails, but they didn’t have any. — Мне нужны были гвозди (некое кол-во), но у них их не было.

Some и any в значении «некоторое количество, немного» — перед неисчисляемым существительным

В примерах выше местоимения some и any использовались в значении «несколько, какие-нибудь», то есть речь шла не только о количестве, но и о его неопределенности. Второй случай очень близок похож по значению к первому, но здесь не может быть значения «несколько», так как речь идет о неисчисляемом предмете.

В значениях «некоторое количество, немного, сколько-то» some, any употребляются перед неисчисляемым существительным.

Give me some money please — Дай мне (немного, сколько-то) денег, пожалуйста.

I have got some food — У меня есть (немного, некое кол-во) еды.

Don’t give me any money — Не давай мне (нисколько) денег.

I haven’t got any food — У меня нет еды (нисколько).

Примечание: some и any могут также использоваться вместо неисчисляемого существительного.

I need oil. Please pass me some. — Мне нужно масло, передай мне, пожалуйста, немного (масла).

She needs some water, but we don’t have any. — Ей нужна вода (сколько-то), но у нас ее нет (нисколько).

Some в значении «некий, какой-то» — перед исчисляемым существительным в единственном числе

Some перед исчисляемым существительным в единственном числе употребляется в значении «какой-то, некий». Это особенно характерно для разговорной речи.

Someone asked about you. Some guy. — Кто-то про тебя спрашивал, какой-то парень.

There is some picture on the wall. — На стене какая-то картина.

I can see some strange cloud in the sky. — Я вижу какое-то странное облако в небе.

Some в значении «некоторые» — перед существительными во множественном числе

Перед существительными во множественном числе some может употребляться в значении «некоторые» (как местоимение-прилагательное).

Some people know what they want, some don’t — Некоторые люди знают чего хотят, некоторые нет.

Some flowers are not beautiful — Некоторые цветы некрасивы.

Если это существительное обозначает группу лиц/предметов и перед ним стоит артикль the, притяжательное (my, her и проч.) или указательное местоимение (this, those и др.), после some ставится of.

Some of my neighbors don’t like my dog. — Некоторым моим соседям не нравится моя собака.

Some of the candidates didn’t come to the interview. — Некоторые кандидаты не пришли на собеседование.

Any в значении «любой, всякий»

Местоимение any также употребляется в значении «любой, какой-нибудь» в утвердительных и вопросительных предложениях.

Visit me at any time — Приходи ко мне в любое время.

You can use any tool — Вы можете использовать любой инструмент.

Когда some используется в вопросах вместо any

Я отмечал в начале статьи, что some, как правило, используется в утверждениях, а any — в вопросах и отрицаниях. Однако есть случаи, когда some используется в вопросах — здесь все зависит от того, какой смысл мы вкладываем в предложение.

Читайте также:  Как выглядит школа в Майнкрафте

Возьмем, например, вопрос:

Do you have any salt? — У вас есть соль? (сколько-нибудь соли)

Здесь мы спрашиваем, есть ли у собеседника хоть сколько-нибудь соли, какое-нибудь количество соли, то есть нас интересует наличие соли вообще у этого человека. Если any заменить на some, то смысл немного изменится.

Do you have some salt? — У вас есть соль? (немного соли, некоторое количество соли)

Здесь мы уже спрашиваем, есть ли у собеседника некоторое количество соли. Это довольно небольшая и не всегда существенная разница. Она особенно заметна, если мы хотим что-то предложить, тогда some уместнее:

Would you like some ice-cream?

В этом примере «some ice-cream» значит «некоторое количество, сколько-то, немного мороженого». Как правило, подобные вопросы задают именно с «some». Но если сказать:

Would you like any ice-cream?

То получится странноватый вопрос, как если бы мы спросили очень робко, будто боясь отказа, не желаете ли вы какого-нибудь мороженого?

Когда мы просим некоторое количество чего-то, тоже уместнее some, например:

Can I take some sugar?

Этот вопрос поймут, как «Могу я взять (немного) сахара?» Но если сказать:

Can I take any sugar?

Смысл будет: «Могу ли я взять любой сахар?» Как если бы мне предложили к чаю на выбор 10 видов сахара, а я уточнил, действительно ли я могу взять любой из них?

Местоимения, производные от Some и Any

Местоимения some и any могут сочетаться с one, body, thing, образуя неопределенные местоимения someone, somebody, anyone, anybody, something, anything.

Some Any One

Body

thing

Someone — кто-то Anyone — кто-нибудь
Somebody — кто-нибудь Anybody — кто-нибудь
Something — что-то Anything — что-нибудь

Подобно some и any производные от some используются в утвердительных предложениях, а производные от any в отрицательных и вопросительных.

Somebody is hiding there — Кто-то там прячется.

Is anybody hiding there? — Там кто-нибудь прячется?

Источник: langformula.ru