Emoji Торговый автомат


23

Не видите смайликов? Нажмите здесь .

Вы будете имитировать торговый автомат. Это 56 разных смайликов, которые можно представить в виде двух суррогатных символов UTF-8, от: from (U + D83C U + DF45) до 🍼 (U + D83C U + DF7C). В HTML эти Emojis может быть представлено в UTF-16 форме , как & # x1F345 через & # x1F37C . В базе 10 первый символ UTF-8 имеет значение 55356 . Значение второго символа варьируется от 57157 до 57212 . Вот программа CJam, которая генерирует все соответствующие смайлики. Чтобы избежать путаницы, этот вызов будет оцениваться в символах, а не в байтах . Некоторые смайлики состоят из двух символов, а некоторые из трех. Http://www.lettercount.com даст вам точный счет для этой задачи.

Цены 💵💵💵

Есть 8 различных ценовых категорий:

  • 1 доллар США: 🍅🍆🍇🍈🍉🍊🍋
  • $ 1,50: 🍌🍍🍎🍏🍐🍑🍒
  • 2 доллара США: 🍓🍔🍕🍖🍗🍘🍙
  • $ 2,50: 🍚🍛🍜🍝🍞🍟🍠
  • 3 доллара США: 🍡🍢🍣🍤🍥🍦🍧
  • $ 3,50: 🍨🍩🍪🍫🍬🍭🍮
  • $ 4,00: 🍯🍰🍱🍲🍳🍴🍵
  • $ 4,50: 🍶🍷🍸🍹🍺🍻🍼

Отображение торгового автомата

Это то, что видит пользователь при запуске программы и после совершения покупки. Вы можете использовать обычные числа вместо чисел смайликов, но у чисел смайликов есть то же преимущество, что и у других смайликов. Если вы используете числа смайликов, вы можете вычесть из своего счета 14 символов , потому что числа смайликов состоят из 3 символов каждый.

  1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣
A 🍅🍆🍇🍈🍉🍊🍋
B 🍌🍍🍎🍏🍐🍑🍒
C 🍓🍔🍕🍖🍗🍘🍙
D 🍚🍛🍜🍝🍞🍟🍠
E 🍡🍢🍣🍤🍥🍦🍧
F 🍨🍩🍪🍫🍬🍭🍮
G 🍯🍰🍱🍲🍳🍴🍵
H 🍶🍷🍸🍹🍺🍻🍼 

Если пользователь вводит, G5то выбирает 🍳. Ввод E6выбирает 🍦.

Добавление наличных 💸💸💸

Чтобы добавить деньги, пользователь должен ввести, /а затем код для монеты или счета. Монеты: (N) иккель ($ 0,05), (D) срок ($ 0,10) и (Q) уартер ($ 0,25). Счета: (O) ne (1,00 долл. США), (F) ive (5,00 долл. США), (T) en (10,00 долл. США). Каждый раз, когда пользователь добавляет счет или монету, программа должна выводить Balance: [New Balance]. Только один счет или монета могут быть добавлены каждый раз. Вот пример, содержащий три строки ввода:

/D
Balance: $0.10
/Q
Balance: $0.35
/F
Balance: $5.35

Выбор предметов

Пользователь выбирает элемент, вводя код элемента, например B2или C3. Если пользователь не добавил никаких денег, программа должна вывести Item Cost: [Cost of Item]. Если пользователь добавил деньги, но этого недостаточно для покупки товара, результат должен быть Insufficient Funds. Item Cost: [Cost of Item]. Если пользователь не добавить достаточно денег, то программа должна вывести: Item at [Item Location] Purchased. Remaining Balance: [Balance - Cost of Item]. Затем в отдельной строке распечатайте смайлики купленного предмета. Затем распечатайте весь торговый автомат (см. «Отображение торгового автомата») с заменой купленного предмета на 🚫 (U + D83D U + DEAB) Base 10: (55357 57003).

Завершение программы

