Привіт, світ із поворотом


17

Ваша мета : написати фрагмент коду, який призведе до класичного результату "Привіт, світ!" друкується в STDOUT або еквівалент.

Правила : Код повинен бути повністю в друкуванні ASCII. Весь код повинен бути функціональним - видалення будь-якого символу підрахунку повинно змінити результат або призвести до того, що код не функціонує. Усі змінні повинні бути використані після призначення. Для виводу повинні бути необхідні символи та рядкові літерали - тобто заміна будь-якого символу чи будь-якого символу в рядковому літералі іншим символом повинна бути здатна змінювати результат (а не через ефект послідовності втечі - замінювати символ зворотною косою рисою або еквівалент)

(ПРИМІТКА. Остаточне правило відредаговано в)

Оцінка балів : саме тут стає цікаво. Найвищий бал виграється залежно від кількості символів відповідно до типових правил боулінгу коду. Але багаторазове використання символів призведе до бальних відрахувань. Зокрема ...

  1. Повторне використання будь-якого буквено-цифрового символу (az, AZ, 0-9) призведе до вирахування 3 балів за повтор (перше використання не призводить до відрахування).
  2. Повторне використання основних пунктуацій ([!? .-, ": ';]) - включаючи дужки - призведе до вирахування 2 балів за повтор.
  3. Повторне використання інших символів ASCII {`~ @ # $% ^ & * _ + = | \ /> <} - включаючи фігурні дужки - призведе до вирахування 4 балів за повтор.
  4. Повторне використання пробілів, вкладок та нових рядків призведе до вирахування 1 бала за повтор. Тобто, лише перше використання пробілу, вкладки чи нового рядка зараховуватиметься до загальної суми.

Примітка: коментарі не зараховуються до загальної кількості, хоча символи, що позначають початок / кінець коментаря, є. Наприклад, у C / C ++, якщо у вас є /* This is a comment */, то він буде рахувати два косих риски і дві зірочки, але між ними нічого.

Деякі приклади (примітка: використання Джулії як зразкової мови) ...

print("Hello, world!");

Всього видимих ​​символів: 22
Містить пробіл: +1
Повторна буквено-цифрова цифра: -12 для лілових кольорів
Повторна пунктуація: -2 для "
Кінцевий бал: 22 + 1-12-2 = 9

print("Hel",char(108),"o, wor",0x108,"d!"); # 0x108 makes a Uint8 that prints as ASCII

Всього символів: 43 (не рахує жодних символів після #, що є символом коментаря)
Містить пробіл: +1
Повторне буквено-цифрове значення: -18 для rr1008
Повторний розділовий знак: -24 для () "" "" ,,,,,
Фінал оцінка: 43 + 1-24-18 = 2

xy=STDOUT
m="Hello, world!"
print(xy,m);

Усього видимих ​​символів: 37
Містить новий рядок: +1
Містить пробіл: +1
Повторне буквено-цифрове значення: -18 для ксилору
Повторний розділовий знак: -4 для ",
Повторне інше ASCII: -4 для =
Остаточний бал: 37 + 1 + 1-18-4 -4 = 13

Кілька недійсних фрагментів коду ...

x=2;print("Hello,world!")  

Проблема: xпризначається, але не використовується.

print("Hello,"*" world!")  

Проблема: *непотрібна, результат буде без неї однаковим.

k=1
if k>0
  print("Hello, world!")
else
  print("abcghjmquvxyzABCDEFGIJKLMNOPQRSTUVWXYZ_+*-&|")
end  

Проблема: Друга printкоманда не запуститься. Крім того, видалення символів у цитаті у другій printкоманді не змінить вихід.

x="Hello, world!";
print(x)  

Проблема: видалення нового рядка не змінить результат або не спричинить помилку (у Джулії крапка з комою необхідна лише у тому випадку, якщо в одному рядку є кілька команд, інакше просто придушує повернене значення).

print("Hellos\b, world!")  

Проблема: sхарактер не впливає на результат, оскільки він стирається \b. Це прийнятно, якщо це робиться за допомогою коду ( "Hello",char(100),"\b, world!"), але не може бути здійснено за допомогою рядкових літералів або символів.

Зручний калькулятор оцінок - http://jsfiddle.net/4t7qG/2/ - завдяки Doorknob



1
Це здається актуальним для вашої дискусії meta.codegolf.stackexchange.com/questions/777/…
Martin Ender

3
Я створив JSFiddle, куди ви можете помістити свій код, і він автоматично визначить ваш рахунок. Ви не хочете зі мною редагувати посилання на нього до публікації?
Дверна ручка

1
@Dennis - якщо ваша програма створює новий рядок через команду, не виникає проблем (наприклад, println в Джулії друкується, а потім додається новий рядок в кінці). Але це не повинно бути частиною рядка.
Глен О

1
@ACarter - в основному, так. Але обмеження та відрахування роблять це нетривіальним.
Глен О

Відповіді:


17

Перл - 96

(Досить добре, враховуючи теоретичну максимальну оцінку 97)

s{}[Hel0o, w3$=d!];y<"#%&'*.124578:?@BCDEFGIJKLMNOQ/-9>(
    6PRSTUVWXYZ^_`abfghjmqvxz|~\cAk-u)+print

(Зверніть увагу, що другий рядок починається з фактичного \tсимволу вкладки)

Код має 98 символів і містить кожну таблицю ascii рівно один раз плюс додаткову -.
98 - 2 = 96

Тут немає рядкових літералів, але видалення будь-якого символу порушує програму.

Деобфускація

У цій програмі є 3 твердження (ну насправді 2, але я зловживав +як якийсь роздільник висловлювань)

  1. s{}[Hel0o, w3$=d!]
    Це дуже розтягнутий випадок оператора sed. Він частіше пишеться як s/a/b/, або s:a:b:, але perl дозволяє набагато більше фантазії тут: s(a)(b) s(a)^b^ s(a)[b]і навіть s qaqbq.
    Він замінює порожній рядок (всередині {}) на Hel0o w360d!(всередині []) ( $=інтерполює 60за замовчуванням). Через відсутність ~=оператора він працює на $_.

  2. y<"#%&'*.124578:?@BCDEFGIJKLMNOQ/-9>(\n\t6PRSTUVWXYZ^_`abfghjmqvxz|~\cAk-u)
    Це теж дуже розтягнутий випадок, але trоператора, якого також називають y( y< >( )).
    Давайте подивимось на таблицю заміни:
    " # %&'*.124578:?@BCDEFGIJKLMNOQ /-9
    \n\t6PRSTUVWXYZ^_`abfghjmqvxz|~\cA k-u
    я перемістив деякі символи, щоб існуюча рядок не була порушена. Єдиною фактично працюючою частиною тут є /-9-> k-u. Він замінює 0на l, 3з oі 6на r.
    Знову через відсутність ~=оператора, він працює на. $_
    Отже, ми маємо повну фразу в $_змінній.

  3. print
    Відсутність аргументів змушує друкувати лише $_змінну.


Я не знаю Perl достатньо, щоб прокоментувати це - який набір символів між <і + робити?
Глен О

@GlenO Тільки /-9і k-uфактично використовуються для перетворення рядка. Решта - сміття однакового розміру . Якщо ви видалите лише одну таблицю, набори будуть нерівними, і програма не виведе "Привіт, світ!" більше.
mniip

У такому разі яким чином виконується "сміття"? Тобто, яким чином він функціональний? Якщо кодом перескакує просто наповнювач, то це еквівалентно не запущеному коду в умовному режимі.
Глен О

3
@GlenO Це не так. До специфікації: <...> removal of any single counting character must change the result or cause the code to not function.Видалення 1 символу будь-де порушує його. Ви можете змусити його працювати, видаливши 2 символи, але це не в правилах.
mniip

2
All code must be functional. Ви чітко згинаєте правила, як мінімум. Я не кажу прямо "це порушує правила" прямо, але це, безумовно, сумнівно.
Глен О

7

Ця відповідь була створена перед тим, як додати правило про рядкові літерали та не бере участі в конкурсі.

#include <iostream>
int main(){std::cout<<56+"  !$%^&*?12347890-_QWERTYUIOPASDFGJKLZXVBNM,.qypfghjk:zvbHel\x6Co, world!";}

Це повністю законно. : P Якщо ви видалите будь-який символ із цього рядка, він буде надрукований ello, world!.


Будь ласка, включіть у відповідь рахунок вашого коду.
ProgramFOX

Також це не змінить ваш рахунок, але пробіли навколо <<потрібно видалити.
Мартін Ендер

1
Гммм ... поки я аплодую вашу відповідь, це в першу чергу виявило незначну дірку в моїх обмеженнях. Я надішлю вас, і я радий, що інші можуть зробити те саме, якщо їм це подобається, але я буду редагувати додаткові обмеження.
Глен О

1
Добре, на додаток до мого попереднього коментаря, тепер я додав обмеження, вказуючи, що строкові та буквені символи повинні бути відповідні - заміна символів всередині них повинна мати змогу змінити результат. Це дозволяє, наприклад, if 'x'>'w'прийоми, але блокує "k \ bH", наприклад, "H". Сміливо можете надати другу відповідь після доданого обмеження.
Глен О

4

CJam, 94

{'H"EJO, WoRLD!"el96A+c/~_-3=0$@}"# 
`&^<>|;:?.()[]\1aBCdfFgGhiIjkKmMnNpPqQrsStTuUvVwxXyYzZ"254b87%*

Спробуйте в Інтернеті! Зауважте, що перед подачею рядків має бути таблиця. SE не любить табулятори, тому вам доведеться вставляти його вручну.

  • До 100 символів
  • повторний випуск: -0 ()
  • повторний розділовий знак: -6 ("" ")
  • повторене інше: -0 ()
  • повторний пробіл: -0 ()

Загальна оцінка: 94

Я використовував наступний код, щоб перевірити, що жоден із символів у рядку не може бути видалений:

"#  
`&^<>|;:?.()[]\1aBCdfFgGhiIjkKmMnNpPqQrsStTuUvVwxXyYzZ"
:A,,{_A\<A@)>+254b87%}%`

Він друкує масив із зазначенням кількості разів Привіт, світ! буде надруковано, якщо символ, що відповідає індексу, буде видалений.


Коли я запускаю його у вашому посиланні, він видає "Привіт, світ!" шість разів поспіль. Також, чим займається рядок символів?
Глен О

Я здогадуюсь, що нова лінія - це помилка - її видалення змушує її працювати.
Glen O

Випуск копіювання та вставки. Перед НЧ повинен бути табулятор. Схоже, SE не дозволить мені це зробити ... Рядок вважається базовим числом 254 ( 254b). Модуль кінцевого результату 7 повинен бути 1, тому попередній блок коду виконується один раз. Мені потрібен модуль, щоб зробити кожен символ необхідним.
Денніс

Ну, після додавання в закладці відсутнього (який робить «виправити» код), видаляючи Z, то T, або , можливо , кілька інших символів не змінює результату.
Глен О

Я жахливо неправильно трактував частину вашого запитання. Це зараз виправлено.
Денніс

3

Рубі, 28 41

Просто для початку відповіді з рішення в дусі питання:

print"He#{?l*2}o, "+'world!'if[$`&(9<=>6)^7|~8-5/3.1%0x4]

Підрахунок балів (я думаю, що я мав таке право):

  • 57 символів
  • повторний випуск: -12 ( orli)
  • повторний розділовий знак: -4 ( "')
  • повторені інші: -0
  • повторний пробіл: -0

Мені добре виглядає, оцінюючи. Не потрібно включати штрафні санкції, які не застосовуються, але немає шкоди при їх включенні.
Глен О

.У 3.1можуть бути видалені без проблем. Як можна xв 0x4або -в 8-5.

3

PHP, 1 (так, один бал!)

Використання магічних символів для створення контрольної суми, яка у двійковій формі відповідає "Пекло", "О, ш", "Орлд" і "!".

Зазвичай мені подобається знаходити лазівки, але цього разу я вирішив пограти за духом та наміром змагань. Кожен персонаж та його позиція є важливими для виходу. Єдині місця, які можна замінити, - це назви змінних, які не є буквальними значеннями, пробіл між якими phpі foreachякий PHPтрактується як еквівалент, і використання 'vs, "яке PHPтрактує як подібне.

<?php foreach(array('_MC:`~+V4@SbHR/l[J','dN#UB`5!Rv^NG@D}','9gm6L&-kuD','8OM97g.q]XQ0')as$j)print(hash("crc32",$j,1))?>

FYI, це ще деякі магічні рядки та цікаві хеши:

E.D}S:  Hell
9UDIRQ: Hell
N\7&*`%:    orld
UWX[E^O:    orld
mAHzDEb:    !   
uLJ7Ck&:    Hell
B+bG5mYJ:   Hell
:OvMzuOR:   !   
TgYR9g!6k:  o, w
NkFN`!8mI:  o, w
N#VA\j~}J[: Hell
vEl*]@0XQ5: o, w
9gm6L&-kuD: orld
*}{Xg@HN`\: !   
Pj@Y44uA6YJ:    Hell
|7OX0VF8gv}:    !   
DLRJAjgMj}\:    !   
!0bT*D}O4Lw:    orld
YGN97^v7ZY`:    Hell
++~bL/kP:|]W:   o, w
8OM97g.q]XQ0:   !   
l^m-DqZ^g[&+:   !   
Ewu]Rv~*DHQ7:   Hell
JIqjgF|S!\`8l:  Hell
b4l!MEG7vTu6/:  Hell
+B:zEq*J\k-Cm:  !   
_}E7wZD76^`Y9AU:    orld
q:Nq-~+_S7~N9Hz:    !   

Функції коду ще , якщо я видалити \t, \nабо простір. Не експерт з PHP, але ;здається також необов’язковим.
mniip

@mniip - редагування зроблено. Мені не було відомо, що крапка з комою в деяких випадках не є обов'язковою.

3

Befunge-98 , 97 балів!

"v!dlrow ,h
B[CDEFGIJkLMNOPH
$<QRSTUV@|5cg1fe':-%\64*ab+7_/89}{0  j2
WXYZK`.=#>]
s()impq	n 3~
Atuxz&;y^ ?

Спробуйте в Інтернеті!

Вкладка знаходиться між qта n.

Використовує аналогічну хитрість до попередньої відповіді Befunge, щоб прокладати рядки символами, що залишилися, але уникає використання дублюючих символів у розділі виконання. Видалення будь-яких символів, що не виконуються, призводить до того, що частини, що виконуються, виявляються поза місцем, зазвичай закінчуючи нескінченними циклами або друкуючи неправильний вихід.

Як це працює

Дійсно, єдина виконаюча частина виглядає так:

"v!dlrow ,h
         k     H
$<      @|5cg1fe':-%\64*ab+7
         >]
        ^ ?

Спочатку для додавання , world!в стек використовується обтікаючий рядковий рядок . Це дозволяє уникнути двох "с.

$<      @|5cg1fe':-%\64*ab+7

Це додає Helloдо стека, використовуючи різні методи, щоб уникнути дублювання символів. $вискакує зайвий простір, викликаний літералом обгорткового рядка.

7+додає 7 до hкінця рядкового літералу для створення o . ba*46\%:обчислює 111, значення ascii lі дублює його.

'e додає е в стек.

f1g набуває символу в 1,15, що є H

Потім він повторно використовує ,рядок для друку цілого Hello, world!. Решта - це лише зміни напрямку, щоб перейти до кінця @.


1

Рубі, 78

Я маю на увазі більше зловживань правилами, не впевнений, яким саме буде патч. Бере довгу рядок і перевіряє суму результату, тому будь-яке видалення або зміна призведе до відмови програми. Можливо, може бути трохи оптимізовано, щоб видалити дублювання деяких букв і отримати пробіл.

puts('Hello, world!')if%["\#$&*+-/:;<>?@ABCDEFGIJKLMNOPQRSTUVWXYZ^_`abcghjknqvxyz{|}~123].sum==4980

3
Проблема в тому, що все після, включаючи ifбалончик, можна видалити.
seequ

@TheRare - нічого поганого в цьому ifнемає, поки функція насправді функціонує і речі після неї все ще підкоряються правилам.
Глен О

@GlenO Але це не вважається "знімним кодом"? Просто puts('Hello, world!')працювало б. Я думаю, що правила потребують уточнення, чи це законно.
seequ

@TheRare - заздалегідь, я, мабуть, мав би скористатися "підмножиною коду не повинно бути такого ж виходу", але я не думаю, що слід продовжувати змінювати правила. Якщо вони стоять, якщо код функціональний і не довільний і дотримується інших правил, він є законним. Принаймні, такий спосіб рішення не досяжний у більшості мов (редагування, яке я зробив закритою лазівкою, яка працює на більшості мов).
Глен О

@GlenO Ти суддя. Просто попросіть мене видалити ці коментарі, якщо вам здається, що вони непотрібні.
шукати

1

PHP, 2257

Лазівка: зворотну косу риску було опущено в специфікаціях та калькуляторі балів!

Цей код підраховує кількість появи зворотних косої риски в кожній рядку і друкує еквівалент ASCII. Заміна косої риски на інший символ або видалення зворотної косої риси викликає помилку розбору або змінює результат.

Акуратна особливість щодо нахилів в косому напрямку і PHPполягає в тому, що їх потрібно уникати, щоб автоматично подвоїти рахунок! Ви можете повторно подвоїти, потріювати і т. Д. Рахунок, помноживши кількість зворотних нахилів, але не хотіли бути жадібними, і я думаю, що це може перевищити межі того, що ви можете ввести.

<?php foreach(array('\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\','\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\')as$x)print(chr(substr_count($x,"\\")))?>

Це явно не що інше, як помилка в описі, а не лазівка. Більше того, ви це вже знали. В описі прямо написано "інші символи ASCII". На час, коли ви прочитаєте це, його буде відредаговано, щоб включити його.
Глен О

Зокрема, зворотний проріз був у джерелі запитання, але я не зрозумів, що він трактував це як послідовність втечі.
Глен О

Це не зміна правил, це виправлення другорядних помилок. Зворотна косою рисою була в правилах, вона просто не відображалася (щоб переконатися в цьому, натисніть кнопку "відредаговано", потім натисніть "розмітка розміщення"). А інші не експлуатують лазівки, вони використовують особливості своїх мов.
Глен О

1

Befunge - 87

"dlrow ,olleH"bk,                                                                   v
!#$%&'()*+-./0123456789:;  <=>?ABCDEFGIJKLMNOPQRSTUVWXYZ[\]^_`acfghijmnpqstuvxyz{|}~@

Перший рядок вартує чотирьох балів через все повторення, але у другому рядку немає дублюваних символів. Єдиним літеральним рядком у цьому коді є те dlrow ,olleH, що стає зворотним і друкується як вихід. Видалення будь-якого одного символу від'єднає vкінець першого рядка від @кінця другого, що призведе до того, що програма ніколи не припиняється. Якщо vсам вилучений, код перейде до нескінченного циклу, друкуючи правильний вихід.



0

Acc !!, -138 (і так, це негативно 138)

Хоча це може бути не найкращим балом, який я коли-небудь отримував у PPCG, я сумніваюся, він може отримати більше, ніж це в Acc !!

108
Write 72
Write 101
Count i while i-2 {
	Write _
}
Write _+3
Write 44
Write 32
Write 119
Write 111
Write 114
Write _
Write 100
Write 33

Спробуйте в Інтернеті!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.