Разное

Что такое arg – Игра в альтернативной реальности — Википедия

Что такое ARG? Всё об играх в альтернативной реальности

Маркетинг – это игра, которую со временем становится сложнее выиграть.

Раньше для того, чтобы получить результат, достаточно было навязчивой рекламной песенки (Just One Cornetto), слогана («Я это люблю!» сети McDonald’s) или кампании, которая объединяет самых известных музыкантов и звезд спорта (кампания Pepsi к Суперкубку).

Однако в 2018-м успешность рекламной кампании определяется ее виральностью, то есть тем, что о ней говорят в Twitter, Facebook и Instagram и говорят ли вообще.

Проблема в том, что понять, как сделать кампанию запоминающейся, – задача не из легких. В число самых известных виральных маркетинговых кампаний последних десяти лет входят ролик Old Spice («взгляните на своего мужчину и на меня») и маленькая танцующая пони мобильной сети Three. Повторить подобное не так-то просто.

Вместо того, чтобы надеяться на удачу, многие маркетологи ставят на ARG как на надежную стратегию. Благодаря своей интерактивности, ARG объединяет в себе способность оказаться у всех на устах и добродушную простоту, благодаря которой люди лучше относятся к рекламируемому бренду. Очень скоро ARG станут повсеместным явлением, поэтому давайте разберемся, что это такое.

Что такое ARG?

ARG – это аббревиатура, которая расшифровывается как «игра в альтернативной реальности» (Alternate Reality Game).

В свою очередь, игра в альтернативной реальности – это маркетинговая кампания или форма игры, которая использует элементы реального мира как часть нарратива или более масштабного сюжета. По сути, ARG – что-то вроде большой охоты на сокровища.

Например, игрокам могут предложить расшифровать подсказки из реального мира, а затем использовать эту информацию для того, чтобы получить другую – уже в цифровом формате. Это может выглядеть как поиск символа, нарисованного на памятнике «невидимыми чернилами» – то есть видимого только через приложение на смартфоне или планшете. Как вариант, представитель игры может передать игроку настоящее письмо, которое нужно перевести. Перевод, в свою очередь, будет содержать ссылку на сайт с дополнительными подсказками.

ARG могут быть как легкими в прохождении, так и сложными, в зависимости от целевой аудитории и намерений создателя игры. Если вы запланировали свою ARG на долгий период, было бы нелогично делать подсказки такими, что их с легкостью разгадал бы пятиклассник. С другой стороны, если ваша целевая аудитория склонна к разочарованию или нетерпелива, сложные подсказки – не лучший выбор. Вам может показаться, что подсказка на языке нджереп – это гениально, но если ваши игроки не входят в число четырех людей в мире, которые говорят на нем, их это очень не обрадует.

4 грандиозных примера ARG, которые стали виральными

Теперь, когда вы имеете представление о ARG, рассмотрим несколько продуманных ARG-кампаний, которые дали невероятные результаты. Эти ARG не только стали повсеместно известными, но и увенчались успехом, что наглядно показывает, почему множество маркетологов начинают следовать этому тренду.

ARG к пятому сезону Fortnite

Недавняя – и очень увлекательная – кампания в альтернативной реальности для флагмана Epic Games – Fortnite. Этот мультиплеерный шутер известен своими культовыми локациями (например, Брошенные Башни, Подлый Пруд и Чванливый Берег), а также стилизованными разноцветными ламами, которых можно атаковать и получать награды.

Безобидные элементы пейзажа вроде маскота выдуманной сети закусочных Durr Burger точно так же являются для игроков Fortnite культовыми. Поэтому они быстро заметили, когда начало происходить что-то странное.

Игра в альтернативной реальности по Fortnite началась раньше пятого сезона самой игры и прошла под темой «столкновение миров». Проявлялось это в том, что лам из игры можно был

plarium.com

/arg/ — Что такое ARG

(28Кб, 474×474) _Alternate Reality Games_ (игры в альтернативной реальности, иногда игры, изменяющие реальность) — интерактивное повествование с игровыми элементами, использующее в качестве платформы реальный мир.

