Enklactify string ini

42

Terinspirasi oleh rantai komentar ini ...

Saya ingin enklactjalan keluar dari tantangan ini, tetapi saya tidak bisa ...

@ETHproductions to enklact (v): untuk mengimplementasikan tabel pencarian menggunakan subbagian yang terdiri dari elemen unik.


Enklacting adalah cara yang sangat berguna untuk memampatkan tabel pencarian. Misalnya, katakanlah Anda memiliki daftar warna berikut:

red
green
blue
yellow
purple
orange

Jika Anda ingin dapat mengambil warna sebagai input dan mengembalikan indeksnya dalam daftar ini, jelas ada cara mudah:

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

Tapi ada cara yang bisa kita lakukan dengan byte lebih sedikit:

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

Ini berfungsi karena indeks pertama (atau 0) dari setiap string unik. Contoh ini jelas, tetapi kadang-kadang sedikit lebih sulit. Bagaimana jika kita ingin membuat tabel pencarian untuk daftar ini?

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

Dalam hal ini, kami tidak dapat melakukan ini:

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

karena ada dua input berbeda yang dimulai dengan 'T', yaitu "Tuna" dan "Turki". Kita harus melihat indeks yang berbeda. Jika Anda melihat indeks ke-4 dari setiap string, Anda akan melihat bahwa semuanya unik. Jadi kita bisa melakukan ini ...

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

Dalam hal ini, "string enklaction" adalah "enklact".

Itu membawa kita ke tantangan hari ini ...

Diberikan daftar string, kembalikan string enklaction yang valid. Atau dengan kata lain, diberi daftar string, kembalikan string baru di mana setiap huruf unik, dan string dibentuk dengan menggabungkan huruf ke-i dari setiap string.

Jika tidak ada string enklaction yang valid, kiriman Anda harus mengembalikan string kosong atau nilai falsy yang konsisten. Seperti biasa, fungsi atau program lengkap diizinkan, dan format input / output permisif (sesuai alasan).

Setiap string hanya akan berisi ASCII yang dapat dicetak, dan tantangan ini peka huruf besar-kecil.

Ini , jadi cobalah menulis program sesingkat mungkin dalam bahasa pilihan Anda!

Uji kasus

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:
""
DJMcMayhem
sumber
Bisakah kita mengembalikan daftar string yang valid?
LyricLy
@ LyricLy Hmm, sekarang saya berpikir tentang itu, itu akan lebih masuk akal. Tetapi karena sudah ada jawaban dan tidak terlalu banyak untuk mengembalikan yang pertama, saya akan mengatakan tidak, seharusnya ada satu string yang valid.
DJMcMayhem
Bisakah kami menjamin tidak ada string yang dimasukkan yang kosong?
musicman523
6
Bisakah nilai falsy konsisten menjadi kesalahan tipe konsisten?
Stewie Griffin
2
Maaf, tapi saya pikir kata kerja yang benar adalah enklactate .
Erik the Outgolfer

Jawaban:

8

Python3, 59 byte

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

Mengembalikan string dengan enklact, Tidak ada sebaliknya

PieCot
sumber
8

Python 2 , 68 67 61 byte

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

Cobalah online!

Perbaikan

  • Dari 68 byte hingga 67 byte oleh Jo King
  • Dari 66 hingga 65 byte oleh Lynn

Jika output tidak harus berupa string:

Python 3 , 49 byte

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

Cobalah online!

Neil
sumber
67 byte
Jo King
@ JoKing Elegan dan diimplementasikan.
Neil
Saya pikir max(`j`[2::5]for j in[""]+zip(*a)if len(set(j))==len(j))berfungsi, untuk menyimpan byte.
Lynn
@ Lynn terima kasih dan diperbarui.
Neil
7

Retina , 43 32 byte

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

|""Lm`^.

Cobalah online! Sunting: Disimpan 11 byte berkat @MartinEnder. Penjelasan:

+

Ulangi saat input berubah ...

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

... hanya jika satu baris kosong atau dua baris dimulai dengan karakter yang sama ...

m`^.

... hapus karakter pertama dari setiap baris. Oleh karena itu, pengulangan berhenti jika a) semua baris dimulai dengan karakter yang berbeda, dalam hal ini kondisi gagal dan input tidak berubah, atau b) setidaknya satu baris menjadi kosong, dalam hal ini semua karakter akhirnya dihapus, di mana input berhenti berubah.

