가장 일반적인 공통 문자열


30

문자열 목록을 입력으로 사용하고 모든 입력 문자열 의 하위 문자열 인 가장 긴 문자열을 출력하는 프로그램 또는 함수를 작성하십시오 . 길이가 같은 하위 문자열이 여러 개 있고 더 이상 하위 문자열이 없으면 그 중 하나를 출력하십시오.

  • 이것은 빈 문자열을 출력하는 것을 의미 할 수 있습니다.
  • 유효한 출력이 여러 개인 경우 그 중 하나를 출력 할 수 있습니다. 출력이 항상 유효한 한 주어진 입력에 대해 일관된 출력을 제공 할 필요는 없습니다.
  • 입력에 항상 하나 이상의 문자열이 있지만 비어 있지 않은 문자열이 없을 수 있습니다.
  • 모든 인쇄 가능한 ASCII 문자가 입력에 나타날 수 있습니다. 그것들 만이 나타나는 유일한 문자라고 가정 할 수 있습니다.
  • 기본 방법 중 하나를 사용하여 입력하거나 출력 할 수 있습니다 .
  • 표준 허점 은 허용되지 않습니다.
  • 이것은 입니다. 코드의 바이트 수가 적을수록 좋습니다.

테스트 사례 :

[Inputs] -> [Valid outputs (choose one)]

["hello", "'ello"] -> ["ello"]
["very", "much", "different"] -> [""]
["empty", "", "STRING"] -> [""]
["identical", "identical"] -> ["identical"]
["string", "stRIng"] -> ["st", "ng"]
["this one", "is a substring of this one"] -> ["this one"]
["just one"] -> ["just one"]
["", "", ""] -> [""]
["many outputs", "stuptuo ynam"] -> ["m", "a", "n", "y", " ", "o", "u", "t", "p", "s"]
["many inputs", "any inputs", "ny iii", "yanny"] -> ["ny"]
["%%not&", "ju&#st", "[&]alpha_numeric"] -> ["&"]


2
@ Adám이 질문은 하위 문자열이 아닌 가장 긴 공통 하위 시퀀스를 요구합니다 .
손잡이

1
문자열이 영숫자, 알파벳 또는 인쇄 가능한 ASCII입니까?
무지의 구현

@ 무시의 구현 모든 인쇄 가능한 ASCII 문자가 입력에 나타날 수 있습니다.
사라 J

2
@Shaggy 일반적으로 아니요. 둘을 구별 할 수 있으면 undefined유효한 출력 문자열이 없음을 의미합니다. 빈 문자열 (또는 다른 문자열)이 유효한 출력 인 경우 유효한 출력이 없다고 주장하는 것은 올바르지 않습니다.
사라 J

답변:


8

파이썬 2 , 82 바이트

f=lambda h,*t:h and max(h*all(h in s for s in t),f(h[1:],*t),f(h[:-1],*t),key=len)

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

입력을 산산조각냅니다. 첫 번째 문자열이 긴 입력 시간이 초과됩니다.

아이디어는 첫 번째 문자열의 하위 문자열 h을 사용하여 나머지 모든 문자열에 나타나는 가장 긴 문자열 을 찾는 것입니다 t. 이를 위해의 첫 문자 나 마지막 문자를 제거하는 과정을 반복적으로 분기합니다 h.


파이썬 2 , 94 바이트

lambda l:max(set.intersection(*map(g,l)),key=len)
g=lambda s:s and{s}|g(s[1:])|g(s[:-1])or{''}

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

보다 직접적인 방법. 보조 함수 g는의 모든 하위 문자열 집합을 생성하며 s주 함수는 교차 부분에서 가장 긴 문자열을 사용 합니다.


8

Brachylog (v2), 3 9 바이트

{sᵛ}ᶠlᵒtw

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

전체 프로그램. 표준 입력 (JSON 스타일 문자열 목록으로)에서 입력하고 표준 출력으로 출력합니다.

설명

{sᵛ}ᶠlᵒtw
 s         Find a substring
  ᵛ          of every element {of the input}; the same one for each
{  }ᶠ      Convert generator to list
     lᵒt   Take list element with maximum length
        w  Output it