_Основные принципы_
Один из основных принципов ARG — TINAG (от англ. This is not a game — «Это не игра»). Этот принцип предполагает, чтобы игра не вела себя как игра: например, телефонные номера, упоминаемые в игре, должны действительно существовать. Участники не получают особого игрового пространства или явного списка правил. Создатели и руководители ARG находятся за занавесом, само их существование до конца находится под вопросом. Под вопросом до конца должен находиться и игровой характер происходящего. Это отличает ARG от сходного явления — городских ролевых игр, где игроки точно знают, в какой игре они участвуют. Участники ARG постигают правила постепенно, методом проб и ошибок.

Ход игр в альтернативной реальности контролируется непосредственно разработчиками игры, а не искусственным интеллектом, как в компьютерных или консольных видеоиграх. Игроки напрямую взаимодействуют с персонажами игры посредством общения в сети, помогая им решать различные задачи и головоломки. Хотя основной платформой таких игр является интернет, часто ARG переходят в реальный мир. Например, игрокам могут предложить собраться в определённом месте для получения какой-либо информации.
Игроком можно стать, обратив внимание на какую-то загадку в реальности (вход в игру, который на сленге называется «кроличьей норой», отсылая к приключениям Алисы в Стране Чудес), начав разгадывать ребус, предложенный мастерами игры, которые в ARG называются «кукольниками» (puppetmasters). Тексты и действия, созданные кукольниками (в том числе и с помощью актёров) выполняют функции нитей, с помощью которых кукольник заставляет двигаться участников игры. Но участники своими действиями тоже развивают игру и заставляют кукольников избирать те или иные продолжения.

Coming up next: Marble Hornets.

2ch.hk

Что такое *args и **kwargs в Python

  • Опубликовано:
  • Теги: python

… или как использовать переменное количество аргументов в Python

Чтобы получить ответ на вопрос в заголовке, разделим его на две части:
  1. Что такое args и kwargs? (самые нетерпеливые могут подсмотреть ответ =) )
  2. Что обозначают звездочки?
Начнем с конца. В Python функции в качестве аргумента можно передавать не только отдельные объекты, но также коллекции.

Примечание:

Если функции передается список, то его элементы должны следовать в строго обусловленном заранее порядке, или, другими словами, на своих позициях (иначе как мы узнаем, что собой представляет определенный элемент списка?). Например, если функция sign_up() ждет от нас список [name, age, gender], то мы должны строго соблюдать этот порядок; мы не можем вызвать функцию sign_up(age, name, gender). Такие аргументы называются неименованными или позиционными.
Если же в качестве аргумента функции передается словарь, то порядок следования может быть произвольный, т.к. элементы словаря передаются с ключами, их уже не перепутаешь. Такие аргументы называются именованными.

Продолжая пример в примечании, обозначим наш список через переменную:

user_data_list = [name, age, gender]
А переменную передадим в функцию:
sign_up(*user_data_list)
При этом, чтобы функция восприняла в качестве аргумента не один объект (а коллекции также являются объектами как и вообще всё в Python), а несколько, коллекцию нужно распаковать. Как раз это и делают звездочки. Записи такого типа (с одной или двумя звездочками) в Python используются в двух случаях: при вызове (как мы сделали только что) и при определении функции.

*args и **kwargs при определении функции

Аргументы функции в Python, обозначаемые * и ** при определении или вызове, называются неопределенное количество позиционных или именованных аргументов. Очень мудрено. На самом деле это коллекции — списки, кортежи или словари. Первые два передают позиционные аргументы, словари — именованные аргументы.
Чтобы передать функции несколько аргументов в виде коллекции, коллекцию надо распаковать. Это делается одной или двумя звездочками.
Зададим функцию с одним формальным (позиционным) аргументом и неопределенным количеством дополнительных позиционных аргументов (здесь, два).
>>> def test_var_args(farg, *args):
...     print("formal arg:", farg)
...     for arg in args:
...         print("another arg:", arg)
...
>>> test_var_args(1, "two", 3)
formal arg: 1
another arg: two
another arg: 3
Функция с именованными аргументами задается так:
>>> def test_var_kwargs(farg, **kwargs):
...     print("formal arg:", farg)
...     for key in kwargs:
...         print("another keyword arg: %s: %s" % (key, kwargs[key]))
...
>>> test_var_kwargs(farg=1, myarg2="two", myarg3=3)
formal arg: 1
another keyword arg: myarg2: two
another keyword arg: myarg3: 3

Так что же такое args и kwargs?!!

