"deciph4r4ng"를 해봅시다


58

이 도전에서 당신의 임무는 문자열을 해독하는 것입니다. 운 좋게도 알고리즘은 매우 간단합니다. 왼쪽에서 오른쪽으로 읽는 경우, 각 숫자 N (0-9)은 앞에 N + 1 위치 인 문자로 바꿔야 합니다.

입력 문자열 "Prog2am0in6"은 다음과 같이 디코딩됩니다.

예

따라서 예상 출력은 "Programming"입니다.

설명 및 규칙

  • 입력 문자열에는 32-126 범위의 ASCII 문자 만 포함됩니다. 결코 비워지지 않을 것이라고 가정 할 수 있습니다.
  • 원래 해독 된 문자열에는 숫자가 포함되지 않습니다.
  • 문자가 해독되면, 다음 숫자로 차례로 참조 될 수 있습니다. 예를 들어 "alp2c1"로 디코딩해야합니다 "alpaca".
  • 참조는 문자열을 감싸지 않습니다. 이전 문자 만 참조 할 수 있습니다.
  • 전체 프로그램 또는 함수를 작성하여 결과를 인쇄하거나 출력 할 수 있습니다.
  • 이것은 코드 골프이므로 바이트 단위의 최단 답변이 이깁니다.
  • 표준 허점은 금지되어 있습니다.

테스트 사례

Input : abcd
Output: abcd

Input : a000
Output: aaaa

Input : ban111
Output: banana

Input : Hel0o W2r5d!
Output: Hello World!

Input : this 222a19e52
Output: this is a test

Input : golfin5 3s24o0d4f3r3y3u
Output: golfing is good for you

Input : Prog2am0in6 Puz0les7&1Cod74G4lf
Output: Programming Puzzles & Code Golf

Input : Replicants 4re3lik448ny3oth8r5mac6in8.8T64y'r371it9376a1b5n1fit7or2a1h2z17d.
Output: Replicants are like any other machine. They're either a benefit or a hazard.

입력을 단일 문자열 배열로받을 수 있습니까? 숫자가 9보다 크지 않다고 가정 할 수 있습니까?
fəˈnɛtɪk

@ fəˈnɛtɪk 입력 형식과 관련하여 : 귀하의 언어에 허용되는 유일한 형식이 아니라면 아니요라고 대답합니다. 우리는 숫자가 아닌 한 자릿수를 다루고 있습니다. 따라서 예 : <= 9임을 보장하지만 행에 여러 자리가 나타날 수 있습니다.
Arnauld

싶은 1bbab(예상 출력 유효한 입력 될 abbab)? 다시 말해, 참조가 문자열을 감쌀 수 있습니까?
Luke

@Luke 좋은 지적. 아니요, 1bbab유효하지 않습니다. 이에 대한 설명을 추가했습니다.
Arnauld

답변:


11

젤리 , 9 7 바이트

~ịṭṭµ@/

온라인으로 사용해보십시오!

작동 원리

~ịṭṭµ@/  Main link. Argument: s

    µ    Combine the four links to the left into a chain (arity unknown).
     @   Swap the chains arguments. This makes it dyadic.
      /  Reduce s by the chain with swapped arguments. It will be called with
         right argument r (the result of the previous call, initially the first 
         character) and left argument c (the next character of s).
~            Bitwise NOT of c. This maps a digit 'd' to ~d = -(d+1), but all 
             non-digit characters 'D' to 0.
  ṭ          Tack; append c to r.
 ị           Index; select the character of the result to the right at the
             index from the result to the left. Indexing is 1-based and modular,
             so 0 is the last character, -1 the second to last, etc.
   ṭ         Tack; append the resulting character to r.    

13

자바 7, 81 80 바이트

void a(char[]a){for(int i=0;++i<a.length;)if(a[i]>47&a[i]<58)a[i]=a[i-a[i]+47];}

온라인으로 사용해보십시오!

Anders Tornblad 덕분에 1 바이트를 절약했습니다 . 첫 번째 문자는 숫자가 될 수 없으므로 종료 상태를 확인하기 전에 미리 증가시킬 수 있다는 의미이므로 확인할 필요가 없습니다.


