이 줄을 enklactify


42

이 코멘트 체인에서 영감을 얻은 ...

나는 enklact이 도전에서 벗어날 길을 원하지만 할 수는 없다 ...

@ETHproductions to enklact (v) : 고유 요소로 구성된 하위 섹션을 사용하여 룩업 테이블을 구현합니다.


Enklacting은 조회 테이블을 압축하는 매우 유용한 방법입니다. 예를 들어 다음과 같은 색상 목록이 있다고 가정 해 보겠습니다.

red
green
blue
yellow
purple
orange

입력으로 색상을 가져 와서이 목록에서 색인을 반환하려면 다음과 같은 간단한 방법이 있습니다.

["red", "green", "blue", "yellow", "purple", "orange"].index(input())

그러나 우리는 더 적은 바이트로 이것을 할 수있는 방법이 있습니다 :

"rgbypo".index(input()[0])

각 문자열의 첫 번째 (또는 0 번째) 인덱스가 고유하기 때문에 작동합니다. 이 예는 분명하지만 때로는 조금 더 어려워요. 이 목록에 대한 조회 테이블을 만들려면 어떻게해야합니까?

Sweet Onion Chicken Teriyaki
Oven Roasted Chicken
Turkey Breast
Italian BMT
Tuna
Black Forest Ham
Meatball Marinara

이 경우, 우리는 이것을 할 수 없습니다 :

"SOTITBM".index(input()[0])

로 시작하는 두 개의 다른 입력 'T', 즉 "Tuna"및 "Turkey" 가 있기 때문 입니다. 다른 인덱스를 봐야합니다. 각 문자열의 4 번째 인덱스를 보면 모두 고유 한 것을 알 수 있습니다. 그래서 우리는 이것을 할 수 있습니다 ...

"enklact".index(input()[3])

이 경우 "enklaction string" 은 "enklact"입니다.

그것은 오늘날의 도전으로 이어집니다.

문자열 목록이 제공되면 유효한 고정 문자열을 반환하십시오. 즉, 문자열 목록이 주어지면 각 문자가 고유 한 새 문자열을 반환하고 문자열은 각 문자열의 i 번째 문자를 결합하여 형성됩니다.

유효한 고정 문자열이없는 경우 제출시 빈 문자열 또는 일관된 잘못된 값을 반환해야합니다. 평소와 같이 기능 또는 전체 프로그램이 허용되며 입력 / 출력 형식이 허용됩니다 (이유가 있음).

각 문자열에는 인쇄 가능한 ASCII 만 포함되며이 문제는 대소 문자를 구분합니다.

이것은 이므로 선택한 언어로 가능한 가장 짧은 프로그램을 작성하십시오!

테스트 사례

Input:
Programming
Puzzles
Code
Golf

Output (any one of these):
"ozdl"
"gzef"


Input:
the quick
brown fox
jumped over
lazy dogs

Output:
"tbjl"
"hrua"
"eomz"
" wpy"
"qne "
"if o"
"kxvs"

Note that "u dd" and "coog" are not valid.


Input:
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday

Output:
""


Input:
AbC
aBc
bbC

Output:
"Aab"


Input:
@#$%^_
Hello_World
How are you?

Output:
"#eo"
"$lw"
"%l "
"^oa"


Input:
a
ab
ac

Output:
""

유효한 문자열 목록을 반환 할 수 있습니까?
LyricLy

@LyricLy Hmm, 이제 그것에 대해 생각하면 더 이해가 될 것입니다. 그러나 이미 답변이 있고 첫 번째 것을 반환하기에는 보일러 플레이트가 너무 많지 않기 때문에 아니오라고 말할 것입니다. 유효한 문자열이어야합니다.
DJMcMayhem

입력 된 문자열이 비어 있음을 보장 할 수 있습니까?
musicman523

6
일관된 거짓 값이 일관된 유형의 오류 일 수 있습니까?
Stewie Griffin

2
실례하지만 올바른 동사가 enklactate 라고 생각합니다 .
Outgolfer Erik

답변:


8

Python3, 59 바이트

lambda l:{len({*d}):''.join(d)for d in zip(*l)}.get(len(l))

enklact가 포함 된 문자열을 반환합니다. 그렇지 않으면 None


8

파이썬 2 , 68 67 61 바이트

lambda a:`{0:j for j in zip(*a)if len(set(j))==len(j)}`[6::5]

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

개량


출력이 문자열 일 필요가없는 경우 :

파이썬 3 , 49 바이트