Теперь вы готовы усвоить всю правду об этом 🙂
Имена args и kwargs по негласному соглашению принято использовать в документации Python. На самом деле никто не запрещает брать любые другие валидные имена переменных. Например, для словарей наряду c **kwargs иногда используют **options.

Применение * и ** при вызове функции

Теперь посмотрим как вызывать функцию с позиционными аргументами (уже демонстрировали выше). Здесь уже меньше смысла в args и kwargs, будет лучше выбрать более информативные имена (хотя в следующем примере мы не далеко в этом продвинулись =) ):
>>> def print_names(name1, name2, name3):
...     print("имя 1:", name1)
...     print("имя 2:", name2)
...     print("имя 3:", name3)
...
>>> name_list = ("Маша", "Витя")
>>> print_names("Коля", *name_list)
имя 1: Коля
имя 2: Маша
имя 3: Витя
Аргументы можно передавать и так:
>>> print_names(*['Коля', 'Маша', 'Витя'])
имя 1: Коля
имя 2: Маша
имя 3: Витя
Следующий пример показывает вызов функции с именованными аргументами:

>>> name_dic = {"name3": "Витя", "name2": "Маша"}
>>> print_names("Коля", **name_dic)
имя 1: Коля
имя 2: Маша
имя 3: Витя
То же самое с литералом:
>>> print_names(**{'name1': 'Коля', 'name2': 'Маша', 'name3': 'Витя'})
имя 1: Коля
имя 2: Маша
имя 3: Витя

Заключение

Итак, если кратко подытожить вышесказанное, то звездочки в Python используют в следующих случаях:
  1. При определении функции, если функция принимает неопределенное количество аргументов.
  2. При вызове функции, когда ей нужно передать несколько объектов в виде коллекции. Обратите внимание, не объект коллекции, а объекты, содержащиеся в коллекции. Таким образом, обозначения *args и **kwargs распаковывают коллекцию и передают ее элементы в функцию.

djangofan.ru

/arg/ — Что такое ARG

(28Кб, 474×474) _Alternate Reality Games_ (игры в альтернативной реальности, иногда игры, изменяющие реальность) — интерактивное повествование с игровыми элементами, использующее в качестве платформы реальный мир.

_Основные принципы_
Один из основных принципов ARG — TINAG (от англ. This is not a game — «Это не игра»). Этот принцип предполагает, чтобы игра не вела себя как игра: например, телефонные номера, упоминаемые в игре, должны действительно существовать. Участники не получают особого игрового пространства или явного списка правил. Создатели и руководители ARG находятся за занавесом, само их существование до конца находится под вопросом. Под вопросом до конца должен находиться и игровой характер происходящего. Это отличает ARG от сходного явления — городских ролевых игр, где игроки точно знают, в какой игре они участвуют. Участники ARG постигают правила постепенно, методом проб и ошибок.
Ход игр в альтернативной реальности контролируется непосредственно разработчиками игры, а не искусственным интеллектом, как в компьютерных или консольных видеоиграх. Игроки напрямую взаимодействуют с персонажами игры посредством общения в сети, помогая им решать различные задачи и головоломки. Хотя основной платформой таких игр является интернет, часто ARG переходят в реальный мир. Например, игрокам могут предложить собраться в определённом месте для получения какой-либо информации.
Игроком можно стать, обратив внимание на какую-то загадку в реальности (вход в игру, который на сленге называется «кроличьей норой», отсылая к приключениям Алисы в Стране Чудес), начав разгадывать ребус, предложенный мастерами игры, которые в ARG называются «кукольниками» (puppetmasters). Тексты и действия, созданные кукольниками (в том числе и с помощью актёров) выполняют функции нитей, с помощью которых кукольник заставляет двигаться участников игры. Но участники своими действиями тоже развивают игру и заставляют кукольников избирать те или иные продолжения.

Coming up next: Marble Hornets.

2ch.pm

Функция ARG | Microsoft Docs

  • Время чтения: 2 мин

В этой статье

Задает аргумент, который может быть передан в пользовательскую функцию, а также значение по умолчанию, возвращаемое пользовательской функцией, если вызывающая ячейка не передает значение аргумента.Specifies an argument that the calling cell can pass to a custom function, as well as the default value returned by the custom function if the calling cell does not pass in a value for the argument. Возвращает значение, заданное вызывающей ячейкой и сопоставленным параметром Аргнаме.Returns the value specified by the calling cell and the matching argName parameter.

