Tugas
Bangun kalkulator, yang mengambil string apa pun, dari file, stdin atau apa pun, dan menambahkan semua nilai karakter.
Contoh
Input
Hello World!
Output
1085
Aturan
Kalkulator harus menerima pengkodean ASCII saja.
Kode terpendek menang.
Catatan
Mengenai komentar m.buettner, saya harus mengatakan, saya tidak memikirkan bagian multibyte.
Jadi saya meninggalkannya sebagai bonus juga.
Kalkulator harus dijalankan seperti yang tertulis, jadi tidak perlu memodifikasi sebelum kompilasi atau interpretasi.
Bonus
Berkat Synthetica , ini satu bonus lagi,
Program yang memiliki output terendah ketika Anda menggunakan kodenya saat inputnya
menangmendapat bintang.
Saya tidak ingin memodifikasinya secara lengkap.
Jika Anda menulisnya tambahan untuk menampilkan nilai (kanan) di UTF-8, Anda mendapatkan bintang.
Kode yang dieksekusi tercepat di Laptop saya (Lenovo Yoga 13 Intel Core i5 3317U 1.7Ghz, 8GB RAM, 128GB SSD, Intel HD 4000, Windows 8) mendapatkan bintang.
Kode web akan berjalan pertama di bawah IE11 dengan chakra dan kemudian di FireFox 29.0.1 dengan SpiderMonkey
Kode Linux akan berjalan pada Raspberry Pi dengan Raspbian.
Teststring adalah ini:
q/%8hnp>T%y?'wNb\},9krW &D9']K$n;l.3O+tE*$*._B^s!@k\&Cl:EO1zo8sVxEvBxCock_I+2o6 yeX*0Xq:tS^f)!!7=!tk9K<6#/E`ks(D'$z$\6Ac+MT&[s[]_Y(`<g%"w%cW'`c&q)D$0#C$QGf>?A$iawvc,}`9!('`c&q)D$0#C$QGf>?A$iawvc,}`9!(
Selamat bersenang-senang menulis kode :)
Bonusscoring
Saya berencana melakukan penilaian pada hari Sabtu ini sehingga tanggal 07.06.14, semua jawaban setelah tanggal tersebut tidak akan mendapatkan poin bonus;)
Anda dapat mengunduh kode yang akan saya gunakan untuk pengujian di sini, silakan garpu dan memperbaikinya :)
Sedikit pembaruan karena bonus, laptop saya rusak sebagian jadi saya akan melakukannya mungkin akhir pekan depan, saya benar-benar minta maaf untuk itu :(
Hello World!
menggunakan dua bahasa berbeda untuk nilai ASCII di komputer saya.Jawaban:
GolfScript, 4 karakter
Cukup gunakan operator lipat (
*
) untuk menjumlahkan semua karakter.Jika harus bekerja dengan string kosong, 9 karakter:
Terima kasih kepada @PeterTaylor untuk menyediakan versi 6-char alternatif yang bekerja dengan string kosong:
sumber
0\{+}/
mendukung string kosongAPL (8)
Penjelasan:
+/
jumlah dari⎕UCS
nilai unicode dari⍞
input karaktersumber
Hello World!
?1085
. Itu tidak benar jika memberikan output lain. Ini menjumlahkan nilai-nilai dari codepoint Unicode karakter.⍞
artinya;)⍞
berarti membaca garis dari keyboardHaskell 36
sumber
$ printf "Hello World!" | ./charsum
ECHO "Hello World! | ghci charsum.hs
interact
danshow
bukannyagetContents>>=print
:main=interact$show.sum.map fromEnum
Alat Shell + GNU, 29 byte
Mengambil input dari stdin:
Skor sendiri: 2385
c, 52 byte
Kompilasi dengan (beberapa peringatan dihasilkan):
Mengambil input dari stdin:
Skor sendiri: 4354
sumber
od
perintah?od -AntuC
tidak melakukan hal yang sama sepertiod -An -tuC
.od-An-tuC
atauod -An-tuC
Javascript ( ES6 ) 51
sumber
...
sebelumprompt
? Apakah ini hal ES6 baru atau pra-ES6?[...prompt(x=0)]
telah mengambil prompt dengan nilai default 0 (yang kemudian digunakan untuk jumlah), dan menerapkan input itu sebagai array karakter ... ? Yang secara teknis akan sama denganprompt(x=0).split("")
, kan?prompt(x=0)
berarti "set x ke 0, panggilprompt
dengan nilai pengaturan x ke 0", yang berarti, 0. Ini akan setara dengan menulis(x=0,prompt(x))
gs2 , 1 byte
d
(0x64
/sum
), tentu saja, merangkum semua byte dalam input standar.sumber
Python 3 - 28 byte
Contoh dijalankan:
Mendapat input dari stdin,
map
sord
fungsinya untuk mendapatkan nilai ASCII dari setiap karakter,sum
s danprint
s.sumber
print sum(map(ord,raw_input()))
map(ord,input())
keinput().encode()
. Objek byte masih bisa dijumlahkan, dan panjangnya tetap sama.8086 Assembly (16-bit) -
4741 byteIsi
test.com
file adalah:Pekerjaan aktual dilakukan dalam 11 byte pertama; Saya perlu sisanya untuk mencetak hasilnya dalam notasi desimal.
Kode sumber (berikan sebagai input ke
debug.com
assembler DOS ):Beberapa catatan pada kode:
sumber
CJam, 3 byte (jumlah 260)
Anda dapat mencobanya secara online .
Terima kasih jimmy23013 untuk membantu memenggal 2 karakter :)
Penjelasan:
sumber
q1b
lebih pendek.Befunge98, 6 byte, jumlah: 445
Setiap penerjemah harus baik-baik saja. Saya menggunakan CCBI .
Gunakan sebagai berikut:
Bekerja untuk karakter multibyte dan string kosong.
Penjelasan
2j
- melompati dua instruksi berikutnya (@
dan.
- lihat di bawah)~
- Letakkan char berikutnya di stack+
- tambahkan nilai kode char baru ke jumlah saat ini. Penunjuk instruksi membungkus ke awal dan siklus berulang~
menemukan EOF, ia membalik arah penunjuk dan dua instruksi "tersembunyi" dijalankan:.
- cetak jumlahnya@
- keluarsumber
Ruby,
1312 bytesum
adalah fungsi bawaan yang merangkum karakter string. Kurangi 10 untuk memperhitungkan baris baru di akhirgets
nilai pengembalian.(Diedit 4 tahun kemudian untuk mengubah
x-10
ke~9+x
... nilai~9
is-10
, tetapi ini memungkinkan kami menghapus ruang di antarap
dan argumennya, menghemat satu byte.)sumber
p
adalah metode untuk menghasilkan nilai debug dari sesuatu pada suatu baris.PowerShell - 27
Contoh
sumber
[char[]]"$args"|measure -s
selama hanya ada satu entri $ arg.Julia -
117 karakter, jumlah yang dihasilkan =943536Karena pertanyaan memungkinkan input berasal dari sumber apa pun yang Anda inginkan, saya memilih variabel yang ada. Asumsikan yang
A
berisi string yang ingin kami evaluasi.Ternyata, Anda dapat menjumlahkan string secara langsung, dan itu akan mengevaluasi ... namun, karena cara penjumlahan karakter ditangani, jika ada jumlah ganjil karakter dalam string, itu akan menampilkan karakter, daripada bilangan bulat dalam bentuk apa pun. Karena itu, kami memaksanya untuk melakukan int dengan mengalikan dengan 1.
Versi lama:
Akan menghasilkan notasi heksadesimal (jika jumlahnya kurang dari 256, itu akan menjadi
0x??
, jika tidak maka akan menjadi 8 byte sebagai0x????????
). Jika digunakan dalam kode di mana hasilnya digunakan, itu akan beroperasi sama seperti nomor lainnya (hanya bagaimana Julia menampilkan ints yang tidak ditandatangani).Untuk melihat nilai hasil dalam desimal, lampirkan di dalam
int()
, seperti padaint(sum(A.data))
.Bagi siapa pun yang tidak mengenal Julia, Anda menetapkan dengan cara yang
A
persis sama Anda melakukan tugas lain ke variabel. Jadi,A="Hello World!"
atauA="sum(n.data)"
. Dalam kasus di mana Anda perlu memasukkan"
atau'
karakter, ada beberapa pilihan, yang paling mudah (karena itu menghindari kebutuhan akan pengetahuan tentang nuansa string literal Julia)A=readline()
, diikuti dengan hanya mengetikkan string ke dalam STDIN (tidak akan t menangani baris baru). Urutan melarikan diri untuk baris baru adalah, seperti biasa\n
, tetapi saya tidak yakin Anda dapat menggunakannya dengan readline ().sumber
n
? Saya tidak tahu Julia sama sekali;)n
keA
untuk mengurangi jumlah yang dihasilkan dari 988 ke 943..data
; tetapi karena mereka karakter, mereka menghasilkan hasil karakter untuk jumlah karakter ganjil Perkalian dengan 1 mengoreksi itu.K5, 2 byte (fungsi), 5 byte (program)
Fungsi
Program
Tidak yakin apakah K5 dibuat sebelum atau setelah tantangan ini diposting. Apapun ... INI MENGAGUMKAN !!
Di K5, jika Anda melakukan operasi aritmatika pada string, itu mengubah karakter ke kode ASCII mereka. Jadi ini hanya menggunakan jumlah operator
+/
(sebenarnya, itu plus + lebih).sumber
Matlab / Oktaf 4 byte (bonus: 405)
Kode ini adalah fungsi anonim, yang berfungsi, akan mengambil string, dan mengembalikan nomor yang diperlukan.
sumber
gs2
jawabannya, tetapi setidaknya dengan pendekatan yang sama dengan jawaban Julia, saya masih harus menulissum(A)
. Saya pikirsum
sendirian tidak ok (bahkan tidak akan menjadi kode yang valid =).Go (59 karakter)
Semuanya di Go adalah utf8 secara default. Codetext di `delimeters dijalankan dengan sendirinya memberikan output: 5399.
sumber
math.Sum
untuk digunakan denganmap
atau serupaJolf, 2 byte (tidak bersaing)
Coba di sini!
Umm ... aku tidak tahu harus berkata apa lagi.
sumber
Gol> <> , 4 byte (tidak bersaing)
Catatan: bahasa ini lebih baru daripada tantangannya.
sumber
Javascript ES6, 41 byte
Berkat @ETHproduk untuk 2 byte disimpan!
sumber
_=>[..._].map(y=>x+=y.charCodeAt(),x=0)|x
?Python, 24 byte
Ini lebih pendek daripada solusi Python sejauh ini: fungsi anonim tanpa nama, yang mengambil string sebagai argumen, dan mengembalikan jumlahnya.
Cobalah online!
Pertama,
x.encode()
mengubahnya menjadibytes
objek. Kemudian,sum
tambahkan nilai-nilai kode-char. Karena ini adalah fungsi lambda, nilainya adalah implikasi yang dikembalikan.Selain itu, orang dapat memiliki
lambda x:sum(map(ord,x))
untuk jumlah byte yang sama.sumber
SML,
4236Hanya menambahkan bahasa lain.
Mengubah String menjadi char array, menghitung angka ascii dari setiap nilai dan menghitung jumlah semua angka ascii.
sumber
;
. 36 bytes: tio.run/##DcpBCoAgEAXQq0zRQomiC7ivdYuWEWgRfB2xKby9uXzwHo/…C 32
sumber
main(int argc,char **argv){return(argc?main(0,&(argv[1])):(**argv?**argv+main(0,argv)+((*argv)++?0:0):0));}
(107 karakter) meskipun mengabaikan karakter pertama karena beberapa alasan. Selain itu, kode keluar POSIX hanya 8 bit; dalam bashecho $?
,.D (fungsi: 60)
Jelas bukan untuk memenangkannya.
Dengan asumsi itu tidak perlu menjadi program yang lengkap
Disebut seperti itu
Keluaran:
D (program: 133)
Tidak menghitung jeda baris.
Dengan lebih banyak ruang putih dan nama variabel yang lebih panjang untuk dibaca
Untuk mendukung jeda baris dalam input, saya bisa menggunakan
byLine(KeepTerminator.yes)
- cara yang benar, untuk 20 karakter - atau menambahkan'\n'
ke baris saya - yang memecah input baris tunggal dan dapat memberikan jumlah yang salah pada Windows karena CRLF, untuk 18 karakter.sumber
JavaScript (ES6) 54
5854 byte berkat nderscore :sumber
alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))
alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x)
Delphi (
8783)Tidak disatukan
Loop melalui
S
menambahkanord
nilai char ke hasilnya. di mana x == hasilSuntingan:
Disimpan 4 karakter dengan beralih ke int64 dan mengubah penambahan ke jumlah.
sumber
k (8 karakter)
Terjemahan Q
Nilai bonus:
sumber
J (7)
Begitu dekat, namun sejauh ini ... Oh well, saya kira 7 cukup baik, karena jawaban ini juga menerima string kosong. (Saya mendasarkan penggunaan variabel sebagai input pada frasa
from a file, stdin or whatever
)Penjelasan:
a.
berisi semua karakter ASCII.x i. y
mirip dengan python[x.index(i) for i in y]
.Karenanya,
a. i. y
konversikany
ke array nilai ASCII-nya+/
sepertisum
:+/1 2 3 4 5 6
berarti1+2+3+4+5+6
Semuanya beraksi
Untuk bonus:
Tidak buruk, kurasa.
Baiklah, sial.
Terima kasih @algorithmshark
Terima kasih @marinus
sumber
b
menjadiA
hasil dalam skor 449.R,
35 karakter (jumlah 3086)26 byte (jumlah 2305)readline()
lebih dari satu karakterscan(,"")
tetapiscan
membagi input pada spasi secara default.Pemakaian:
sumber
Japt , 6 byte (tidak bersaing)
Jawaban ini tidak bersaing karena Japt dibuat setelah tantangan ini diposting.
Cukup mudah. Cobalah online!
Bagaimana itu bekerja
sumber
¬
semacam negasi?url/interpreter.html#new=1
); apa pun tanpa itu menggunakan set karakter lama, dan apa pun dengan itu menggunakan set karakter baru.PlatyPar , 2 byte (tidak bersaing)
Cobalah online !
u
menghasilkan larik semua nilai karakter sandi dalam string input, dans
menemukan jumlah mereka.Saat dijalankan dengan sendirinya, ia kembali
232
.Ini mirip dengan jawaban Conor's Jolf , kecuali bahwa saya menggunakan byte untuk mengubah string menjadi array kode karakter (yang tersirat dalam Jolf), sedangkan ia menggunakan byte untuk mengambil input (yang tersirat dalam PlatyPar).
sumber