2
첫 번째 문자는 숫자를 포함 할 수 없으므로 확인할 필요가 없습니다. 따라서 루프를 for(int i=0;++i<a.length;){대신하여 하나의 문자를 절약 할 수 있습니다 .
Anders Tornblad

12

하스켈, 55 바이트

o#c|c>'/',c<':'=o!!read[c]:o|1<2=c:o
reverse.foldl(#)[]

사용 예 : reverse.foldl(#)[] $ "Prog2am0in6 Puz0les7&1Cod74G4lf"-> "Programming Puzzles & Code Golf". 온라인으로 사용해보십시오!

숫자를 해당 문자로 대체하여 문자열을 자체의 역 사본으로 줄이십시오. 이렇게하면 숫자를 인덱싱 할 때 문자열에 쉽게 액세스 할 수 있기 때문에 "reverse"입니다. 다시 뒤집으십시오.


1
와우, 나는이 정확한 해결책을 작성했지만 그것을 게시하는 데 느 렸습니다 :) 글쎄, 적어도 지금은 그것이 좋은
Leo

11

C, 46 바이트

f(char*s){for(;*s++;)*s=s[(*s-52)/6?0:47-*s];}

온라인으로 사용해보십시오!


C,  52   49  48 바이트

바이트를 저장해 준 @ l4m2에게 감사합니다!

f(char*s){for(;*s++;)*s>47&*s<58?*s=s[47-*s]:0;}

입력 문자열을 직접 편집합니다.

온라인으로 사용해보십시오!

대체 50 바이트 버전 :

f(char*s){for(;*s++;)*s=abs(*s-57)>9?*s:s[47-*s];}

재귀 버전, 48 바이트 :

f(char*s){*s>47&*s<58?*s=s[47-*s]:0;*s++&&f(s);}

9

05AB1E , 11 바이트

vydiÂyèëy}J

온라인으로 사용해보십시오!

설명

v            # for each character y in input
 ydi         # if y is a digit
    Â        #    push a reversed copy of the string we've built up so far
     yè      #    push the character at index y in the reversed string
       ë     # else
        y    #    push y
         }   # end if
          J  # join stack to a single string
             # output top of the stack at the end of the loop

시작하기 전에 이미 더 자주 대답했는지 확인해야합니다.
매직 문어 Urn

@carusocomputing : 당신은 여전히 ​​내가 사용했던 것보다 더 나은 트릭을 생각할 수 있습니다.)
Emigna

7

자바 스크립트 (ES6), 59 53 바이트

f=x=>/\d/.test(x)?f(x.replace(/\d/,(m,o)=>x[o+~m])):x

fəˈnɛtɪk 덕분에 7 바이트를 절약했습니다.

f=x=>/\d/.test(x)?f(x.replace(/\d/,(m,o)=>x[o+~m])):x

console.log(f("Prog2am0in6"));
console.log(f("abcd"));
console.log(f("a000"));
console.log(f("ban111"));
console.log(f("Hel0o W2r5d!"));
console.log(f("this 222a19e52"));
console.log(f("golfin5 3s24o0d4f3r3y3u"));
console.log(f("Prog2am0in6 Puz0les7&1Cod74G4lf"));
console.log(f("Replicants 4re3lik448ny3oth8r5mac6in8.8T64y'r371it9376a1b5n1fit7or2a1h2z17d."));


.charAt (...)는 7 바이트를 절약하기 위해 [...]로 대체 될 수 있습니다.
fəˈnɛtɪk

x.charAt (...)는 x [...]와 같습니다.
fəˈnɛtɪk

@ fəˈnɛtɪk Yep, 나는 전에 그것을 시도했다고 생각했지만 오류가 발생했습니다. 감사!
Tom

1
o-m-1로 교체 할 수 있습니다 o+~m.
Neil

2
f는 재귀 적으로 호출되기 때문에 프로그램의 문자 수는 f=부분을 포함해야 하므로 52가 아닌 54 바이트입니다.
user5090812

5

망막 , 37 바이트

바이트 수는 ISO 8859-1 인코딩을 가정합니다.

\d
$*«»
r1+`(?<=(.)(?<-2>.)*)(«)*»
$1

온라인으로 사용해보십시오!

설명

\d
$*«»

각 숫자 dds로 « 바꾸고 그 뒤에 1을 붙 »입니다. 우리는 후자 a)가 d = 0 인 위치를 인식 할 수 있고 b) 인접한 자릿수 사이의 구분자 로 인식 할 수 있어야합니다 .

r1+`(?<=(.)(?<-2>.)*)(«)*»
$1

