Tantangan
Tulis program yang, diberi string x
yang panjangnya 10 karakter dan sebuah karakter y
, menampilkan berapa kali karakter y
muncul dalam string x
.
Program terpendek dalam byte yang berhasil akan menang.
Contoh
Input: tttggloyoi, t
Output: 3
Input: onomatopoe, o
Output: 4
Jawaban:
Pyth, 3 byte
Contoh dijalankan:
Tentu saja, pengguna dapat memasukkan lebih dari 10 huruf pada input pertama, tetapi kita tidak perlu khawatir tentang apa yang terjadi ketika pengguna melanggar spesifikasi.
sumber
/
hanya menghitung jumlah kemunculan dalam string input pertama dari string input kedua.w
mengambil jalur input.Pyth - 3 byte
Jawaban Pyth yang berbeda, kurang jelas, dengan ukuran yang sama. Ini melipat penghitungan input.
Test Suite .
sumber
JavaScript, 32
sumber
Bash, 24 karakter
Contoh dijalankan:
sumber
Retina , 12 byte
Cukup regex yang cocok dengan karakter yang sama dengan karakter terakhir dalam input (kecuali dirinya sendiri). Saat diberi regex tunggal, Retina hanya mengembalikan jumlah kecocokan.
sumber
Labyrinth ,
32292724 byteIni membaca karakter tunggal terlebih dahulu, diikuti oleh string yang digunakan untuk menghitung, dan mengasumsikan bahwa tidak ada null-byte dalam string.
Penjelasan
Kode dimulai dengan
),}
, yang mengatur bagian bawah tumpukan1
, membaca karakter pertama dan memindahkannya ke tumpukan tambahan untuk digunakan di masa mendatang. The1
akan menjadi kontra kami (offset dari 1 akan dibatalkan kemudian dan diperlukan untuk IP bergiliran yang diperlukan).IP sekarang akan bergerak turun untuk membaca karakter pertama dari string pencarian
,
. Nilai dinegasikan dengan`
, sekali lagi untuk mendapatkan perilaku belok yang benar. Sementara kita membaca karakter dari STDIN, IP sekarang akan mengikuti loop ini:{:}
membuat salinan kode karakter yang disimpan dan+
menambahkannya ke nilai saat ini. Jika hasilnya0
(yaitu karakter saat ini adalah yang kita cari), IP bergerak lurus ke depan:-
cukup singkirkan0
,)
tambah penghitung,{}
adalah no-op.Namun, jika hasil setelahnya
+
adalah nol, kami tidak ingin menghitung karakter saat ini. Jadi IP mengambil belokan kanan sebagai gantinya. Itu jalan buntu, sehingga kode di sana dieksekusi dua kali, sekali ke depan dan sekali ke belakang. Artinya, kode aktual dalam hal ini menjadi);___;)+-){}
.);
hanya menghilangkan perbedaan yang tidak nol itu,___
mendorong 3 angka nol, tetapi;
membuang salah satunya.)
menambah satu dari dua nol yang tersisa,+
menambahkannya ke dalam satu1
,-
menguranginya dari penghitung dan)
menambah penghitung. Dengan kata lain, kami telah membuat no-op yang sangat rumit.Ketika kita menekan EOF,
,
mendorong-1
, yang`
berubah menjadi1
dan IP mengambil belokan ke kanan.-
kurangi1
dari penghitung (membatalkan offset awal).!
mencetak penghitung dan@
mengakhiri program.sumber
Python 3, 29 byte
Meh, ini mudah. Mengasumsikan input adalah string sepuluh huruf.
sumber
f=lambda x,y:x.count(y)
lebih pendek? (Maaf jika ini tidak berhasil, saya menggunakan ponsel dan tidak dapat memeriksa)print input().count(input())
ataua,b=input();print a.count(b)
dengan jumlah yang samaSnowman 1.0.2 , 16 karakter
Sangat pendek. Penjelasan:
sumber
C ++ Template-Metaprogramming,
160154116 byteHanya untuk cekikikan.
Terima kasih kepada mantan bart untuk bermain golf!
Penggunaan: Karakter pertama di instanciation template adalah karakter untuk dicari.
Complile dengan dentang -std = c ++ 11 -c -> hasilnya ada di awal pesan kesalahan.
Complile dengan gcc -std = c ++ 11 -c -> hasilnya ada di bagian bawah pesan kesalahan.
Cari A < 3 , 't', '\ 000'> dan A < 3 , 't', '\ x00'>
Versi 154 byte
Versi 160 byte:
sumber
((x==y)?1:0)
menjadi hanya(x==y)
untuk menghemat sekitar 6 byte (saya pikir).bool
untukint
konversi.enum
bukanstatic const
. Gunakan0
alih-alih'\0'
untuk mengakhiri. Gunakanint
sebagai gantichar
. Gunakan deklarasi yang sedikit berbeda untuk memulai. Hapus baris superflouos.template<int w,int x,int y,int...s>class A{enum{a=A<w+(x==y),x,s...>::a};};A<0,'t','t','t','t','g','g','l','o','y','o','i',0>a;
. Diperiksa dengan g ++ dan dentang.Bash + grep, 26 byte
sumber
Javascript (ES6), 26 byte
Solusi cepat dan mudah ini mendefinisikan fungsi anonim. Untuk menggunakannya, tambahkan deklarasi variabel ke awal. Cobalah:
Tampilkan cuplikan kode
EDIT: Oh, saya melihat ada solusi yang sangat mirip. Saya harap tidak apa-apa.
sumber
Haskell, 21 byte
sumber
C ++, 78 byte
Panggil seperti ini:
sumber
Elemen , 23 byte
Baris baru adalah bagian dari program. Saya sebenarnya menggunakannya sebagai nama variabel .
Program ini pada dasarnya bekerja dengan menyimpan karakter target dalam variabel, menjaga string saat ini di atas tumpukan, dan kemudian mengulangi proses "memotong, membandingkan, dan memindahkan hasil di bawah", menambahkan hasil pada akhirnya.
Baris baru sebagai nama variabel berasal dari penggunaan baris baru di akhir input dengan memotongnya dan menyimpannya. Baris baru dalam kode adalah tempat saya membacanya.
Inputnya seperti ini:
Outputnya seperti ini
sumber
Julia,
2625 byteThe
findin
mengembalikan fungsi indeks pada argumen pertama di mana argumen kedua ditemukan sebagai vektor. Panjang vektor adalah jumlah kemunculannya.Disimpan satu byte berkat Glen O.
sumber
endof
akan menghemat byte di tempatlength
.APL,
73 byteIni menciptakan fungsi kereta. Ini bekerja dengan membuat vektor nol dan yang sesuai dengan indeks di mana karakter muncul di string (
⍷
). Vektor kemudian dijumlahkan (+/
).Disimpan 4 byte berkat kirbyfan64sos dan NBZ!
sumber
+/⍷
itu (saya tidak tahu APL, jadi saya mungkin salah).Perl,
2116 karakter(13 karakter kode + 3 opsi opsi perintah karakter.)
Contoh dijalankan:
sumber
<>
!-l
dan memastikan bahwa input Anda tidak memiliki baris baru:echo -en 'onomatopoe\no' | perl -pe '$_=eval"y/".<>."//"'
perl -pe '$_+=s/${\<>}//g'
+=
dibutuhkan?=
tampaknya bekerja dengan baik (dan masih harus bekerja ketika input dimulai dengan beberapa digit).PHP,
3635 bytePenggunaan:
Panggil skrip dengan dua argumen.
php script.php qwertzqwertz q
PHP, 23 byte
Jika Anda mendaftarkan Variabel global (hanya mungkin dalam PHP 5.3 dan di bawah) Anda dapat menyimpan 12 byte (terima kasih kepada Martijn )
Penggunaan:
Panggil skrip dan deklarasikan variabel global
php script.php?a=qwertzqwertz&b=q
sumber
script.php?a=qwertzqwertz&b=q
, dan lakukan<?=substr_count($a,$b);
, 23 charsDyalog APL , 3 byte
Yaitu "Jumlah byte yang sama". Misalnya:
atau hanya
K tidak mengalahkan APL kali ini.
Cobalah online.
sumber
T-SQL,
9940 BytesSederhananya perbedaan antara string input dan string dengan karakter dihapus. Mengambil input dari tabel t
Edit diubah untuk menghapus masalah dengan penghitungan spasi dan untuk memperhitungkan input SQL saat ini yang dapat diterima. Terima kasih @BradC untuk semua perubahan dan penghematan
sumber
SELECT LEN(s)-LEN(REPLACE(s,c,''))FROM t
, di manat
tabel input pra-diisi dengan bidangs
danc
.A B C D
yang berakhir pada spasi (jika Anda diminta untuk menghitung spasi), karenaLEN
mengabaikan spasi tambahan.space
masalah ketika saya punya sedikit waktuSELECT 11-LEN(REPLACE(s,c,'')+'x')FROM t
Oktaf / Matlab, 33 byte
sumber
J, 5 byte
Saya merasa J akan memiliki built-in untuk ini, tetapi saya belum dapat menemukannya - mungkin salah satu pengguna J aktif dapat mencerahkan saya. Jadi alih-alih ini pertama berlaku
=
untuk input, mengubah setiap karakter menjadi1
jika itu sama dengan yang diminta atau0
sebaliknya. Kemudian+/
hitung jumlah dari daftar itu.sumber
File Batch, 121 Bytes
Karena aku seorang masokis ...
Peringatan: Diasumsikan itu
_
tidak terjadi pada string input. Jika ya, maka variabele
perlu disesuaikan dengan benar.Ini mengatur variabel penghitung kami
c
,, dan demarkasi akhir string kami sebagai_
, sebelum menambahkannya ke string input kami%1
dan mengatur string yang digabungkan ket
. Kemudian, kita memasuki loop:l
, kita menetapkan variabel karakter sementaraa
menjadi karakter pertamat
, periksa apakah cocok dengan string input kedua%2
dan kenaikanc
jika benar, kemudian pangkas karakter pertamat
. Kondisi end-of-loopt
kami memeriksa demarkasi end-of-string kami, dan loop kembali jika tidak. Kami kemudianecho
keluar nilai counter kami.Mungkin akan mungkin untuk menggunakan
FOR
loop sebagai gantinya, tetapi itu akan mengharuskan mengaktifkan DelayedExpansion , yang saya pikir sebenarnya akan lebih lama byte-bijaksana daripada ini. Verifikasi itu dibiarkan sebagai latihan untuk pembaca.sumber
CJam, 5 byte
Penjelasan
sumber
PowerShell, 32 Bytes
Empat untuk satu! Dan mereka semua memiliki panjang yang sama! :)
atau
Kalau tidak,
atau
Dua gaya pertama menggunakan operator sebaris
-split
, sedangkan dua gaya kedua secara implisit melemparkan argumen pertama sebagai String dan menggunakan.Split()
operator berbasis string. Dalam semua kasus, sebuah array dikembalikan, di mana kita harus mengurangi Hitungan satu, karena kita mendapatkan kembali satu item array lebih banyak daripada kemunculan argumen kedua.Yang ini agak menyenangkan ...
sumber
Julia, 21 byte
Perhatikan bahwa ini membutuhkan
c
karakter char, bukan string karakter tunggal. Jadi Anda menggunakannya sebagaif("test me",'e')
(yang mengembalikan 2) dan tidakf("test me","e")
(yang mengembalikan 0, karena'e'!="e"
).sumber
> <> (Ikan) , 30 byte
Mengambil string, lalu karakter untuk dihitung. Masukan tidak terpisahkan (setidaknya dalam juru bahasa online). Cobalah di penerjemah online: http://fishlanguage.com Saya menghitung byte dengan tangan, jadi beri tahu saya jika saya salah.
Penjelasan
Pertama,> <> adalah 2 dimensi dan dan loop melalui garis atau kolom hingga menyentuh
;
atau kesalahan. Ini berarti bahwa jika itu berjalan dari kiri ke kanan (seperti yang dilakukannya pada awal program), itu akan membungkus garis jika mencapai akhir dan tidak dipindahkan atau disuruh menghentikan program. Beberapa karakter per baris akan diulang karena mereka memiliki fungsi yang berbeda tergantung pada arah pointer, dan baris keempat akan memiliki karakter dalam urutan terbalik karena pointer bergerak ke kanan ke kiri.Ringkasan program disediakan di bawah ini. Lihatlah instruksi yang tercantum untuk> <> pada esolang untuk melihat apa yang dilakukan masing-masing karakter.
Baris 1:
0&v
Baris 2:
=?\ilb
(mulai dari mana baris 1 memindahkan pointer ke, yaitu karakter ketiga)
baris 3:
=?\:@=&+&l1
(mulai dari karakter ketiga)
Baris 4:
n&/;
(mulai dari karakter ketiga)
sumber
Ruby,
2220 byteDemo: http://ideone.com/MEeTd2
Ini
-1
karena fakta yanggets
mengambil input, ditambah karakter baris baru. RubyString#count
menghitung berapa kali karakter apa pun dari argumen muncul dalam string.Misalnya, untuk input [
test\n
,t\n
],t
terjadi dua kali dan\n
terjadi sekali, dan perlu dikurangi.sumber
$><<
dan mengurangi 4 byte.p gets.count(gets)-1
Ruby, 18 byte
Pemakaian:
sumber
Japt , 2 byte
Cobalah online!
sumber