Если пользователь покупает товар, который снижает его / ее баланс до $ 0,00, программа должна автоматически завершиться. В качестве альтернативы, если пользователь вводит «Готово» в любое время, программа должна предоставить пользователю его / ее оставшийся баланс в изменениях. Изменения должны быть только в Никелях, Даймах и Кварталах, и должны быть наименьшим возможным количеством монет. Например, если остаток составляет $ 1,45, результат должен быть QQQQQDD.

Пробный прогон

(Ввод начинается с «-»)

  1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣
A 🍅🍆🍇🍈🍉🍊🍋
B 🍌🍍🍎🍏🍐🍑🍒
C 🍓🍔🍕🍖🍗🍘🍙
D 🍚🍛🍜🍝🍞🍟🍠
E 🍡🍢🍣🍤🍥🍦🍧
F 🍨🍩🍪🍫🍬🍭🍮
G 🍯🍰🍱🍲🍳🍴🍵
H 🍶🍷🍸🍹🍺🍻🍼  
-E1
Item Cost: $3.00
-/F
Balance: $5.00
-E1
Item at E1 Purchased. Remaining Balance: $2.00
🍡 
  1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣
A 🍅🍆🍇🍈🍉🍊🍋
B 🍌🍍🍎🍏🍐🍑🍒
C 🍓🍔🍕🍖🍗🍘🍙
D 🍚🍛🍜🍝🍞🍟🍠
E 🚫🍢🍣🍤🍥🍦🍧
F 🍨🍩🍪🍫🍬🍭🍮
G 🍯🍰🍱🍲🍳🍴🍵
H 🍶🍷🍸🍹🍺🍻🍼
-Done
QQQQQQQQ

Неверные коды

  • Если ввод начинается с, /но не является действительным вводом денег, выведите Money not Accepted.
  • Если вход является предметом, который уже был куплен, выведите Item out of stock
  • Если ввод представляет собой комбинацию цифр и букв, которая не находится в диапазоне (например, A0или J2, выведите «Неверный код»).
  • Для всех других неверных входных данных выведите «Error»

Бонус (-15%): варенье

При продаже товара с вероятностью 10% машина заклинит, и предмет застрянет. Вывод JAM!!!один раз. В этом случае пользователь должен ввести «удар» или «удар». Каждый раз, когда пользователь делает это, есть 20% -ная вероятность того, что предмет вырвется на свободу и будет продаваться как обычно. Пока джем не исчезнет, ​​распознаются только входы «punch» и «kick». Все остальные входы ничего не делают. Вот образец:

-A4
Item at A4 purchased. Remaining Balance: $1.00
JAM!!!
-punch
-kick
-kick
-punch
-punch
🍚

(Замятие устранено. Возобновите как обычно.)

Бонус (-10%): ID

Если пользователь пытается купить алкогольный напиток (любой предмет в последнем ряду, кроме детской бутылочки), вы должны потребовать подтверждение возраста. Для этого вы просите пользователя умножить два случайных числа между 13 и 19 (включительно). Выход ID required: [13-19]x[13-19] = ?. Если пользователь ответит правильно, покупка может пройти. Если нет, выведите 🔞 (U + D83D U + DD1E) основание 10: (55357 56606)

Альтернативный вызов: Minecraft

Этот вызов кажется чем-то возможным в Minecraft. Чтобы успешно создать версию этой программы для Майнкрафта, игрок должен

  • Сетка 8x7 на выбор из 56 уникальных предметов
  • Иметь возможность добавлять деньги на баланс (возможно, использовать разные типы камней для разных конфессий, описанных выше.)
  • Дайте пользователю предмет, который он / она выбирает, если он вложил достаточно «денег»
  • Верните пользователю соответствующую сумму изменений в конце.

Режим совместимости

  • Я могу принять вход только в начале программы

    • Не волнуйтесь, вы можете сделать программу, которая принимает все входные данные заранее. Если ваша программа не завершила работу после оценки всех вводимых данных, предположим, что в конце вызывается «Done». Если вы используете этот метод, вы не будете иметь право на какие-либо бонусы.
  • Я не могу просматривать / выводить смайлики

    • Вы можете скопировать и вставить свой ввод и вывод в этот фрагмент стека (или здесь ). Он может понимать как смайлики Unicode, так и HTML-коды для смайликов. Если ваш вывод выглядит правильно на этой странице, ваша программа проходит. Попробуйте вставить некоторые примеры ввода / вывода, чтобы посмотреть, как они выглядят.

