Pangram adalah kalimat atau kutipan yang berisi semua dua puluh enam huruf alfabet, seperti yang ditunjukkan dalam tantangan golf kode ini . Namun, jendela pangrammatic adalah pangram dalam bentuk beberapa segmen teks, yang mungkin berakhir atau dimulai setengah kata, ditemukan di suatu tempat dalam karya yang lebih besar. Ini secara alami terjadi di mana-mana, menjadi himpunan bagian yang tepat dari pangram sejati, jadi hanya memverifikasi jika sesuatu yang berisi jendela pangrammatik akan membosankan dan juga sebelumnya dilakukan.
Jadi, kami tertarik untuk menemukan yang terkecil di bagian teks yang diberikan berdasarkan panjang hurufnya! Dalam kode sesingkat mungkin dalam byte, tentu saja, agar sesuai dengan tema.
Aturan dan Pedoman
- Terima string sebagai input dan kembalikan string jendela pangrammatic terkecil di input jika ada. Jika tidak ada, kembalikan Boolean False atau string kosong.
- Apakah string adalah jendela pangrammatik atau tidak, tidak peka huruf besar-kecil dan hanya tergantung pada 26 huruf, bukan tanda baca atau angka atau simbol aneh lainnya.
- Demikian pula, panjang huruf jendela pangrammatik adalah jumlah total berapa banyak penampilan huruf terjadi di dalamnya saja, dan bukan hanya jumlah setiap karakter. Nilai yang dikembalikan harus terkecil berdasarkan jumlah ini. Bagaimanapun, kita adalah ahli bahasa, bukan programmer.
- Akan tetapi, output dari jendela pangrammatik harus merupakan substring yang tepat dari input, yang mengandung huruf besar dan tanda baca yang sama, dll.
- Jika ada beberapa jendela pangrammatik terpendek dengan panjang huruf yang sama, kembalikan salah satunya.
Uji Kasus
'This isn't a pangram.'
==> False
'Everyone knows about that infamous Quick-Brown-Fox (the one who jumped over some lazy ignoramus of a dog so many years ago).'
==> 'Quick-Brown-Fox (the one who jumped over some lazy ig'
'"The five boxing wizards jump quickly." stated Johnny, before beginning to recite the alphabet with a bunch of semicolons in the middle. "ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ!" he shouted to the heavens.'
==> 'ABCDEFGHI;;;;;;;;;;;;;;;JKLMNOPQRSTUVWXYZ'
The five boxing wizards jump quickly
dikembalikan?Q
? Itu tidak menambah jumlah surat.Jawaban:
Pyth,
201614 bytePenjelasan:
Coba di sini!
Ketika tidak ada solusi yang benar, program keluar dengan kesalahan tanpa output ke stdout.
sumber
!-GrT0
Saya percaya juga lebih pendek untuk kondisi filter. Saya juga berpikir Anda perlul
untuk membuat pekerjaan semacam itu dengan benar.l
, dan tanpa itu Anda mendapatkan hasil yang berbeda . Saya percaya masalahnya adalah surat yang diulang, tapi saya tidak 100% yakin.Pyth - 22 byte
\ o / FGITW!
Test Suite .
sumber
Ruby, 100 byte
Mengembalikan nil jika tidak ada jendela yang ditemukan.
sumber
JavaScript (ES6),
139138136 byteDisimpan 2 byte berkat @Neil!
Bertakuk
sumber
[r=l="",...s].map((_,b,a)=>
?map
fungsi.PowerShell v2 +, 218 byte
Ya, manipulasi substring (tidak ada built-in) tidak benar-benar setelan kuat PowerShell ...
Kami mengambil input
param($a)
dan menetapkan hashtable kosong yang baru$z
. Ini akan menjadi tempat penyimpanan kami untuk substring pangrammatic kandidat.Menggunakan sedikit modifikasi pada kode saya dari Exploded Substrings , kami membangun semua substring dari input. Yap, bahkan substring hanya tanda baca satu karakter. Ini adalah kode-golf , bukan kode tercepat . ;-)
Semua substring tersebut dienkapsulasi dalam parens dan disalurkan ke loop lain dengan
|%{...}
. Kami sementara mengatur$y
untuk substring kami saat ini, mengatur counter helper$j
, dan memulai loop lain65..90|%{...}
, dengan mudah di atas kode karakter ASCII untuk huruf kapital. Setiap loop batin, kita ambil$y
, buat semuanya huruf besar, dan tarik.IndexOf
karakter khusus itu. Karena ini akan kembali-1
jika tidak ditemukan, kami+1
hasil sebelum mengalikannya menjadi$j
. Ini memastikan bahwa jika satu karakter tidak ditemukan,$j
akan sama dengan nol.Itulah tepatnya
if
tentang semua itu. Jika$j
tidak nol, itu berarti bahwa setiap huruf ditemukan setidaknya satu kali dalam substring$y
, jadi kita perlu menambahkannya ke kumpulan kandidat kami. Kami melakukannya dengan mengambil$y
dan-replace
memasukkan setiap non-huruf tanpa apa-apa, yang membuat kami sepanjang huruf dari substring itu. Kami menggunakannya sebagai indeks ke hashtable$z
dan menyimpan$y
di indeks itu. Ini memiliki kekhasan menimpa substring dengan panjang huruf yang sama dengan yang terjadi "paling jauh" dalam string asli, tetapi itu diizinkan oleh aturan, karena kami hanya peduli tentang panjang huruf.Akhirnya, kita perlu memilah
$z
dan menarik keluar yang terkecil. Kita harus menggunakan.GetEnumerator
panggilan untuk mengurutkan objek di dalam$z
, lalusort
yang diName
(yaitu, indeks panjang dari atas), memilih yang[0]
ke-1 (yaitu, yang terpendek), dan mengeluarkan.Value
(yaitu, substring). Jika tidak ada substring yang cocok, ini akan melemparkan kesalahan (Cannot index into a null array
) ketika mencoba untuk mengindeks$z
, dan tidak menghasilkan apa-apa, yang merupakan kesalahan dalam PowerShell. (test case ketiga di bawah ini memiliki pemeran eksplisit[bool]
untuk menunjukkan ini)Uji Kasus
sumber
Haskell, 180 byte
Ini sulit, tetapi sangat menyenangkan tanpa impor.
Apalagi golf:
Kejutan, kejutan: ini sangat lambat.
sumber
Oracle SQL 11.2, 461 byte
Tidak bermain golf
Itu
s
tampilan membagi masukan dalam karakter dan juga mengembalikan posisi masing-masing karakter.Tampilan rekursif
v
mengembalikan setiap substring dari inputs adalah substring
f posisi karakter pertama dari substring
l posisi karakter terakhir ditambahkan ke substring saat ini
Itu
c
tampilan mengembalikan alfabet, satu huruf pada suatu waktuThe
a
tampilan mengembalikan alfabet bersambung sebagai satu stringSELECT s,f,SUM(SIGN(INSTR(LOWER(s),c))
Pengembalian untuk setiap substring jumlah huruf berbeda yang ada di dalamnya
INSTR
mengembalikan posisi huruf dalam substring, 0 jika tidak adaSIGN
mengembalikan 1 jika pos> 0, 0 jika pos = 0WHERE x=26
Memfilter substring yang berisi seluruh alfabet
TRANSLATE(LOWER(s),' '||a,' ')
Menghapus setiap huruf dari substring
LENGTH(s)-NVL(LENGTH(TRANSLATE(LOWER(s),' '||a,' ')
Panjang dalam huruf adalah panjang substring dikurangi panjang subtring tanpa huruf
SELECT MIN(s)KEEP(DENSE_RANK FIRST ORDER BY LENGTH(s)-NVL(LENGTH(TRANSLATE(LOWER(s),' '||a,' ')),0))
Hanya menyimpan substring dengan jumlah huruf yang lebih kecil.
Jika ada lebih dari satu, yang pertama, diurutkan sebagai string naik, disimpan
sumber
Python 3,
171, 167, 163, 157, 149 byte.Disimpan 4 byte berkat DSM.
Disimpan 8 byte berkat RootTwo.
Harus mengurutkan berdasarkan jumlah surat membunuh saya.
Kasus uji:
sumber
.upper()
dibutuhkan dalam fungsi kunci.PowerShell (v4),
198156 byteUji Kasus
Penjelasan asli dari aslinya
Ini adalah loop bersarang yang kuat yang membuat jendela geser dari semua ukuran:
Untuk setiap jendela, ini memfilter hanya huruf (pencocokan regex case sensitif secara default), menjalankan karakter yang tersisa melalui filter unik, memeriksa apakah ada 26 karakter unik sebagai tes pangram.
Semua jendela dengan pangram diubah menjadi kembar tiga dari (jumlah huruf termasuk dupes, indeks mulai, panjang jendela termasuk tanda baca) , yang disortir untuk menemukan yang terpendek berdasarkan jumlah karakter keseluruhan, yang pertama diambil, dan string keluaran dibangun dari itu .
Ada banyak pengindeksan di luar batas string, yang PowerShell bermanfaat mengembalikan $ null, alih-alih melemparkan pengecualian.
NB. yang baru 156 byte adalah pendekatan yang sama, tetapi ditulis ulang untuk menggunakan pipa lebih banyak.
NB. tidak yakin versi ungolfed bekerja, karena saya tidak menulis itu maka golf, itu hanya untuk penjelasan.
sumber
Haskell, 123 byte
Menentukan fungsi
h
, yang mengembalikan daftar kosong jika tidak ada jendela pangrammatic atau daftar satu elemen dengan jendela minimum. Contoh penggunaan:Bagaimana itu bekerja:
sumber