СинтаксисSyntax

ARG (* * аргнаме * , [ * DefaultValue * *])ARG(** argName **,[ ** defaultValue ** ])

ПараметрыParameters

ИмяNameНеобходимостьRequired/OptionalТип данныхData TypeОписаниеDescription
АргнамеargName
ОбязательныйRequired
StringString
Имя аргумента, который может быть передан в функцию с помощью вызывающей ячейки.The name of an argument that the calling cell can pass into the function.
Значение по умолчаниюdefault Value
НеобязательныйOptional
ЧисловойNumeric
Значение, возвращаемое АРГУМЕНТом ARG, если вызывающая ячейка не передается значение параметра аргнаме .The value returned by ARG if the calling cell did not pass in a value for the argName parameter.

ПримечанияRemarks

Разработчик фигуры может создавать пользовательские функции, размещая выражение в одной ячейке и вызывая это выражение из одной или нескольких других ячеек.As a shape developer, you can create custom functions by placing an expression in one cell and calling that expression from one or more other cells. Выражение может содержать строковые литералы, функции таблицы свойств фигуры и ссылки на ячейки.The expression can include literal strings, ShapeSheet functions, and cell references. Выражение также может содержать определенные аргументы, передаваемые в вызывающую ячейку.The expression can also include specific arguments that are passed in by the calling cell.

В вызывающей ячейке указывается ячейка, содержащая пользовательскую функцию, а также аргументы, которые она хочет передать в функцию.The calling cell specifies the cell that contains the custom function as well as any arguments that it wants to pass to the function. Вычисляется ячейка выражения и результат возвращается в вызывающую ячейку.The expression cell is evaluated and the result returned to the calling cell.

ПримерExample

В приведенном ниже примере показано, как использовать функцию ARG вместе с функцией EVALCELL, чтобы найти среднее значение из набора трех значений.The following example shows how to use the ARG function in conjunction with the EVALCELL function to find the middle value from a set of three values.

В ячейке выражения поместите следующий код, определяющий пользовательскую функцию:In the expression cell, place the following code that defines the custom function:

User.MiddleValue = IF(ARG("A")>ARG("B"),IF(ARG("B")>ARG("C"),ARG("B"),IF(ARG("A")>ARG("C"),ARG("C"),ARG("A"))),IF(ARG("A")>ARG("C"),ARG("A"),IF(ARG("B")>ARG("C"),ARG("C"),ARG("B"))))

В вызывающих ячейках поместите следующий код, вызывающий пользовательскую функцию:In the calling cells, place the following code that calls the custom function:

User.Middle1 = EVALCELL(User.MiddleValue,"A",3,"B",9,"C",5) 
User.Middle2 = EVALCELL(User.MiddleValue,"A",12,"B",0,"C",21) 

docs.microsoft.com

Понимание Args и Kwargs в Python

30 апреля 2017

В этом уроке я сосредоточусь на аргументах (* args) и аргументах ключевых слов (* kwargs) в Python.

Я расскажу вам, что такое args и kwargs, и, самое главное, как их использовать — вот как принимать неограниченное количество аргументов и аргументов ключевых слов в функциях.

Что такое арги?

* args используются для передачи аргументов без ключевого слова. Примеры аргументов без ключевого слова — забава (3,4), fun («foo», «bar»).

* args обычно используются как мера для предотвращения сбоя программы, если мы не знаем, сколько аргументов будет передано функции. Это используется в C ++, а также в других языках программирования.

Что такое кварги?

** kwargs — словарь аргументов ключевых слов. ** позволяет нам передавать любое количество аргументов ключевого слова. Аргумент ключевого слова — это в основном словарь.

Примером аргумента ключевого слова является fun (foo = 2, bar = 7).

** kwargs — это как * args, за исключением того, что вы объявляете переменные и сумму внутри аргументов функции.

Где использовать Args и Kwargs

Арги и kwargs полезны, когда вы хотите:

Уменьшить переписывание кода. Сделайте код доступным для чтения. Повторное использование кода

Использование функций Args и Kwargs в функциях

Давайте посмотрим, как используются функции kwargs и args в функциях.

Args