function parse() {
var o = document.getElementById("output");
var text = document.getElementById("in").value;
o.innerHTML = text.replace(/\n/g,"<br/>").replace(/ /g,"&nbsp");
twemoji.parse(o);
}
<head>
<script src="//twemoji.maxcdn.com/twemoji.min.js"></script>  
</head>
<body>
<h1>Emoji to Image</h1>
<textarea id="in" rows="10" cols="50"></textarea>
<input type="submit" onclick="parse()">
<div id="output"></div>
</body>

Вот сокращенная версия дисплея торгового автомата в режиме совместимости, которую вы можете протестировать в фрагменте стека:

   &#x31&#x20E3&#x32&#x20E3&#x33&#x20E3&#x34&#x20E3&#x35&#x20E3...
A&#x1F345&#x1F346&#x1F347&#x1F348&#x1F349...
B 
...
  • Я могу выводить смайлики, но не на STDOUT.

    • Похоже, Mac OS X Terminal - единственный, кто способен выводить эмодзи. Если вы не можете вывести смайлики в свой терминал, ваши другие варианты
      • Отправить весь вывод в файл.
      • Отобразить весь вывод в окне.
      • Используйте технику, описанную в «Я не могу просматривать / выводить смайлики».

5
$ can be replaced with your local currencyне имеет большого смысла, если вам требуется, чтобы монеты были (N) ickels (D) imes и (Q) uarters. Я предлагаю вам удалить его, поскольку это добавляет путаницы.
Уровень Река St

@steveverrill Хороший вопрос. Я изменил это. У меня вопрос, есть ли у неамериканских клавиатур кнопка $, или есть код для нее?
геокавель

$символ является частью набора ASCII символов, поэтому можно с уверенностью предположить , почти все клавишные и язык могут справиться с этим. Это единственный символ валюты в 7-битном наборе символов ASCII. В результате другие символы, такие как символ GBP или символ EUR, могут быть неправильно отображены из-за несовместимых кодировок строк, но это практически никогда не происходит $.
Уровень Река St

@ Steveverrill Я знаю, что они могут справиться с этим, но есть ли для этого кнопка физической клавиатуры?
геокавель

Мои английские и испанские клавиатуры имеют его в дополнение к соответствующим символам местной валюты, и я думаю, что другие тоже. Помимо того, что он является наиболее широко используемым символом валюты в мире (в том числе для многих валют, которые не называются долларами), этот $символ имеет особое значение в большинстве языков программирования, поэтому его отсутствие на клавиатуре было бы серьезным ограничением. Я набираю это на своей испанской клавиатуре, и на самом деле легче получить $ (shift + 4), чем € (alt gr + E), чтобы вы могли видеть, что последний символ добавлен как запоздалая мысль.
Уровень Река St

Ответы:


8

PHP, (1295 - 14) - 25% = 960,75 символов

Старые оценки 1315 1351 1361 1295 989 977

Это было весело, и это первый ответ - да.