분명히 순위 결정 순서 s는 Brachylog의 거의 모든 항목에있는 것이 아니므로 가장 긴 출력을 생성하려면 수동으로 재정의해야합니다. Brachylog는 두 개의 메타 프리디 케이트를 연속으로 구문 분석하지 않기 때문에 재정의를위한 4 개의 추가 문자와 2 개의 그룹화 문자가 약간 실망 스럽다.

Brachylog s는 빈 부분 문자열을 반환하지 않으므로 문제를 해결하기위한 약간의 트릭이 필요합니다. 함수 제출 (일반적으로 수행되는 작업) 대신 전체 프로그램을 작성하여 표준 출력으로 출력합니다. 이런 식으로 공통 부분 문자열이 있으면 그냥 출력하면됩니다. 공통 부분 문자열이 없으면 프로그램은 오류가 발생하지만 여전히 표준 출력에 아무것도 인쇄하지 않으므로 원하는대로 null 문자열을 출력합니다.


1
나는 입력 [ "많은 inpuabts", "any inabputs", "ny iabii", "yanabny"]로 이것을 시도했다. 나는 결과 abny를 기대했다 . 그러나 결과 . 내가 뭔가 잘못하고 있습니까?
t-clausen.dk

1
어, 내가 타이 브레이크 순서를 s잘못 기억 한 것 같고, 타이 브레이크 순서를 재정의하는 것은 바이트 단위로 다소 비쌉니다. 어쨌든 대답을하는 것이 중요하기 때문에 어쨌든 지금 그렇게하십시오. 내가 시도한 테스트 사례 중 어느 것도 차이점을 발견하지 못했습니다.
ais523

1
@ ais523 s하위 문자열을 생성 하는 순서 는 먼저 입력의 모든 접두사 (가장 긴 첫 번째)를 제공 한 다음 첫 번째 접두사를 삭제하고 반복합니다.
Kroppeb

5

젤리 , 12 6 바이트

Ẇ€f/ṫ0

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

6 바이트를 절약 한 @JonathanAllan에게 감사합니다!


Ẇ€œ&/Ṫḟ0하위 문자열의 길이가 이미 정렬되어 있기 때문에 작업을 수행하고 4 바이트를 절약 할 것이라고 믿습니다 . 따라서 필터링 된 결과는 다음과 같습니다. 일치하는 것이 없으면 tail은 0을 생성하고 문자 목록을 보장하기 때문에 단순히 필터링 할 수 있습니다.
조나단 앨런

또한 나는 여기에 또 다른 저축을 œ&/대체 할 수 있다고 생각합니다f/
Jonathan Allan

빈 목록을 줄인 결과를 빈 목록으로 만들기 위해 풀 요청 을 제출했습니다 (TypeError를 제기하는 대신). 그것이 합쳐지면이 답변이와 6 명이 될 수 있다고 생각합니다 Ẇ€f/ṛ/.
Jonathan Allan

@JonathanAllan은 좋은 소리. 다른 팁을 주셔서 감사합니다-당신이 내가 그것을 통합하게되어 기뻤기를 바랍니다.
Nick Kennedy

예, 그 의견에 대한 나의 이유는 귀하가 아이디어를 귀하의 게시물에 통합 할 수 있도록하기위한 것입니다.
Jonathan Allan

5

루비 2.6, 76 59 54 바이트

->a{*w=a;w.find{|r|w<<r.chop<<r[1..];a.all?{|s|s[r]}}}

온라인으로 사용해보십시오! -루비 2.5 버전 (56 바이트)

방법?

잠재적으로 일치하는 목록을 작성하고 처음에 원래 배열로 설정하십시오. 목록을 반복하고 문자열이 일치하지 않으면 목록의 끝에 새 문자열을 추가하여 첫 번째 또는 마지막 문자를 잘라냅니다. 마지막에 일치하는 항목 (결과적으로 빈 문자열)이 있습니다.

-2 바이트에 대한 Kirill L과 다른 -2에 대한 histocrat에게 감사드립니다.


4

R , 119 116 108 106 바이트

function(S,`?`=nchar,K=max(?S),s=Reduce(intersect,lapply(S,substring,0:K,rep(0:K,e=K+1))))s[which.max(?s)]

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