+첫 번째 줄의 정규 표현식을 오른쪽에서 왼쪽 ( r) 으로 반복해서 일치시킨 다음 가장 왼쪽 일치 항목 ( 1)을 두 번째 줄의 대체물로 바꿉니다.

정규식 자체가 우리의 지금 단항 숫자 중 하나와 일치와의 수를 계산 «그룹 lookbehind는 다음과 일치하는 2에들 D 와 문자 (?<-2>.)*의 언급-에 문자 그룹 1에 문자열 캡처하기 전에 «들과 »다음 캡처 문자로 대체된다 .


5

MATL , 21 19 17 16 바이트

"@t4Y2m?UQ$y]]&h

MATL Online 에서 사용해보십시오 !

설명

        % Implicitly grab input as a string
"       % For each character in the input
  @     % Push that character to the stack
  t     % Make a copy of it
  4Y2   % Push the pre-defined array '0123456789' to the stack
  m     % Check if the current character is part of this array (a digit)
  ?     % If it is
    UQ  % Convert it to a number and add 1 (N)
    $y  % Make a copy of the element N-deep in the stack. MATL uses one-based indexing
        % So 1$y is the element at the top of the stack, 2$y is the next one down, etc.
  ]     % End of if statement
        % Non-digit characters remain on the stack as-is
]       % End of for loop
&h      % Horizontally concatenate the entire stack to form a string
        % Implicitly display the result

$y새 버전에서 잘 사용 !
Luis Mendo

@LuisMendo 감사합니다! 스택 기반 언어는이 도전에 적합합니다
Suever

@LuisMendo 불행히도 이것은 U숫자로만 작동 한다면 훨씬 더 짧아 질 수 있습니다 . 불행하게도 'e'U산출 exp(1)그렇지 않으면 나는 제거는 없었 4Y2재료
Suever

그 옥타브 것들 중 또 다른 ...
루이스 멘도

4

자바 스크립트 (ES6), 51 바이트

f=
s=>s.replace(/\d/g,(c,i)=>a[i]=a[i+=~c]||s[i],a=[])
<input oninput=o.textContent=f(this.value)><pre id=o>

a 다른 숫자를 참조하는 숫자를 처리하기 위해 대체 된 숫자를 저장하는 데 사용됩니다.


```s => s.replace (a = / \ d / g, (c, i) => a [i] = a [i + = ~ c] || s [i])```
l4m2

3

펄 5 , 34 바이트

33 바이트의 코드 + -p플래그.

s/\d/substr$_,-$&-1+pos,1/e&&redo

온라인으로 사용해보십시오!

s/\d/.../e...Perl 코드 로 평가 하여 첫 번째 숫자 를 바꿉니다. (함께 ...있는 substr$_,-$&-1+pos,1경우에. substr$_,-$&-1+pos,1의 문자열 반환 $_길이의 1인덱스 -$&-1+pos, $&단지 일치하는 번호를, 그리고 pos경기의 시작 인덱스입니다. 우리는 필요 redo모든 자리를 대체하기 위해 성공적으로 대체합니다. (결과는 -p플래그 덕분에 암시 적으로 인쇄됩니다 ).


이전 접근 방식, 47 바이트 :

44 바이트의 코드 + -F플래그

map{$F[$i]=$F[$i-$_-1]if/\d/;++$i}@F;print@F

온라인으로 사용해보십시오!

실제로 아주 직설적입니다. -F플래그는 각 문자의 입력을로 나눕니다 @F. map{...}@F반복 @F(즉, 입력의 모든 문자). 문자가 숫자 ( /\d/)이면 index의 문자로 바꿉니다 $i-$_-1. 는 $i(우리가 본 각 문자에 증가시켜 유지하는 것이) 현재의 인덱스 변수입니다.


3

자바 스크립트 ES6, 61 59 바이트

8 바이트를 골라 낸 @Luke에게 감사드립니다.

x=>[...x].map((p,i,a)=>a[i]=/\d/.test(p)?a[i-1-p]:p).join``

온라인으로 사용해보십시오!


x.split``또한, 수 [...x], [0-9]\d함께 6B 저장
누가 복음

현재 어딘가에 오류가있어서 처음 수정하려고합니다
fəˈnɛtɪk

x=>[...x].map((p,i,a)=>+p+1?a[i-1-p]:p).join``for 46 bytes
Luke

공백이
없으면

x=>[...x].map((p,i,a)=>a[i]=1+p>9?a[i-1-p]:p).join``
l4m2

3

05AB1E , 27 17 바이트

vyDdiU)DRXèU`X}}J

온라인으로 사용해보십시오!

vy             }  # For each character
  Dd              #   Push is_number
    i         }   #   If it is
     U            #     Save save it
      )DR         #     Wrap the (reversed) stack into an array
         Xè       #     Get the character at the saved index
           U`X    #     Flatten the whole stack
                J # Join 

