Bu karakter dizilerini enklaklaştırmak


42

Bu yorum zincirinden esinlenildi ...

Bu sorundan enklactkurtulmak istiyorum ama yapamam ...

@ETkct (v) ' ye yapılan sunumlar : benzersiz unsurlardan oluşan bir alt bölüm kullanarak bir arama tablosu uygulamak.


Yerleştirme, bir arama tablosunu sıkıştırmanın çok kullanışlı bir yoludur. Örneğin, aşağıdaki renk listesine sahip olduğunuzu varsayalım:

red
green
blue
yellow
purple
orange

Girdi olarak bir renk almak ve bu listedeki dizinini döndürmek istiyorsanız, açıkça görüldüğü gibi basit bir yol var:

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

Ancak bunu daha az bayt şekilde yapmamızın bir yolu var:

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

Bu çalışır çünkü her dizenin ilk (veya 0') dizini benzersizdir. Bu örnek açıktır, ancak bazen biraz daha zordur. Ya bu liste için bir arama tablosu yapmak istiyorsak?

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

Bu durumda, bunu yapamayız:

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

Çünkü 'T'"Tuna" ve "Türkiye" ile başlayan iki farklı girdi var . Farklı bir dizine bakmalıyız. Her dizginin 4. dizinine bakarsanız, hepsinin benzersiz olduğunu fark edeceksiniz. Yani bunu yapabiliriz ...

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

Bu durumda, "enklaction string" "enklact" dır.

Bu bizi bugünün mücadelesine götürüyor ...

Dizelerin bir listesi göz önüne alındığında, herhangi bir geçerli enklaction dizesini döndür. Veya başka bir deyişle, bir dizge listesi verildiğinde, her harfin benzersiz olduğu herhangi bir yeni dizeyi döndürür ve dizge, her dizenin i harfi ile birleştirilerek oluşturulur.

Geçerli bir enklaction dizesi yoksa, gönderiminiz bunun yerine boş bir dize veya tutarlı bir sahte değer döndürmelidir. Her zaman olduğu gibi, işlevlere veya tam programlara izin verilir ve giriş / çıkış biçimlerine izin verilir (nedene göre).

Her dize yalnızca yazdırılabilir ASCII içerecektir ve bu zorluk büyük / küçük harf duyarlıdır.

Bu , bu yüzden seçtiğiniz dilde mümkün olan en kısa programı yazmaya çalışın!

Test durumları

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:
""

Geçerli bir dize listesi döndürebilir miyiz?
LyricLy

@ LyricLy Hmm, şimdi düşünüyorum da, bu daha mantıklı olurdu. Ama zaten cevaplar olduğundan ve ilkini geri döndürmek için fazla kazan olmadığından, hayır diyeceğim, herhangi bir geçerli dize olmalı.
DJMcMayhem

Girilen dizelerin hiçbirinin boş olmadığını garanti edebilir miyiz?
musicman523

6
Tutarlı sahte değer, tutarlı türde bir hata olabilir mi?
Stewie Griffin,

2
Afedersiniz, ama bence doğru fiil enklactate .
Outgolfer Erik,

Yanıtlar:


8

Python3, 59 bayt

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

Enklact ile bir dize döndürür, aksi halde Yok


8

Python 2 , 68 67 61 bayt

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

Çevrimiçi deneyin!

İyileştirmeler

  • Jo King tarafından 68 byte'tan 67 byte'a
  • Tarafından Dan 66-65 bayt Lynn

Çıktının bir dizge olması gerekmiyorsa:

Python 3 , 49 bayt

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

Çevrimiçi deneyin!



@JoKing Zarif ve uygulandı.
Neil

Bence max(`j`[2::5]for j in[""]+zip(*a)if len(set(j))==len(j))bayt kurtarmak için işe yarıyor.
Lynn

@Lynn teşekkürler ve güncellendi.
Neil

7

Retina , 43 32 bayt

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

|""Lm`^.

Çevrimiçi deneyin! Düzenleme: @ Martininder sayesinde 11 bayt kaydedildi. Açıklama:

+

Giriş değiştiğinde tekrarla ...

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

... yalnızca bir satır boşsa veya iki satır aynı karakterle başlıyorsa ...

m`^.

... her satırın ilk karakterini sil. Bu nedenle tekrar, a) tüm satırlar farklı karakterlerle başlarsa durur, bu durumda koşul başarısız olur ve giriş değişmezse veya b) en az bir satır boşalır, bu durumda tüm karakterler silinir, bu noktada giriş değişmeyi durdurur.