$i=[A=>[🍅,🍆,🍇,🍈,🍉,🍊,🍋],B=>[🍌,🍍,🍎,🍏,🍐,🍑,🍒],C=>[🍓,🍔,🍕,🍖,🍗,🍘,🍙],D=>[🍚,🍛,🍜,🍝,🍞,🍟,🍠],E=>[🍡,🍢,🍣,🍤,🍥,🍦,🍧],F=>[🍨,🍩,🍪,🍫,🍬,🍭,🍮],G=>[🍯,🍰,🍱,🍲,🍳,🍴,🍵],H=>[🍶,🍷,🍸,🍹,🍺,🍻,🍼]];$p=[A=>1,B=>1.5,C=>2,D=>2.5,E=>3,F=>3.5,G=>4,H=>4.5];$v=[N=>.05,D=>0.1,Q=>.25,O=>1,F=>5,T=>10];a:$m='';$w=$x=0;$q=$c[0];$r=$c[1];$f=fgets;$n=rand;$u=number_format;if('Done'==$c&&$e=1)foreach([Q,D,N]as$_)while($b&&round($b-$v[$_],2)>=0&&$m.=$_)$b-=$v[$_];elseif('/'==$q){$v[$r]?$b+=$v[$r]:$m="Money not accepted
";$m.="Balance: $".$u($b,2);}elseif(in_array($q,range(A,Z))){if(0<$r&&8>$r--&&($_=$p[$q])){$b&&$b<$_?$m="Insufficient funds. ":0;if($b<$_)$m.="Item cost: $".$u($_,2);elseif(👾==$i[$q][$r])$m="Item out of stock.";else{$t=0;if(H==$q&&$r<6){$t=$n(13,19);$s=$n(13,19);echo"ID required: {$t}x$s = ?
";if($f(STDIN)!=$t*$s)$m=🔞;else$t=0;}if(!$t){$b-=$_;if(1>$n(0,9)){$w=1;}$x=$i[$q][$r];$m="Item at $c purchased. Remaining balance: $".$u($b,2).($w?"":"
$x");$i[$q][$r]=👾;if(!$b)$e=1;}}}else$m="Invalid code";}if($c&&!$m&&!$e)$m=Error;system(clear);echo"  1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣";foreach($i as$k=>$_){echo"
$k ";foreach($_ as$_)echo"$_ ";}echo"
$m
";if($w){echo"JAM!!!
";for(;$c!=kick&&$c!=punch||7>$n(0,9);$c=trim($f(STDIN)));echo"$x
";}$e?exit:$c=trim($f(STDIN));goto a;

Поскольку торговые автоматы напоминают мне о 90-х годах, которые я использовал, gotoи для купленных предметов показан Space Invader 👾 . Машина перерисовывается после каждой команды.

Ungolfed (как-то)

$i=[A=>[🍅,🍆,🍇,🍈,🍉,🍊,🍋],B=>[🍌,🍍,🍎,🍏,🍐,🍑,🍒],C=>[🍓,🍔,🍕,🍖,🍗,🍘,🍙],D=>[🍚,🍛,🍜,🍝,🍞,🍟,🍠],E=>[🍡,🍢,🍣,🍤,🍥,🍦,🍧],F=>[🍨,🍩,🍪,🍫,🍬,🍭,🍮],G=>[🍯,🍰,🍱,🍲,🍳,🍴,🍵],H=>[🍶,🍷,🍸,🍹,🍺,🍻,🍼]];
$p=[A=>1,B=>1.5,C=>2,D=>2.5,E=>3,F=>3.5,G=>4,H=>4.5];
$v=[N=>.05,D=>0.1,Q=>.25,O=>1,F=>5,T=>10];

a:
$m='';
$w=$x=0;
$q=$c[0];
$r=$c[1];
$f=fgets;
$n=rand;
$u=number_format;

if('Done'==$c&&$e=1)
    foreach([Q,D,N]as$_)
        while($b&&round($b-$v[$_],2)>=0&&$m.=$_)
            $b-=$v[$_];
elseif('/'==$q){
    $v[$r]?$b+=$v[$r]:$m="Money not accepted
";
    $m.="Balance: $".$u($b,2);
}elseif(in_array($q,range(A,Z))){
    if(0<$r&&8>$r--&&($_=$p[$q])){
        $b&&$b<$_?$m="Insufficient funds. ":0;
        if($b<$_)$m.="Item cost: $".$u($_,2);
            elseif(👾==$i[$q][$r])
                $m="Item out of stock.";
            else{
                $t=0;
                if(H==$q&&$r<6){
                    $t=$n(13,19);
                    $s=$n(13,19);
                    echo"ID required: {$t}x$s = ?
";
                    if($f(STDIN)!=$t*$s)
                        $m=🔞;
                    else
                        $t=0;
                }
                if(!$t){
                    $b-=$_;
                    if(1>$n(0,9)){
                        $w=1;
                    }
                    $x=$i[$q][$r];
                    $m="Item at $c purchased. Remaining balance: $".$u($b,2).($w?"":"
$x");
                    $i[$q][$r]=👾;
                    if(!$b)$e=1;
                }
            }
    }else
        $m="Invalid code";
}

if($c&&!$m&&!$e)$m=Error;

system(clear);
echo"  1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣";
foreach($i as$k=>$_){
    echo"
$k ";
    foreach($_ as$_)
        echo"$_ ";
}
echo"
$m
";

if($w){
    echo"JAM!!!
";
    for(;$c!=kick&&$c!=punch||7>$n(0,9);$c=trim($f(STDIN)));
    echo"$x
";
}

$e?exit:$c=trim($f(STDIN));
goto a;

👾 Протестировано на OS X с PHP 5.5 и 5.6 👾


Правки

  • Добавлено 12 байт . Исправлена Doneошибка выхода и игры в гольф.
  • Добавлено 306 байт . Исправлены одна или две ошибки и добавлена ​​поддержка бонусов. С бонусами теперь это почти на 15 байтов короче.
  • Добавлено 66 байт . Пришлось форматировать деньги по-другому, также пришлось принимать больше значений ( [A-Z][0-9]) для Invalid code.
  • Сохранено 10 байт . Нашли один пробел и превратили некоторые .=в =подходящие.
  • Сохранено 36 байт из-за рефакторинга.
  • Сохранено 20 байтов путем рефакторинга некоторых циклов и назначений.

Вау, играть было очень весело! Единственная проблема, которую я заметил: вам нужно отформатировать цены как 3 и 3,5 в 3,00 долл. США и 3,50 долл. США.
геокавель

Кроме того, когда я набираю, J5я должен получить сообщение: «Неверный код».
геокавель

@geokavel Спасибо за ваш отзыв. Я добавил правильный формат денег, и он также принимает больше вариантов на Invalid codeданный момент. Это забавное испытание - даже несмотря на то, что у него много вариантов… 1K персонажей говорят сами за себя… :)
insertusernamehere

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

@geokavel Это было забавное испытание и хороший пинг-понг между Стефаном и мной. Если в будущем кто-то найдет более короткое решение, я буду там. ;)
введите имя пользователя здесь

