pengantar
Menurut posting Rand Al'Thor di SE membingungkan, kata yang berhubungan erat adalah kata yang berisi tiga huruf berurutan alfabet (dalam urutan apa pun).
Kata-kata seperti pendidikan , foghorn , dan kabaret semuanya dianggap sebagai kata-kata yang terjalin erat sedangkan kata-kata seperti belajar , klaxon dan pertunjukan bukanlah kata-kata yang terjalin erat.
Tantangan
Tantangannya adalah untuk kode-golf program yang mampu mengambil satu kata sebagai input (diasumsikan huruf kecil, untuk semua maksud dan tujuan) dan untuk mengembalikan output yang (jika tersedia) daftar semua set huruf berturut-turut (juga dalam huruf kecil) jika adalah kata yang terkait erat, dan mengosongkan hasil jika bukan kata yang terkait erat.
Contohnya
Input: education
Output: cde
Input: foghorn
Output: fgh
Input: cabaret
Output: abc
Input: hijacking
Output: ghi, hij, ijk
Input: pneumonia
Output: mno, nop
Input: klaxon
Output: <<no output>>
Input: perform
Output: <<no output>>
Input: learning
Output: <<no output>>
Aturan
- Jika input dianggap sebagai satu huruf kecil dan output harus lebih kecil, sifat dari output akan bervariasi sesuai dengan pilihan bahasa pengkodean Anda. Silakan pilih bentuk output yang paling sesuai dengan sifat tantangan, apakah itu STDOUT, output file, array, dll.
- Karena ini adalah kode-golf, ini akan menjadi kasus jumlah byte terendah yang menjadi pemenang.
- Tidak ada celah konyol .
- Saya tidak akan menerima jawaban yang memiliki huruf berturut-turut dalam urutan non-alfabet ... Jadi
cab
tidak akan dianggap sebagai output yang cocok untukcabaret
, misalnya. - Catatan khusus, sementara "kembar tiga" tidak harus dalam urutan abjad, tetapi karakter dalam kembar tiga harus ... jadi dalam hal kata "kinerja", misalnya, output
mno,nop
akan diterima, seperti yang akannop,mno
. Dalam kasus kata "pembajakan", ada enam cara yang kembar tiga darighi
,hij
danijk
dapat diatur dalam daftar, dan keenam permutasi dapat diterima sebagai output.
Selain itu, sesuai keinginan Anda, siap, golf!
!
Dan dengan kata lain, karena yang sekarang memberikan hasil yang sama :-)pneumonia
bisa[('m','n','o'),('n','o','p')])
?Jawaban:
05AB1E ,
765 byteKode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
Python 3.5, 68 byte
Mencetak string keluaran, dan berakhir dengan kesalahan ketika nilai karakter menjadi terlalu besar.
Menghasilkan semua string dari tiga berturut-turut dan mencetak yang merupakan bagian dari kata input.
sumber
Pyth -
111087 byteMetode kekuatan super brute.
Test Suite .
sumber
Jelly , 7 byte
Ini adalah tautan monadik. Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript (ES6),
9590 byteNilai yang hilang digabungkan sebagai
undefined
, sehingga string yang dihasilkan berisi lebih dari 3 karakter. Saya meminjam!c[3]
trik dari @ETHproductions untuk menghemat 5 byte.sumber
undefined
adalah kata yang sangat erat;)parseInt(c,36)
bukannyac.charCodeAt()
?parseInt
kode golf.Python 3.5, 78 byte
sumber
PHP, 100 byte
mengambil input sebagai argumen baris perintah; mencetak koma jejak. jalankan bersama
-r
.sumber
for($s=join(range(Z,z));$a=substr($s,++$i,3);)
adalah cara yang lebih singkat untuk membuat $ a. Memang diakui memeriksa banyak tanda baca dan juga beberapa seri 2-karakter tetapi karena inputnya adalah huruf kecil saja dan itu mengharuskan ia menemukan 3 karakter yang baik-baik saja.for($a="
ab ", $ i = 98; $ i <123;)! strstr (count_chars ($ argv [1], 3), $ a = substr ($ a, 1) .chr (++ $ i)) ?: print "$ a,"; `menghemat 2 Bytes. Cara yang sangat bagus, saya telah mencoba cara lain di PHP tetapi tidak dapat mencapai Bytes dari kode Anda. Saya tidak yakin apakah Anda memerlukan spasi setelah komaC,
175174 bytebertakuk:
Saat melakukan pengurutan itu menggantikan nilai duplikat dengan 0s, 0s ini disortir ke awal kata. Mencari nilai-nilai yang berurutan kemudian sepele.
sumber
MATL , 13 byte
Cobalah online!
sumber
Haskell, 48 byte
Menghasilkan semua tiga kali lipat dari tiga karakter berturut-turut, mengambil yang hanya menggunakan huruf dalam input.
53 byte:
Daftar ini
['c'..]
berisi semua karakter unicode mulai dari'c'
seterusnya. Pemahaman daftar[[pred$pred c..c]|c<-['c'..]]
mengubahnya menjadi semua string 3 karakter berturut-turut dari"abc"
seterusnya. Kami melangkah mundur dengan[pred$pred c..c]
bukannya maju dengan[c..succ$succ c]
untuk menghindari kesalahan saat mengambil penerus karakter unicode tertinggi.Tiga kali lipat ini difilter untuk mereka yang hanya menggunakan huruf dalam input.
sumber
Perl, 36 byte
Termasuk +1 untuk
-n
Berikan masukan pada STDIN:
Hanya kode:
sumber
T-SQL, 153 byte
Harus bereaksi pada komentar dari WallyWest, tentang itu sudah lama sejak jawaban TSQL terakhir. Jawaban sebagian diilhami oleh jawaban Brian J
Golf:
Biola
Tidak Disatukan:
sumber
Haskell,
636052 byteContoh penggunaan:
f "hijacking"
->["ghi","hij","ijk"]
.scanr(:)"_"['a'..]
membangun daftar dengan ekor daftar semua karakter unicode yang dimulai dengan'a'
dan membiarkannya diakhiri dengan'_'
, yaitu["abcde...\1114111_", "bcde...\1114111_", "cde...\1114111_", ..., "\1114109\1114110\1114111_", "\1114110\1114111_", "\1114111_", "_"]
. Lalu kami mengambil hingga tiga karakter dari setiap string dan mengikatnyax
. Simpan semuax
tempat di mana setiap huruf dalam parameter inputw
.Edit: @xnatau disimpan
37 byte. Terima kasih!sumber
a:b:c:_
dengan @ -pattern?'z'
atas dan biarkan mencoba semua karakter.take
dan menghapus string kosong:f w=[x|x<-init$take 3<$>scanr(:)""['a'..],all(`elem`w)x]
scanr
dengan "." bukannya""
dan hilangkaninit$
.T-SQL (SQL Server 2014), 217 byte
Golf
Pemakaian
Pertama-tama deklarasikan variabel @a sebagai semacam char dan berikan input seperti itu
Saya tidak menghitung pernyataan sebagai bagian dari kode saya, tetapi saya tidak menemukan standar sql untuk input, jadi saya bersedia mengubah penghitungan saya
Output akan menjadi satu baris untuk setiap triple, atau tidak ada baris jika kata tersebut tidak dirajut
Tidak disatukan
sumber
R, 220 byte
Solusi saya cukup mudah. Ini loop melalui kombinasi tiga huruf yang mungkin, loop melalui dan memeriksa karakter dari string yang dimasukkan terhadap tiga huruf berturut-turut, dan menambahkannya ke string. String kemudian hanya dicetak ketika tiga huruf ditemukan (c == 4).
input output
sumber
Python 3.5,
114111888079 byte:Fungsi lambda anonim. Mengambil input sebagai string huruf besar dan menghasilkan array tupel, dengan yang diisi dengan tiga karakter huruf besar yang mewakili semua set
3
huruf berturut - turut yang muncul di input. Sebagai contoh,akan menjadi output untuk input
HIJACKING
. Format output ini telah dikonfirmasi oke oleh OP. Jadi memiliki satu-satunya format input huruf besar. Namun, jika Anda ingin masukan dalam hanya huruf kecil, cukup menggantirange(65,91)
denganrange(97,123)
, menambahkan satu byte lagi.Repl.it dengan semua Kasing Uji!
Penjelasan:
Pada dasarnya yang terjadi di sini adalah:
Daftar,,
W
dibuat menggunakanW=[*map(chr,range(65,91))]
, yang berisi semua huruf besar dalam alfabet bahasa Inggris. Karena itu, input huruf besar selalu diperlukan.Untuk setiap tuple,
i
, dalam daftar, yang akan kita sebutU
, mengandung semua tiga tupel surat berturut-turut, yaitu:dibuat oleh
zip(W,W[1:],W[2:])
masing-masingi
sepenuhnya ditambahkan ke daftar keluaran selama semua elemen dalam versi seti
({*i}
) adalah dalam versi set inputX
({*X}
), yaitu{*X}>={*i}
, yaituX
merupakan superset darii
. Jika tidak, versi kosongi
(()
) ditambahkan ke daftar.Setelah semua tupel dilalui dengan pertandingan yang sepenuhnya ditambahkan, daftar dikembalikan sebagai hasil akhir.
sumber
Scala, 59 byte
Tidak Disatukan:
Penjelasan:
sumber
Sebenarnya, 13 byte
Saran golf diterima. Cobalah online!
Tidak melakukanolf
sumber
Java 7, 230 byte
Ini kemungkinan besar bisa golf, tetapi tantangannya jauh lebih sulit daripada yang saya pikir di Jawa.
Kasus yang tidak disatukan & uji:
Coba di sini.
Keluaran:
sumber
PowerShell v2 +, 93 byte
Terasa jauh lebih lama dari yang dibutuhkan, tapi sepertinya saya tidak bisa bermain golf lebih jauh.
Mengambil input
$n
. Loop dari97
ke120
, membangun berdekatan string tiga huruf - yaitu, sampai|?
, kita akan memilikiabc
,bcd
,cde
, dsb di pipa. Maka itu dimasukkan melaluiWhere-Object
(|?
untuk) menarik hanya item-item di mana klausa itu benar. Di sini, klausa adalah 1) string input$n
, dilemparkan sebagaichar
-array,sort
ed danselect -u
nique'd, kemudian-join
ed kembali menjadi string, 2)-match
ed terhadap string tiga huruf (yaitu, pencocokan regex). Jika itu cocok, maka string tiga huruf ada di kata, dan itu menyaring melalui|?
. Hasilnya dibiarkan dalam pipa dan output tersirat.Contohnya
(Perhatikan bahwa di sini output dipisahkan oleh ruang, karena kita sedang mengencangkan output dengan penggabungan.)
sumber
Retina,
10656 byteDeduplicate, Sortir. Tambah
abc
. Cari apakah substring ditemukan dan tambahkan jika demikian. Terjemahkan ke substring berikutnya. Ulangi. Kemudian hapus dua baris pertama.Cobalah online
Solusi naif:
Deduplicate, Sortir, lalu hasilkan pencocokan 3 huruf berurutan yang tumpang tindih.
Cobalah online
sumber
JavaScript (Firefox 48), 93 byte
Ini cocok untuk versi ES6 96-byte :
Bagaimana itu bekerja
Potongan utama pertama dari fungsi ini adalah ini:
new Set(string)
membuat objek Tetapkan yang berisi salah satu dari setiap karakter unik dalam string. Misalnyanew Set("foghorn")
akan kembaliSet ["f", "o", "g", "h", "r", "n"]
. Kita dapat mengonversinya menjadi array dengan[... ]
, lalu mengurutkannya dengan built-in.sort()
. Ini berubah"foghorn"
menjadi["f", "g", "h", "n", "o", "r"]
.Langkah selanjutnya adalah ini:
Ini memetakan setiap karakter
c
dalama
rray ke karakter yang digabungkan dengan dua item setelahnya. Sebagai contoh["f", "g", "h", "n", "o", "r"] => ["fgh", "ghn", "hno", "nor", "orundefined", "rundefinedundefined"]
,. (undefined
S muncul ketika Anda mencoba mengakses anggota array yang tidak ada.Langkah terakhir adalah memfilter:
Pertama,
!c[3]&
adalah untuk mengesampingkan string yang mengandungundefined
. Ini diperlukan karena bug menyebabkan algoritma berikut ini menghitung misalnyagmundefined
sebagai triplet berturut-turut.Semua string char tiga berturut-turut, ketika ditafsirkan sebagai angka base-36, adalah 38 modulo 1333. Saya menemukan ini dengan perhitungan berikut:
Oleh karena itu, jika string tiga karakter adalah 38 mod 1333 di base-36, ketiga karakter tersebut berurutan dalam alfabet.
Cuplikan tes
Tampilkan cuplikan kode
sumber
gem
danmage
.!c[3]
trik Anda yang menurunkan jawaban ES6 saya sesuai dengan jawaban ES6 sebelumnya, jadi sekarang saya bahkan mengungguli jawaban Firefox 30+ Anda. Maaf soal itu.Racket 237 byte
Pengujian:
Keluaran:
Versi detail:
sumber
Ruby , 50 byte
each_cons(3)
dapatkan semua daftar panjang berturut-turut 3 dari alfabet?a..?z
, kemudian gunakane&s.chars==e
untuk memilih hanya yang memiliki semua karakter dalam string target dengan menggunakan persimpangan setwise. Mengembalikan daftar daftar.Cobalah online!
sumber
[R], 110 byte
Saya yakin masih golf
sumber
Japt ,
109 byteCobalah atau jalankan semua test case
sumber