Функция ниже принимает три аргумента. Три аргумента явно определены, поэтому любое более или менее приведет к ошибке в программе.

def add(a, b,c):
    print(a+b+c)
 print add(2,3,4)

Давайте запустим эту функцию. Функция добавит три числа, выдав следующий результат:

Output
9

Что делать, если мы будем передавать четыре аргумента в функции вместо трех требуемых? Мы получим сообщение об ошибке, как показано ниже.

Это связано с тем, что в функции были определены только три параметра, но при вызове функции мы передали четыре позиционных аргумента.

def add(a, b,c):
    print(a+b+c)
print add(2,3,4,5)
Output
TypeError: add() takes 3 positional arguments but 4 were give

In the second example below, the * is for non-keyword arguments and gets passed into the function. Instead of having defined arguments, we replace a, b and c with a single parameter (*args).

Notice how the use of *args makes it easy to use any number of arguments without having to change your code. *args provide more flexibility to your code since you can have as many arguments as you wish in the future.

def add(*args):
    total = 0
    for arg in args:
        total+=arg
    print total
Scenario 1
print add(1,2,5)
Output
8
Scenario 2
print add(1,2,5,6)
output
14
Scenario 3
print add(1,2,5,8)
Output
16

Дополнительные примеры

Создайте простую функцию, как показано:

def func(*args):
    # *args means for however many arguments you take in, it will catch them all
    for arg in args:
        print arg

Протестируйте функцию, используя комбинацию целых чисел и строк:

def func(*args):
    # *args means for however many arguments you take in, it will catch them all
    for arg in args:
        print arg
print func(11,3,4,5,"tuts")
Output
11
3
4
5
tuts

Что, если мы должны передать список в качестве аргумента? Проверьте функцию со списком, заменив предыдущие аргументы на список, l = [11,3,4,5, «tuts].

def func(*args):
    # *args means for however many arguments you take in, it will catch them all
    for arg in args:
        print arg
