Ayah saya adalah seorang pensiunan guru, dan ia biasa memberikan gabungan kuis ejaan dan matematika, di mana siswa akan mengeja kata, dan kemudian 'menilai' kata itu dengan menjumlahkan huruf-hurufnya, di mana a = 1, b = 2, dll. (mis. kucing = 3 + 1 + 20 = 24). Ini membuat penilaian kuis lebih mudah, karena dia hanya perlu memeriksa 'skor' yang salah daripada kata-kata yang dieja salah, dan memiliki manfaat tambahan dengan menguji 2 keterampilan sekaligus.
Dia menyewa seorang teman saya untuk menulis sebuah program yang akan mencetak kata-kata untuknya, sehingga dia dapat menghasilkan kunci jawaban yang panjang tanpa kesalahan. Masalah ini terinspirasi oleh program itu.
Persyaratan:
- Terima kata apa pun dengan huruf besar dan kecil
- Kembalikan kesalahan untuk setiap karakter khusus, yaitu spasi, tanda hubung, @ ^% # dll.
- a = 1, b = 2, ... dan A = 1, B = 2, ...
- Cetak skor kata
- (Opsional) periksa apakah kata itu ada di kamus setelah mencetak, dan cetak peringatan jika tidak.
- Tidak mengimpor kamus huruf-> angka eksternal. Anda harus membuatnya sendiri.
Bahasa apa pun bisa diterima. Ini mirip dengan ' pertarungan root digital ', tetapi jauh lebih sederhana.
code-golf
tag.aaaaaaaaaaaaaaaaaaaaaaaa
. Ayah: Skor 24? Betul!Jawaban:
Golfscript - 23 karakter
Pastikan tidak ada baris baru di input (mis. Gunakan
echo -n
).sumber
echo -n
benar-benar tidak dihitung sebagai pemfilteran eksternal - sebenarnya jawaban yang Anda tautkan menunjukkannya sebagai bentuk input yang valid.Brainf *** (100)
Namun saya harus mengakui, ini tidak sepenuhnya memenuhi semua persyaratan. Pertama, itu hanya menerima huruf besar, dan kata itu harus diakhiri dengan tab. Ini memiliki perilaku yang tidak ditentukan untuk karakter yang tidak valid, dan tidak menimbulkan kesalahan. Ini menampilkan jumlah huruf sebagai karakter ASCII. Misalnya, jika kata itu adalah "HELLO", (8 + 5 + 12 + 12 + 15 = 52) itu akan menampilkan karakter "4", yang merupakan karakter ASCII untuk 52. Ini juga berarti bahwa program panik ketika jumlahnya lebih dari 255.
Tapi selain itu , itu berfungsi dengan baik. Beri aku istirahat, otakku hanya bisa menangani dosis kecil ... yah, kau tahu.
sumber
\n
atau\r\n
atau\n\r
. Dan jika saya menggunakan baris baru, saya tidak akan memiliki angka bulat yang bagus seperti 100 sebagai jumlah karakter.Python (
6564)Ini menimbulkan kesalahan jika kata tersebut mengandung karakter non-huruf, tetapi bukan yang bermanfaat atau informatif. (Sunting: ujung topi untuk mencegah trik pengindeksan.)
sumber
print sum(['',ord(i)-64]['@'<i<'[']for i in raw_input().upper())
mencukur beberapa karakter.input
; memaksa pengguna untuk memberi tanda kutip di sekitar string input, tetapi "user-friendly" dan "tidak berbahaya" tidak ada dalam spesifikasi!raw_input
→input
print sum([i,ord(i)-64]['@'<i<'[']for i in raw_input().upper())
byte lain dicukurRuby, 43 karakter
Pesan galat yang dihasilkan ini tidak membantu. Kedua solusi yang diposting di sini menganggap input tidak memiliki traebreak, jadi untuk mengujinya, gunakan
echo -n
.Ruby, 76 karakter dengan cek kamus
Pesan peringatan terdiri dari karakter tunggal "W". Jalur ke kamus harus disediakan melalui ARGV. Contoh penggunaan:
sumber
Python 2.6 (72 Chars) Tanpa pemeriksaan kamus
Python 2.6 (178 Chars *) Dengan cek kamus
* Dapat diturunkan ke 156 dengan pesan kesalahan yang kurang membantu. :-)
Terima kasih kepada semua komentator karena telah membantu meningkatkan ini.
sumber
sum
builtin dengan ekspresi generator, bukanfor
loop. Ini akan membiarkan Anda memotong beberapa karakter (~ 17).a
hanya menggunakan sekali, jadi gunakan literal itu sendiri ..."0abc....z".index(i)
akan bekerja sama.0
array penilaian Anda pintar, tetapi juga berarticat0
diterima tanpa kesalahan, yang menurut saya tidak benar. Yang terlalu buruk, karena akan memungkinkan Anda untuk lulusmap(a.index,w)
kesum
sebaliknya (menggantikan literal untuka
sebagai st0le menyarankan).Perl
(52)(48)bermain golf bahkan lebih berkat Timwi
perl -lpe "($w=uc)=~/[^A-Z]/&¨$w=~s/./$_-=64-ord$&/ge"
sumber
-e
bendera di sana.p
danl
penerjemah bendera dalam jumlah karakter Anda. Lihat diskusi ini tentang meta.syntax error at -e line 1, near "(=" Execution of -e aborted due to compilation errors.
Apa yang saya lakukan salah?Python (80)
Python v2 (65 tetapi char `akan diterima)
v3 (60 karakter, @ akan diterima tetapi tidak dihitung, terima kasih jloy)
sumber
Scala: 59 karakter, 7 dari mereka muatan, tidak ada perintah:
Tidak ada kamus sejauh ini. Hasil negatif berarti: Negatif!
Menangani Umlaute Jerman dengan anggun, by the way:
sumber
alpha.pl
dan memulainya denganperl alpha.pl
. Apakah mereka hanya menangani Ascii? Nah - di Perl itu seperti binatang tua ... :)perl -M5.010 alpha.pl
atau sesuatu seperti itu.Perpustakaan Java + Google Guava, 347 karakter, dengan kamus cek
Tidak dapat dibaca 1 versi string panjang :-)
Versi yang dapat dibaca manusia (semacam :-))
Jalur kamus sekarang dilewatkan melalui
a[1]
, agar pernyataan berfungsi, Anda harus menggunakan-ea
bendera (+3 karakter lainnya). Sedangkan untuk kamus, dikt/usr/share/dict/words
(harus tersedia pada kebanyakan * nix sistem) telah digunakan.sumber
UTF-8
lebih pendek dari rangkaian karakter lain :-).Python 3, 95 karakter dengan kamus
Kamus harus dalam file bernama d.
Python 3, 61 tanpa kamus, tetapi ide curian
sumber
Perl (71)
sumber
VB.NET,
84827371Sunting: Dengan validasi adalah:
129 karakter. Dalam hal ini:
C #, 118
sumber
Meningkatkan sedikit pada jawaban John: Python (90)
sumber
Erlang, 104
sumber
Golfscript - 39 karakter
Kesalahan yang dilontarkannya bukanlah yang terbaik, tapi hei, itu membatalkan eksekusi.
sumber
PYTHON
6268 * KarakterMembutuhkan pengguna untuk memasukkan string menggunakan tanda kutip, dan tidak aman (
input
mengeksekusi kode), tetapi, seperti yang saya katakan dalam komentar ke posting lain, "ramah pengguna" dan "bukan risiko keamanan" tidak ada dalam spesifikasi!* Aku lupa tentang
print
, sial.sumber
input
/raw_input
perbedaan.Ruby 1.9, 69
sumber
GolfScript, 50 (53)
Memberikan kesalahan pada karakter buruk, tetapi tidak terlalu bagus (50 karakter):
Alih-alih memberikan "E" sebagai kesalahan (53 karakter):
Cuplikan penghasil alfabet
123,97>+
dicuri dari Ventero.sumber
J (55)
Ini memenuhi semua kondisi kecuali satu kamus. Sebagai kondisi kesalahan, ia mengembalikan "infinity" (simbol garis bawah dalam J) untuk kata-kata yang mengandung apa pun kecuali huruf.
sumber
Haskell (127)
(menimbulkan kesalahan pada karakter aneh)
(juga: ruang antara
toUpper.
dan\x
diperlukan jika tidak mem-parsingnya sebagai(toUpper)
.\
(x)
)Haskell (70)
(tidak menimbulkan kesalahan, tetapi lebih pendek 45%)
sumber
C ++ (
111107)"Set up" / etc:
Perilaku "tidak terdefinisi " (Ini lebih 'praktik buruk' daripada 'tidak terdefinisi', tapi oh well):
void main()
Itu mengatakan itu semua.new
tanpadelete
.sumber
JavaScript 1.8, 80 karakter
Sangat mudah dibaca!
sumber
alert(prompt().toLowerCase().split("").reduce(function(a,b){return a+b.charCodeAt(0)-96},0))
. Saya masih paling suka solusi JavaScript :)APL (34)
Memberikan skor, atau a
VALUE ERROR
jika ada karakter non-alfabet dalam input.Penjelasan:
⍞
: baca sebaris input{
...}
: fungsi diterapkan ke setiap karakter inputA←⎕UCS⍵
: menyimpan nilai ASCII dari karakter saat ini diA
A-32×96<A
: make karakter huruf besar: dariA
dikurangi 32 jika96<A
(jadi, jika huruf besar), jika tidak 064-⍨
: kurangi 64 dari ini, beri A = 1, B = 2 ...¨
: terapkan fungsi ini untuk setiap karakter:⍵∊⍳26
: jika karakternya antara 1 dan 26 ...:⍵
: lalu kembali ⍵ (dan karena tidak ada klausa lain akan ada aVALUE ERROR
jika tidak antara 1 dan 26)+/
: jumlahkan semua nilai secara bersamaan (dan nilai ini secara otomatis dikeluarkan karena ini adalah hasil akhir).sumber
JavaScript, 60 byte
Jika program harus mengembalikan kesalahan pada input yang tidak valid, maka 80 byte:
Jika sebuah input tidak valid, maka konsol akan mengatakan bahwa
_
itu tidak didefinisikan (harus sudah ada variabel yang dipanggil_
).sumber
Python 3,
5855tanpa kamus atau ide yang dicuri tetapi kesalahan masih tidak membantu;)
thx @ Eᴀsᴛᴇʀʟʏ
Tes di sini .
sumber
print<SPACE>sum(ord(.......
, menghapus 2 tanda kurung di sekitar ekspresi.input()
di python3 adaraw_input()
di python2C, 98 byte
sumber
F # (tidak ada validasi)
7957 karaktersumber
C # dengan validasi: 108 karakter (dengan 12 untuk pesan kesalahan):
C # tanpa validasi:
6053 karakter:sumber
Perl (
4231)Saya berharap menghitung F, p, a dan l karena 1 karakter sudah benar.
sumber
JavaScript, 68 Bytes
Ini hampir pasti bisa golf lebih banyak
Dengan cek kamus (Khusus Node.js & Unix) 195 Bytes
Penggunaan
/usr/share/dict/words
, dan pasti dapat dipersingkat (lihat memperingatkan pesan)sumber
console.error()
, tidakconsole.warn()
.