Terinspirasi oleh rantai komentar ini ...
Saya ingin
enklact
jalan 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 kode-golf , 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:
""
Jawaban:
Python3, 59 byte
Mengembalikan string dengan enklact, Tidak ada sebaliknya
sumber
Python 2 ,
686761 byteCobalah online!
Perbaikan
Jika output tidak harus berupa string:
Python 3 , 49 byte
Cobalah online!
sumber
max(`j`[2::5]for j in[""]+zip(*a)if len(set(j))==len(j))
berfungsi, untuk menyimpan byte.Retina ,
4332 byteCobalah online! Sunting: Disimpan 11 byte berkat @MartinEnder. Penjelasan:
Ulangi saat input berubah ...
... hanya jika satu baris kosong atau dua baris dimulai dengan karakter yang sama ...
... 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.
Kumpulkan karakter pertama dari setiap baris. (Jika tidak ada solusi, loop di atas akan menghapus semuanya dan tidak ada yang perlu dikumpulkan.)
sumber
m
dengan grup di sini, sepertinya tahap kondisional tidak menyebarkan opsi).Haskell , 71 byte
Cobalah online!
BMO menyimpan 3 byte dengan
any null x
→elem""x
.Ørjan Johansen menyimpan byte dengan
sum[1|b<-y,a==b]<2
→filter(==a)[y]==[a]
.Penjelasan
Jika melempar kesalahan (
Prelude.head: empty list
) ketika tidak ada solusi yang OK,|elem""x=""
dapat dihapus selama 61 byte .sumber
filter(==a)y==[a]
Ruby , 38 byte
Cobalah online!
Terima kasih kepada GB karena telah menunjukkan bug.
sumber
Pyth , 6 byte
Suite uji.
Outputnya adalah daftar tunggal, sebagaimana diizinkan secara default ; daftar [] (daftar kosong, palsu) dikembalikan jika string tidak dapat enklactified .
Penjelasan
Pyth , 5 byte
Ini akan berlaku jika crash akan dianggap sebagai nilai palsu.
Suite uji.
sumber
Haskell ,
7674 byteCobalah online! Mengembalikan string pencarian terakhir yang valid atau string kosong jika tidak ada string seperti itu.
7169 byteJika melemparkan pengecualian yang konsisten karena nilai palsu diizinkan:
Cobalah online! Melempar
empty list
pengecualian jika tidak ada string yang ditemukan, mengembalikan string valid pertama jika tidak.-2 byte berkat Ørjan Johansen
sumber
notElem x
dapat disingkat menjadiall(/=x)
.Jelly , 7 byte
Mengembalikan bilangan bulat 0 jika string tidak dapat enklactified.
Cobalah online!
Bagaimana itu bekerja
sumber
Perl 5 , 61 byte
Cobalah online!
sumber
Stax ,
98 byteJalankan dan debug itu
Penjelasan (tidak dikemas):
sumber
R , 127 byte
Cobalah online!
sapply
biasanya mengembalikan amatrix
ketika semualength(FUN(X[[i]]))
sama, kecuali ketikalength(FUN(X[[i]]))==1
, dalam hal ini mengembalikan avector
. Untuk menggunakan operasi matriks, maka, kita harussubstring
melangkah lebih jauh dari yang kita butuhkan untuk menjamin amatrix
, itulah sebabnyax
meluas kemax(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
enklact
string yang di-ified atau string yang kosong.sumber
R ,
11610795 byteR + pryr
Cobalah online!
basis R
Cobalah online!
Dua varian ini menghemat 9 byte berkat Giuseppe .
Penjelasan:
Ini secara efektif memotong semua sengatan dalam vektor
v
dengan panjang terpendek dan beralih melalui indeks berikutnya. Kemudian periksa apakah ada duplikat dalam surat yang dipilih dan jika tidak, tempel bersama dan cetak dengancat
. Jika semua indeks mengembalikan hasil yang digandakan, ini mencetak string kosong.Semua dibungkus dalam
pryr
fungsi anonim denganbreak
untuk menghentikan loop, atau fungsi R dasar memusatkan vektor untuk memutus loop.sumber
R+pryr
atau 107 byte pada basis R.Japt, 9 byte
Mengambil input sebagai array array karakter, mengembalikan array karakter atau
undefined
Cobalah (Tambahkan baris baru di awal program dengan kode
qR mq
untuk mengambil input sebagai string terpisah baris baru, untuk menghemat kerumitan membuat array.)Penjelasan
sumber
z æ_¬eZ¬â
05AB1E , 7 byte
Cobalah online!
Penjelasan
sumber
Python 3 , 75 byte
Beroperasi pada daftar karakter alih-alih string. Mengembalikan False jika tidak ada string enklaction yang valid.
Cobalah online!
sumber
f=
dimasukkan dalam jumlah byte.C (gcc) , 161 byte
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!
sumber
Japt , 12 byte
Pengembalian
undefined
untuk string non-enklaktik.Cobalah online!
Penjelasan:
sumber
split
.Bahasa Wolfram (Mathematica) , 54 byte
Cobalah online!
Mengambil daftar daftar karakter sebagai input, mengembalikan daftar karakter. Berisi U + F3C7, sesuai dengan operator "Transpose".
Mengembalikan
#1
dan melempar banyak kesalahan yang dapat diabaikan ketika tidak ada string yang cocok.Penjelasan:
Pad input sehingga setiap "string" (daftar karakter) memiliki panjang yang sama. Ini menambahkan integer
0
s (bukan string"0"
s). Kemudian transpos.Pilih string yang tidak memiliki bilangan bulat
0
di dalamnya dan memiliki semua karakter unik.Dapatkan yang pertama.
sumber
JavaScript (ES6), 66 byte
Mengembalikan string atau
undefined
jika tidak ada solusi.Cobalah online!
Berkomentar
sumber
Arang ,
2321 byte-2 byte terima kasih kepada @Neil !
Cobalah online!
sumber
q
berhenti selalu menjadi string b) StringMap mulai bekerja pada non-string? Bagaimanapun, AndaRange
tidak perlu, menghemat 2 byte.Sekam , 9 byte
Cobalah online!
Penjelasan
sumber
←ġLT
lebih dariḞz:∞ø
seharusnya menghemat satu byte.Retina ,
8156 byteCobalah online!
-25 byte terima kasih kepada @Neil
Mengganti teks persegi panjang di Retina sangat sulit.
sumber
Perl 6 , 27 byte
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.
Cobalah online!
sumber
C (gcc) ,
121113110 byteCobalah online!
Tidak disatukan
-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_
key
, memajukan string pertama_
untuk menghapus karakter pertamanya, menambahkanx
entri pada karakter itud
, dan menambahkan katax
entriq=d?*x:puts(y)
yang mencetaky
jikad
bukan nol saat menetapkanq
ke nilai bukan nol, atau setq
ke tidak nol jika elemen pertamax
adalah 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.
sumber
for(d=i=0;*_;)
daripadafor(d=0,i=0;*_;++_)
dan*(*_++)++]++;d=d?!*x*f(s)
bukannya*(*_)++]++;d=d?*x?0:f(s)
Pyth, 13 byte
Coba di sini
sumber
Merah , 139 byte
Cobalah online!
Penjelasan:
Mengambil input sebagai blok (daftar) string. Mengembalikan string enklaction atau
none
lainnya.sumber
Röda ,
8077 byteCobalah online!
-1 byte berkat Sapi dukun
Penjelasan:
Kata
try
kunci digunakan untuk menghilangkan kesalahan yang terjadi jikai
lebih besar dari panjang string terkecila
, atau tidak ada jawaban danhead
menyebabkan kesalahan.sumber
seq
untuk menyimpan byteJava 10, 106 byte
Akan memberikan kesalahan alih-alih mengembalikan String kosong jika tidak ada solusi yang ditemukan. Input adalah karakter-matriks.
Cobalah online.
Penjelasan:
sumber
Clojure, 59 byte
Mengembalikan daftar daftar karakter.
sumber
APL + WIN,
3533 byte2 byte disimpan berkat Adám
Anjuran untuk baris teks sebagai matriks karakter:
Cobalah online! Atas perkenan Dyalog Classic
Penjelasan:
sumber
⊂[1]
→,⌿