l = [11,3,4,5,"tuts"]
print func(l)
This prints the list as a whole,  
This is because its interpreting the list as one item.
Output
[11,3,4,5,"tuts]

Из приведенного выше примера вы также можете использовать * args для распаковки аргументов, которые уже находятся в списке или кортеже, так что все элементы в списке передаются как разные параметры.

Используя ту же функцию:

def func(*args):
    # *args means for however many arguments you take in, it will catch them all
    for arg in args:
        print(arg)
l = [11,3,4,5,"tuts"]
print(func(*l))
The * will unpack the list and output each individual list item.
Output
11
3
4
5
tuts

Kwargs

Kwargs позволяет передавать аргументы ключевого слова функции. Они используются, когда вы не уверены в количестве аргументов ключевого слова, которые будут переданы в функции.

Напишите функцию my_func и передайте (x = 10, y = 20) в качестве аргументов ключевого слова, как показано ниже:

def my_func(x=10,y=20):
    print x,y
This prints out the values of x and y
Output
10,20

Kwargs можно использовать для распаковки словарных ключей, пар значений. Это делается с использованием двойной звездочки (**). Важно отметить, что каждый ключ должен соответствовать значению.

Вот типичный пример того, как это делается. Функция ниже берет страны как ключи и их столицы как ценности. Затем он распечатывает оператор, который выполняет итерацию над kwargs и сопоставляет каждое ключевое слово с назначенным ему значением.

def capital_cities(**kwargs): 
    # initialize an empty list to store the result
    result = []
    for key, value in kwargs.items():
        result.append("The capital city of {} is {} .format (key,value)
    return result

Вы можете вызвать функцию с любыми аргументами, которые вы хотите.

def capital_cities(**kwargs): 
    # initialize an empty list to store the result
    result = []
    for key, value in kwargs.items():
        result.append("The capital city of {} is {} .format (key,value)
    return result
print capital_city(China = "Beijing",Cairo = "Egypt",Rome = "Italy"))
output
['The capital city of China is Beijing', 'The capital city of Cairo is Egypt','The capital city of Rome is Italy']

Для более сложного примера предположим, что у нас есть модель для клиента, которая выглядит примерно так:

class Customer( models.Model ):
    first_name = models.CharField(max_length = 100, null = True)
    last_name = models.CharField(max_length = 100)
    username =models.Charfield(max_length =100)
    email = models.EmailField(max_length = 100)
    password = models.CharField(max_length =100)

Вы можете использовать kwargs для ввода данных и запросов данных из объектов модели. Давайте создадим представление функции, чтобы создать нового клиента.

kwargs = {"first_name":"John","last_name":"Doe",
          "username': "johndoe","email"[email protected]",
          "password":"1234"}
ew_user =  User(**kwargs)
ew_user.save()

Вот как выполнить запрос клиента, который мы только что создали, используя kwargs.

filter_customer = {
'email':[email protected],
'username': johndoe,
}
Customer.objects.filter(**filter_customer)

Использование как Args, так и Kwargs в функции

При использовании обоих аргументов и kwargs в одном и том же определении функции * args должны возникать до ** kwargs.

class MyFunction(Foo):
    def __init__(self, *args, **kwargs):
        print 'my function'
        super(MyFunction, self).__init__(*args, **kwargs)

Пример:

def Func(*args,**kwargs):
    for arg in args:
        print arg
    for item in kwargs.items():
        print item

Помните, что арцы должны появляться перед kwargs.

def Func(*args,**kwargs):
    for arg in args:
        print arg
    for item in kwargs.items():
        print item
print Func(1,x=7,u=8)
Output
1
('x', 7)
('u', 8)

Заключение

Я надеюсь, что этот урок помог вам понять арги и kwargs.

Ниже перечислены некоторые указатели, которые следует помнить при использовании args и kwargs:

* args и ** kwargs — это особый синтаксис, который используется в функциях для передачи переменного числа аргументов функции. * args возникают до ** kwargs в определении функции. * args и ** kwargs лучше всего использовать в ситуациях, когда количество входов будет оставаться относительно небольшим. Вы можете использовать любое имя, которое вы хотите; args и kwargs только по соглашению, а не по требованию. Например, вы можете использовать * foo вместо * args или ** foo вместо ** kwargs.

Официальная документация на Python предлагает много информации для дальнейшего изучения. Кроме того, не стесняйтесь видеть, что у нас есть для продажи и для изучения на рынке, и не стесняйтесь задавать любые вопросы и предоставлять свою ценную обратную связь, используя приведенный ниже канал.

php-academy.kiev.ua

arg — это… Что такое arg?

arg

I a (comp ä́rger, superl ärgst)

1. дурно́й, злой, плохо́й

arge Dínge уст. высок. — дурны́е [плохи́е] дела́; плохо́е, дурно́е

arge Gedánken уст. высок. — злы́е мы́сли

ärger wérden — ухудша́ться, усугубля́ться (о чём-л. дурном)

es kann nicht mehr ärger wérden — ху́же уж и быть не мо́жет

ein Ǘbel (noch) ärger máchen — усугубля́ть зло

er macht álles ärger, als es wírklich ist — он представля́ет всё в бо́лее мра́чном све́те, чем оно́ есть на са́мом де́ле

2. разг. (выражает усиление):

er ist ein arger Dúmmkopf — он непроходи́мый [зако́нченный] дура́к

ein arger Schelm — настоя́щий пройдо́ха

ein arger Sǘnder — закорене́лый гре́шник

ein arges Verséhen — больша́я опло́шность; серьё́зное упуще́ние; просмо́тр

in arge Verlégenheit geráten* (s) разг. — оказа́ться в о́чень затрудни́тельном положе́нии

das ist (denn doch) zu arg! — э́то уж сли́шком!

II adv

1. зло

j-m arg mítspielen — сыгра́ть с кем-л. злу́ю шу́тку, зло посмея́ться над кем-л.

das Schícksal hat ihm arg mítgespielt — судьба́ над ним жесто́ко посмея́лась

er meint es nicht so arg — он не име́ет в виду́ ничего́ плохо́го

2. разг. о́чень си́льно, здо́рово

er ist noch arg jung — он ещё́ о́чень мо́лод; он ещё́ совсе́м младе́нец [юне́ц]

sie ist arg enttä́uscht — она́ жесто́ко разочаро́вана

er ist arg dumm — он беспросве́тно глуп

j-m arg zúsetzen — здо́рово досажда́ть кому́-л.

es zu arg tréiben* — заходи́ть сли́шком далеко́; перегиба́ть па́лку

Большой немецко-русский словарь. 2014.

german_russian_big.academic.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *