Dalam tipografi, penghitung adalah area surat yang seluruhnya atau sebagian tertutup oleh bentuk huruf atau simbol. Counter tertutup adalah counter yang seluruhnya tertutup oleh bentuk huruf atau simbol. Anda harus menulis sebuah program mengambil string sebagai input dan mencetak jumlah total penghitung yang ditutup dalam teks.
Masukan Anda:
Mungkin input baris perintah, atau dari STDIN, tetapi Anda harus menentukan yang mana.
Akan sepenuhnya terdiri dari karakter ASCII yang dapat dicetak, yang berarti semua nilai ASCII antara 32 dan 126 inklusif. Ini termasuk spasi. Informasi lebih lanjut
Sekarang, ini sedikit berbeda antar font. Misalnya, font yang Anda baca ini menganggap 'g' memiliki satu penghitung tertutup, sedangkan font google memiliki 'g' dengan dua penghitung tertutup. Agar ini bukan masalah, berikut adalah jumlah resmi penghitung tertutup per karakter.
Semua simbol tanpa penghitung tertutup:
!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~
Perhatikan bahwa ini termasuk ruang.
Berikut semua simbol dengan satu penghitung tertutup:
#0469@ADOPQRabdegopq
Dan di sini ada semua simbol dengan 2 penghitung tertutup:
$%&8B
Dan yang tak kalah pentingnya, berikut adalah beberapa contoh input dan output.
Programming Puzzles and Code-Golf
harus dicetak 13
4 8 15 16 23 42
harus dicetak 5
All your base are belong to us
harus dicetak 12
Standard loopholes apply
harus dicetak 12
Shortest answer in bytes is the winner!
harus dicetak 8
g
memiliki dua penghitung tertutup. Apakah Anda menentukan penghitung berdasarkan font tertentu?g
memiliki 2. Sedikit membingungkan untuk dibaca, tapi saya tidak berpikir itu berbeda dengan lokasi.0
memiliki 2 penghitung tertutup dalam font tertentu, terutama banyak font monospace?Jawaban:
Pyth, 31 byte
Demonstrasi.
Perhatikan bahwa kode mungkin tidak ditampilkan dengan benar karena penggunaan karakter non-ASCII. Kode yang benar ada di tautan.
Saya membuat tabel pencarian dari output yang diinginkan untuk setiap karakter input, memutarnya dengan 32 untuk menggunakan pengindeksan modular Pyth, terjebak 1 di awal, dan menafsirkannya sebagai basis 3 nomor, memberikan nomor
2229617581140564569750295263480330834137283757
. Saya kemudian mengonversi angka ini ke basis 256 dan mengonversinya menjadi string, yang merupakan string yang digunakan dalam jawabannya.sumber
Python 3, 63
Pendekatan langsung. Iterasi setiap karakter dengan penghitung tertutup, jumlahkan jumlah kemunculannya, lakukan dua kali untuk karakter dengan dua penghitung tertutup. Itu akan menjadi panjang yang sama untuk menulis
Python 3 diperlukan untuk menghindari
raw_input
.sumber
CJam,
41393734 byteTerima kasih kepada @ jimmy23013 untuk bermain golf 3 byte!
Cobalah online.
Bagaimana itu bekerja
sumber
"$%&8Badopq#0469@Rbeg"_A<eu+
.eu
danel
, tetapi saya tidak pernah menemukan itu. Terima kasih!sed, 51
Dengan bantuan golf dari @manatwork dan @TobySpeight:
Masukan dari STDIN. Dengan mengingat meta-pertanyaan ini , hasilnya tidak sama:
sumber
Perl, 41
41
karakter +1 untuk-p
bendera.Ini menggunakan y /// untuk menghitung karakter.
sumber
GNU APL, 39 byte
Cobalah secara online di GNU APL.js .
Bagaimana itu bekerja
sumber
JavaScript, 86
I / O melalui sembulan. Jalankan cuplikan di
dbrowser terbaru apa saja untuk menguji.sumber
K,
54434237 bytePotong 5 byte berkat @JohnE!
Versi yang lebih lama:
Asli:
sumber
#&
dalamnya bisa dengan mudah+/
, yang berarti Anda bisa melangkah lebih jauh+//"#0469@ADOPQRabdegopq$%&8B$%&8B"=\:
. Akhirnya, tidak perlu memilikif:
karena fungsi dapat digunakan dalam bentuk diam-diam. Itu akan membawa Anda ke 38!+//(30#"$%&8B#0469@ADOPQRabdegopq")=\:
. Ini mungkin yang terbaik yang bisa kita lakukan.+//(30#"$%&8B#0469@ADOPQRabdegopq"=)'
C, 127 byte
Cukup mudah. Versi tidak disatukan:
Uji di sini
Jika argumen fungsi tidak diizinkan, maka
stdin
versi tersebut membutuhkan hingga 141 byte:Perhatikan bahwa versi di atas mengasumsikan bahwa input paling panjang 98 karakter.
Uji di sini
Versi argumen baris perintah (143 byte):
Uji di sini
sumber
Python 2,
96907567 + 2 = 69 BytesTidak dapat memikirkan cara lain untuk melakukan ini ... adalah apa yang akan saya pikirkan sampai saya melihat solusi xnor. Saya akan memposting apa yang saya miliki.
Terima kasih kepada FryAmTheEggman karena telah menghemat 6 byte
Baiklah, sekarang saya senang dengan ini.
Terima kasih kepada xnor untuk trik menemukan, menghemat 4 byte.
Menambahkan dua byte karena input harus dilampirkan dalam tanda kutip.
sumber
Jawa, 162
Nah kalau sudah menjadi program penuh ... Ini hanya satu-kapal yang pertandingan karakter dan menggantikan mereka dengan string lagi. Kemudian, kembalikan perbedaan panjang dari yang asli. Sayangnya, java tidak benar-benar memiliki apa-apa untuk hanya menghitung jumlah pertandingan.
Ini dia dengan jeda baris:
sumber
Pyth - 35 byte
Menggunakan metode yang jelas dalam + pertama * 2 dalam detik. Terima kasih @FryTheEggman.
Coba di sini online .
sumber
Javascript,
11495 byteTerima kasih kepada Ismael Miguel karena membantu saya bermain golf ini.
sumber
alert(prompt().replace(/[#046@ADOPQRabdegopq]/g,9).replace(/[$%&8B]/g,99).match(/9/g).length)
Ruby, 59 byte
Masukan dari baris perintah atau stdin. Terpendek sejauh ini menggunakan bahasa non-esoterik.
Perbarui: chilemagic mengalahkan saya
sumber
Retina , 44 byte
Memberikan output secara unary.
Setiap baris harus menuju ke file sendiri atau Anda dapat menggunakan
-s
bendera. Misalnya:Pasangan garis (pola - pasangan pengganti) melakukan langkah-langkah substitusi berikut:
1
's1
11
1
'ssumber
J, 43
Sebagai fungsi:
46 byte (baris perintah)
Sebagai program baris perintah mandiri:
Simpan baris di atas sebagai
counter2.ijs
dan panggil dari baris perintah:sumber
f=:your_function_code
.Julia,
7774 byteIni membaca teks dari STDIN dan mencetak hasilnya ke STDOUT.
Penjelasan + tidak dikumpulkan:
Contoh:
sumber
rs , 56 byte
Demo langsung.
sumber
GNU APL, 37 karakter
membangun vektor karakter yang berisi karakter 2-counter dua kali (30⍴)
bandingkan setiap karakter input dengan setiap karakter dalam vektor (∘. =)
jumlah pertandingan yang terurai (+ /,)
sumber
Javascript
159, 130 Bytestidak dijinakkan:
Dengan bantuan @ edc65:
sumber
~ -1 == 0
, Anda dapat menulis~x?
alih-alih-1 != x?
. Lihat saya menjawab untuk contoh penggunaan.function c(b){return b.split('').reduce(function(t,a){return t+(~"$%&8B".indexOf(a)?2:~"#0469@ADOPQRabdegopq".indexOf(a)?1:0)},0)}
Tidak perlu memilikimap
kemudianreduce
Haskell, 117
c adalah fungsi
c :: Int -> String -> Int
yang mengambil penghitung dan string dan melewati string satu huruf pada suatu waktu memeriksa apakah huruf saat ini adalah anggota dari array 1 point atau array 2 point dan memanggil dirinya sendiri untuk sisa string setelah penambahan menghitung jumlah yang sesuai.Panggilan dengan penghitung = 0 dalam ghci:
sumber
C #, 157
Tidak Disatukan:
Mengubah string menjadi array char, lalu melihat apakah masing-masing char ada di counter. Jika ada di yang kedua, saya hanya perlu menambah counter lagi.
sumber
Erlang, 103 byte
Ini adalah program lengkap yang berjalan menggunakan eskrip. Baris pertama file harus kosong (menambahkan 1 byte).
Contoh dijalankan:
sumber
C, 99 byte
Penjelasan
Saya lebih lanjut menerangkan jawaban dari Cool Guy ; terlalu lama untuk menjadi komentar. Alih-alih
if
/else
, saya mengambil keuntungan dari!
mengkonversi pointer ke bool. Saya juga membuato
includet
agar saya bisa menambahkan "is ino
" dan "is int
" untuk jumlah total penghitung.Kode diperluas
Output dalam
num
, yang harus dibersihkan sebelum setiap panggilan.Program uji dan hasil
Kode itu sendiri berisi 37 penghitung dengan metriknya sendiri.
sumber