Меня зовут инспектор Морс


20

Ваша миссия, если вы решите принять ее, состоит в том, чтобы решить, является ли данная входная строка точечной или тяжелой тире.

Строка является точечной, когда ее азбука Морзе содержит больше точек, чем тире. Например, буква E представляет собой одну точку, что означает, что она тяжелая точка.

вход

  • Входная строка будет содержать только символы в диапазоне [a-z]или [A-Z]. Вы можете решить , должны ли они все в верхнем регистре, или в нижнем регистре. AAAЭто хорошо,aaa хорошо, aAaнет.
  • Длина входной строки всегда будет не менее 1 символа.
  • Вы можете предположить, что входные строки никогда не будут иметь одинакового количества точек и тире.

Выход

Вы должны вернуть Truthy для входных данных, которые содержат больше точечных символов.
Вы должны вернуть Falsy для входных данных, которые содержат больше символов тире.
Изменить: я позволю положительное значение для точки и отрицательное значение для тире.

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

| input | morse representation | result          |
|------------------------------------------------|
| S     | ...                  | Truthy          |
| k     | -.-                  | Falsy           |
| HELLO | .... . .-.. .-.. --- | Truthy          |
| code  | -.-. --- -.. .       | Falsy           |

Ссылка

Международный азбука Морзе

Это . Самый короткий код в байтах побеждает.



4
Можем ли мы вернуть значение выше 0 для dotheavy и отрицательное значение для dash-heavy?
Воплощение Невежества

@EmbodimentofIgnorance Это работает для меня, если вы укажете это в своем посте. Я не думаю, что это обычно проходит правдивую ложную проверку, но это похоже на хорошее решение в этом случае, поэтому я позволю это
Bassdrop Cumberwubwubwub

Ответы:


5

APL (Dyalog Extended) , 24  15 байтов SBCS

-9 благодаря Ven

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

>/'.-'⍧∊∘⌂morse

Попробуйте онлайн!

⌂morse преобразовать в список строк Морзе
,  то
ε NLIST (расплющить)
'.-'⍧ подсчитать количество точек и тира в том , что
>/ больше точек , чем тир? (лит. больше, чем сокращение)


почему бы не иметь расширенную предзагрузку dfns по умолчанию?
нг

@ngn Это теперь встроено
Адам

7

IBM PC DOS, сборка 8088, 54 35 байт

-19 байт с использованием разностного метода

ac2c 41d0 d8d7 7206 51b1 04d2 e859 240f 2c03 02e0 e2ea 3534 4527 4125 1303 1462 4523 13

разобранное:

; compare dashes and dots in a morse code string
; input:
;   I: pointer to input string (default SI)
;   IL: length of input string (default CX)
;   TBL: pointer to data table (default BX)
; output:
;   Sign/OF flags: Dot-heavy: SF == OF (JGE), Dash-heavy: SF != OF (JL)
MORSE_DD    MACRO   I, IL, TBL
            LOCAL   LOOP_LETTER, ODD
        IFDIFI <I>,<SI>     ; skip if S is already SI
    MOV  SI, I              ; load string into SI 
        ENDIF
        IFDIFI <IL>,<CX>    ; skip if IL is already CX
    MOV  CX, IL             ; set up loop counter
        ENDIF
        IFDIFI <TBL>,<BX>   ; skip if TBL is already BX
    MOV  BX, OFFSET TBL     ; load letter table into BX
        ENDIF
LOOP_LETTER:
    LODSB                   ; load next char from DS:SI into AL, advance SI
    ;AND  AL, 0DFH           ; uppercase the input letter (+2 bytes)
    SUB  AL, 'A'            ; convert letter to zero-based index
    RCR  AL, 1              ; divide index by 2, set CF if odd index
    XLAT                    ; lookup letter in table
    JC   ODD                ; if odd index use low nibble; if even use high nibble
    PUSH CX                 ; save loop counter (since SHR can only take CL on 8088)
    MOV  CL, 4              ; set up right shift for 4 bits
    SHR  AL, CL             ; shift right
    POP  CX                 ; restore loop counter
ODD:
    AND  AL, 0FH            ; mask low nibble
    SUB  AL, 3              ; unbias dash/dot difference +3 positive
    ADD  AH, AL             ; add letter difference to sum (set result flags)
    LOOP LOOP_LETTER
        ENDM