각 문자열의 모든 하위 문자열을 찾고 각 하위 문자열 목록의 교차점을 찾은 다음 마지막으로 가장 긴 문자열 중 하나를 반환합니다.

Kirill L 덕분에 -3 바이트

대신에 -8 바이트 사용lapply Map

키릴 L. -2 바이트 덕분에 다시 중괄호 제거


확인할 시간이 없지만 실수하지 않으면 단항 연산자로 nchar선언 nchar하여 무언가를 저장하기에 충분합니다 .
Kirill L.

@KirillL. 예, 2 바이트 더 짧습니다. 감사! 앨리어싱 list도 마찬가지로 -3 바이트를 제공합니다.
주세페


@KirillL. 감사! 생산 코드로 시작 해볼까 걱정이됩니다 ...
Giuseppe

그것이 매일 사용하는 언어를
골라내는

4

05AB1E , 14 9 8 바이트

€Œ.«ÃéθJ

-6 덕분에 바이트 @Adnan .

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

€Œ       # Get the substring of each string in the (implicit) input-list
       # Right-reduce this list of list of strings by:
    Ã    #  Only keep all the strings that are present in both list of strings
     é   # Sort by length
      θ  # And pop and push its last item
         # The substrings exclude empty items, so if after the reduce an empty list remains,
         # the last item will also be an empty list,
       J # which will become an empty string after a join
         # (after which the result is output implicitly)

1
나는 €Œ.«Ãõªéθ9 바이트에서 작동해야 한다고 생각 합니다.
Adnan

@Adnan 잠깐, 우리는 감소가 있습니다. 어떻게 그것을 그리워 했습니까. : SI가 시도 Å«Ã했지만 .«Ã대신 사용해야한다는 것을 몰랐습니다 . 감사합니다!
Kevin Cruijssen

1
실제로, 나는 €Œ.«ÃéθJ8 일해야 한다고 생각 합니다.
Adnan

4

Zsh , 126 ... 96 바이트

산술에서 -3 바이트, 암시 적에서 -6 바이트 "$@"(로직으로 감사), -5 바이트에서 불필요한 제거 { }, -1 바이트에서 짧은 형식의 for-1 바이트, -1 바이트를 사용하여 repeat-1 바이트 for s ($b), 본문과 연결 하여 -1 바이트 , -13 바이트 eval jank에 대해 반복 루프를 변경하여.