2

CJam, 13 바이트

q{_A,s#)$\;}/

온라인 데모.

이 솔루션은 CJam의 내장 " 스택에서 n 번째 항목 복사 "연산자 $를 사용하여 디코딩을 구현합니다. 입력 (with q) 을 읽은 다음 입력 문자열에서 문자를 반복하고 스택 (with {}/) 에 덤프하여 시작합니다 . 그러나 루프 본문 내에서 스택에 배치 된 후 (와 _) 각 문자를 복제 #하고 문자열에서 와 위치를 찾아서 "0123456789"편리하게로 표시 하여 숫자인지 확인합니다 A,s.

이 조회의 결과는 숫자의 숫자 값이거나 문자가 숫자가 아닌 경우 -1입니다. )오퍼레이터는 하나 그 값을 증가하고, $적층 체의 하방 많은 위치에서 현재 문자로 대체한다. 마지막으로, 더 이상 필요하지 않기 때문에 스택에서 \;만든 현재 입력 문자의 사본을 제거 _합니다.


2

Befunge-98 , 45 43 바이트

::::#@~\1p:1g::'9`!\'/`*j;'/--1g\1p\1g#;,1+

온라인으로 사용해보십시오!

아이디어:

  1. 입력 문자열의 각 문자마다
    1. 2 행에 작성
    2. 숫자가 아닌 경우 출력하십시오.
    3. 그렇지 않으면 올바른 값을 찾아서 다시 쓴 다음 출력하십시오.
::::            ; There's a counter on the stack, duplicate it 4 times  ;
    #@~         ; Get the next char of input, exiting if there is none  ;
       \1p      ; At the location (counter, 1), write the input char    ;
          :1g   ; Re-obtain the char. Stack is now [counter * 4, input] ;

::                ; Stack: [counter * 4, input * 3]      ;
  '9`!\'/`*       ; If !(input > '9') and (input > '/')  ;
                  ; IE If ('0' <= input && input <= '9') ;
           j;...; ; Then execute the ...                 ;

; Stack: [counter * 4, input] ;
; The ... branch:             ;

'/-             ; input -> int. (input -= '/')             ;
   -            ; counter - int(input) - 1                 ;
                ; Stack: [counter * 3, lookupPosition ]    ;
    1g          ; Get the char that we want to find        ;
      \1p\1g#   ; Overwrite the current char (not the old) ;

; Both branches: ;
,1+             ; Print the number and increment the counter ;

이 버전을 더 짧게 얻을 수 없었지만이 버전은 44 바이트입니다.

s #@~\3p:3g::'9`!\'/`*j;'/--3g#;:10g3p,1+:::

깔끔한 트릭으로 공유 할 것이라고 생각 s했지만 스택에 카운터를 저장하면 1 문자가 향상됩니다.



2

파이썬 2, 75 71 바이트

s='';j=-1
for i in input():s+=s[j-int(i)]if'/'<i<':'else i;j+=1
print s

온라인으로 사용해보십시오!

편집 : 32-47 사이의 ASCII 값 고정 ; 이중 디코딩 (예 : "alp2c1"에서 "alpaca")으로 수정되었습니다.


1
@Arnauld Nope. 죄송합니다. 사양을 충분히 읽지 못했습니다. 곧 수정하겠습니다
math junkie

버그가있는 것 같습니다. 'Prog2am0in6 Puz0les7&1Cod74G4lf'당신의 프로그램 인쇄를 위해 Programming Puzzles &7Code1Golf! 두 TIO 링크를 공유하여 시도했습니다!
Keerthana Prabhakaran

