Diberikan string yang hanya berisi huruf, menghasilkan panjang jangka terpanjang dari huruf alfabet berturut-turut berisi kata, di mana urutan tidak masalah. Contoh algoritma dapat mengurutkan kata, menghapus duplikat, dan kemudian menampilkan jangka waktu terpanjang.
Uji Kasus
watch -> 1
stars -> 3
antidisestablishmentarianism -> 3
backdoor -> 4
a -> 1
tutorials -> 4
Misalnya, antidisestablishmentarianism
berisi surat-surat abdehilmnstr
. Berjalan terpanjang adalah lmn
dan rst
, keduanya panjang 3.
Catatan
Anda dapat mengambil semua huruf kecil, semua huruf besar, atau huruf besar sebagai input, tetapi kasing tidak dapat menyandikan informasi tentang kata tersebut (yaitu, Anda tidak dapat membuat n
huruf pertama menjadi kapital di mana n
panjangnya jangka waktu terpanjang).
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
rst
- unikkan, urutkan dan dapatkan jangka panjang berurutan. Bisakah kita mengambil input sebagai array karakter?Jawaban:
Jelly ,
10 9 8 76 byteCobalah online!
9 menggunakan metode Sok :
ṢQẆẇƇØaṪL
Bagaimana?
sumber
R ,
4443 byteBekerja pada array karakter huruf kecil. Sunting: mengubahnya dari pengujian nilai True ke mengalikan dengan T / F untuk satu byte.
Cobalah online!
Melakukan pengkodean panjang run pada huruf-huruf yang ada dalam karakter yang disediakan kemudian mengembalikan nilai maksimal untuk true.
sumber
APL (Dyalog Classic) ,
109 byte-1 byte terima kasih kepada H.PWiz
Cobalah online!
⍞
masukan sebuah string⎕a
adalah alfabet bahasa Inggris huruf besar⎕a∊⍞
vektor boolean length-26 - huruf apa yang muncul dalam string?⊆⍨
membentuk vektor berturut-turut 1s≢⍉↑
campur menjadi matriks, transpos, dan kembalikan tingginya - secara efektif, temukan panjang vektor terpanjang 1ssumber
⌈/≢¨
->≢⍉↑
Perl 6 , 41 byte
Menguji
Diperluas:
Diberikan
'stars'
,.ords.sort.squish Z-0..*
akan kembali(97,113,113,113)
sumber
Haskell , 35 byte
Cobalah online!
Haskell , 50 byte
Cobalah online!
sumber
JavaScript (Node.js) , 51 byte
Kasus string input tidak masalah.
Cobalah online!
Bagaimana?
Kami pertama-tama mengonversi string masukan menjadi bitmask surat yang ditemui dengan:
Pergeseran bitwise diproses dengan modulo implisit 32.
Contoh:
Kami kemudian 'mengurangi' berturut-turut 1 dalam bitmask dengan berulang-kali DAN dengan itu bergiliran kiri sendiri sampai semua bit dihapus:
Jumlah huruf berurutan dalam urutan abjad adalah jumlah iterasi dari proses di atas. Maka fungsi rekursif:
sumber
Pyth , 9 byte
Input dianggap string huruf kecil. Cobalah online di sini , atau verifikasi semua uji sekaligus di sini .
sumber
y
di tempat.:
.MATL , 10 byte
Input dalam huruf kecil.
Cobalah online! Atau verifikasi semua kasus uji .
Ini menggunakan campuran pendekatan @ Sundar (lama) dan @ ngn .
Penjelasan
Pertimbangkan input
'tutorial'
sebagai contoh.sumber
Python 3 , 55 byte
Cobalah online!
Python 2 , 58 byte
Cobalah online!
Python 2 , 63 byte
Cobalah online!
sumber
f=lambda s:s and-~f({*s}&{c+1for c in s})or 0
?05AB1E , 6 byte
Œ...é
æ
Cobalah online!
Juga 6 byte
Disimpan 2 byte, sekali lagi terima kasih kepada Adnan : gunakan
ASå
sebagai gantinyaêÇ¥Θ
, sehingga juga menghilangkan kebutuhan untuk meningkatkan maksimum di akhir. Lihat riwayat revisi untuk membandingkan perilaku dua metode.Cobalah online!
Bagaimana cara kerjanya?
Saya suka tantangan seperti ini yang mengarah ke berbagai pendekatan yang berbeda.
sumber
êæAÃ`g
dan program kedua dapat di-golf keASåγOZ
.ASå
triknya.TSQL (Microsoft SQL Server), 206 byte
Untuk input, gunakan
DECLARE
pernyataan berikut sebelum kode:Diharapkan bahwa input adalah semua kasus yang sama (atas atau bawah tidak masalah, tetapi case campuran tidak akan bekerja).
Tidak Disatukan:
Penjelasan:
Pisahkan string menjadi baris aa untuk setiap karakter (diadaptasi dari /programming//a/27623321/1474939 ) di
CTE
cte.Kemudian, temukan run huruf berturut-turut dengan mengonversi kode ASCII di
Runs
cte.Terakhir, ia mengambil proses terbesar dan melaporkan kembali dalam pernyataan pilih.
sumber
C (gcc) ,
5856 byteDisimpan 2 byte berkat @gastropner
Menggunakan pendekatan yang sama dengan jawaban Node.js saya . Kasus string input tidak masalah.
Cobalah online!
Berkomentar
sumber
1<<*s
membungkus atau apakah itu perilaku standar?1<<32
menghasilkan0
dan mengeluarkan peringatan ukuran tipe data.C (gcc) , 100 byte
Cobalah online!
Penjelasan
Cobalah online!
sumber
MATL ,
1210 byteCobalah online!
Penjelasan:
91:
- Buat daftar angka dari 1 hingga 91. 91 adalah karakter '[', yang muncul setelah 'Z'. Jadi ini secara efektif membuat daftar semua karakter dari '\ x1' hingga '['. (Kami terutama menginginkan mereka yang berada dalam kisaran ['A'-1:' Z '+ 1], tetapi memiliki sisanya tidak sakit, dan membutuhkan lebih sedikit bytecount.)w
- Input implisit, bawa input ke atas tumpukan (asumsikan 'TUTORIALS')X-
- Atur perbedaan. Ini hanya menyisakan karakter yang tidak ditemukan dalam string input, dalam urutan aslinya ('stabil'). Tumpukan:' !"#$%&'()*+,-./0123456789:;<=>?@BCDEFGHJKMNPQVWXYZ['
d
- Perbedaan antara elemen yang berurutan dalam daftar itu. Tumpukan:[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 5 1 1 1 1 1]
X>
- Dapatkan maksimum dari perbedaan-perbedaan itu yaitu jumlah maksimum huruf berturut-turut hilang dari perbedaan yang ditetapkan.q
- Pengurangan untuk mendapatkan jumlah karakter yang sebenarnyaLebih tua:
12 byte
Cobalah online!
sumber
K (ngn / k) ,
1715 byteCobalah online!
-
apakah hanya ada untuk mengubah karakter menjadi angka (tidak masalah jika karakternya negatif){
}\
menerapkan fungsi sampai konvergensi, menjaga hasil antarax+1
tambahkan 1 ke setiap nomor dalamx
^
"tanpa" - daftar di sebelah kiri tanpa elemen yang muncul dalam daftar di sebelah kananx^x^x+1
berartix
berpotongan denganx+1
1_
drop elemen pertama#
menghitungsumber
#1_{x^x^x+1}\-
?Retina 0.8.2 , 54 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Urutkan surat ke dalam urutan.
Gandakan surat-surat itu.
Gandakan setiap huruf pada baris terpisah.
Kurangi yang pertama dari setiap pasangan.
Jika ini cocok dengan karakter sebelumnya, gabungkan kembali.
Hitung panjang semua lintasan.
Sortir dalam urutan angka terbalik.
Ambil yang pertama (terbesar).
sumber
J, 16 byte
-7 byte berkat FrownyFrog
Cobalah online!
penjelasan
sumber
]
sebagai pengganti~.@/:~
. Alfabet sudah diurutkan, jadi Anda tidak perlu mengurutkan input dan hanya menyimpan item unik. TIO - 18 byteC (gcc) ,
9892 byteTerima kasih kepada Jonathan Frech untuk sarannya.
Hanya huruf besar.
Cobalah online!
sumber
k;
di akhir. Pengembalian gcc implisit adalah efek samping dari penugasan variabel yang tampaknya dijalankan sebagai langkah terakhir dalam for loop Anda.Japt
-h
, 9 byteCase insenstive, mengambil input sebagai string atau array karakter.
Cobalah atau jalankan beberapa tes (baris kedua berfungsi sebagai pengganti
-h
flag sehingga flag dapat digunakan untuk memproses beberapa input sebagai gantinya)Penjelasan
sumber
-1
?Perl 5, 68 byte
Cobalah online .
Tidak Disatukan:
sumber
C (gcc) ,
666563 byteAsumsikan input hanya berisi huruf kecil. Pertama, loop atas string dan menetapkan bit dalam bilangan bulat sesuai dengan huruf yang terlihat. Selanjutnya, ia menghitung garis terpanjang 1 bit dalam integer.
Sunting:
a
bersifat global, jadi akan diinisialisasi ke 0 pada panggilan pertama. Loop kedua memastikan itu diatur ulang ke 0 sebelum kembali. Karena itu, kita dapat menghindari pengaturan ulang secara manual.Cobalah online!
sumber
Perl 5, 62 + 2 (
-nF
bendera) = 64 byteCobalah online .
Perl 5, 68 byte
Cobalah online .
sumber
-pF
dan-MList::Util+(max)
untuk mencapai 56: Cobalah online!-MList::Util=max
menambahkan 16 byte ke skor hasil.-MList::Util+(max)
-pF
, atau serupa. codegolf.meta.stackexchange.com/a/14339/9365SQLite 265
Tidak Disatukan:
sumber
Brachylog ,
141312 byteCobalah online!
Cukup lambat sehingga tidak selesai untuk input "antidisestablishmentarianism" pada TIO. Satu relatif lebih cepat untuk +1 byte:
13 byte
Cobalah online!
Gunakan
dos
bukannya⊇p
: S adalahd
eduplicated so
rteds
ubstring dari input, bukan hanya beberapa permutasi dari beberapa subset.sumber
Haskell , 87 byte
Cobalah online!
Diharapkan karakter huruf kecil
Penjelasan:
sumber
Python 2 , 95 byte
Cobalah online!
sumber
Pyth - 11 byte
Masukan harus dibungkus dengan tanda kutip. Jika tidak diizinkan:
Pyth - 12 byte
Penjelasan:
sumber
Kotlin , 97 byte
Cobalah online!
sumber
Java 8, 77 byte
Pelabuhan Arnauld 's C jawabannya . Cobalah online di sini .
Tidak Disatukan:
sumber
> <> , 63 byte
Membaca karakter huruf kecil dari stdin, menampilkan angka ke stdout.
Cobalah online!
sumber