pengantar
Seberapa banyak alfabet bahasa Inggris yang digunakan string? Kalimat sebelumnya menggunakan 77%. Ini memiliki 20 huruf unik (howmucftenglisapbdvr), dan 20/26 ≃ 0,77.
Tantangan
Untuk string input, kembalikan persentase huruf alfabet Inggris yang ada dalam string.
Jawabannya bisa dalam bentuk persentase atau dalam bentuk desimal.
String input dapat memiliki huruf besar dan kecil, serta tanda baca. Namun Anda dapat menganggap mereka tidak memiliki karakter diakritik atau aksentuasi.
Uji kasus
Memasukkan
"Did you put your name in the Goblet of Fire, Harry?" he asked calmly.
Beberapa output yang valid
77%, 76.9, 0.7692
Memasukkan:
The quick brown fox jumps over the lazy dog
Semua output yang valid:
100%, 100, 1
Output yang diharapkan untuk "@#$%^&*?!"
dan ""
adalah 0.
"@#$%^&*?!"
,""
77%
dan76.9
diterima, apakah77
diterima juga?Jawaban:
Python 3 , 42 byte
Cobalah online!
Kami memfilter semua karakter non-alfabet dari string dengan mengambil (set) perbedaan representasi huruf besar dan huruf kecil. Kemudian, kami mengambil panjangnya dan membaginya dengan 26.
Python 3 , 46 byte
Cobalah online!
Hitung karakter alfabet (huruf kecil) yang unik, dan bagi dengan 26. Dalam Python 2 dibutuhkan 3 karakter lagi; dua untuk mengubah
{*...}
menjadiset(...)
, dan satu untuk membuat 26 float:,26.
untuk menghindari pembagian lantai.Python 3 , 46 byte
Cobalah online!
Panjang yang sama, pada dasarnya sama dengan yang sebelumnya, tetapi tanpa metode string "bawaan".
sumber
1.0
dan tidak1
? (Saya tidak ingin secara khusus melarangnya sehingga tidak akan merugikan bahasa tertentu, tapi saya penasaran)//
, tetapi kemudian akan selalu divisi integer, yang jelas bukan yang kita inginkan di sini. Masuk akal bahwa mereka tidak membuat tipe data output tergantung pada nilai spesifik operan, yang berarti selalu mengapung, bahkan jika itu bilangan bulat.MATL , 8 byte
Cobalah di MATL Online
Penjelasan
sumber
Oktaf / MATLAB, 33 byte
Cobalah online!
Penjelasan
sumber
05AB1E ,
876 byte-1 byte terima kasih kepada @LuisMendo .
Cobalah secara online atau verifikasi beberapa kasus uji lagi .
6 byte alternatif yang disediakan oleh @Grimy :
Cobalah secara online atau verifikasi beberapa kasus uji lagi .
Output kedua program sebagai desimal.
Penjelasan:
sumber
láêg₂/
juga 6-byter.C # (Visual C # Interactive Compiler) ,
5649 byteCobalah online!
-6 byte terima kasih untuk innat3
sumber
&&
ke&
.APL (Dyalog Extended) , 10 byte SBCS
Fungsi awalan diam-diam anonim. Mengembalikan pecahan desimal.
Cobalah online!
⌈
huruf besar⎕A∩
persimpangan dengan huruf besar A lphabet≢
jumlah penghitungan∘
kemudian26÷⍨
bagi dengan dua puluh enamsumber
⌹∘≤⍨⎕A∊⌈
Perl 6 ,
2724 byte-3 byte terima kasih kepada nwellnhof
Cobalah online!
sumber
.lc
akan bekerja juga), dari sudut pandang "benar",.fc
mungkin lebih baik (terutama jika tantangannya memiliki huruf non-Inggris)Bash and Gnu utils (
8178686042 bytes)-8 byte terima kasih kepada @wastl
-18 byte terima kasih kepada Nahuel menggunakan beberapa trik yang saya tidak tahu:
sort -f
dangrep -i
abaikan casesort -u
adalah pengganti untuk| uniq
sumber
echo $(tr A-Z a-z|tr -cd a-z|fold -1|sort -u|wc -l)/26|bc -l
K (oK) ,
1915 byteLarutan:
Cobalah online!
Penjelasan:
Ubah input menjadi huruf kecil, modulo 97 ("az" adalah 97-122 di ASCII, modulo 97 memberi 0-25), ambil unik, jumlahkan hasil yang lebih rendah dari 26, dan konversikan ke persentase 26.
Catatan:
1-%[;26]
=>1-1%26%
#(!26)^
=>+/26>?
sumber
97
dilakukan di sini%[;26]
->1%26%
1%26%#?(26>)#97!_
1%26%+/26>?97!_
untuk 15PowerShell ,
5552 byteCobalah online!
Upaya pertama, masih mencoba ide-ide acak
EDIT: @Veskah menunjukkan ToUpper menyimpan byte karena rentang nomor, juga menghapus ekstra
()
dan spasiEkspansi:
($args|% ToUpper|% ToCharArray|sort|get-unique|where{$_-in 65..90}).count/26
Perubahan string untuk semua
yang lebih rendahhuruf besar, memperluas ke array, macam elemen dan memilih huruf yang unik (gu membutuhkan masukan diurutkan), tetap hanya karakter dari nilai ascii97-122 (a sampai z)65-90 (A ke Z), hitung total dan bagi dengan 26 untuk output desimalsumber
R , 47 byte
Cobalah online!
Konversi ke huruf besar kemudian ke titik kode ASCII, dan periksa nilai 65:90 yang sesuai dengan A: Z.
sumber
scan
untuk tidak terpecah pada tanda kutip, seperti default?Retina 0.8.2 , 45 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Huruf kecil dan hapus tanda baca.
Deduplicate.
Kalikan dengan 100.
Tambahkan 13.
Bilangan integer sebesar 26 dan dikonversi ke desimal.
sumber
APL (Dyalog Extended) , 8 byte
Cobalah online!
longgar berdasarkan jawaban Adm
⌈
huruf besar⎕A∊
boolean (0 atau 1) vektor dengan panjang 26 yang menunjukkan huruf dari bahasa Inggris A lphabet berada dalam string⌹∘≤⍨
rata-rata aritmatika, yaitu pembagian matriks dari argumen dan vektor semua-1 dengan panjang yang samasumber
Arang , 11 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Output adalah sebagai desimal (atau
1
untuk pangrams). Penjelasan:sumber
Batch, 197 byte
Mengambil input pada STDIN dan menghasilkan persentase bulat. Penjelasan:
Masukkan string.
Hapus kutipan, karena mereka sakit kepala untuk berurusan dengan di Batch.
Mulailah dengan setengah huruf untuk tujuan pembulatan.
Hapus setiap huruf pada gilirannya dari string. Aktifkan subrutin untuk memeriksa apakah ada yang berubah, karena cara Batch mem-parsing variabel.
Hitung hasilnya sebagai persentase.
Mulai dari subrutin.
Jika menghapus surat, mengubah string maka menambah jumlah surat.
sumber
Pepe ,
155138 byteCobalah online! Output dalam bentuk desimal.
Penjelasan:
sumber
K (oK) , 19 byte
Cobalah online!
J , 30 byte
Cobalah online!
sumber
32!
terlalu luas - itu membuat sisa ekspresi memperlakukan beberapa tanda baca sebagai huruf, misalnya coba tambahkan:
dalam contoh inputRetina ,
574635 byte-11 bytes mengambil inspirasi dari @ Neil trik 's menambahkan unary 13 sebelum membagi .
Lain -11 byte berkat @Neil secara langsung.
Rounds (benar) ke seluruh bilangan bulat.
Cobalah online.
574640 byte versi yang bekerja dengan output desimal:Sama-11 byte serta tambahan -6 byte berkat @Neil .
15.3
15.4
Cobalah online.
Penjelasan:
Ubah semua huruf menjadi huruf kecil:
Hapus semua bukan huruf:
Uniquify all letters:
Ganti setiap huruf unik dengan 1000 garis bawah:
Hitung jumlah kali 26 garis bawah yang berdekatan masuk ke dalamnya:
Masukkan titik di tempat yang benar:
sumber
.*
hanya bisa.
untuk penghematan 1 byte, tetapi Anda dapat menyimpan lain 10 byte dengan menggunakanD
eduplicate bukannya melakukan secara manual!D
-builtin, terima kasih! Dan tidak yakin mengapa saya menggunakan.*
bukan.
.. Terima kasih untuk -11 byte di kedua versi! :)-1`\B
cocok dengan posisi penyisipan yang diinginkan secara langsung.Java 8,
6259 byte-3 byte terima kasih kepada @ OlivierGrégoire .
Cobalah online.
Penjelasan:
sumber
c&95
dalam kombinasi denganc%91>64
beberapa alasan. Saya pikir Anda sudah menyarankan golf itu beberapa kali sebelumnya kepada saya.s->{int r=0,b=0;for(var c:s)if((c&95)%91>64&&b<(b|=1<<c))r++;return r/26.;}
(75 byte)Julia 1.0 , 34 byte
Menggunakan versi vektor dari operator ∈, memeriksa isi dalam string untuk semua karakter dalam rentang dari a hingga z. Kemudian jumlahkan BitArray yang dihasilkan dan bagi dengan jumlah total huruf yang mungkin.
Cobalah online!
sumber
C, 96 byte
Cobalah online!
sumber
Perl 5
-MList::Util=uniq -p
, 24 byteCobalah online!
sumber
Stax , 9 byte
Jalankan dan debug itu
sumber
u
dan menggunakan|b
, tetapi penghematannya hilang saat dikemas. Saya mungkin memiliki 8-byter, tetapi penerjemah online menjadi aneh dan buggy.|b
. Itu salah mengubah operan daripada membuat salinan. Saya telah membuat masalah github untuk bug tersebut. github.com/tomtheisen/stax/issues/29 Sebagai solusinya,|b
akan berfungsi dengan benar pertama kali. Setelah itu, Anda mungkin harus memuat ulang halaman tersebut. Jika Anda menemukan bug yang berbeda, jika Anda dapat memberikan reproduksi, saya mungkin akan dapat memperbaikinya.v
di awal, masukkan|b
setelahVa
, jalankan, hapus yang pertamav
, hapus|b
, bungkus ulang. Yap, itulah bug yang saya temukan.Jelly , 8 byte
Cobalah online!
Penjelasan
sumber
JavaScript (Node.js) , 45 byte
Cobalah online!
JavaScript (Node.js) , 47 byte
Cobalah online!
sumber
Python 3 ,
5149 byte51 -> 49 byte, terima kasih kepada alexz02
Cobalah online!
sumber
lambda s:len({*filter(str.isalpha,s.lower())})/26
Japt , 9 byte
Cobalah
sumber
Python 2 , 57 byte
Cobalah online!
Sedikit lebih lama dari jawaban Python 3 dari ArBo tetapi diposting sebagai pendekatan yang berbeda dalam Python 2 pula.
sumber
Ruby
-n
,3834 byte-4 byte dari @historcrat!
Cobalah online!
sumber
C, 95 byte
(catatan: bulat ke bawah)
Versi pengembalian-desimal alternatif (95 byte):
Ini meminjam sebagian dari jawaban @Steadybox '.
sumber