트윗 담아 가기 0 바이트의 비용으로 고정! (나의 대체 솔루션은 그만 두지 못했습니다.)
math junkie

그 좋은 접근 방식입니다!
Keerthana Prabhakaran

'/'<i < ':'를 설명 할 수 있습니까? 숫자인지 테스트 중이라는 것을 알고 있지만 어떻게 작동합니까?
Matias K

2

PHP 7.1 67 59 바이트

while(_&$c=$argn[$i++])$t.=($c^"0")<"
"?$t[~+$c]:$c;echo$t;

STDIN에서 입력을받습니다. 파이프로 실행 -nR하거나 온라인으로 사용해보십시오 .

  • _&$c=$s[$i++]문자열을 통해 루프 ( _&$c없는 뭔가가 발생합니다 "0", 그래서 루프를 깰 수있는 유일한 문자가 빈 문자열 = 입력의 끝)
  • $c^"0" ASCII 코드에서 비트 5와 6을 토글
  • <"\n" 결과가 <chr (10)인지 확인
  • 그렇다면 숫자입니다. 이전 문자를 색인으로 인쇄하고 현재 색인으로 복사
  • 그렇지 않으면이 문자를 인쇄

12 % 절약 해 주신 @Christoph에게 감사드립니다.


1
나는 이것이 오래된 대답이라는 것을 알고 있지만 부정적인 문자열 오프셋! (그리고 그 $s=$argn...?)for(;_&$c=$argn[$i++];)$t.=($c^"0")<"\n"?$t[~+$c]:$c;echo$t;
Christoph

2

Vim 매크로 / 키 스트로크, 49 바이트

^M 리턴 문자 (0x0A, 1 바이트)를 나타냅니다.

qqqqq/[0-9]^Myl:exe 'norm '.(@"+1).'h'^Mylnphx@qq@q

설명

qqq                                                     clear register q
   qq                                                   record into q
     /[0-9]^M                                           move the cursor to the next digit
             yl                                         yank the digit
               :exe 'norm '.(@"+1).'h'^M                move the cursor left that number of characters plus one
                                        yl              yank the char
                                          n             go back to the digit
                                           p            paste the char 
                                            hx          delete the digit
                                              @q        recursive call
                                                q       stop recording
                                                 @q     run the macro

2

APL (Dyalog Classic) , 25 23 바이트

@FrownyFrog 덕분에 -2 바이트

((⊂⌷⊢)⍣≡⍳∘≢-11|⎕d∘⍳)⊃¨⊂

온라인으로 사용해보십시오!

사용 ⎕io←1

( 아래는 평가에서 중간 값을 나타냅니다)

⎕d 문자열입니다 '0123456789'

⎕d⍳⍵의 문자에 대한 (이 경우 1부터) 인덱스를 찾습니다 ⎕d. 숫자가 아닌 경우 인덱스는 11입니다.

11|⍵ 모듈로입니다-11은 0이됩니다

≢⍵ 길이는

⍳≢⍵1 2 ...까지≢⍵

따라서 결과 문자를 얻을 수있는 인덱스 (⍳≢⍵)-11|⎕d⍳⍵벡터 i 를 제공 합니다. 그러나 이러한 지수 중 일부는 다른 (더 작은) 지수로 리디렉션 될 수 있습니다. (그 자체로 전이 폐쇄 (즉, 유효 지수), 우리 인덱스 벡터 계산하기 ⊂⌷⊢에, 기차 동등한 (⊂i)⌷i또는 i[i])하고 안정 될 때까지 (즉, 반복 ⍣≡으로 알려진되는 고정 소수점 연산자).

마지막으로 원래 문자열에 색인을 생성합니다. (...)⊃¨⊂


기차처럼 보입니까?
FrownyFrog 1

@FrownyFrog 참으로 짧아
ngn


1

Japt , 24 바이트

£Xn >J?U=UhYUgJ+Y-X):PÃU

온라인으로 사용해보십시오!

설명:

£Xn >J?U=UhYUgJ+Y-X):PÃU
£                     Ã    Iterate through the input (implicit U) 
                             X becomes the iterative item, Y becomes the index
 Xn                          Try parseInt(X)
    >J                       > -1
                               In this case, this checks if X is a digit
      ?                      If true:
       U=                      Set U to 
         UhY                     U with the char at index Y set to:     
            UgJ+Y-X               The index at -1+Y-X
                   ):        Else:
                     P         variable P (just a no-op in this case)
                       U   Finally, return U