5

C # 6 (.Net Framework 4.6), 1356 1324 1304 1311 1307 1238 1235 1231 1220 Письма - 14 писем (Emoji Numbers) - (15% Jam Bonus + 10% ID Bonus) = 1017 993 978 972,75 969,75 918 915,75 904,5 Письма

using h=System.Console;class c{static void Main(){double b=0,z,p,x=0,i=57157,j,n,r,c,m;var a=1==0;var d=new System.Collections.Hashtable();for(;i<57213;)d.Add(x++,""+(char)55356+(char)i++);for(var e=new System.Random();;){for(w("  1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣"),x=0;x<8;x++,w(""))for(h.Write((char)('A'+x)),i=0;i<7;)h.Write(" "+d[x*7+i++]);for(;;){var k=h.ReadLine();if(k[0]==47){var l=k[1];z=b;b+=l=='N'?.05:l=='D'?.1:l=='Q'?.25:l=='O'?1:l=='F'?5:l=='T'?10:0;a=a|z!=b;w(z!=b?$"Balance {b:0.00}":"Money not Accepted");}else{if(k=="Done"){for(;b/.25>=1;b-=.25)h.Write("Q");for(;b/.1>=1;b-=.1)h.Write("D");for(;b/.05>=1;b-=.05)h.Write("N");return;}r=k[0]-65;c=k[1]-49;if(r<0|r>7|c<0|c>6)w("Invalid code");else{p=1+r/2;if(!a|p>b)w($"{(a&p>b?"Insufficient Funds. ":"")}Item Cost: ${p:0.00}");else{m=r*7+c;if(d[m]=="🚫")w("Item out of stock");else{if(r>6&c<6){j=e.Next(13,20);n=e.Next(13,20);w($"ID required: {j}x{n} = ?");if(int.Parse(h.ReadLine())!=j*n){w("🔞");break;}}b-=p;w($"Item at {k} Purchased. Remaining Balance: ${b:0.00}");if(e.Next(10)==1)for(w("Jam!!!");;){var f=h.ReadLine();if((f=="punch"|f=="kick")&e.Next(10)<2)break;}w(""+d[m]);d[m]="🚫";if(b==0)return;break;}}}}}}}static void w(string s)=>h.WriteLine(s);}

