Tantangan ini didasarkan pada pertanyaan Stackoverflow ini .
Dengan angka positif sebagai input, output sebagai jumlah dari setiap digit dikalikan dengan representasi power-of-10-nya.
Memasukkan
Suatu angka, sebagai bilangan bulat, string atau daftar angka / karakter.
- Jumlahnya akan sangat positif.
- Jika Anda menerima nomor sebagai string atau daftar, itu tidak akan dimulai dengan a
0
.
Keluaran
Sebuah string yang mewakili jumlah dari masing-masing basis-10 digit yang relevan, masing-masing dikalikan dengan kekuatan basis-10 masing-masing. Jumlah direpresentasikan sebagai a + b
. Anda dapat menggunakan hingga satu ruang di sekitar setiap sisi +
tanda jika Anda mau. Operan terdaftar dalam urutan menurun.
0
tidak akan pernah bisa menjadi operan yang valid.- The
+
tanda (dikelilingi atau tidak dengan spasi) mungkin bukan bagian terkemuka atau trailing.
Contohnya
Input Output
12 10 + 2
or 10+2
or 10 +2
or 10+ 2
9 9
123 100 + 20 + 3
10 10
101 100 + 1
Output tidak valid
2 1 + 1
10 10 + 0
1 0 + 1
12 + 10 + 2
12 10 + 2 +
12 2 + 10
Ini adalah kode-golf sehingga kode terpendek dalam byte menang!
Jawaban:
Python 3:
838079 BytesCobalah secara Online!
Pengiriman Golf Code pertama saya.
-3 Bytes by ovs. Terima kasih atas tip yang bermanfaat :) -4 Bytes oleh mypetlion. Terima kasih atas tip pemendeknya :)
sumber
if'0'<t[i]
dan mengubah formula Anda darix-i-1
menjadix+~i
. Berikut ini adalah tautan TIO dengan perubahan langkah demi langkah.print
pernyataan menjadiprint(*[t[i]+'0'*(x+~i)for i in range(x)if'0'<t[i]],sep='+')
untuk menyimpan 1 byte.Jelly , 9 byte
Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript (ES6), 47 byte
Mengambil input sebagai integer.
Cobalah online!
Berkomentar
sumber
R , 55 byte
Dengan asumsi integer semuanya di bawah 1e10, yang lebih besar dari integer maksimum 32 bit ...
Cobalah online!
sumber
10^(nchar(n):1-1
secara teori akan bekerja untuk bilangan bulat apa pun ...Bahasa Pemrograman Shakespeare ,
807806805804 byteCobalah online!
-23 byte jika karakter nol dapat di-output terlebih dahulu
Penjelasan
sumber
Python 2 , 64 byte
Cobalah online!
Python 2 , 66 byte
Cobalah online!
sumber
Jelly ,
1211 byteProgram lengkap yang menerima nomor sebagai daftar digit (dalam format Python) yang mencetak hasilnya.
Cobalah online!
Bagaimana?
Sebelumnya @ 12 byte:
sumber
Haskell,
6054 byteEdit: -6 bytes berkat Delfad0r.
Mengambil nomor input sebagai string.
Cobalah online!
sumber
tail.(>>=('+':)).filter(>="1").scanr((.('0'<$)).(:))""
hemat 6 byte Cobalah online! .05AB1E , 10 byte
Implementasi lurus ke depan.
Input sebagai daftar digit.
Cobalah online!
Penjelasan
sumber
Python 2 , 64 byte
Fungsi yang tidak disebutkan namanya yang mengambil daftar digit,
n
,, dan mengembalikan sebuah string.Cobalah online!
enumerate(n)
akan menghasilkan tupel dariindex, item
seberangn
dengan indeks mulai dari0
.Namun
enumerate
juga mengambil indeks awal opsional sebagai argumen kedua, dengan menetapkan ini untuk-len(n)
kita mendapatkan indeks (e
s) dari-len(n)
,-len(n)+1
, ...,-1
.Ini berarti jumlah nol yang diperlukan untuk setiap item (
b
) adalah-1-e
, yang~e
demikian~e*'0'
mendapat nol membuntuti diperlukan.`b`
mendapat representasi string dari angka integerb
dan+
menyatukan ini dengan nol tersebut.if b
memfilter entri denganb==0
.'+'.join(...)
kemudian gabungkan string yang dihasilkan dengan+
karakter.sumber
Python 2,
827371 byte-9 byte terima kasih kepada @ovs
-2 byte terima kasih kepada @JonathanAllan
Cobalah secara Online
sumber
Haskell ,
565552 byte-4 byte terima kasih kepada nimi .
Cobalah online!
penjelasan
Cobalah online!
sumber
Perl 6 , 38 byte
Cobalah online!
Blok kode anonim yang mengambil daftar angka dan mengembalikan string.
Penjelasan:
sumber
APL (Dyalog),
464140 byte-5 byte terima kasih kepada @dzaima
Fungsi awalan anonim. Mengambil input sebagai string. TIO
(Ini adalah pertama kalinya saya menggunakan APL di PPCG, mungkin golf. Juga, kutukan kamu, nol!)
sumber
⎕IO←0
Retina , 19 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Daftar semua digit bukan nol
Untuk setiap digit, tambahkan angka nol sebanyak ada digit tambahan.
Pisahkan setiap hasil dengan
+
s alih-alih baris baru default.Retina 0.8.2 , 21 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Daftar semua sufiks input yang dimulai dengan digit non-nol.
Ganti semua digit trailing dengan nol.
Gabung hasilnya dengan
+
s.sumber
C (gcc) ,
7169 byteSetiap langkah fungsi rekursif mengurangi bagian yang akan dicetak dan melewati sisa nomor.
Terima kasih kepada ceilingcat untuk sarannya.
Cobalah online!
sumber
Brachylog ,
3532 byte-3 byte menyebabkan 0 bukan input yang valid
Cobalah online! atau testuite
Penjelasan
sumber
|∧Ṡ
dari akhir. :)Brachylog v2, 15 byte
Cobalah online!
Sangat, sangat tidak efisien.
Entah bagaimana, ini berhasil menggunakan hanya 6 byte pada apa yang ada dalam kebanyakan bahasa bagian yang sulit (membelah nomor ke dalam formulir yang 10 b di mana suatu adalah satu digit, dalam urutan), dan seluruh 9 byte untuk "bergabung dengan
+
"(yang merupakan bawaan dalam sebagian besar bahasa golf, tetapi tidak untuk Brachylog).Tidak seperti kebanyakan pengiriman Brachylog saya (yang merupakan fungsi), ini adalah program lengkap, mengambil input dari input standar dan menghasilkan output pada output standar.
Penjelasan
(Alasannya
wᵐ
digunakan daripada yang lebih normalc
adalah bahwa kita berhadapan dengan daftar yang heterogen - berisi daftar angka dan string - dan daripada membiarkannya untuk bercampur, lebih mudah untuk hanya mencetak semuanya secara individu.)Algoritma di sini brute-force atas semua partisi aditif input sampai menemukan yang cocok (!). Brachylog lebih memilih mempartisi menjadi beberapa kemungkinan, dan dengan kemungkinan yang diurutkan dalam urutan naik, sehingga solusi pertama yang akan ditemukannya adalah kebalikan dari solusi yang ditanyakan oleh pertanyaan itu. Jadi kita hanya perlu membalikkannya untuk mendapatkan solusi yang kita inginkan.
sumber
Bersih , 73 byte
Cobalah online!
Menentukan fungsi
$ :: String -> String
mengambil string dan mengembalikan string.sumber
Kanvas ,
1413 byteCoba di sini!
sumber
Attache , 37 byte
Cobalah online!
Versi pointfree (41 byte):
Join&"+"##`\&:Id##`-&>Pairs@`'&0@Suffixes
Penjelasan
sumber
C (gcc), 87 byte
Cobalah online!
sumber
Powershell,
5552 byteScript mengharapkan array string, setiap string berisi satu digit. Skrip uji:
Keluaran:
sumber
Japt , 13 byte
Mengambil input sebagai array angka.
Cobalah
Penjelasan
Alternatif
Mengambil input sebagai array string digit.
Cobalah
sumber
Java 10,
8278 bytePort of Arnauld 's JavaScript (ES6) menjawab .
-2 byte terima kasih kepada @ceilingcat .
-2 byte terima kasih kepada Arnauld .
Cobalah online.
Penjelasan:
sumber
n%m
ditugaskan ke variabel untuk dibaca.)m<n
harus bekerja.SNOBOL4 (CSNOBOL4) ,
134133129 byteCobalah online!
Menyimpan seluruh byte dengan melakukan pemrosesan string daripada aritmatika!
sumber
sed -E ,
10999977574 byteSetiap baris input dianggap sebagai nomor terpisah. Cobalah online .
Penjelasan:
… Saya bisa bermain golf lebih lanjut, saya kira.
sumber
01010101010
atau000000
, sesuai dengan spec tantangan. Apakah itu menyimpan byte?Brainfuck, 147 byte
Cobalah online! (Anda harus mencentang kotak yang bertanda "!" Dan ketik input Anda setelah "!" Pada baris kedua kode, jika tidak maka akan terus meminta input selamanya.)
Mungkin tidak akan menjadi jawaban terpendek atau golf sesingkat mungkin, tapi cukup menyenangkan untuk mencoba dan melakukan ini di Brainfuck jadi saya mungkin juga mempostingnya.
Seperti yang ditunjukkan oleh @JoKing, program ini tidak menghapus 0's. Saya akan mencoba dan memperbaiki ini tetapi mungkin cukup sulit.
Penjelasan:
sumber
APL (Dyalog Unicode) , 20 byte
Cobalah online!
Mengambil input sebagai vektor digit. Keluaran dengan spasi sebelum dan sesudah masing-masing
+
, dan termasuk jumlah variabel ruang terkemuka.Ini kereta. Ini dibagi menjadi yang berikut.
Fungsi pertama adalah
⌽
, ini membalikkan array, jadi1 0 2
menjadi2 0 1
.Kemudian kita masuk
(10×⊢)\
, yang diterapkan pada array terbalik. Bagian ini diilhami oleh jawaban Ngn untuk tantangan Boustrophedonise. Meminjam penjelasan ngn, diberi vektor digitA B C ...
, menerapkan(10×⊢)\
pada vektor ini memberikan berikut.Aktif
2 0 1
,(10×⊢)\
beri2 0 100
.Selanjutnya datang
0~⍨
. Ini menghapus semua0
s dari array, memberi2 100
.Akhirnya datanglah
+
s.{⍵'+'⍺}/
adalah pengurangan yang dimulai dari kanan yang menyatukan arg kiri dengan+
, diikuti oleh arg kanan. Secara efektif, ini membalik array saat memasukkan+
s. Ini memberi100 '+' 2
, yang ditampilkan sebagai100 + 2
.sumber
MathGolf ,
121110 byteCobalah online!
Penjelasan
Perintah pertama tidak diperlukan karena input dapat diberikan sebagai daftar angka.
Saya mungkin menambahkan operator perkalian berpasangan yang satu byte, tapi itu saat ini bukan bagian dari bahasa. Lalu saya bisa menghapus satu byte dari solusi ini.
sumber