TBL DB 035H, 034H, 045H, 027H, 041H, 025H, 013H, 003H, 014H, 062H, 045H, 023H, 013H

объяснение

Реализовано в синтаксисе Intel / MASM как MACRO (в основном функция), используя только 8088-совместимые инструкции. Ввод в виде заглавной строки (или +2 байта для разрешения смешанного регистра), выходной результат Truthy / Falsy SF == OF(использоватьJG или JLдля проверки).

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

Оригинал (54 байта):

; compare dashes and dots in a Morse code string
; input:
;   I: pointer to input string (default SI)
;   IL: length of input string (default CX)
;   TBL: pointer to data table
; output:
;   Carry Flag: CF=1 (CY) if dot-heavy, CF=0 (NC) if dash-heavy
MORSE_DD    MACRO   I, IL, TBL
            LOCAL   LOOP_LETTER
        IFDIFI <I>,<SI>     ; skip if S is already SI
    MOV  SI, I              ; load string into SI 
        ENDIF
        IFDIFI <IL>,<CX>    ; skip if IL is already CX
    MOV  CX, IL             ; set up loop counter
        ENDIF
    MOV  BX, OFFSET TBL     ; load score table into BX
    XOR  DX, DX             ; clear DX to hold total score
LOOP_LETTER:
    LODSB                   ; load next char from DS:SI into AL, advance SI
    ;AND  AL, 0DFH           ; uppercase the input letter (+2 bytes)
    SUB  AL, 'A'            ; convert letter to zero-based index
    XLAT                    ; lookup letter in table
    MOV  AH, AL             ; examine dot nibble
    AND  AH, 0FH            ; mask off dash nibble
    ADD  DH, AH             ; add letter dot count to total
    PUSH CX                 ; save loop counter (since SHR can only take CL)
    MOV  CL, 4              ; set up right shift for 4 bits
    SHR  AL, CL             ; shift right
    POP  CX                 ; restore loop counter
    ADD  DL, AL             ; add letter dash count to total
    LOOP LOOP_LETTER
    CMP  DL, DH             ; if dot-heavy CF=1, if dash-heavy CF=0
        ENDM

; data table A-Z: MSN = count of dash, LSN = count of dot
TBL DB 011H, 013H, 022H, 012H, 001H, 013H, 021H, 004H, 002H 
    DB 031H, 021H, 013H, 020H, 011H, 030H, 022H, 031H, 012H
    DB 003H, 010H, 012H, 013H, 021H, 022H, 031H, 022H

объяснение

Реализовано в синтаксисе Intel / MASM как MACRO (в основном функция), используя только 8088-совместимые инструкции. Ввод в виде строки, вывод результата Truthy / Falsy в Carry Flag. Таблица результатов содержит количество штрихов и точек на букву.

Ввод верхнего регистра. Добавьте 2 байта, чтобы взять нижний или смешанный регистр.

Пример тестовой программы (в качестве отдельного исполняемого файла COM для IBM PC DOS)

    SHR  SI, 1              ; point SI to DOS PSP
    LODSW                   ; load arg length into AL, advance SI to 82H
    MOV  CL, AL             ; set up loop counter in CH
    DEC  CX                 ; remove leading space from letter count

    MORSE_DD SI, CX, TBL    ; execute above function, result is in CF

    MOV  DX, OFFSET F       ; default output to "Falsy" string
    JA   DISP_OUT           ; if CF=0, result is falsy, skip to output
    MOV  DX, OFFSET T       ; otherwise CF=1, set output to "Truthy" string
DISP_OUT:
    MOV  AH, 09H            ; DOS API display string function
    INT  21H
    RET

T   DB "Truthy$"
F   DB "Falsy$"

Пример вывода:

введите описание изображения здесь

Скачать тестовую программу DD.COM

Или попробуйте онлайн! Я не знаю об интерактивном TIO для прямой ссылки на исполняемый файл DOS, однако вы можете использовать это всего за несколько шагов:

  1. Скачать DD.COM в виде ZIP-файла
  2. Перейти к https://virtualconsoles.com/online-emulators/DOS/.
  3. Загрузите ZIP-файл, который вы только что загрузили, нажмите Пуск
  4. Введите DD Helloили DD codeкак душе угодно