|""L`^.

Her çizginin ilk karakterini topla. (Hiçbir çözüm yoksa, yukarıdaki döngü her şeyi silecek ve toplanacak hiçbir şey olmayacaktır.)


Regex seçenekleri ayrıca regex değiştiricileri alır (doğrudan kapanma sınırlayıcısından sonra yazarak): tio.run/##K0otycxLNPz/…
Martin Ender

Aslında, bu ikinci aşamadan tamamen kurtulmanıza izin verir: tio.run/##K0otycxLNPz/X1s/… (bir şekilde mburada bir grupla başvuramazsınız , şartlı aşama seçeneği ilerletmiyor gibi görünüyor).
Martin Ender

Ah, elbette, ilk sürümünüzde sonsuz döngü hatasını çözen koşullu döngü yerine koşullu döngü uygulayın. Çok temiz!
Neil

5

Haskell , 71 bayt

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

Çevrimiçi deneyin!

BMO, any null x→ ile 3 bayt kaydetti elem""x.

Ørjan Johansen sum[1|b<-y,a==b]<2→ ile bir byte kaydetti filter(==a)[y]==[a].

açıklama

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 listHiçbir çözüm olmadığında bir hata ( ) |elem""x=""atarsanız Tamam, 61 bayt için silinebilir .


1
Kısa test:filter(==a)y==[a]
Ørjan Johansen

4

Ruby , 38 bayt

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

Çevrimiçi deneyin!

Hata bildiren GB için teşekkürler.


Eşleşme yoksa ve ilk dize en kısa değilse başarısız olur.
GB

@TR Bir örnek verebilir misiniz lütfen? Son testimi açıklamanıza göre değiştirdim ve işe yaradı.
Kirill L.

["Abc", "ac", "acd"] 'yi deneyin
GB

Şimdi anlıyorum, haklısın. Sabit olmalı.
Kirill L.

4

Pyth , 6 bayt

>1{I#C

Test odası.

Çıktı, varsayılan olarak izin verildiği gibi, bir tekil listedir ; Liste [] (boş liste, falsy) dize olamaz halinde döndürülür enklactified .

açıklama

> 1 {I # C - Tam program.
     C - Girişi çevir, devamsızlıkları kırp.
    # - Tarafından filtre:
  {I - Tekilleştirme altında değişmez.
> 1 - Python'da [: 1] listesini 1. sıraya kaydırın.

Pyth , 5 bayt

Bu, çökme sahte bir değer olarak sayılmış olsaydı geçerli olurdu.

h{I#C

Test odası.


3

Haskell , 76 74 bayt

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

Çevrimiçi deneyin! Böyle bir dize yoksa, son geçerli arama dizesini veya boş bir dizeyi döndürür.


71 69 bayt

Sahte değer olarak tutarlı bir istisna atıyorsanız:

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

Çevrimiçi deneyin! empty listHiçbir dize bulunamazsa istisna atar , aksi takdirde ilk geçerli dizeyi döndürür.

Ørjan Johansen sayesinde -2 bayt


1
notElem x kısaltılabilir all(/=x).
Ørjan Johansen

2

Jöle , 7 bayt

z0Q€fZḢ

Dizeler gizlenemiyorsa 0 tamsayısını döndürür .

Çevrimiçi deneyin!

Nasıl çalışır

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 bayt

åτIⁿs↓µg

Koş ve hata ayıkla

Açıklama (paketlenmemiş):

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 bayt

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

Çevrimiçi deneyin!

sapplytipik olarak bir döner matrixher zaman length(FUN(X[[i]]))eşit olduğu durumlar dışında, length(FUN(X[[i]]))==1ki bu durumda bu bir döner vector. Matris işlemlerini kullanmak için, o zaman, gerek substringbiz garanti gerekenden daha başka bir tanesi matrix, bu yüzden de xkapsar max(nchar(S)+1).

Daha sonra kopyaları olmayan ve boş dizeleri olmayan satırları filtreleriz. Yalnızca tek bir dize döndüğümüz için, ilkini alırız, ancak ölçütleri karşılayan hiçbir satır olmadığında bir hata atarız, bu yüzden sonuna kadar fazladan bir satır ekleriz "".

Ardından enklactified dizesini veya boş dizgeyi yazdırırız .


2

R , 116 107 95 bayt

R + pryr

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

Çevrimiçi deneyin!

baz R

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

Çevrimiçi deneyin!

Bu iki değişken Giuseppe sayesinde 9 byte tasarruf sağlıyor .

Açıklama:

Bu, vektördeki tüm sokmaları ven kısa sürenin uzunluğuna kadar etkili bir şekilde keser ve sonraki indeksler vasıtasıyla yinelenir. Ardından, seçilen harflerin içinde herhangi bir yineleme olup olmadığını kontrol eder ve değilse, bunları bir araya yapıştırır ve ile yazdırır cat. Tüm dizinler yinelenen sonuçlar verirse, bu boş dize yazdırır.
Hepsi , döngüyü durdurmak için anonim bir pryrfonksiyonla sarılır breakveya döngüyü kırmak için vektörü sıfırlayan temel R fonksiyonu.


1
Güzel! Bu, golfed olabilir 107 bayt içinde R+pryrya da 107 bayt baz R.
Giuseppe

2

Japt, 9 bayt

Girdiyi karakter dizisi olarak alır, karakter dizisini döndürür veya undefined

y æ_f eZâ

Deneyin (Programın başlangıcına qR mqyeni satır ayrılmış bir dize olarak giriş yapmak için kodla birlikte yeni bir satır ekleyin , dizileri yaratma zorluğundan kurtarın.)


açıklama

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ümünüzü okumadan önce mücadeleyi denedim ve neredeyse özdeş bir çözüme z æ_¬eZ¬â
Nit

Giriş formatı dışında tamamen aynı.
Shaggy

2

05AB1E , 7 bayt

øʒDÙQ}н

Çevrimiçi deneyin!

açıklama

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

1

Python 3 , 75 bayt

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

Dizeler yerine karakter listelerinde çalışır. Geçerli bir enklaction dizgisi yoksa False döndürür.

Çevrimiçi deneyin!


f=Bayt sayısına dahil edilmediği sürece geçersiz kılacağını bu recurses düşünüyorum .
LyricLy

@LyricLy Fixed :)
musicman523

1

C (gcc) , 161 bayt

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

Çevrimiçi deneyin!

Her karakter konumu çoğaltma için test edilir ve bir çoğaltma algılanırsa atlanır; en kısa dize bitene kadar bu devam eder. Sadece ASCII, ne yazık ki: DBCS / UTF-8 dizeleri bu işlevi fena kırıyor!



1

Japt , 12 bayt

undefinedEnklaktik olmayan dizeler için döndürür .

y ·æ_¬n ä¦ e

Çevrimiçi deneyin!

Açıklama:

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)

Bir dizi karakter dizisi olarak giriş alarak ve iki splitsaniye silerek 2 bayt kaydedebilmelisiniz .
Shaggy

1

Wolfram Dili (Mathematica) , 54 bayt

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

Çevrimiçi deneyin!

Girdi olarak karakter listesini alır, karakter listesini döndürür. "Transpose" operatörüne karşılık gelen U + F3C7'yi içerir.

#1Uygun bir dize olmadığında bir sürü açıklayıcı hata döndürür ve atar.

Açıklama:

PadRight@#

Girişi, her "string" (karakter listesi) aynı uzunlukta olacak şekilde doldurun. Bu tamsayı 0s ekler ( "0"s dizgisine değil ). Sonra devrik yap.

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

İçinde tamsayı olmayan 0ve tüm benzersiz karakterlere sahip olan dizeleri seçin .

#&@@

İlkini al.


1

JavaScript (ES6), 66 bayt

Bir dize döndürür veya undefinedçözüm yoksa döndürür .

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

Çevrimiçi deneyin!

Yorumlananlar

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

Kömür , 23 21 bayt

@Neil sayesinde -2 bayt !

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

Çevrimiçi deneyin!


Huh, a) a) qher zaman bir dize olmayı bıraktı b) StringMap olmayan dizelerde çalışmaya başladı mı? Neyse, Rangegereksizdir, 2 bayttan tasarruf etmenizi sağlar.
Neil,

@Neil a) Dizi / nesne girişi eklediğimde b)> _> Emin değilim. while döngüsünü düzelttiğim zaman muhtemelen (özür dilerim, ikisinden de bahsetmeyi unuttum)
ASCII-sadece

1

Kabuğu , 9 bayt

ḟS=UḞz:∞ø

Çevrimiçi deneyin!

açıklama

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

Kullanılması ←ġLTüzerine Ḟz:∞øbir byte kaydetmek gerekir.
ბიმო

1

Retina , 81 56 bayt

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

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

Çevrimiçi deneyin!

@Neil sayesinde -25 bayt


Retina'da dikdörtgen metni yerleştirmek şaşırtıcı derecede zordur.


Keşke dikdörtgen transpozisyon gerçekleştirmenin daha iyi bir yolunu bilseydim, ama bu arada, 25 bayt tasarruf edin .
Neil,

@Neil Ahh ... değerlendirme aşaması. Her zaman retina 1.0
un

1

Perl 6 , 27 bayt

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

Çevrimiçi deneyin!

Yakut versiyonun yenilendiğini gördükten sonra yaklaşımı kopyaladım ve karakter dizileri yerine karakter listelerini kullandım. Beğenmedim

Daha eski ve daha doğru gönderim aşağıdaki gibidir:

Perl 6 , 38 bayt

Böl, sıkıştır, benzersizliği kontrol et, katıl.

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

Çevrimiçi deneyin!


1

C (gcc) , 121 113 110 bayt

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

Çevrimiçi deneyin!

Ungolfed

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 ceilingcat sayesinde

Bu, dizgenin 'kuyruğunu' almak için C'deki bir string göstergesine sadece 1 ekleme yeteneğini kötüye kullanır. Ana bayt koruyucular:

  • d+=x[y[i++]=*(*_)++]++bunlardan ilk dizenin birinci karakteri ekler _için y, ilk dize ilerler _ilk karakterini kaldırmak için, ekler xo karakterde girişi dve artışlarla söz konusu xgiriş
  • q=d?*x:puts(y)sıfır olmayan bir değere ayarlarken sıfır yolmasa da yazdırır , veya ilk elemanı sıfır değilse (sıfırlardan biri olsaydı, dizgilerden birinin sonunda olsaydık, söz konusu eleman sıfırlanamazdı). sıfır)dqqx

Düzenleme: Döngüden özyinelemeli kuyruk çağrısına geçerek ve köşeli parantezleri kaldırarak döngüden geçen baytlar.


Öner for(d=i=0;*_;)yerine for(d=0,i=0;*_;++_)ve *(*_++)++]++;d=d?!*x*f(s)yerine*(*_)++]++;d=d?*x?0:f(s)
ceilingcat

0

Pyth, 13 bayt

e+kf{IT@.TQ.t

Burada dene

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
Geçerli tüm dizelerin bir listesini döndürmenin geçerli olmadığı görülüyor.
LyricLy

@ LyricLy Sabit.
Anma

0

Kırmızı , 139 bayt

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

Çevrimiçi deneyin!

Açıklama:

Girdiyi dizge bloğu (liste) olarak alır. Enklaction dizesini ya da nonebaşka bir şekilde döndürür .

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

Röda , 80 77 bayt

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

Çevrimiçi deneyin!

İnekler quack sayesinde -1 bayt

Açıklama:

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

tryAnahtar kelime varsa oluşan hataları görevden kullanılır ien küçük dize uzunluğundan daha büyüktür a, ya da hiç cevap yoktur ve headhataya neden oluyor.


Sen parens kaldırabilirsiniz seqbir byte kaydetmek
Kritixi Lithos

@Cowsquack Teşekkürler!
fergusq

0

Java 10, 106 bayt

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

Eğer bir çözüm bulunamazsa boş bir String döndürmek yerine hata verir. Giriş bir karakter matrisidir.

Çevrimiçi deneyin.

Açıklama:

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, hatalara izin vermek istemiyordu, ancak kuşkusuz hiçbir zaman postanın içine koymadı.
Ørjan Johansen

0

Clojure, 59 bayt

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

Karakter listelerinin bir listesini döndürür.


0

APL + WIN, 35 33 bayt

Adám sayesinde 2 bayt kaydedildi

Metin satırlarını karakter matrisi olarak sorar:

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

Çevrimiçi deneyin! Dyalog Classic'in İzniyle

Açıklama:

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 

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.