for l
eval a=\( \$l\[{1..$#l},{1..$#l}\] \)&&b=(${${b-$a}:*a})
for s ($b)(($#x<$#s))&&x=$s
<<<$x

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

가능한 모든 하위 문자열을 배열로 읽은 a다음 b배열 a과 의 교차로 설정 합니다 b. 이 구조 ${b-$a}$a첫 번째 반복 에서만 대체 됩니다. 형제 확장과 달리 설정되어 있지만 비어 있으면 ${b:-$a}대체하지 않습니다 b.

for l;                              # implicit "$@"

# === OLD ===
{
    a= i=                           # empty a and i
    repeat $[$#l**2]                # compound double loop using div/mod
        a+=($l[++i/$#l+1,i%$#l+1])  # append to a all possible substrings of the given line
#               1+i/$#l             # 1,1,1...,  1,1,2,2,2,... ...,  n,n
#                       1+i%$#l     # 1,2,3...,n-1,n,1,2,3,... ...,n-1,n
#       a+=( $l[       ,     ] )    # append that substring to the array
# === NEW ===
    eval a=\( \
        \$l\[{1..$#l},{1..$#l}\] \  # The {bracket..expansions} are not escaped
    \) &&
# ===     ===
    b=( ${${b-$a}:*a} )
#         ${b-$a}                   # if b is unset substitute $a
#       ${       :*a}               # take common elements of ${b-$a} and $a
#   b=(               )             # set b to those elements
}
for s ($b)                          # for every common substring
    (( $#x < $#s )) && x=$s         # if the current word is longer, use it
<<<$x                               # print to stdout

이 비트는 어떻게 작동합니까? a+=( $l[1+i/$#l,1+i%$#l] )
roblogic

1
@roblogic 나는 지금 더 잘 설명했다고 생각합니다. 편집을 확인하십시오. 아이디어는 n ^ 2로 반복하고 2 개의 중첩 for루프 를 사용하는 대신 / 및 %를 사용하는 것입니다.
GammaFunction

1
당신은 for l in "$@"간단하게 잘라낼 수 있습니다 for l;-그것은 배쉬 트릭입니다
roblogic

zsh는 bash보다 훨씬 우아합니다. 아무것도 유사이 좋은 배열 비교 AFAIK에있다b=(${${b-$a}:*a})}
roblogic

1
당신이 할 수있는 몇 가지 깔끔한 일이 있으며, 그렇게 인기있는 것은 아닙니다. 그것은 내가 만나는 대부분의 질문에 zsh 답변을 추가하여 나에게 번역됩니다. : 당신이 zsh을 배우고 싶은 경우에 P, 내가 추천 man zshexpn하고 man zshparam, 특히. 나는 답변을 쓸 때 항상 열어 놓았습니다.
GammaFunction

3

하스켈 , 80 바이트

import Data.List
f(x:r)=last$sortOn(0<$)[s|s<-inits=<<tails x,all(isInfixOf s)r]

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

모든 접미어 (가져 오기 tails첫 번째 단어의) x(목록을 모든 접두사를 가지고 inits모든 문자열 얻기 위해 그 접미사의) s의를 x. 각 계속 sisInfixOf all나머지 목록에 문자열을 r. (사용의 길이에 의해 그 문자열 정렬 트릭을 ) 마지막을 반환합니다.(0<$)


3

레티 나 0.8.2 , 48 바이트

M&!`(?<=^.*)(.+)(?=(.*\n.*\1)*.*$)
O#$^`
$.&
1G`

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

M&!`(?<=^.*)(.+)(?=(.*\n.*\1)*.*$)

첫 번째 문자열의 각 접미사에 대해 다른 모든 문자열의 하위 문자열이기도 한 가장 긴 접두사를 찾으십시오. 접미사 접두사를 모두 나열하십시오 (예 : 하위 문자열). 일치하는 하위 문자열이 없으면 빈 문자열로 끝납니다. 어쨌든 원하는 것입니다.

O#$^`
$.&

하위 문자열을 길이의 역순으로 정렬하십시오.

1G`

첫 번째, 즉 가장 긴 부분 문자열 만 유지하십시오.


n인수 문자열의 수를 보자 . 그런 다음 (?=(.*\n.*\1)*.*$)이어야한다 (?=(.*\n.*\1){n-1}.*$), 그렇지? 테스트 사례 :["very", "different", "much"] -> [""]
Mazzy

1
@mazzy 문제가 보이지 않습니다 : 온라인으로 사용해보십시오!

문제가되지 않습니다. 함께 {n}당신은 시작과 끝 패턴을 제거하고 유지할 수 (.+)(?=(.*\n.*\1){n}망막 쓰기를 허용하는 경우 n보다 짧은(?<=^.*).*$
mazzy

@mazzy 나는 Retina 0.8.2에서 할 수 없으며 Retina 1에서는 eval로 엉망이되어야합니다. 아마 어쩌면 더 길 것입니다.

3

TSQL 쿼리, 154 바이트

USE master
DECLARE @ table(a varchar(999)collate Latin1_General_CS_AI,i int identity)
INSERT @ values('string'),('stRIng');

SELECT top 1x FROM(SELECT
distinct substring(a,f.number,g.number)x,i
FROM spt_values f,spt_values g,@ WHERE'L'=g.type)D
GROUP BY x ORDER BY-sum(i),-len(x)

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

CS를 포함하는 데이터 정렬로 열 'a'를 선언하여 대소 문자를 구분합니다 (대소 문자 구분).

모든 문자열을 2540 시작 위치 (많은 동일)에서 분리하지만 유용한 값의 범위는 1에서 2070 사이이며 시작 위치 이후 0에서 22 자로 끝납니다. 'L'대신 'P'로 유형을 변경하면 종료 위치가 길어질 수 있습니다. 그러나 성능을 약화시킬 것입니다.

각 행 번호 내의 이러한 고유 한 문자열이 계산됩니다. 가장 높은 수는 항상 테이블 변수 '@'의 행 수와 같습니다. 동일한 개수의 순서를 반대로 바꾸면 대부분의 일치 항목이있는 부분 문자열이 결과 상단에 그대로 남고 그 뒤에 역 문자열의 길이가 길어지면 대부분의 일치 항목이 가장 긴 항목과 일치합니다. 쿼리는 최상위 1 개 행만 선택합니다.

모든 답변을 얻으려면 쿼리의 첫 번째 부분을

관계 x FROM으로 상위 1 개 선택


3

C # (Visual C # 대화 형 컴파일러), 320 257 바이트

l=>(string.Join(",",l.Select(s=>new int[s.Length*s.Length*2].Select((i,j)=>string.Concat(s.Skip(j/-~s.Length).Take(j%-~s.Length))))
.Aggregate((a,b)=>a.Intersect(b)).GroupBy(x=>x.Length).OrderBy(x =>x.Key).LastOrDefault()?.Select(y=>y)??new List<string>()));

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

@Expired Data 및 @dana에 대한 소품


함수에서 문자열을 반환 할 수 있습니다. 따라서 대화 형 컴파일러에서는 다음과 같이 보일 수 있습니다. 294 바이트
만료 된 데이터

1
여기에 몇 가지 아래 golfed 솔루션 바이트의 215 바이트
데이터 만료

@ExpiredData 아 완벽 이것은 내가 필요한 예입니다 :)
Innat3



3

펄 6 , 62 60 바이트

{~sort(-*.comb,keys [∩] .map(*.comb[^*X.. ^*]>>.join))[0]}

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

나는 조금 펄 6 인이 여분의 이유, 목록의 목록에 일련의 작업을 할 수 없어 짜증이야 .comb하고 >>있다가에.

다른 성가신 것은 max항목을 비교하는 방법에 대한 기능을 사용할 수 없다는 것입니다. 즉 , sort대신 사용해야 합니다. 의견에서 지적한 바와 같이, max 나는 고려해야 할 필요가 있기 때문에, 그러나 그것은 더 이상 끝, 인수를 가지고 max일반적인 문자열이있는 음의 무한대를 반환 ( 온라인으로보십시오! ).


3
maxOO 모드에서 호출 될 때의 위치 또는 :by절차 모드에서 명명 된 인수로 이러한 함수 (arity 1 그래도)를 취할 수 있습니다 .

2

Japt v2.0a0 -hF, 8 바이트

Îã f@eøX

3 바이트를 절약 한 Shaggy에게 감사합니다

시도 해봐

Îã              //Generate all substrings of the first string
 f@             //Filter; keep the substrings that satisfy the following predicate:
   e            //    If all strings of the input...
    øX          //    Contain this substring, then keep it
-h              //Take last element
-F              //If last element is undefined, default to empty string

마지막에 길이별로 정렬 할 필요가 없으므로 3 바이트를 절약 할 수 있습니다. 또한 -F기본값은 빈 문자열입니다.
얽히고 설킨

2

Japt -h , 8 바이트

(마지막 3 바이트를 중단하고 -Fh대신 플래그를 사용할 수는 있지만을 사용하는 팬은 아닙니다 -F)

mã rf iP

사용해 보거나 모든 테스트 사례를 실행하십시오.

mã rf iP     :Implicit input of array
m            :Map
 ã           :  Substrings
   r         :Reduce by
    f        :  Filter, keeping only elements that appear in both arrays
      i      :Prepend
       P     :  An empty string
             :Implicit output of last element




1

Perl 5 ( -aln0777F/\n/ -M5.01 -MList::util=max), 99 바이트

더 확실하게 골프를 칠 수 있습니다

map/(.+)(?!.*\1)(?{$h{$&}++})(?!)/,@F;say for grep{y///c==max map y///c,@b}@b=grep@F==$h{$_},keys%h

TIO



1

, 30 바이트

≔⊟θη≔⁰ζFLη«≔✂ηζ⊕ι¹ε¿⬤θ№κεPε≦⊕ζ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 이 알고리즘은 모든 하위 문자열을 생성하는 것보다 더 효율적이고 짧습니다. 설명:

≔⊟θη

입력 목록의 마지막 문자열을 변수에 넣으십시오.

≔⁰ζ

부분 문자열 시작 색인을 제로화하십시오.

FLη«

가능한 모든 부분 문자열 끝 인덱스를 반복합니다. 실제로는 길이를 제외하고 0에서 반복되므로 나중에 값이 조정됩니다.

≔✂ηζ⊕ι¹ε

현재 부분 문자열을 얻습니다.

¿⬤θ№κε

이 하위 문자열이 다른 모든 입력 문자열에 포함되어 있는지 확인하십시오.

Pε

그런 다음 이전에 출력 된 하위 문자열을 중복 인쇄합니다.

≦⊕ζ

그렇지 않으면 부분 문자열 시작 색인을 증가 시키십시오.


1

배쉬 , 295 .. 175 바이트

예쁘지 않지만 적어도 작동합니다. 온라인으로 사용해보십시오

-37 일반적인 청소로 ; zsh 답변으로부터 표절함으로써 -52 ; 배열을 루프로 교체하여 -26 ; GammaFunction 덕분에 -2 ; 루프 에서 -3 제거 i=0for

for l;{ d=${#l}
for((;i<d**2;i++)){ a="${l:i/d:1+i%d}" k=
for n;{ [[ $n =~ $a ]]&&((k++));}
((k-$#))||b+=("$a");};}
for e in "${b[@]}";do((${#e}>${#f}))&&f="$e";done
echo "$f"

주석 이 포함 된 원본 ungolfed 스크립트 는 다음과 같습니다 .


1
더 저장 2 : 대체 할 수 ((k==$#))&&와 함께 ((k-$#))||. 또한 k=0으로 설정 하는 대신 사용할 수 있습니다.
GammaFunction

1
"예쁘지 않지만 적어도 작동합니다"는 bash 스크립트의 MO라고 생각합니다. :)
joeytwiddle



0

자바 스크립트 (Node.js) , 106 바이트

a=>(F=(l,n,w=a[0].substr(n,l))=>l?n<0?F(--l,L-l):a.some(y=>y.indexOf(w)<0)?F(l,n-1):w:"")(L=a[0].length,0)

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

a=>(                      // Main function
 F=(                      //  Helper function to run through all substrings in a[0]
  l,                      //   Length
  n,                      //   Start position
  w=a[0].substr(n,l)      //   The substring
 )=>
 l?                       //   If l > 0:
  n<0?                    //    If n < 0:
   F(--l,L-l)             //     Check another length
  :a.some(                //    If n >= 0: 
   y=>y.indexOf(w)<0      //     Check whether there is any string not containing the substring
                          //     (indexOf used because of presence of regex special characters)
  )?                      //     If so:
   F(l,n-1)               //      Check another substring
  :w                      //     If not, return this substring and terminate
                          //     (This function checks from the longest substring possible, so
                          //      it is safe to return right here)
 :""                      //   If l <= 0: Return empty string (no common substring)
)(
 L=a[0].length,           //  Starts from length = the whole length of a[0]
 0                        //  And start position = 0
)


0

PowerShell을 , 165 (163) 87 바이트

멋진 regexp를 위한 Nail 덕분에 -76 바이트 .

"$($args-join'
'|sls "(?<=^.*)(.+)(?=(.*\n.*\1)*.*$)"-a -ca|% m*|sort Le*|select -l 1)"

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

덜 골프 :

$multilineArgs = $args-join"`n"
$matches = $multilineArgs|sls "(?<=^.*)(.+)(?=(.*\n.*\1)*.*$)" -AllMatches -CaseSensitive|% matches
$longestOrNull = $matches|sort Length|select -Last 1
"$longestOrNull"




0

Pyth , 16 바이트

eolN.U@bZm{s./dQ

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

       m     Q    # Map Q (parsed input) over the following function (lambda d:
          ./d     # Partitions of d (all substrings)
         s        # Reduce on + (make one list)
        {         # deduplicate
    .U            # reduce the result on the following lambda, with starting value result[0]
      @bZ         # lambda b,Z: Intersection between b and Z
                  # Result so far: all common substrings in random order
 o                # sort the resulting sets by the following lambda function:
  lN              # lambda N: len(N)
e                 # last element of that list
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.