Tantangan ini adalah untuk menulis program atau skrip yang menghitung jumlah semua digit dalam bilangan bulat dari 1 hingga dan termasuk angka yang diberikan.
Input, satu bilangan bulat positif. Output, jumlah digit dalam angka itu dan semua angka yang lebih kecil.
Contoh:
Input: 5
Integer Sequence: 1, 2, 3, 4, 5
Sum of Digits: 1 + 2 + 3 +4 + 5 = 15
Input: 12
Integer Sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Sum of Digits: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 1 + 0 + 1 + 1 + 1 + 2 = 51
Agar jelas, ini untuk menghitung jumlah digit - bukan bilangan bulat. Untuk input satu digit, ini akan sama. Namun, input yang lebih besar dari 10 akan memiliki respons yang berbeda. Ini akan menjadi respons yang salah :
Input: 12
Output: 78
Contoh lain, untuk menunjukkan perbedaan:
Input: 10
Integer Sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Sum of Integers (INCORRECT RESPONSE): 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
Digit Sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0
Sum of Digits (CORRECT RESPONSE): 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 1 + 0 = 46
Kasus uji yang lebih besar (TANGGAPAN YANG BENAR):
Input: 1000000
Output: 27000001
Aturan & Pedoman:
- Kode yang dikirim harus berupa program atau skrip yang lengkap - bukan hanya fungsi. Jika kode mengharuskan termasuk, impor, dll, mereka harus dimasukkan dalam kode yang diposting.
- Nomor tersebut harus dimasukkan oleh pengguna - bukan kode-keras. Input dapat diterima sebagai argumen baris perintah, file, stdin, atau cara lain yang dengannya bahasa Anda dapat mengambil input pengguna.
- Kode harus dapat menangani input dengan baik setidaknya hingga
(2^64)-1
. - Kode seharusnya hanya menampilkan jumlah.
- Program & skrip yang diajukan harus ramah pengguna dan tidak boros sumber daya komputer (mis.: Mereka tidak boleh mendeklarasikan array yang sangat besar untuk menampung setiap karakter). Tidak ada bonus atau penalti yang ketat untuk ini, tetapi harap menjadi pemrogram yang baik.
Mencetak:
Mekanisme penilaian utama adalah dengan panjang kode. Skor yang lebih rendah lebih baik. Bonus dan penalti berikut juga berlaku:
- -25 Bonus jika kode Anda dapat menangani semua angka positif, misalnya:
1234567891234567891234564789087414984894900000000
- -50 Bonus jika kode Anda dapat menangani ekspresi sederhana, misalnya
55*96-12
. Agar memenuhi syarat untuk bonus ini, kode harus menangani+ - / *
(penambahan, pengurangan, pembagian, penggandaan) operator dan menegakkan urutan operasi. Divisi adalah divisi integer reguler.- Contoh yang diberikan (
55*96-12
) dievaluasi menjadi5268
. Kode Anda harus mengembalikan yang sama untuk salah satu dari input tersebut - jawaban yang benar adalah81393
.
- Contoh yang diberikan (
- -10 Bonus jika kode Anda memenuhi syarat untuk bonus -50 dan dapat menangani
^
operator (eksponen). - -100 Bonus jika kode Anda memenuhi syarat untuk bonus -50 dan tidak menggunakan
eval
atau mirip untuk menangani ekspresi. - +300 Denda jika kode Anda bergantung pada sumber daya web apa pun.
55*96-12
dikembalikan?Jawaban:
Perl 6: 108 - (25 + 50 + 100) + 0 = -67 poin
Solusi golf (Baris akhir berdasarkan solusi hebat xfix ):
Solusi un-golf:
Langkah evaluasi bekerja dengan iterasi masing-masing simbol
*
,/
,+
,-
, menemukan ketika itu terletak di antara dua bilangan bulat, dan mengganti yang menggunakan fungsi simbol mewakili.Secara lebih rinci: dibutuhkan setiap simbol (misalnya
+
) dan fungsi infiks yang seharusnya diwakilinya (misalnya&[+]
yang merupakan singkatan untuk&infix:<+>
dan fungsi yang sama yang dipanggil Perl 6 saat Anda jalankan1 + 2
) dan melakukan subtitusi global (s:g[…] = …
, yang seperti Perl 5s/…/…/ge
), yang cocok dengan dua bilangan bulat yang dipisahkan oleh simbol ((\d+) $sym (\d+)
), dan menggantinya dengan output dari fungsi infiks terkait yang disebut dengan bilangan bulat tersebut (infix($0, $1)
).Akhirnya, ekspresi yang dievaluasi ini dimasukkan ke dalam
say [+] (1..$expression)».comb
, yang dijelaskan oleh xfix dengan sangat baik dalam solusinya .Maaf terlambat datang ke pesta ☺
EDIT: Dukungan yang dihapus untuk eksponen; itu tepatnya 10 karakter dan tidak melakukan asosiatif dengan benar.
sumber
my $g
Anda mungkin ingin menggunakan sesuatu yang sudah dideklarasikan (saya pikir itu$!
bisa bekerja, tapi saya belum menguji).my$g=get;for <* / + -> {$g~~s:g[(\d+)$^s(\d+){}]=infix:[$^s] |@()};say [+] (1..$g)».comb
Ini akan membuat skor turun menjadi 88 karakter atau -97 poinMathematica 30- (10 + 50) = -30
Dipersingkat oleh 4 karakter berkat ybeltukov.
Range@n
mengembalikan angka dari 1 hinggan
.Integerdigits@n
memecah masing-masing angka menjadi digit-nya.Total[n,2]
menjumlahkan digit. 2 adalah untuk memungkinkan penjumlahan di berbagai tingkatan, yaitu daftar daftar.Pengujian
Ekspresi
sumber
Tr@Flatten
dapat dikurangi menjadiTotal[...,2]
:IntegerDigits@Range@#~Total~2&
.C:
150138 - (100 + 50) = -12Sangat memalukan mencuri @Fors jawaban dari sini untuk melakukan evaluasi ekspresi: https://codegolf.stackexchange.com/a/11423/13877
Penggunaan sampel:
Catatan: implementasi ekspresi mengasumsikan tidak ada operator diutamakan dan mengkonsumsi nilai saat menerimanya; ex,
1+2*3 = 9
daripada tipikal7
.sumber
sed,
411283 - 25 = 258Saya tidak bisa diganggu untuk golf lebih banyak sekarang. :-) Tidak direkomendasikan untuk digunakan dengan bilangan bulat besar yang bahkan jarak jauh, tetapi secara teknis hal itu dapat menangani bilangan bulat besar yang sewenang-wenang (kemungkinan besar Anda akan kehabisan RAM, karena saya (lebih atau kurang harus) menyandikan angka dalam unary).
Penggunaan sampel
(Baris input indentasi untuk memudahkan membaca.)
sumber
python, 55- (50 + 25 + 10) = -30
In-efisien namun lebih pendek dan juga mampu menangani ekspresi.
EDIT: Terima kasih Wolframh dan legoStormtroopr untuk triknya: D
python, 149- (25 + 50 + 10) = 64
Versi pertamaku
memasukkan:
keluaran:
sumber
xrange
solusi Anda pada1234567891234567891234564789087414984894900000000
xrange
: Deval(raw_input())
denganinput()
. Thewhile
Loop bisawhile t:s+=sum(map(int,
t));t-=1
.input()
alih-aliheval(raw_input())
, seperti yanginput
sudaheval
ekspresi! Ini artinya Anda bisa mendapatkan -10 binus untuk simbol kekuatan dan bonus -100 karena tidak menggunakaneval
!!!eval
dan mirip , jadi saya pikir -100 tidak akan dihitungPython - 108 karakter dikurangi 85 bonus, 23 pukulan, menangani input yang sangat sangat sangat besar
Sebagian besar solusi ini tampaknya perulangan semua int kurang dari input dan menjumlahkan semua jumlah digit mereka. Ini bekerja, tetapi saya merasa itu tidak berlaku, dan akan mempertanyakan apakah mereka benar-benar memenuhi syarat untuk bonus 25 poin, karena saya tidak berpikir mereka akan mampu menangani input
1234567891234567891234564789087414984894900000000
dalam hidup kita. Memang, pada inputn
digit, solusi ini membutuhkanO(10^n)
waktu. Saya memilih untuk melempar matematika pada masalah ini.Himpunan semua
x
angka digit isomorfis ke himpunan{0,1,2,3,4,5,6,7,8,9}^x
. Untuk suatu fix(n,sig)
adax
nilai yang berbeda untuksig
,10^x-1
poin dengansig
indeks th diatur ken
, dan jumlah semua digit0-9
adalah 45. Ini semua ditangani olehf
.g
adalah sesuatu yang mungkin kita semua kenalmagic
mengambil semua digit pada nomor input, dan beralih dari mereka dari yang paling signifikan. Paling mudah untuk melacak ini dengan contoh input, katakanlah1,234,567
.Untuk menangani rentang
1,234,567-1,234,560
, kita harus menjumlahkan semua digit dari1
hingga7
, dan menambahkan pada7
waktu jumlah dari digit lainnya, untuk menangani semua angka lebih besar dari1,234,560
. Kita sekarang perlu berurusan dengan sisanya.Untuk menangani rentang
1,234,560-1,234,500
, kami menambahkan pada6
(val
), dan menjatuhkan batas atas ke1,234,559
. Dalam membuat sisa drop, kita akan melihat setiap angka satu digit 6 kali (val*f(sig)
). Kita akan melihat semua angka dari0
ke5
persis10
kali setiap ((10**sig)*g(val-1)
). Kami akan melihat semua digit lainnya dalam angka ini tepat 60 kali ((val*10**sig)*sum(digits[sig+1:])
). Kami sekarang telah berurusan dengan semua angka yang benar-benar lebih besar dari1,234,500
. Logika yang sama akan berlaku secara induktif di semua signifikansi.Bermain golf ini, dengan terima kasih kepada WolframH, mengurangi solusi ini
Dan jumlah jumlah digit dari semua bilangan bulat hingga
1234567891234567891234564789087414984894900000000
adalah265889343871444927857379407666265810009829069029376
Jumlah terbesar yang berhasil saya lemparkan pada versi golf adalah 10 ^ 300, di mana titik pelampung mulai meluap dan ketidakstabilan angka mulai menyebabkan masalah. Dengan fungsi eksponensial kuadrat dan kelipatan cepat, masalah ini akan hilang.
Dan dukungan LaTeX akan sangat berguna ...
sumber
2.65889343871e+50
, yang merupakan pendekatan floating point dari solusi nyata. Tampaknya Anda mencetakint(t)
bukant
seperti pada kode yang Anda berikan. Itu salah; solusi sebenarnya adalah265889343871444899381999757086453238874482500000214
. Hanya menghindari menggunakan pelampung, yaitu ganti**(x-1)
dengan yang lebih pendek**x/10
.d
(karena digunakan dua kali). Menghilangkan yang lain (dan menggunakan beberapa trik) satu tiba did=map(int,str(input()))\nprint sum(v*(10**s*((v-1)/2+sum(d[:~s]))-~s*9*10**s/2)for s,v in enumerate(d[::-1]))
(108 karakter). Berjalan dengan baik pada input dengan ukuran berapa pun (sepertiint("1"*1000)
).10**-1
adalah0.1
, dan dari sana semuanya berubah menjadi pelampung.1/10
adalah0
(pembagian integer), dan semuanya bisa tetapint
s.TI-BASIC, 137 - (50 + 10 + 100) = -23
Input menangani angka hingga
1E100
dan secara otomatis mengevaluasi. Dapat menangani ekspresi.Meskipun ini adalah array yang sangat besar, saya tidak menghabiskan sumber daya komputer (ini dijalankan dari a kalkulator ).
sumber
eval
tidak boleh diambil.Scala 66
sumber
C,
7774C,
150124 - 25 = 99Berikut ini adalah versi alternatif yang secara teknis harus memenuhi syarat untuk bonus 25 untuk bilangan bulat "apa pun", tetapi tidak praktis karena algoritma ini linear-waktu dalam inputnya. Bagaimanapun juga, itu menyenangkan untuk ditulis. Kurangi angka yang dibaca sebagai karakter ASCII secara manual. Versi ini adalah 150 karakter. (Sekarang dengan kode yang mengerikan, mendera argumen, loopful!)
C,
229224 - (50 + 100) = 74Variasi penanganan ekspresi. Operator didahulukan alat sesuai dengan aturan yang khas:
/ * - +
. Terbatas hingga 97 token = 48 istilah.sumber
GolfScript 18 - 50 = -32
Penjelasan: Misalkan input adalah "12":
Stack adalah
[0,1,2,3,...,12]
.Stack adalah
"01234...9101112"
.Stack adalah
"0 1 2 ... 1 0 1 1 1 2"
.Stack adalah
[0,1,2,...,9,1,0,1,1,1,2]
.Stack adalah 51, seperti yang diinginkan.
Input di sini dapat berupa ekspresi GolfScript yang valid, yang dapat menyertakan eksponen. Sebagai contoh:
Sejak
2(5 + 5) - 8 = 12
. Saya pikir ini harus memenuhi syarat untuk bonus, tapi mungkin itu diharapkan hanya jika dalam bentuk normal, bukan notasi Polandia sebaliknya GolfScript.sumber
^
juga??
^
, tidak?
ataupow
dan lainRuby, 37 - 50 = -13
Eval ganda, jauh-jauh melintasi langit! Seperti dengan solusi Ruby lainnya, saya pikir ini secara teoritis harus dapat bekerja dengan jumlah besar yang sewenang-wenang, tetapi waktu eksekusi akan ... mengerikan.
Versi lebih lama (skor 49 - 50)
Dengan asumsi bonus 10 karakter sebenarnya membutuhkan karakter eksponensial menjadi tanda sisipan, cara terpendek yang bisa saya pikirkan untuk menambahkannya adalah:
Yang harganya lebih banyak karakter daripada bonus akan memberikan.
sumber
p"#{[*1..eval(gets)]}".chars.map(&:to_i).inject :+
&
cukup banyak dalam golf. Bahkan, Anda tidak perlu ruang antarainject
dan:+
baik.Perl 6 (28 - 75 + 0 = -47 byte)
Ini dapat menangani semua angka positif (namun, yang besar akan memakan waktu lama, karena implementasi Perl 6 saat ini lambat, tetapi Perl 6 mendukung bilangan bulat besar secara asli). Itu menggunakan
eval
, untuk menerapkan kalkulator sederhana (hukuman lima karakter untuk lima puluh karakter tidak sia-sia). Ini lambat hanya karena implementasi saat ini lambat, tetapi secara teori, itu harus cukup cepat (ketika implementasi Perl 6 meningkat, yaitu). Juga, secara mengejutkan, saya menang dengan Mathematica (untuk saat ini).»
dalam kode ini sebenarnya tidak diperlukan, tapi saya taruh di sini untuk alasan kinerja (jika tidak, program akan mengalokasikan seluruh string. Alasan mengapa di sini adalah bahwa Perl 6 tidak memiliki string yang tak terbatas, tetapi ia memiliki daftar yang tak terbatas.Bagaimanapun, Anda mungkin bertanya bagaimana kode ini bekerja. Baiklah, saya akan memberikannya bagian demi bagian.
get.eval
Ini mendapat satu baris (
get
fungsi), dan mengevaluasinya (eval
metode).1..get.eval
Setelah itu, Perl 6 menyiapkan objek jangkauan, dari
1
nilai yang dievaluasi. Ini adalah rentang, jadi tidak ada alokasi besar.».comb
.comb
metode membagi string ke karakter ( kecuali dipanggil dengan argumen ). Misalnya,'cat'.comb
kembali'c', 'a', 't'
.»
memetakan elemen daftar, sehingga.comb
dijalankan pada setiap item - tidak hanya pada daftar itu sendiri (misalnya,(4, 9)».sqrt
memberi2, 3
). Ini juga tidak mengalokasikan lebih dari yang dibutuhkan, karena Perl 6 memiliki daftar tak terbatas (seperti Haskell, misalnya).»
karakter sebenarnya tidak diperlukan, seperti yang.comb
dapat digunakan secara langsung pada daftar, tetapi ini melibatkan paksaan string implisit (dan Perl 6 tidak memiliki string tak terbatas, jadi ini akan menghabiskan memori). Misalnya,1, 2, 3
daftar setelah konversi ke string kembali1 2 3
. Untuk Perl 6, spasi adalah angka yang sangat baik artinya 0, sehingga kode akan berfungsi, bahkan dengan konversi tersebut. Namun, itu akan menyalahgunakan sumber daya komputasi.[+]
Ini adalah operator pengurangan. Pada dasarnya, di antara
[]
, Anda dapat menempatkan operator untuk digunakan, dalam hal ini+
. Daftar setelah dikurangi operator dikurangi, begitu[+] 1, 2, 3
juga1 + 2 + 3
, yang6
. Perl 6 menggunakan operator terpisah untuk angka dan string, sehingga tidak akan dianggap sebagai gabungan.say
Akhirnya,
say
output hasilnya. Lagi pula, Anda ingin melihat hasil akhirnya, bukan?sumber
[+] 1,2,3,4,5,6,7,8,9,10
apa1+2+3+4+5+6+7+8+9+10
aku benar?>
dapat dirantai, demikian3 > 2 > 1
juga benar. Properti yang sama berlaku untuk mengurangi operator, jadi[>] 3, 2, 1
masih benar, karena artinya3 > 2 > 1
-[>]
dapat digunakan untuk menentukan apakah angka dalam urutan menurun.get.Int
bukaneval
? Apakah perlu ekspresi matematika?sort
tanpa argumen metode perbandingan).Perl 31 - Tidak ada bonus
Output sampel:
Perl 5 dengan
-p
, 50 - 28 byte: -22Cobalah online!
sumber
J, 22
Penjelasan
Evaluasi berasal dari kanan ke kiri.
sumber
+/,10#.inv>:i.
akan lebih pendek. Tapi itu masih berfungsi dan bukan program yang lengkap seperti yang diminta OP.R, 64 - (50 + 10) = 4
Ketika ini dijalankan, pengguna diminta untuk input.
Versi lama (tidak dapat menangani ekspresi): 46 karakter:
sumber
u<-function(x) utf8ToInt(x)
dan seterusnya.u <- utf8ToInt
tanpafunction
. Ini dapat bermanfaat untuk golf kode jika fungsinya digunakan beberapa kali.Rcheatcodegolf
paket, apakah sah untuk menggunakan fungsi yang telah ditentukan dalam paket itu? :-)Gelombang - (181 - 50) - 131
Hanya untuk sedikit kesenangan.
Saya akan membuatnya sedikit lebih mudah dibaca:
Metode lama menggunakan untuk loop untuk mendapatkan output dari perintah powershell, sebagai lawan dari menulis ke dan membaca dari file:
Tetapkan input ke variabel -
v
- gunakan/a
untuk menerima ekspresi aritmatika.Sayangnya memungkinkan ekspansi yang tertunda diperlukan.
Gunakan for for untuk menghitung dari 1 hingga nilai yang dimasukkan -
v
.Untuk menangani angka yang lebih besar dari 9, saya harus menggunakan PowerShell untuk mendapatkan panjang string kemudian gunakan yang lain untuk loop untuk membagi string itu ke atas, dan menambahkannya ke jumlah -
s
.Anda dapat mengubah nama
powershell.exe
menjadi dip.exe
bawah C: \ WINDOWS \ System32 \ WindowsPowerShell \ v1.0 \ kemudian menyebutnya dengan adilp "&{'%%a'.length-1}
, menghemat 9 byte. Tapi itu tidak benar-benar dalam semangat itu.Meninggalkan yang kedua berjalan sementara saya istirahat makan siang.
Saya tidak bisa benar-benar mengujinya dengan angka yang terlalu besar daripada ini karena seberapa lambat itu. Namun harus bekerja untuk jumlah yang cukup besar.
2147483647
adalah jumlah terbesar yang akan diambil (integer maksimum 32 bit) sebelum memberikan kesalahan berikut -Ini tentu saja mendiskualifikasi saya dari tantangan.
sumber
v
dan menggunakannya%1
secara langsung. 2. Anda dapat mengurangi 1 dalam skrip PowerShell Anda daripada panjang@set /a b=%%b-1
yang menghemat banyak. Dengan perubahan-perubahan itu, saya memilikinya turun ke 211 dari yang asli 240. :-)[decimal]
tipenya memungkinkan nilai hingga (2 ^ 96) -1.Dyalog APL , 9 - 160 * = -151
Cobalah online!
⎕
mendapatkan input yang dievaluasimisalnya
"7+5"
memberi12
⍳
indeks 1 ... n[1,2,3,4,5,6,7,8,9,10,12]
⍕¨
memformat setiap angka menjadi string["1","2","3","4","5","6","7","8","9","10","11","12"]
∊
minta (ratakan)"123456789101112"
⍎¨
mengeksekusi setiap karakter (menghasilkan daftar nomor digit tunggal)[1,2,3,4,5,6,7,8,9,1,0,1,1,1,2]
+/
jumlah51
* Mencetak gol
-50 bonus karena bahkan menerima ekspresi sebagai input. Ekspresi harus APL yang valid, yang dapat diterima menurut OP .
-10 bonus karena karena juga menangani
^
(*
dalam APL).-100 bonus karena input ekspresi ditangani tanpa penggunaan eksplisit
eval
(yaitu⍎
dalam APL).sumber
eval
atau mirip untuk menangani ekspresi. " Karena⍎¨
tampaknya mengeksekusi setiap karakter satu per satu, itu agak sama dengan suatu eval (kecuali itu mengeksekusi karakter satu per satu alih-alih pada saat yang sama sepertieval
halnya).⍎¨
hanya digunakan untuk mengonversi digit menjadi bilangan bulat, bukan untuk menangani ekspresi.⎕
input + eval builtin, atau eval selalu dilakukan secara implisit ketika ekspresi adalah input?⎕
selalu mengambil ekspresi sebagai input, mengevaluasinya, dan mengembalikan hasilnya. Jadi untuk memasukkan string, Anda harus memberi tanda kutip di sekitarnya. Fakta bahwa built-in (⍞
) terkait mengembalikan input sebagai teks mentah seharusnya tidak masalah (terutama karena simbol menunjukkan bahwa itu⎕
adalah metode input utama, dan⍞
merupakan varian khusus), karena jika tidak mendapatkan bonus akan memerlukan penerapan matematika evaluator - tugas yang sama sekali berbeda dari yang utama. Saya tidak suka bonus, dan yang -100 hanya konyol atau punya APL dalam pikiran, tapi ya, sepertinya cocok untuk bonus.⎕
memang cara normal mendapatkan input dan secara otomatis menangani ekspresi, saya memang melihatnya cocok dengan bonus juga, jadi +1 dari saya. Bonus memang konyol akhir-akhir ini, tetapi cara yang baik untuk menggunakannya untuk meminimalkan skor Anda.C # (161)
Cantik
sumber
Python3 + Bash (78 - 185 = -107)
Jika hasil ekspresi tidak bilangan bulat, itu akan dipotong terlebih dahulu. Jika hasil dari ekspresi negatif, hasilnya tidak terdefinisi.
Gunakan seperti:
1: kecuali jika Anda menghitung memanggil Python dari Bash, tapi saya rasa tidak demikian. Jika Anda berpikir bahwa itu sebenarnya, maka skor yang disesuaikan adalah -7.
sumber
Jawa, 254
Menangani ekspresi. Berikan ekspresi apa pun yang Anda inginkan dalam target. Pegangan hingga panjangnya bisa ditanganinya. Jika Anda membersihkan semua ruang menjadi satu baris, dan tidak ada pernyataan untuk dicetak, itu dihitung menjadi 254 karakter (mengingat kata-kata panjang berbasis pemrograman Java).
PS: Ini adalah program yang lengkap, bukan hanya logika. Jumlah kata yang diberikan untuk program, bukan hanya logika.
sumber
Java (JDK8), 272
Tantangan pertama saya, saya menerima saran =)
Bertakuk:
sumber
CJam, 9 - 25 = -16
CJam beberapa bulan lebih muda dari tantangan ini, jadi ini tidak memenuhi syarat untuk tanda centang hijau. Selain itu, ini bukan mengalahkan Perl. ;) Saya cukup menyukai pendekatan itu, jadi saya tetap ingin mempostingnya.
Uji di sini.
Idenya adalah untuk membuat rentang dari 0 hingga N. Kisaran ini kemudian dikonversi ke string, yang hanya menyatukan bilangan bulat kembali ke belakang. Untuk N = 12, kita dapatkan
Kemudian setiap karakter dikonversi menjadi bilangan bulat dengan
:~
(menghasilkan array bilangan bulat), dan kemudian disimpulkan dengan:+
. CJam dapat berurusan dengan bilangan bulat besar yang sewenang-wenang.sumber
Python 3 + astor ,
10171007 byte - (25 + 50 + 100) = Skor:842834menyimpan 10 byte dengan menghapus
ts
dan mengubahp
sunting: Saya tidak dapat menguji bilangan bulat yang sangat panjang (1234567891234567891234564789087414984894900000000) [hang komputer saya] tetapi dari pengetahuan saya, Python 3 mendukung bilangan bulat yang terlalu panjang.
Implementasi ini
menggunakanpenyalahgunaan AST. Saya tidak akan menganggap penyalahgunaan AST sebagai "eval atau serupa".Terlalu malas untuk menulis ungolfed, jadi saya akan memberi Anda penjelasan tentang kelas:
The last line just executes these classes in the appropriate order on the input, to preserve order of operations, and prevent unwanted behavior.
Example usage ($ or > means user input) and by the way, the actual program takes input only once:
sumber
C# (108)
Pretty
sumber
int
s; in C, everything defaults toint
... Oh, it's C#.Ruby -> 83-50 = 33
"To test" version:
Tests results
sumber
C# (80)
Its my another attempt.
Pretty
sumber
n--
and+
needed? I don't think it is in other C-style languages.2^64-1
doesn't fit in 64 bits.4.5
; 2) the average sum of 20 digits is90
(2^64
has 20 digits); so the expected value will be around90 * 2^64 ≈ 1.66*10^21
. So you'd need at least71
bits, at most72
.Ruby 69-50 = 19 (or -4)
This can definitely be golfed together but here is the
firstfifth tryIt also works for all numbers but is very slow for them as it runs slower than O(n), so I wouldn't add the -25. If slowness is fine, then it would be -4 though
Ruby 133-50-25 = 58
This is the faster version, that runs in less-than O(n) time (and uses actual math!), so it can provide results for large integers fast, thereby I added the -25:
sumber
Haskell, 74-25=49
main=getLine>>=print.sum.map(\c->read[c]).concatMap show.(\x->[0..x]).read
sumber
interact
and the fact that>>=
for lists is the same asflip concatMap
, you can golf this down to 63 chars like this:main=interact$show.sum.map(\c->read[c]). \x->[0..read x]>>=show
\c->read[c]
isread.(:[])
ECMAScript 6, 86 - 50 = 36
sumber
for(i=eval(prompt(s=""));i;s+=i--)alert(s.replace(/\d/g,c=>Array(-~c).join()).length)
..join()
):for(i=eval(prompt(s=""));i;s+=i--)alert(s.replace(/\d/g,c=>Array(-~c)).length)
. 78 - 50 = 28!R (72 points)
Output:
sumber