lambda a:[j for j in zip(*a)if len({*j})==len(j)]

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



@JoKing 우아하고 구현되었습니다.
Neil

max(`j`[2::5]for j in[""]+zip(*a)if len(set(j))==len(j))바이트를 절약하기 위해 작동 한다고 생각 합니다.
Lynn

@ 린 감사합니다.
Neil

7

레티 나 , 43 32 바이트

+/^(.).+^\1|^$/ms&m`^.

|""Lm`^.

온라인으로 사용해보십시오! 편집 : @MartinEnder 덕분에 11 바이트가 절약되었습니다. 설명:

+

입력이 변경되는 동안 반복하십시오 ...

/^(.).+^\1|^$/ms&

... 한 줄이 비어 있거나 두 줄이 같은 문자로 시작하는 경우에만 ...

m`^.

... 모든 줄의 첫 문자를 삭제하십시오. 따라서 a) 모든 행이 다른 문자로 시작하고 조건이 실패하고 입력이 변경되지 않거나 b) 하나 이상의 행이 비어 있으면 모든 문자가 결국 삭제되면 반복이 중지됩니다. 이 시점에서 입력 변경이 중지됩니다.

|""L`^.

모든 줄의 첫 번째 문자를 수집하십시오. (해결책이 없으면 위의 루프는 모든 것을 삭제하고 수집 할 것이 없습니다.)


정규 표현식 옵션은 정규 표현식 수정자를 사용합니다 (닫는 구분 기호 바로 뒤에 작성) : tio.run/##K0otycxLNPz/…
Martin Ender

사실, 그건 당신이 완전히 두 번째 단계를 제거 할 수 있습니다 : tio.run/##K0otycxLNPz/X1s/...이 (어떻게 든 적용 할 수 없습니다 m여기 그룹과,이 옵션을 전파하지 않는 조건 단계처럼 보인다).
Martin Ender

물론, 조건부 루프 대신 조건부 루프를 반복하면 첫 번째 버전의 무한 루프 버그가 해결됩니다. 매우 깔끔합니다!
Neil

5

하스켈 , 71 바이트

f x|elem""x=""|y<-head<$>x,and[filter(==a)y==[a]|a<-y]=y|1<2=f$tail<$>x

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

BMO는 any null x→를 사용 하여 3 바이트를 절약했습니다 elem""x.

Ørjan Johansen은 sum[1|b<-y,a==b]<2→를 사용 하여 바이트를 저장했습니다 filter(==a)[y]==[a].

설명

f x|elem""x=""                      -- Once any of the strings is empty, return "".
   |y<-head<$>x                     -- Otherwise, let y be all the first letters...
   ,and[                 |a<-y]     -- If, for all a in y,
        filter(==a)y==[a]           -- a occurs just once in y:
                               =y   -- return y.
   |1<2=f$tail<$>x                  -- Else, chop off all the first letters and recurse.

Prelude.head: empty list해결 방법이 없을 때 오류 ( )를 발생 |elem""x=""시키면 61 바이트 동안 지울 수 있습니다 .


1
더 짧은 테스트 :filter(==a)y==[a]
Ørjan Johansen

4

루비 , 38 바이트

->x,*y{x.zip(*y).find{|z|z==z-[p]|[]}}

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

버그를 지적한 GB에게 감사합니다.


일치하는 항목이없고 첫 번째 문자열이 가장 짧지 않으면 실패합니다.
GB

@GB 예를 들어 주시겠습니까? 설명에 따라 마지막 테스트를 수정했는데 효과가있었습니다.
Kirill L.

[ "abc", "ac", "acd"]
GB

이제 알겠습니다. 수정해야합니다.
Kirill L.

4

Pyth , 6 바이트