1

자바 스크립트 ES6, 54 바이트

f=r=>[...r].reduce((a,s,i)=>a+(/\d/.test(s)?a[i+~s]:s))

f=r=>[...r].reduce((a,s,i)=>a+(/\d/.test(s)?a[i+~s]:s))

console.log(f("Prog2am0in6"));
console.log(f("abcd"));
console.log(f("a000"));
console.log(f("ban111"));
console.log(f("Hel0o W2r5d!"));
console.log(f("this 222a19e52"));
console.log(f("golfin5 3s24o0d4f3r3y3u"));
console.log(f("Prog2am0in6 Puz0les7&1Cod74G4lf"));
console.log(f("Replicants 4re3lik448ny3oth8r5mac6in8.8T64y'r371it9376a1b5n1fit7or2a1h2z17d."));


1
PPCG에 오신 것을 환영합니다! 재귀 호출에 함수 이름이 필요하지 않은 경우 명명되지 않은 함수가 유효하므로에 2 바이트를 저장할 수 있습니다 f=.
Martin Ender

1

> <> (물고기), 108 바이트 (= 9 x 12 그리드)

01-r>:0(\
"/"&::;?/
)?\v    \
":/v!?(":
")\ :>:"0
 !?\
${/  \ -1
&>\ ~{:&$
\ \ :"0"=
/\- 1}$/?
:v&//}~/~
 \o}\&$/ 

여기 에서 물고기가 헤엄 치는 모습을 보십시오 .

  • 입력 스택에 -1을 추가 한 다음 스택을 뒤집습니다.
  • 루프 : 최고 값이 -1이면 종료합니다 (모든 문자를 순환했습니다). 그렇지 않으면:
  • 최상위 문자를 레지스터에 넣습니다. "0"~ "9"범위에 있는지 확인하십시오. 그렇다면:
    • 스택을 적절한 수의 장소로 회전
    • 캐릭터를 가리키다
    • 다시 회전하고 레지스터의 문자로 숫자를 바꿉니다.
  • 산출; 루프를 재개하십시오.

1

8086 머신 코드, 35 바이트

00000000  be 82 00 ac 98 50 2c 30  3c 09 77 0c 4e 89 f7 4e  |.....P,0<.w.N..N|
00000010  29 c6 58 ac aa 89 fe 50  5a b4 02 cd 21 80 fa 0d  |).X....PZ...!...|
00000020  75 e1 c3                                          |u..|
00000023


1

Japt v2.0a0, 16 바이트

r\d@=hYUgY-°X¹gY

시도 해봐


설명

                     :Implicit input of string U
r                    :Replace
 \d                  :  RegEx /\d/g
   @                 :  Pass each match X at index Y through a function
     hY              :    Set the character at index Y in U
       UgY-°X        :    To the character at index Y-++X
    =        ¹       :    Reassign to U
              gY     :    Get the character at index Y

1

J , 20 바이트

{~[:{~^:_#\-2+_1".,.

온라인으로 사용해보십시오

                  ,.  Each character on a separate row
              _1".    Convert to numbers, replacing non-numbers with -1
                         (it becomes one row again)
            2+        Add 2.
         #\           Prefix lengths (range 1..length)
           -          Subtract
  [:{~^:_             Index into itself as long as it changes the result
{~                    Index into the original string

영감에 대한 ngn의 공로.

22 바이트

(],,{~1{._1-_1".[)/@|.

이것은 젤리 답변의 포트입니다.

                    |. The string backwards, because reduce is right-to-left.
            _1".[      The next character as a number (d), -1 if it's not a number,
                          and a space character produces an empty array.
         _1-           -1-d
      1{.              Take 1. If we have a nothing
                          at this point, that makes it a 0.
   ,                   Prepend the next character to the result of the previous call.
    {~                 Select the character. 0 is the first, _2 is second to last.
 ],                    Append the result.

두 솔루션에서 TIO가 사용하는 버전은 단일 .을 숫자 0으로 해석 하므로 마지막 테스트는 실패합니다. 이전 버전 (≤7)이 올바르게 작동하는 것 같습니다.

온라인으로 사용해보십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.