Я мог что-то упустить, но этот макрос не принимает AH = 0 при входе? Конечно, это предположение верно при использовании тестовой программы.
гастропнер

1
Хороший глаз! Предположение основано на значениях начального регистра запуска запуска DOS, которые почти для всех версий DOS предназначены 0000hдля источника AX: fysnet.net/yourhelp.htm
640 КБ

С одного сборщика в другой: приятно ! Дополнительные очки стиля для использования чисто 8088-совместимых инструкций. Это платформа, где игра в гольф кода в значительной степени эквивалентна оптимизации, и действительно утерянным искусством. Хорошее использование для того, XLATчтобы делать именно то, для чего предназначено. Если бы вы на самом деле оптимизировали скорость по размеру, вы бы хотели выполнить поиск в формате WORD. Это все еще выигрыш в скорости даже на 8088 с его анемичной 8-битной внешней шиной, потому что вы удваиваете пропускную способность без увеличения размера кода, за исключением одной XCHGили двух инструкций.
Коди Грей

@CodyGray спасибо! Всегда весело, когда задача хорошо сочетается с платформой и набором инструкций. Кроме того, это замечательно, когда вы можете выполнить что-то на 8088 оригинального ПК в 1 байт (например, XLAT), даже если требуется 6 байтов, чтобы сделать побитовое смещение вправо на 4 позиции (внутри a LOOP).
640KB

Ага. Что касается производительности, вы бы определенно хотели сделать 4 отдельных смены на 1, исключив пуш и поп. Это даже не так много байтов (+2), так что в целом чистая победа, но не подходит для игры в гольф. Настоящее удовольствие приходит, когда задача не совпадает с ISA, и вам нужно напрячься, чтобы найти новые, инновационные способы применения существующих строительных блоков. Однобайтовые строковые инструкции действительно хороши на 8088 для исполнения и игры в гольф. Я использую их в реальном коде. Я полагаю, что XLAT мне не очень полезен, потому что современные архитектуры склоняют меня против LUT.
Коди Грей

7

Java (JDK) , 131 124 110 84 64 байта

Интересно, что «точка» тяжелая, а «тире» тяжелая.

Принимает ввод всех заглавных букв как IntStream(прокрутите вниз для версии с фактической Stringдля дополнительных 8 байтов). Мне очень помогло это в игре: благодаря Expired Data для игры в гольф 20 байтов, Нилу для игры в гольф 26 байтов, Оливье Грегуару за игру в гольф 18 байтов и Кевину Круйссену за 2 байта.

Содержит 26 непечатаемых символов в двойных кавычках.

c->c.map(a->"".charAt(a-65)-4).sum()>0

Попробуйте онлайн!

Ungolfed:

c -> // lambda taking input as an IntStream in upper case and returning a boolean
  c.map(a -> "" // map each character's ASCII value to its net dot impact (unprintable characters here)
    .charAt(a - 65) // translate the ASCII code into a zero-based index into the above string (65 is 'A')
    - 4) // unprintables are > 0, this restores the proper values
  .sum() > 0 // add up all the values, positive sum indicates a dot-heavy input string

Ява (JDK) , 131 124 110 84 72 байта

Для пуристов; принимает вход как String. Благодаря просроченным данным для игры в гольф 20 байтов, чтобы Нейлу за гольф 26 байтов и Оливье Грегуару за гольф 10 байтов.

s->s.chars().map(a->"".charAt(a-65)-4).sum()>0

Попробуйте онлайн.

Ungolfed:

s -> // lambda taking input as a String in upper case and returning a boolean
  s.chars() // convert to a stream of characters
  .map(a -> "" // map each character's ASCII value to its net dot impact (unprintable characters here)
    .charAt(a - 65) // translate the ASCII code into a zero-based index into the above string (65 is 'A')
    - 4) // unprintables are > 0, this restores the proper values
  .sum() > 0 // add up all the values, positive sum indicates a dot-heavy input string



2
Почему бы не использовать "35344527512513031462452313".charAt(a-65)-51?
Нил


1
@ OlivierGrégoire Ваш 66-байт на самом деле 65, так как вы забыли удалить конечную точку с запятой. Однако можно сохранить еще 1 байт, используя непечатаемые символы: 64 байта
Кевин Круйссен

