Memasukkan:
Bilangan bulat
Keluaran:
Jumlah input itu sendiri + panjang input + setiap digit input individu.
nr + nr-length + {sum of digits} = output
Contoh:
Input: 99
Output: 99
(nr) + 2
(panjang nr) + (9 + 9)
(digit) →119
Input: 123
Output: 123 + 3 + (1 + 2 + 3)
→132
Aturan tantangan:
Input juga dapat berisi input negatif, yang diselesaikan khusus. Tanda
-
/ minus juga+1
untuk panjangnya, dan merupakan bagian dari yang pertamadigit
.
Sebagai contoh:Input:
-123
Output:-123 + 4 + (-1 + 2 + 3)
→-115
- Anda dapat mengasumsikan bahwa input atau output tidak akan pernah berada di luar kisaran integer (32-bit).
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji:
87901 → 87931
123 → 132
99 → 119
5 → 11
1 → 3
0 → 1
-3 → -4
-123 → -115
-900 → -905
-87901 → -87886
Semi-terkait: Hitung Jumlah semua Digit
code-golf
number
arithmetic
integer
Kevin Cruijssen
sumber
sumber
-123
rantai penjumlahan seharusnya(-1 + 1 + 2 + 3)
bukan(-1 + 2 + 3)
, bukan?-1 + 2 + 3
. Untuk tantangan ini saya memilih untuk menggabungkan-
/ minus-tanda ke digit pertama sebagai satu digit negatif untuk membuatnya sedikit lebih menarik.Jawaban:
05AB1E,
2820188 bytePenjelasan
Cobalah online
Disimpan 10 byte berkat @Adnan
sumber
ÐgsS'+ýO
.Python 2, 39 byte
Suite uji
Menggunakan eval-trick yang sama seperti pada Pyth-answer saya .
sumber
eval
danjoin
tahu untuk mengambil digit pertama negatif untuk input negatif? Saya akan mengharapkan-123
untuk menjadi sesuatu seperti- + 1 + 2 + 3
ditulis, tapi rupanya itu tidak .. (Atau itu, dan secara otomatis bergabung- + 1
ke-1
sebagai langkah kedua?)-123
menjadi"-+1+2+3"
setelah bergabung yang menghasilkan hasil yang benar ketika Andaeval
memilikinya. Cobaeval("-+1")
misalnya yang menghasilkan-1
.- + 1
->- 1
. Operator plus unary ada, jadi- + 1
pada dasarnya sama dengan-(+(1))
.+a
sama dengana
, untuk angka.Pyth,
1110 byteTerima kasih kepada @LeakyNun untuk satu byte!
Suite uji
Penjelasan
sumber
CJam, 18
Cobalah online
Penjelasan:
sumber
Brachylog ,
3532 bytePenjelasan
sumber
XSLT 1.0 (tanpa EXSLT), 673 byte
Ringan meningkat:
Jalankan menggunakan xsltproc:
Ya,
ild.xsl
diteruskan dua kali: Sekali sebagai dokumen XSLT dan kemudian sebagai dokumen XML yang akan diubah. Dokumen input harus ada karena prosesor XSLT umumnya mengharuskan satu untuk mulai berjalan. (XSLT dirancang untuk mendefinisikan transformasi dari dokumen masukan menjadi dokumen keluaran; menjalankan transformasi semata-mata dengan parameter baris perintah seperti yang saya lakukan di sini tidak biasa.) Untuk program ini, dokumen XML yang terbentuk dengan baik akan cukup sebagai input , dan, XSLT sebagai aplikasi XML, setiap transformasi XSLT yang baik adalah definisi dokumen XML yang baik.sumber
name="i" select="..."
eg<with-param name="i"select="substring($i,$s+2)"/>
?<p id=hello>
dll. Saya kira jikaxsltproc
peduli tentang spasi putih itu tidak akan membiarkan tanda kutip hal oleh.MATL, 20 byte
Cobalah secara Online
Semua uji kasus
Penjelasan
sumber
Clojure, 102 byte
Fungsi anonim yang membangun string yang mirip
(+ -123 4 -1 2 3 )
dan mengevaluasinya. Semuanya cukup verbose seperti itu, membangun string dari angka, panjangnya, dan kemudian memetakan setiap simbol representasi string dari angka kecuali minus untuk dirinya sendiri ditambah ruang dan minus tetap samaAnda dapat melihatnya berjalan di sini: https://ideone.com/FG4lsB
sumber
Dyalog APL ,
191716 byteMengambil string dan kembali
≢
panjang+
plus#
di root namespace⍎
evaluasi'\d'⎕R'&+'
regex append digit dengan plus,
diikuti⊢
string yang tidak dimodifikasi–3 terima kasih kepada ngn
sumber
Matlab,
7667 byte9 byte disimpan berkat @Luis Mendo
Penjelasan:
sumber
sum(t+1)+n
lebih pendek darisum([n numel(t) t])
dc, 57 byte
Dijelaskan:
Ini jauh lebih rumit dari yang saya duga! Tantangan bagus :)
sumber
10~
untukA~
!Bash + coreutils, 36 byte
Penjelasan:
Selain itu,
\B
juga cocok antara dua karakter non-kata berturut-turut, jadi untuk angka negatif cocok dengan '^' dan '-'. Perhatikan0$1
trik yang diperlukan untuk\B
memberi0-1+2+3
, misalnya.Jalankan contoh: 'input.txt' berisi semua kasus uji dalam pernyataan pertanyaan
Keluaran:
sumber
$()
. Ada dua cara alternatif untuk melakukannya dengan backticks, tetapi keduanya memberikan solusi 36 byte pada akhirnya:sed 's:\B:+:g'<<<0$1
dansed s:\\\B:+:g<<<0$1
.PowerShell v4, 48 byte
Ini seharusnya bekerja di v2 +, tapi saya hanya menguji di v4.
Mengambil input
$n
. Membuat array baru dengan,
operator yang terdiri dari$n
dan.length
kapan$n
dikonversi ke string. Digabungkan dengan string yang$n
dilemparkan sebagai char-array. Kemudian, seluruh array itu-join
diedit bersama dengan+
sebelum disalurkan keiex
(mirip denganeval
). Hasilnya dibiarkan di pipa dan output tersirat.Misalnya, untuk input
-123
, array akan terlihat seperti(-123, 4, -, 1, 2, 3)
, dan string setelah-join
akan terlihat seperti-123+4+-+1+2+3
. KemudianInvoke-Expression
terjadi, dan hasilnya-115
seperti yang diharapkan.sumber
Faktor dengan
load-all
, 175 byteYa, ini tidak terlalu singkat. Penanganan khusus minus unary benar-benar menjengkelkan; Saya kira saya bisa melakukannya lebih baik dan saya akan, mungkin.
Menggunakan regex substitusi ini:
Kita bisa mengubah test case OP menjadi suite test Factor.
sumber
C #, 118 byte
sumber
1+ ++i
adalah imos[i]<46
untuk memeriksa minus++i+1
?SpecBAS - 147 byte
Membangun string yang kemudian dijalankan. Sayangnya
EXECUTE
tidak bekerja dengan?
singkatanPRINT
, tetapiTEXT
menyelamatkan 1 karakter.sumber
C #, 106 byte
Saya mengalahkan java byte saya, hidup saya selesai
Tidak disatukan (agak)
sumber
(n)=>{....
untuk lambda anonimn=>n+(n+"").Length+(n+"").Select((k,j)=>int.Parse((n+"")[k<48?1:j]+"")*(k<48?-2:1)).Sum()
Meskipun Anda harus menambahkan +18using System.Linq;
yang Anda juga lupa dengan jawaban Anda saat ini.Java 8,
1741361221071059378 byte-14 byte terima kasih kepada @LeakyNun .
-15 byte terima kasih kepada @cliffroot .
Penjelasan:
Cobalah online.
sumber
int c(int i){char[]c=(i+"").toCharArray();int x=i,l=c.length,s=i+l,j=-1;for(;++j<l;x=1)s+=x>0?c[j]-38:38-c[++j];return s;}
int c(int i){char[]c=(i+"").toCharArray();for(int x=i,j=-1;++j<c.length;i+=1+Integer.parseInt(x<0?"-"+--c[j+=x=1]:c[j]+""));return i;}
akhirnya terasa seperti bermain golf di Java @LeakyNun apakah varian Anda berfungsi? itu memberikan jawaban yang salah pada awalnya dan kemudian crash.0
.38
menjadi48
.int c(int i){byte[]c=(i+"").getBytes();for(int j=-1;++j<c.length;i+=(c[j]<48?50-c[++j]:c[j]-47));return i;}
yayPerl 6 - 30 byte
Seperti literal yang didapat
Gunakan itu sebagai fungsi anonim
sumber
JavaScript (ES6), 38 byte
Menggunakan trik gabung-dan-lama yang lama. Simpan 4 byte jika saya bisa meminta input string:
sumber
C ++, 255 Bytes
sumber
Perl 5 - 37 Bytes
Input dalam $ _
sumber
Javascript (menggunakan perpustakaan eksternal) (45 byte)
Menggunakan perpustakaan yang saya tulis untuk membawa LINQ ke Javascript, saya bisa menulis yang berikut ini:
sumber
C,
13211611380Function
f()
mengambil input sebagai string dan mengembalikan hasilnya sebagai integer. Versi program lengkap (113 byte):Membutuhkan satu argumen.
sumber
Perl, 27 byte
22 byte kode + 5 untuk
-paF
.Penjelasan
Menggunakan
-a
opsi autosplit dengan pembatas kosong (-F
) membuat larik digit yang dilewatkan. Menggunakan variabel ajaib$"
yang mengontrol karakter mana yang digunakan untuk bergabung dengan array ketika itu diinterpolasi ke dalam string (kami menggunakan"+"
sini) dan fakta bahwa daftar digunakan dalam konteks skalar akan mengembalikan panjang daftar (jumlah digit).Pemakaian
Perl, 27 byte
22 byte kode + 5 untuk
-paF
.Solusi alternatif, itu jauh lebih mudah dibaca tanpa byte lebih. Saya lebih suka yang lain karena terlihat lebih samar!
sumber
dc, 56 byte
Tidak lebih pendek dari Joe di atas, tetapi implementasi yang agak berbeda (dan yang mengambil angka negatif sebagai input vs perintah pengurangan). Mungkin bisa bermain golf lebih banyak, tetapi makan siang hanya berlangsung lama.
sumber
R, 108 byte
Agak terlambat ke pesta lagi tapi ini dia:
Untuk secara umum membagi digit dari angka apa pun (misalnya untuk menjumlahkannya), R mengharuskan kita untuk terlebih dahulu mengkonversi ke string dan kemudian membagi string menjadi vektor string. Untuk meringkas elemen, vektor string harus dikonversi ke numerik atau bilangan bulat. Ini bersama-sama dengan pengecualian dengan jumlah digit angka negatif memakan banyak byte.
Pengecualian ini bisa sedikit golf (hingga 96 byte) jika pesan peringatan dibolehkan.
Dalam hal ini vektor string dikonversi ke integer secara langsung menggunakan
as.integer
. Namun, untuk angka negatif elemen pertama dalam vektor akan menjadi tanda minus:"-"
. Ini menyebabkan beberapa masalah, misalnya:as.numeric(c("-",1,2,3))
akan kembaliNA 1 2 3
dan pesan peringatan. Untuk menghindari ini, hapus NA dan kemudian gandakan elemen pertama dengan-1
sebelum mengambil jumlah.sumber
RProgN, 30 Bytes
Penjelasan
Cobalah secara Online!
sumber
Perl 5 , 22 + 1 (-p) = 23 byte
Cobalah online!
sumber
AWK ,
64 6361 byteCobalah online!
TIO link memiliki 6 byte tambahan
s=j=0;
untuk memungkinkan input multi-line. Ini adalah metode terpendek yang bisa saya buat. Saya ingin tahu apakah itu bisa dilakukan lebih pendekAWK
.Disimpan 2-byte, terima kasih Kevin
sumber
$0=n+s+$0
bisa di-golf ke$0+=n+s
(-2 byte)?