|""L`^.

Kumpulkan karakter pertama dari setiap baris. (Jika tidak ada solusi, loop di atas akan menghapus semuanya dan tidak ada yang perlu dikumpulkan.)

Neil
sumber
Opsi Regex juga menggunakan pengubah regex (dengan menuliskannya langsung setelah pembatas penutupan): tio.run/##K0otycxLNPz/…
Martin Ender
Sebenarnya, itu memungkinkan Anda menyingkirkan tahap kedua sepenuhnya: tio.run/##K0otycxLNPz/X1s/… (entah bagaimana tidak dapat diterapkan mdengan grup di sini, sepertinya tahap kondisional tidak menyebarkan opsi).
Martin Ender
Ah, tentu saja, loop kondisional alih-alih loop kondisional, yang memecahkan bug loop tak terbatas di versi pertama Anda. Sangat rapi!
Neil
5

Haskell , 71 byte

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

Cobalah online!

BMO menyimpan 3 byte dengan any null xelem""x.

Ørjan Johansen menyimpan byte dengan sum[1|b<-y,a==b]<2filter(==a)[y]==[a].

Penjelasan

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.

Jika melempar kesalahan ( Prelude.head: empty list) ketika tidak ada solusi yang OK, |elem""x=""dapat dihapus selama 61 byte .

Lynn
sumber
1
Tes lebih pendek:filter(==a)y==[a]
Ørjan Johansen
4

Ruby , 38 byte

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

Cobalah online!

Terima kasih kepada GB karena telah menunjukkan bug.

Kirill L.
sumber
Gagal jika tidak ada kecocokan dan string pertama bukan yang terpendek.
GB
@ GB Bisakah Anda memberikan contoh? Saya memodifikasi tes terakhir saya sesuai dengan deskripsi Anda, dan itu berhasil.
Kirill L.
Coba ["abc", "ac", "acd"]
GB
Sekarang saya mengerti, Anda benar. Harus diperbaiki.
Kirill L.
4

Pyth , 6 byte

>1{I#C

Suite uji.

Outputnya adalah daftar tunggal, sebagaimana diizinkan secara default ; daftar [] (daftar kosong, palsu) dikembalikan jika string tidak dapat enklactified .

Penjelasan

> 1 {I # C - Program lengkap.
     C - Transpose input, tanam absensi.
    # - Saring berdasarkan:
  {I - Invarian di bawah deduplikasi.
> 1 - Slice to 1. list [: 1] dengan Python.

Pyth , 5 byte

Ini akan berlaku jika crash akan dianggap sebagai nilai palsu.

h{I#C

Suite uji.

Tuan Xcoder
sumber
3

Haskell , 76 74 byte

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

Cobalah online! Mengembalikan string pencarian terakhir yang valid atau string kosong jika tidak ada string seperti itu.


71 69 byte

Jika melemparkan pengecualian yang konsisten karena nilai palsu diizinkan:

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

Cobalah online! Melempar empty listpengecualian jika tidak ada string yang ditemukan, mengembalikan string valid pertama jika tidak.

-2 byte berkat Ørjan Johansen

Laikoni
sumber
1
notElem x dapat disingkat menjadi all(/=x).
Ørjan Johansen
2

Jelly , 7 byte

z0Q€fZḢ

Mengembalikan bilangan bulat 0 jika string tidak dapat enklactified.

Cobalah online!

Bagaimana itu bekerja

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.
Dennis
sumber
2

Stax , 9 8 byte

åτIⁿs↓µg

Jalankan dan debug itu

Penjelasan (tidak dikemas):

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
wastl
sumber
2

R , 127 byte

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

Cobalah online!

sapplybiasanya mengembalikan a matrixketika semua length(FUN(X[[i]]))sama, kecuali ketika length(FUN(X[[i]]))==1, dalam hal ini mengembalikan a vector. Untuk menggunakan operasi matriks, maka, kita harus substringmelangkah lebih jauh dari yang kita butuhkan untuk menjamin a matrix, itulah sebabnya xmeluas ke max(nchar(S)+1).

Kami kemudian memfilter untuk baris yang tidak memiliki duplikat dan tidak ada string kosong. Karena kami hanya dapat mengembalikan satu string, kami mengambil yang pertama, kecuali bahwa ketika tidak ada baris yang memenuhi kriteria, kami akan membuat kesalahan, jadi kami menambahkan baris tambahan ""hingga akhir.

Kemudian kami mencetak enklactstring yang di-ified atau string yang kosong.

Giuseppe
sumber
2

R , 116 107 95 byte

R + pryr

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

Cobalah online!

basis R

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

Cobalah online!

Dua varian ini menghemat 9 byte berkat Giuseppe .

Penjelasan:

Ini secara efektif memotong semua sengatan dalam vektor vdengan panjang terpendek dan beralih melalui indeks berikutnya. Kemudian periksa apakah ada duplikat dalam surat yang dipilih dan jika tidak, tempel bersama dan cetak dengan cat. Jika semua indeks mengembalikan hasil yang digandakan, ini mencetak string kosong.
Semua dibungkus dalam pryrfungsi anonim dengan breakuntuk menghentikan loop, atau fungsi R dasar memusatkan vektor untuk memutus loop.

pajonk
sumber
1
Yang bagus! Ini dapat di-golf menjadi 107 byte dalam R+pryratau 107 byte pada basis R.
Giuseppe
2

Japt, 9 byte

Mengambil input sebagai array array karakter, mengembalikan array karakter atau undefined

y æ_f eZâ

Cobalah (Tambahkan baris baru di awal program dengan kode qR mquntuk mengambil input sebagai string terpisah baris baru, untuk menghemat kerumitan membuat array.)


Penjelasan

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
Shaggy
sumber
Saya mencoba tantangan sebelum membaca solusi Anda dan mendapatkan solusi yang hampir identik:z æ_¬eZ¬â
Nit
Sama persis, selain format input.
Shaggy
2

05AB1E , 7 byte

øʒDÙQ}н

Cobalah online!

Penjelasan

ø        # Zip the input array
 ʒ   }   # Filter by ...
  DÙQ    # ... an entry is equal to itself deduplicated
      н  # Take the first element
Kaldo
sumber
1

Python 3 , 75 byte

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

Beroperasi pada daftar karakter alih-alih string. Mengembalikan False jika tidak ada string enklaction yang valid.

Cobalah online!

musicman523
sumber
Saya pikir ini berulang, yang akan membuatnya tidak valid kecuali f=dimasukkan dalam jumlah byte.
LyricLy
@LyricLy Tetap :)
musicman523
1

C (gcc) , 161 byte

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]);}

Cobalah online!

Setiap posisi karakter diuji untuk duplikasi dan dilewati jika duplikat terdeteksi; ini dilanjutkan sampai string terpendek berakhir. Hanya ASCII, sayangnya: string DBCS / UTF-8 merusak fungsi ini dengan buruk!

ErikF
sumber
152 byte
ceilingcat
1

Japt , 12 byte

Pengembalian undefineduntuk string non-enklaktik.

y ·æ_¬n ä¦ e

Cobalah online!

Penjelasan:

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)
Oliver
sumber
Anda harus dapat menyimpan 2 byte dengan mengambil input sebagai array dari array karakter dan membuang keduanya split.
Shaggy
1

Bahasa Wolfram (Mathematica) , 54 byte

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

Cobalah online!

Mengambil daftar daftar karakter sebagai input, mengembalikan daftar karakter. Berisi U + F3C7, sesuai dengan operator "Transpose".

Mengembalikan #1dan melempar banyak kesalahan yang dapat diabaikan ketika tidak ada string yang cocok.

Penjelasan:

PadRight@#

Pad input sehingga setiap "string" (daftar karakter) memiliki panjang yang sama. Ini menambahkan integer 0s (bukan string "0"s). Kemudian transpos.

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

Pilih string yang tidak memiliki bilangan bulat 0di dalamnya dan memiliki semua karakter unik.

#&@@

Dapatkan yang pertama.

JungHwan Min
sumber
1

JavaScript (ES6), 66 byte

Mengembalikan string atau undefinedjika tidak ada solusi.

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

Cobalah online!

Berkomentar

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
Arnauld
sumber
1

Arang , 23 21 byte

-2 byte terima kasih kepada @Neil !

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

Cobalah online!

Khusus ASCII
sumber
Huh, kapan a) qberhenti selalu menjadi string b) StringMap mulai bekerja pada non-string? Bagaimanapun, Anda Rangetidak perlu, menghemat 2 byte.
Neil
@Neil a) Ketika saya menambahkan input array / objek b)> _> Saya tidak yakin. mungkin sekitar waktu ketika saya memperbaiki loop sementara (maaf, lupa menyebutkan salah satu dari mereka)
ASCII-only
1

Sekam , 9 byte

ḟS=UḞz:∞ø

Cobalah online!

Penjelasan

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
Fyr
sumber
Menggunakan ←ġLTlebih dari Ḟz:∞øseharusnya menghemat satu byte.
ბიმო
1

Retina , 81 56 byte

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

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

Cobalah online!

-25 byte terima kasih kepada @Neil


Mengganti teks persegi panjang di Retina sangat sulit.

TwiNight
sumber
Saya berharap saya tahu cara yang lebih baik untuk melakukan transposisi persegi panjang, tetapi sementara itu, menghemat 25 byte .
Neil
@Neil Ahh ... tahap eval. Saya selalu lupa retina 1.0 memiliki semua fitur baru yang keren ini
TwiNight
1

Perl 6 , 27 byte

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

Cobalah online!

Setelah melihat bahwa versi ruby ​​telah di-upvote, saya telah menyalin pendekatan dan menggunakan daftar karakter, bukan string. Saya tidak suka itu.

Kiriman saya yang lebih tua dan lebih benar adalah sebagai berikut:

Perl 6 , 38 byte

Split, zip, periksa keunikan, gabung.

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

Cobalah online!

Jarrod Funnell
sumber
1

C (gcc) , 121 113 110 byte

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);}

Cobalah online!

Tidak disatukan

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;
        }
    }
}

-3 Terima kasih untuk ceilingcat

Ini menyalahgunakan kemampuan untuk hanya menambahkan 1 ke penunjuk string di C untuk mendapatkan 'ekor' dari string. Penghemat byte utama adalah:

  • d+=x[y[i++]=*(*_)++]++yang menambahkan karakter pertama dari string pertama _ke y, memajukan string pertama _untuk menghapus karakter pertamanya, menambahkan xentri pada karakter itu d, dan menambahkan kata xentri
  • q=d?*x:puts(y)yang mencetak yjika dbukan nol saat menetapkan qke nilai bukan nol, atau set qke tidak nol jika elemen pertama xadalah bukan nol (jika kita berada di akhir salah satu string maka elemen tersebut akan menjadi bukan nol nol)

Sunting: Dicukur byte dengan beralih dari loop sementara ke panggilan ekor rekursif dan menghapus tanda kurung dari untuk loop.

LambdaBeta
sumber
Sarankan for(d=i=0;*_;)daripada for(d=0,i=0;*_;++_)dan *(*_++)++]++;d=d?!*x*f(s)bukannya*(*_)++]++;d=d?*x?0:f(s)
ceilingcat
0

Pyth, 13 byte

e+kf{[email protected]

Coba di sini

e+kf{[email protected]
           .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.
Mnemonik
sumber
1
Tampaknya mengembalikan daftar semua string yang valid tidak valid.
LyricLy
@LyricLy Diperbaiki.
Mnemonic
0

Merah , 139 byte

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]]]

Cobalah online!

Penjelasan:

Mengambil input sebagai blok (daftar) string. Mengembalikan string enklaction atau nonelainnya.

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
    ]  
]
Galen Ivanov
sumber
0

Röda , 80 77 byte

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

Cobalah online!

-1 byte berkat Sapi dukun

Penjelasan:

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 */
  }
}

Kata trykunci digunakan untuk menghilangkan kesalahan yang terjadi jika ilebih besar dari panjang string terkecil a, atau tidak ada jawaban dan headmenyebabkan kesalahan.

fergusq
sumber
Anda dapat menghapus parens dalam sequntuk menyimpan byte
Kritixi Lithos
@Cowsquack Terima kasih!
fergusq
0

Java 10, 106 byte

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

Akan memberikan kesalahan alih-alih mengembalikan String kosong jika tidak ada solusi yang ditemukan. Input adalah karakter-matriks.

Cobalah online.

Penjelasan:

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
Kevin Cruijssen
sumber
OP tampaknya tidak ingin memperbolehkan kesalahan, meskipun diakui tidak pernah memasukkannya ke dalam pos itu sendiri.
Ørjan Johansen
0

Clojure, 59 byte

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

Mengembalikan daftar daftar karakter.

NikoNyrh
sumber
0

APL + WIN, 35 33 byte

2 byte disimpan berkat Adám

Anjuran untuk baris teks sebagai matriks karakter:

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

Cobalah online! Atas perkenan Dyalog Classic

Penjelasan:

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 
Graham
sumber