4

Желе , 21 байт

Oị“ÆġwıMƥ)ɠịṙ{’D¤Æm>4

Попробуйте онлайн!

Как?

Oị“ÆġwıMƥ)ɠịṙ{’D¤Æm>4 - Link: list of characters ([A-Z]), S
                ¤     - nilad followed by link(s) as a nilad:
  “ÆġwıMƥ)ɠịṙ{’       -   base 250 integer = 14257356342446455638623624
               D      -   to decimal digits
                      -   -- that is the number of dots less the number of dashes plus 4
                      -      ... for each of OPQRSTUVWXYZABCDEFGHIJKLMN
O                     - ordinals of S   e.g. "ATHROUGHZ" -> [65,84,72,82,79,85,71,72,90]
 ị                    - index into (1-indexed & modular, so O gets the 79%26 = 1st item
                      -                                  or A gets the 65%26 = 13th item
                 Æm   - arithmetic mean
                   >4 - greater than 4?

4

05AB1E , 22 21 байт

Сохраненный байт благодаря Кевину Круйссену

SA•U(Õþć6Δ
»›I•‡3-O.±

Попробуйте онлайн!

объяснение

•U(Õþć6Δ
»›I•

это +35344527512513031462452313 сжимается до основания 255.

S              # split input into list of chars
       ‡       # transliterate
 A             # the lowercase alphabet
  •...•        # with the digits from the compressed string
        3-     # subtract 3 from each              
          O    # then sum the result
           .±  # and take the sign

Вы можете сохранить байт, заменив карту на S.
Кевин Круйссен

@KevinCruijssen: Спасибо! Я был уверен, что пробовал это, но, видимо, нет :)
Эминья

3
usdgpsahsoaboutlopezgbidolс в там: v = ord(c)*3%83%8.
Арно

@Arnauld: интересно! Как ты это узнал? Надеюсь не от руки: P
Emigna

1
Я перебор всех пар слов и самый длинный матч был aboutlopez. Затем я искал другие совпадения с тем же множителем и по модулю. (Так что абсолютно не гарантированно быть оптимальным.)
Арно






2

Stax , 20 байт

ÉBÜ◙ƒ╣<Hf6─òɼsäS╗◄↔

Запустите и отладьте его

Распакованный, размазанный и прокомментированный, это выглядит так.

"45D.J57KBJa`"I"    string literal with code points [52 53 68 46 74 53 55 75 66 74 97 34 73]
$                   flatten to string "52536846745355756674973473"
;                   push input
@                   get string characters at indices 
                    (using input codepoints as indices; lookups wrap around)
:V                  arithmetic mean
53>                 is greater than 53

Запустите этот


2

Рубин , 64 байта

->s{n=0;s.bytes{|i|n+=("[E[LduRgmQSMK"[i%13].ord>>i%2*3)%8-3};n}

Попробуйте онлайн!

Использует 13-байтовую магическую строку, 2 числа, 0..7закодированные в каждом байте. Вычтите 3 для диапазона -3..4.

Код ASCII для A(и также N) взятого по модулю 13 по совпадению равен нулю.


1

Сетчатка 0.8.2 , 51 байт

T`L`35344527412513031462452313
.
$*<>>>
+`<>|><

^<

Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Принимает только верхний регистр (+6 байт для смешанного регистра). Бесстыдно крадет строку @ Арно, но я все равно собираюсь использовать тот же алгоритм. Объяснение:

T`L`35344527412513031462452313
.

Изменение каждой буквы в разнице в количестве точек и тире, плюс три, так O=0и H=7.

$*<>>>

Представьте разницу как число <s и три >s. (К сожалению, я не могу использовать точки, потому что они особенные в регулярных выражениях.)

+`<>|><

Удалите подходящие пары <s и >s.

^<

Проверьте, остались ли еще какие-либо точки.


1

Bash + coreutils,  64  60 байт

tr a-z 35344526512513031462452313|sed s/./\&z-+/g|dc -eIK?^p

Попробуйте онлайн!

Принимает строку в нижнем регистре, выводит ноль для ложных значений, ненулевое значение для истинных

объяснение

Использует tr и sed для создания программы постоянного тока, которая выглядит следующим образом (для примера input 'hello'):

IK6z-+4z-+5z-+5z-+0z-+^p

IK     Push 10, then 0 to the stack
6z-+  Push 6 (three more than the dots minus dashes in 'h'), subtract 3, and accumulate
...    Do the same for all other letters, so the stack now has the total dots minus dashes
^      Raise 10 to this power - precision is zero so this turns negative/positive to falsy/truthy
p      Print result

Golfed два байта, просто помещая постоянного тока в трубопроводе , а не подстановки команд использования, то другой байт, заменяя <space>3с z(удобно, у меня есть 3 элемента в стеке в этой точке!) И еще один байт, заменив кавычки вокруг моей SED программы с единственная обратная косая черта, чтобы избежать&
София Лехнер


1

TI-BASIC (TI-84), 111 байт

:Ans→Str1:"ABCDEFGHIJKLMNOPQRSTUVWXYZ→Str2:"35344527512513031462452312→Str3:0<sum(seq(expr(sub(Str3,inString(Str2,sub(Str1,X,1)),1)),X,1,length(Str1))-3

Я использовал ту же строку для определения плотности точек, что и некоторые другие ответы.
Программа возвращает truey ( 1), если входная строка тяжелая точка, falsy ( 0), если нет.
Входная строка должна быть заглавными.
Вклад сохраняется в Ans. Вывод сохраняется Ansи автоматически распечатывается по завершении программы.

Ungolfed:

:Ans→Str1
:"ABCDEFGHIJKLMNOPQRSTUVWXYZ→Str2 
:"35344527512513031462452312→Str3
:0<sum(seq(expr(sub(Str3,inString(Str2,sub(Str1,X,1)),1)),X,1,length(Str1))-3

Пример:

"HELLO
HELLO
prgmCDGF3
           1
"CODE
CODE
prgmCDGF3
           0

Объяснение:
(TI-BASIC не имеет комментариев, предположим, что это ;указывает на комментарий)

:Ans→Str1                          ;store the input into Str1
:"ABCDEFGHIJKLMNOPQRSTUVWXYZ→Str2  ;store the uppercase alphabet into Str2
:"35344527512513031462452312→Str3  ;store dot-dash+3 for each letter into Str3

:0<sum(seq(expr(sub(Str3,inString(Str2,sub(Str1,X,1)),1)),X,1,length(Str1))-3 ;full logic

   sum(                                                                       ;sum the elements of
       seq(                                                               )    ;the list evaluated by
                sub(                                    )                       ;the substring of
                    Str3,                                                        ;Str3
                         inString(                  ),                           ;at the index of
                                       sub(        )                              ;the substring of
                                           Str1,                                   ;Str1
                                                X,                                 ;starting at X
                                                  1                                ;of length 1
                                  Str2,                                           ;in Str2
                                                      1                          ;of length 1
           expr(                                        ),                       ;converted to an integer
                                                          X,                    ;using X as the increment variable
                                                            1,                  ;starting at 1
                                                              length(Str1)      ;ending at the length of Str1
                                                                           -3   ;then subtract 3 from all elements in the list
  0<                                                                           ;then check if the sum is greater than 0
                                                                               ;implicitly output the result

Примечание: количество байтов программы оценивается с использованием значения в [MEM] > [2] > [7] (124 байта) с последующим вычитанием длины имени программы,CDGF3 (5 байтов) и дополнительных 8 байтов, используемых для Хранение программы:

124 - 5 - 8 = 111 байт




0

C ++ (скомпилировано с Visual Studio 2017) 171 байт

int f(string i){const char*c="1322131421130102123023121211210120032121323101112232";int j=0,h[2]={0};while(j<sizeof(i)/28)*h+=c[i[j]-97],h[1]+=c[i[j++]-71];return*h>h[1];}

если мы примем основную программу, которая существует для целей тестирования, а также ее больше.

это безупречный "аккуратный" вариант

#include "stdafx.h"
int main()
{
    const int dotCount[] = {1,3,2,2,1,3,1,4,2,1,1,3,0,1,0,2,1,2,3,0,2,3,1,2,1,2};
    const int dashCount[] = {1,1,2,1,0,1,2,0,0,3,2,1,2,1,3,2,3,1,0,1,1,1,2,2,3,2};
    std::cout << "Enter String:\n";
    std::string input;
    std::cin >> input;
    int inputsHeavyness[2] = { 0 };
    for(int i = 0;i < sizeof(input)/sizeof(std::string);i++)
    {
        inputsHeavyness[0] += dotCount[input[i] - 'a'];
        inputsHeavyness[1] += dashCount[input[i] - 'a'];
    }
    if (inputsHeavyness[0] > inputsHeavyness[1])
    {
        std::cout << "Dot Heavy\n";
    }
    else
    {
        std::cout << "Dash Heavy or Neutral\n";
    }
    return 0;
}

принимает все строчные


1
Вы можете добавить ссылку TIO . (Кроме того, я думаю, что у вас есть опечатка в коде нечистоты: это 22должно быть 2.)
Арно

да, это может быть опечатка. Я думаю, я исправил это в версии для гольфа, хотя. tio хорошо, я не имею ни малейшего представления об этом (я думаю, что я смотрел на него один раз, и на нем не было компилятора, который я использую, поэтому результаты между vs2017 и tio, скорее всего, будут отличаться? вообще не годится)
der bender

1
145 байтов . Результаты могут действительно отличаться между VS и TIO. Это иногда меняется и для меня, и я на самом деле использую GCC (хотя MinGW).
гастропнер

1
Твик @ceilingcat для 131 байта
gastropner

1
Построение на @gastropner 111 байтов. Объединение обоих массивов в один; "132...и "112...стать "353...и 51является значением ASCII3
потолка кошка

0

c (118 символов) возвращает положительное значение для избыточной точки и отрицательное значение для избыточной тире

int n(char* c){int v=25124858,d=3541434,i=0,o=0;for(;c[i]!=0;i++)o=(1&(v>(c[i]-65)))>0?(1&(d>>(c[i]-65)))>0?o+1:o-1:o;return o;}

ун-golfed

int n(char* c)
{
  // Bitwise alpha map: 
  // more dots = 1
  // more dashes or equal = 0
  int d=3541434;  
  // validation bit map.
  // dot/dash heavy = 1
  // even = 0
  int v=25124858;
  int i=0,o=0;
  for(;c[i]!=0;i++)   // iterate through all values
  {
    // There is no way to make this pretty
    // I did my best.
    // If the little endian validation bit corresponding
    // to the capitol letter ascii value - 65 = 0,
    // the output does not increment or decrement.
    // If the value is one it increases or decreases based
    // on the value of the d bitmap.
    o=(1& ( v > (c[I] - 65))) > 0 ?
      (1 & (d >> (c[I] - 65))) > 0 ?
        o + 1 :
        o - 1 :
      o;
  }
  return o;
}


Должен признаться, я не до конца понимаю сравнение 1& ( v > (c[I] - 65)), которое так же, как и то v > c[I] - 65, что я не могу себе представить, никогда не было ложным, поэтому мы могли бы удалить все это, перебирая @ceilingcat для 56 байт
gastropner

0

MathGolf , 22 байта

{▄="Yⁿ∩┐↑rⁿ¼~<↔"$▒3-§+

Попробуйте онлайн!

Использует тот же метод, что и многие другие ответы, где ⁿ∩┐↑rⁿ¼~<↔"представляет магическое число 35344527512513031462452313.


0

Python 2, 90 86 байт

import morse
s=''.join(morse.string_to_morse(input()))
print s.count('.')>s.count('-')

работал на моем местном с библиотекой Морзе . -4 байта. Спасибо за отзыв @JoKing!

Кроме того, это на 1 байт больше, если это в Python 3.

Python 3, 87 байт

import morse
s=''.join(morse.string_to_morse(input()))
print(s.count('.')>s.count('-'))

Хотя вопрос предполагает, что число 'и' не будет одинаковым; если они равны, этот код вернет True.


Я имею в виду, вы можете использовать inputвместо, raw_inputесли вы хотите ...
Джо Кинг

@ Шучу, я пытался. Это выдавало ошибку и, следовательно, пришлось прибегнуть к raw_input
Koishore Roy

Вы просто должны inputзаключать в кавычки строку, так как он пропускает STDIN перед передачей его в программу
Джо Кинг

Это очень справедливо. Я чувствую себя глупо, что пропустил это! : 3
Койшор Рой
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.