>1{I#C

테스트 스위트.

출력은 기본적 으로 허용되는 싱글 톤 목록입니다 . 문자열을 enklactified 할 수없는 경우 목록 [] (빈 목록, 거짓)이 반환됩니다 .

설명

> 1 {I # C – 전체 프로그램.
     C – 입력 자르기 부재를 바꿉니다.
    # – 필터링 기준 :
  {I – 중복 제거시 불변.
> 1 – Python에서 1. list [: 1]로 슬라이스합니다.

Pyth , 5 바이트

충돌이 잘못된 값으로 간주되면 유효했을 것입니다.

h{I#C

테스트 스위트.


3

하스켈 , 76 74 바이트

f t=last$"":(id=<<foldr(zipWith(#))([[]]<$t)t)
x#[s]=[x:s|all(/=x)s]
x#e=e

온라인으로 사용해보십시오! 마지막 유효한 조회 문자열 또는 해당 문자열이없는 경우 빈 문자열을 반환합니다.


71 69 바이트

잘못된 값으로 일관된 예외가 발생하는 경우 :

f t=head$id=<<foldr(zipWith(#))([[]]<$t)t
x#[s]=[x:s|all(/=x)s]
x#e=e

온라인으로 사용해보십시오! empty list문자열이 없으면 예외를 throw하고 그렇지 않으면 첫 번째 유효한 문자열을 반환합니다.

Ørjan Johansen 덕분에 -2 바이트


1
notElem x 로 단축 할 수 있습니다 all(/=x).
Ørjan Johansen

2

젤리 , 7 바이트

z0Q€fZḢ

문자열을 암호화 할 수없는 경우 정수 0을 반환합니다 .

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

작동 원리

z0Q€fZḢ  Main link. Argument: A (string array)

z0       Zip/transpose, filling shorter rows with 0.
  Q€     Unique each deduplicate resulting string.
     Z   Zip/transpose, without using a filler.
    f    Filter; keep only string that appear in the results to both sides.
      Ḣ  Head; extract the first string. Returns 0 if the array is empty.


2

Stax , 9 8 바이트

åτIⁿs↓µg

실행 및 디버깅

설명 (포장 풀기) :

M{c0-u=}j Full program, implicit input
          e.g. ["Programming", "Puzzles", "Code", "Golf"]
M         Transpose
                ["PPCG", "ruoo", "ozdl", "gzef", "rl\0\0", "ae\0\0", "ms\0\0", "m\0\0\0", "i\0\0\0", "n\0\0\0", "g\0\0\0"]
 {     }j Find first matching element:
            e.g. "PPCG"
  c0-       Copy and remove zero bytes (padding)
                 "PPCG" "PPCG"
     u      Unique
                 "PPCG" "PCG"
      =     Check if equal:
                 1
          First matching here: "ozdl". If none is found, the stack is empty
          Implicit output if anything on stack

2

R , 127 바이트

function(S,s=sapply(S,substring,x<-1:max(nchar(S)+1),x))cat(rbind(s[!apply(s,1,anyDuplicated)&!rowSums(s==""),],"")[1,],sep="")

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

sapply일반적으로 matrixwhen을 length(FUN(X[[i]]))제외한 모든가 동일 하면 a를 반환 하고 length(FUN(X[[i]]))==1,이 경우 a를 반환합니다 vector. 매트릭스 연산을 사용하려면, 다음, 우리는에 있습니다 substring우리는을 보장하기 위해 필요한 것보다 더 한 matrix이유입니다, x확장 max(nchar(S)+1).

그런 다음 중복되지 않고 빈 문자열이없는 행을 필터링합니다. 단일 문자열 만 반환 할 수 있으므로 조건에 맞는 행이없는 경우 오류가 발생 ""하여 끝에 추가 행을 추가한다는 점을 제외하고 첫 번째 문자열 만 사용합니다 .

그런 다음 enklactified 문자열 또는 빈 문자열 을 인쇄 합니다.


2

R , 116 (107) 95 바이트

R + 프라이어

pryr::f(for(i in 1:min(nchar(v)))`if`(anyDuplicated(t<-substr(v,i,i)),0,{cat(t,sep="")
break}))

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

베이스 R

function(v)for(i in 1:min(nchar(v)))`if`(anyDuplicated(t<-substr(v,i,i)),0,{cat(t,sep="")
v=0})

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

이 두 변형은 Giuseppe 덕분에 9 바이트를 절약 합니다.

설명:

이렇게하면 벡터의 모든 찌르기를 v가장 짧은 길이까지 효과적으로 자르고 후속 인덱스를 반복합니다. 그런 다음 선택한 문자 내에 중복이 있는지 확인하고 그렇지 않은 경우 함께 붙여넣고로 인쇄합니다 cat. 모든 인덱스가 중복 된 결과를 반환하면 빈 문자열이 인쇄됩니다.
모두 루프를 정지 시키는 익명 pryr함수 break또는 루프를 끊기 위해 벡터를 제로화하는 기본 R 함수로 래핑되었습니다.


1
좋은 것! 이것은에 golfed 수 107 바이트 에서 R+pryr또는 107 바이트 기본 R.에서
주세페

2

apt, 9 바이트

입력을 문자 배열의 배열로 취하거나 문자 배열을 반환하거나 undefined

y æ_f eZâ

시도해보십시오 (프로그램을 시작할 때 코드 qR mq를 사용하여 줄 바꿈을 추가하여 배열을 만드는 번거 로움을 줄이려면 줄 바꿈 문자열로 입력하십시오.)


설명

y             :Transpose
  æ_          :Pass each array Z through a function and return the first that returns true
    f         :  Filter nulls (used for padding when transposing)
      e       :  Test for equality with
       Zâ     :  Z deduplicated

나는 당신의 솔루션을 읽기 전에 도전을 시도했고 거의 동일한 해결책을 얻었습니다.z æ_¬eZ¬â
Nit

입력 형식 외에 정확하게 동일합니다.
Shaggy


1

파이썬 3 , 75 바이트

def f(t):c=[s.pop(0)for s in t];return all(t)and(f(t),c)[len(t)==len({*c})]

문자열 대신 문자 목록에서 작동합니다. 유효한 enklaction 문자열이 없으면 False를 반환합니다.

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


나는 이것이 되풀이된다고 생각한다 f=. 바이트 수가 포함 되지 않으면 무효가 될 것이다 .
LyricLy

@LyricLy 고정 :)
musicman523

1

C (gcc) , 161 바이트

f(s,i)char**s;{char**t,a[255],*u=a;for(i=0;memset(a,0,255),u&&~i;i+=!!~i&&u)for(t=s;(u=u?*t++:0)&&~(i=u[i]?i:-1)&&!a[u[i]]++;);while(~i&&(u=*s++))putchar(u[i]);}

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

각 문자 위치는 중복 테스트를 거친 후 중복이 감지되면 건너 뜁니다. 가장 짧은 줄이 끝날 때까지 계속됩니다. 아쉽게도 ASCII 만입니다 : DBCS / UTF-8 문자열은이 기능을 심각하게 중단합니다!



1

Japt , 12 바이트

undefined비 enklactic 문자열을 반환 합니다.

y ·æ_¬n ä¦ e

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

설명:

y ·æ_¬n ä¦ e
y             // Split the input at newlines and transpose
  ·           // Join on newlines 
   æ_         // Return the first item that returns truthy when ran through:
     ¬n       //   Sort
        ä¦    //   Reduce with !=
           e  //   All items are truthy (unique)

문자 배열의 배열로 입력을 취하고 두을 버림으로써 2 바이트를 절약 할 수 있어야합니다 split.
얽히고 설킨

1

Wolfram Language (Mathematica) , 54 바이트

#&@@Select[PadRight@#,#~FreeQ~0&&Union@#==Sort@#&]&

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

문자 목록을 입력으로 받아서 문자 목록을 리턴합니다. "조옮김"연산자에 해당하는 U + F3C7을 포함합니다.

#1적합한 문자열이 없을 때 무시할 수있는 많은 오류를 반환 하고 던집니다.

설명:

PadRight@#

각 "문자열"(문자 목록)의 길이가 동일하도록 입력을 채 웁니다. 정수 0s (문자열 "0"s)를 추가합니다 . 그런 다음 전치하십시오.

Select[ ... ,#~FreeQ~0&&Union@#==Sort@#&]

정수가없고 0고유 문자가 모두 있는 문자열을 선택하십시오 .

#&@@

첫 번째를 얻으십시오.


1

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

문자열을 반환하거나 undefined솔루션이없는 경우 반환 합니다.

f=(a,i=0)=>a.every(s=>(o[k+=c=s[i],c]^=1)&&c,o=k=[])?k:c&&f(a,i+1)

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

댓글

f = (           // f = recursive function taking:
  a,            //   a[] = input array
  i = 0         //   i   = pointer
) =>            //
  a.every(s =>  // for each string s in a[]:
    (o[k +=     //   append to the key string k
      c = s[i], //   the character c at position i in s
      c] ^= 1   //   and toggle o[c] (undefined -> 1 -> 0)
    ) && c,     //   additionally, make sure that c is defined
    o = k = []  //   start with o = k = empty array
  ) ?           // every() is true if all characters were distinct and defined:
    k           //   in which case we return k
  :             // else:
    c &&        //   provided that every() didn't fail because of an undefined character,
    f(a, i + 1) //   try again at the next position

1

, 23 21 바이트

@Neil 덕분에 -2 바이트 !

§ΦE⌊EθLι⭆θ§λι⬤ι⁼¹№ιλ⁰

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


허, 언제 a) q항상 문자열 인 것을 중단 했습니까? b) StringMap은 비 문자열에서 작업을 시작합니까? 어쨌든, 당신 Range은 2 바이트를 절약 하여 불필요합니다.
Neil

@Neil a) 배열 / 객체 입력을 추가했을 때 b)> _> 확실하지 않습니다. 아마 내가 while 루프를 고쳤을 때쯤에 (미안하지만, 그중 하나를 언급하는 것을 잊었다)
ASCII-only

1

껍질 , 9 바이트

ḟS=UḞz:∞ø

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

설명

fS=UḞz:∞ø
    Ḟz:∞ø  Transpose the input dropping characters of longer strings
    Ḟ        Fold right
     z:      Zip with prepend
       ∞ø    Infinite list of empty lists
ḟS=U       Find the first string without duplicates, returns an empty string if none
ḟ            Return first value satisfying predicate
  =          Equal
 S U         to itself with duplicates removed

사용 ←ġLT이상은 Ḟz:∞ø바이트를 저장해야합니다.
ბიმო

1

망막 , 81 56 바이트

m`$
$.=*£¢
N$`.
$.%`
¶

~`(.*?¢)+
L`.{$#1}
A`(.).*\1|£|¢

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

@Neil 덕분에 -25 바이트


Retina에서 직사각형 텍스트를 바꾸는 것은 놀랍게도 어렵습니다.


직사각형 조옮김을 수행하는 더 좋은 방법을 알고 있었지만 그 동안 25 바이트를 절약하십시오 .
Neil

@Neil Ahh ... 평가 무대. 난 항상 망막 1.0이 모든 멋진 새로운 기능을 가지고 잊어 버려요
TwiNight

1

펄 6 , 27 바이트

{([Z] $_).first:{.Set==$_}}

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

루비 버전이 상향 조정 된 것을 확인한 후 문자열 대신 접근 방식을 복사하고 문자 목록을 사용했습니다. 나는 그것을 좋아하지 않는다.

나의 더 오래된 올바른 제출은 다음과 같습니다.

펄 6 , 38 바이트

분할, 우편, 고유성 확인, 가입

{[~] ([Z] @_>>.comb).first:{.Set==$_}}

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


1

C (GCC) , 121 (113) 110 바이트

i;d;f(s)char**s;{char**_=s,x[255]={0},y[99]={0};for(d=i=0;*_;)d+=x[y[i++]=*(*_++)++]++;d=d?*x?0:f(s):puts(y);}

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

언 골프

void enklactify(char *strings[]) {
    int quit = 0;
    while (!quit) {
        char **arg = strings;      // current row
        int exists[255] = {0};     // which characters exist in the column
        char output[99] = {0};     // will hold output string
        int index = 0;             // where to insert in output
        int duplicates = 0;        // have we found any duplicates?
        while (*arg != NULL) {
            char *word = *arg;     // current word
            char first = *word;    // first letter of current word
            if (exists[first])
                duplicates = 1;    // we found a duplicate
            exists[first] = 1;     // mark it as in our string
            output[index] = first; // add it to our output
            index++;
            (*arg)++;              // advances the current word to the next
                                   // character by reference (chops first char)
            arg++;                 // advance to next whole argument
        }

        if (!duplicates) {         // This is a valid solution
            puts(output);
            quit = 1;
        }

        if (exists[0]) {           // We hit the null terminator of one of the
                                   // input strings, so we failed
            quit = 1;
        }
    }
}

ceilingcat 덕분에 -3

이것은 C의 문자열 포인터에 1을 추가하여 문자열의 '꼬리'를 얻는 기능을 남용합니다. 주요 바이트 보호기는 다음과 같습니다.

  • d+=x[y[i++]=*(*_)++]++이는 제 1 스트링의 첫 문자를 추가 _하는 방법에 대해 y, 제 1 스트링의 진행 _의 첫 번째 문자를 삭제하기에서, 추가 x로, 그 문자의 입력을 d한 단위로 상기 x항목
  • q=d?*x:puts(y)0이 아닌 값으로 설정 하는 동안 0이 아닌 y경우 를 인쇄 하거나 첫 번째 요소 가 0이 아닌 경우 0이 아닌 값으로 설정합니다 (문자열 중 하나의 끝에있는 경우 해당 요소는 제로)dqqx

편집 : while 루프에서 재귀 꼬리 호출로 전환하고 for 루프에서 괄호를 제거하여 바이트를 면도했습니다.


for(d=i=0;*_;)대신 for(d=0,i=0;*_;++_)*(*_++)++]++;d=d?!*x*f(s)대신 제안*(*_)++]++;d=d?*x?0:f(s)
ceilingcat

0

Pyth, 13 바이트

e+kf{IT@.TQ.t

여기 사용해보십시오

e+kf{IT@.TQ.t
           .tQ   Transpose the (implicit) input with padding.
        .TQ      Transpose the input without padding.
       @         Take the strings in both.
   f{IT          Find the ones that have no duplicates.
e+k              Get the last, or an empty string.

1
유효한 모든 문자열 목록을 반환하는 것이 유효하지 않은 것 같습니다.
LyricLy

@LyricLy 수정되었습니다.
니모닉

0

빨강 , 139 바이트

func[b][m: length? first b foreach a b[m: min m length? a]repeat n m[c: copy[]foreach a b[append c a/(n)]if c = unique c[return rejoin c]]]

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

설명:

입력을 문자열 블록 (목록)으로 가져옵니다. enklaction 문자열 등을 반환합니다 none.

f: func[b][
    m: length? first b                   ; the minimal length of the first string  
    foreach a b[m: min m length? a]      ; find the minimal length of all strings
    repeat n m[                          ; limit the search to the minimal length
        c: copy[]                        ; an empty block  
        foreach a b[append c a/(n)]      ; for each string append the current char
        if c = unique c[return rejoin c] ; if all chars are unique, return the block
    ]  
]

0

로다 , 80 77 바이트

f a{a|seq 0,#_|try{{|i|a|[_[i:i+1]]|orderedUniq|concat|[_]if[#_1=#a]}_|head}}

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

Cows ck 덕분에 -1 바이트

설명:

f a{
  a|         /* Push the strings in a to the stream */
             /* For each string (_): */
  seq 0,#_|     /* Push a range from 0 to the length of _ to the stream */
  try{       /* Ignore errors during the following block */
    {|i|        /* For each i in the stream: */
      a|           /* Push strings in a to the stream */
      [_[i:i+1]]|  /* For each string, push the ith character to the stream */
      orderedUniq| /* Remove duplicate characters */
      concat|      /* Join the characters into a string */
      [_]if        /* Push the string to the stream if */
      [#_1=#a]     /* Its length is the length of a */
    }_|
    head        /* Take the first string in the stream and return it */
  }
}

try키워드는 경우 발생하는 오류 해고하는 데 사용됩니다 i에서 가장 작은 문자열의 길이보다 큰 경우 a, 또는 응답이 없으며 head오류가 발생합니다.


seq바이트를 저장하기 위해
파 렌스

@Cowsquack 감사합니다!
fergusq

0

자바 10, 106 바이트

a->{for(int i=0;;i++){var r="";for(var s:a)r+=s[i];if(r.length()==r.chars().distinct().count())return r;}}

솔루션을 찾을 수 없으면 빈 문자열을 반환하는 대신 오류가 발생합니다. 입력은 문자 행렬입니다.

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

설명:

a->{                  // Method with character-matrix parameter and String return-type
  for(int i=0;;i++){  //  Loop `i` upwards
    var r="";         //   Result-String, starting empty
    for(var s:a)      //   Loop over the character-arrays of the input
      r+=s[i];        //    And append every `i`'th character to `r`
    if(r.length()==r.chars().distinct().count())
                      //   If `r` only contains unique characters
      return r;}}     //    Return `r` as result

OP는 절대로 게시물 자체에 넣지 않았지만 오류를 허용하지 않으려는 것 같습니다.
Ørjan Johansen

0

클로저, 59 바이트

#(for[s(apply map list %):when(=(count(set s))(count %))]s)

문자 목록을 반환합니다.


0

APL + WIN, 35 33 바이트

Adám 덕분에 2 바이트 절약

텍스트 행을 문자 매트릭스로 프롬프트합니다.

⊃((↑⍴¨a)=+/¨((a⍳¨a)=⍳¨⍴¨a))/a←,⌿⎕

온라인으로 사용해보십시오! Dyalog Classic 제공

설명:

a←,⌿⎕ prompts for input and creates a nested vector of the input matrix columns

((a⍳¨a)=⍳¨⍴¨a) creates a binary vector for each nested element with a 1 for each unique element

((↑⍴¨a)=+/¨ sums each binary vector and compares to number of characters in each element

(...)/a←⊂[1]⎕ selects only those elements where number of uniques = column length

⊃ converts nested vector back to a matrix of each valid enklaction string 

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