немного более незатронутый для использования в LinqPad 5 (C # 6). Используйте h = System.Console в F4.

void Main()
{
    double b=0,z,p,x=0,i=57157,j,n,r,c,m;
    var a = 1==0;
    var d = new Hashtable();
    for (; i < 57213;) d.Add(x++, ""+(char)55356 + (char)i++);
    for (var e = new Random(); ;)
    {
        for (w("  1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣"), x = 0; x < 8; x++, w(""))
            for (h.Write((char)('A' + x)), i = 0; i < 7;)
                h.Write(" " + d[x * 7 + i++]);

        for (; ;)
        {
            var k = h.ReadLine();
            if (k[0] == 47)
            {
                var l = k[1];
                z = b;
                b += l == 'N' ? .05 : l == 'D' ? .1 : l == 'Q' ? .25 : l == 'O' ? 1 : l == 'F' ? 5 : l == 'T' ? 10 : 0;
                a = a|z!=b;
                w(z != b ? $"Balance {b:0.00}" : "Money not Accepted");
            }
            else
            {
                if (k == "Done")
                {
                    for (; b / .25 >= 1; b -= .25) h.Write("Q");
                    for (; b / .1 >= 1; b -= .1) h.Write("D");
                    for (; b / .05 >= 1; b -= .05) h.Write("N");
                    return;
                }
                r = k[0] - 65;
                c = k[1] - 49;
                if(r<0|r>7|c<0|c>6)w("Invalid code");
                else
                {
                    p = 1 + r / 2;
                    if (!a | p > b) w($"{(a&p>b?"Insufficient Funds. ":"")}Item Cost: ${p:0.00}");
                    else
                    {
                        m = r * 7 + c;
                        if (d[m] == "🚫")
                            w("Item out of stock");
                        else
                        {
                            if (r > 6 & c < 6)
                            {
                                j = e.Next(13, 20);
                                n = e.Next(13, 20);
                                w($"ID required: {j}x{n} = ?");
                                if (int.Parse(h.ReadLine()) != j * n)
                                {
                                    w("🔞");
                                    break;
                                }
                            }

                            b -= p;
                            w($"Item at {k} Purchased. Remaining Balance: ${b:0.00}");
                            if (e.Next(10) == 1)
                                for (w("Jam!!!"); ;)
                                {
                                    var f = h.ReadLine();
                                    if ((f == "punch" | f == "kick") & e.Next(10) < 2)
                                        break;
                                }
                            w(""+d[m]);
                            d[m] = "🚫";
                            if (b == 0) return;
                            break;
                        }
                    }
                }
            }
        }
    }
}

void w(string s)=>h.WriteLine(s);

редактировать: спасибо за (;;) подсказка;)

редактировать: удар !! Лучше, чем PHP ;-)

редактировать: удалено 24 буквы. Еще кое-что осталось для php.

редактирование: удалено 20 букв путем переключения с десятичного на двойной.

редактирование: удалено 7 букв путем переключения на номера эмодзи

редактирование: удалено 4 буквы, переключая все на удвоение вместо сочетания двойных и целых.

редактировать: удалено 69 писем - найден мертвый код o_O Best Entry C #: D

edit: Удалено 3 буквы - переключено последнее выражение if-else

редактирование: удалено 4 буквы - переключено с операторов короткого замыкания (&& и ||) на обычные & и |

редактирование: удалено 11 букв - переключено с h.WriteLine на w () с условной дословной строкой.


Выглядит хорошо. Я был в состоянии проверить это здесь со статическим вводом. Есть ли способ для меня проверить это онлайн или на Mac с динамическим вводом?
геокавель

Вы можете проверить это с помощью динамического ввода здесь , хотя смайлики отображаются как ??.
геокавель

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

на моем пути @insertusernamehere: D
Стефан Шинкель

эй .... у меня это под php :) @insertusernamehere
Стефан Шинкель
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.