Halo, selamat datang di PPCG. Tantangan untuk satu bahasa biasanya disukai di sini di PPCG. Mungkin Anda bisa mengubahnya menjadi tantangan umum: diberi string, menampilkan jumlah semua angka dalam string, mengabaikan semua yang lain (yaitu "the 5is 108 seCONd4 a"akan menghasilkan 117karena 5+108+4=117). Juga, setiap 'pertanyaan' di sini harus memiliki tag kondisi kemenangan . Dalam hal ini saya menganggap itu [kode-golf] (menjadi solusi sesingkat mungkin)?
Kevin Cruijssen
4
Tampaknya Anda telah memposting pertanyaan serupa di SO, yang cenderung mengkonfirmasi bahwa itu tidak dirancang untuk menjadi tantangan PPCG dan Anda mencari kode yang 'dapat digunakan' daripada kode golf. Saya akan merekomendasikan untuk meningkatkan pertanyaan awal Anda pada SO, sehingga lebih sesuai dengan aturan situs.
Arnauld
4
Saya telah memeriksa pos Anda agar sesuai dengan standar kami. Anda bebas mengedit jika hasilnya tidak cocok untuk Anda.
þм# Only leave the non-digits of the (implicit) input-string# i.e. "the 5is 108 seCONd4 a" → "the is seCONd a"
S # Split it into a list of characters# → ["t","h","e"," ","i","s"," "," ","s","e","C","O","N","d"," ","a"]¡# Split the (implicit) input-string by each of these characters# → ["","","","","5","","","108","","","","","","","4","",""]þ# Remove the empty strings by only leaving the digits# → ["5","108","4"]
O # And sum these numbers (which is output implicitly)# → 117
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan: Operator Charcoal Sumsecara otomatis mengekstraksi angka dari sebuah string, namun jika string tersebut tidak mengandung karakter non-digit maka ia mengambil jumlah digital, jadi saya menggabungkan byte nol untuk menghindari hal ini. Hasilnya kemudian dilemparkan kembali ke string untuk output implisit.
Kenapa tidak. Jawaban regex wajib. Mungkin bisa berlabuh 6 dengan menggunakan Python 2, tapi apa pun. Tidak berlaku lagi karena saya menggunakan pendekatan eval alih-alih menggunakan peta.
import re;# Import regex module
x=lambda y: eval()# Run as Python code'+'.join()# Joined by '+'
re.findall('\d+',y)# A list of all matches of regex \d+ in string y
Yang cukup sederhana. Idi cubix akan mengambil integer pertama di input dan mendorongnya ke stack. Ini memiliki efek melewatkan semua karakter. Selebihnya berurusan dengan tambahan dan mendeteksi akhir input.
I! Masukkan bilangan bulat dan uji untuk 0
s+q;;Jika tidak nol, tukar TOS (gaya dan awal 0) dan tambahkan. Dorong hasil ke bagian bawah tumpukan dan bersihkan bagian atas. Kembali ke awal.
/i? Jika nol, arahkan ulang dan lakukan input karakter untuk memeriksa
|?;/Jika positif (karakter) berbelok ke kanan menjadi pantulan, ini kemudian mendorongnya kembali melalui checker ?dan berbelok ke kanan ke pop dari tumpukan, meninggalkan 0 pada TOS. IP kemudian dialihkan kembali ke loop utama.
I>p.O@ jika negatif (akhir input) belok kiri, lakukan input integer, bawa bagian bawah tumpukan ke atas, keluaran dan hentikan.
Jawaban yang lebih menarik, tetapi tidak langsung, (37 byte): {Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Penjelasan
Sum##N=>MatchAll&"\\d+"
Ini memiliki bentuk:
f##g=>h&x
yang, ketika diperluas dan dipatenkan, menjadi:
f ## (g => (h&x))
##menyusun dua fungsi bersama-sama, =>membuat fungsi memetakan fungsi kiri atas hasil fungsi yang tepat, dan &mengikat argumen ke sisi fungsi. Untuk input _, ini setara dengan:
{ f[Map[g, h[_, x]]] }
Pertama, kemudian, kita MatchAllmenjalankan karakter digit ( \\d+). Setelah itu, kami mengonversi setiap proses ke integer aktual menggunakan Nfungsi. Akhirnya, kami mengambil jumlah dari angka-angka ini menggunakan Sum.
s->{// Lambda functionlong c=0;// Sum is zerofor(Matcher m=Pattern.compile("\\d+").matcher(s);// Prepare regex matcher
m.find();// While the string contains unused matches...
c+=newLong(m.group()));// Add those matches to the outputreturn c;// Return the output}
Saya tidak berpikir ini benar: contoh (hanya) oleh OP menunjukkan bahwa digit berturut-turut harus membentuk bilangan bulat tunggal, jadi "123" harus menghasilkan 123, bukan 6 seperti kode Anda.
Michail
Sangat disayangkan, saya akan merevisinya ketika saya bisa
-4 bytesdengan menggunakan Long::newbukan Long::valueOf. -1 bytedengan memperpendek regex - jika kita sudah menghapus string kosong nanti, membuat beberapa tambahan saat pemisahan baik-baik saja.
Dijelaskan
s->// Lambda (target type is ToLongFunction<String>)
java.util.Arrays.stream(// Stream the result of
s.split("\\D")// splitting on non-digits).filter(t->!t.isEmpty())// Discard any empty strings.mapToLong(Long::new)// Convert to long.sum()// Add up the stream's values.
"the 5is 108 seCONd4 a"
akan menghasilkan117
karena5+108+4=117
). Juga, setiap 'pertanyaan' di sini harus memiliki tag kondisi kemenangan . Dalam hal ini saya menganggap itu [kode-golf] (menjadi solusi sesingkat mungkin)?string x='-12hello3';
ini Anda menghitung bilangan bulat negatif (yaitu, -12 + 3 === -9)?Jawaban:
Javascript,
3432 bytes=>eval(s.match(/\d+/g).join`+`)
Cocokkan semua digit dan bergabung dengan mereka dengan
+
mengubahnya menjadi 5 + 108 + 4, hasilkan eval.Hanya bekerja pada bilangan bulat positif.
Disimpan 2 byte berkat Arnauld
sumber
console.log(f.toString().length)
, tetapi tidak 100% andal.Perl 6 , 14 byte
Cobalah online!
Blok kode anonim yang mengembalikan jumlah semua seri digit
sumber
05AB1E ,
116 byteCobalah online.
Penjelasan:
sumber
¡
!R ,
644845 byteSetelah melihat entri PowerShell saya bisa bermain golf ini lebih jauh.
Cobalah online!
sumber
t=
lebih memadai di sini daripadatext
APL (Dyalog Unicode) , 11 byte
Fungsi preferensi diam-diam anonim
Cobalah online!
⊢
argumen⊆
dipartisi (jalankan True menjadi bagian, jalankan False adalah pemisah) oleh∊
keanggotaan∘
dari⎕D
set digit#⍎¨
mengevaluasi masing-masing di root namespace+/
jumlahsumber
Retina 0.8.2 , 8 byte
Cobalah online!
sumber
PowerShell , 29 byte
Cobalah online!
sumber
Arang , 5 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan: Operator Charcoal
Sum
secara otomatis mengekstraksi angka dari sebuah string, namun jika string tersebut tidak mengandung karakter non-digit maka ia mengambil jumlah digital, jadi saya menggabungkan byte nol untuk menghindari hal ini. Hasilnya kemudian dilemparkan kembali ke string untuk output implisit.sumber
Haskell , 50 byte
Cobalah online!
Mungkin ada cara yang lebih baik, tetapi ini adalah yang paling jelas.
sumber
Zsh , 21 byte
Cobalah online!
Sayangnya, bash mengeluh karena diartikan
0108
sebagai oktal. Zsh tidak (kecualisetopt octalzeroes
)sumber
Bash, 43 byte
Ganti setiap non-angka dengan spasi, lalu jumlahkan semuanya.
-5 byte berkat GammaFunction
sumber
{
}
bukando
done
.Python 3 ,
635956 byteKenapa tidak. Jawaban regex wajib.
Mungkin bisa berlabuh 6 dengan menggunakan Python 2, tapi apa pun.Tidak berlaku lagi karena saya menggunakan pendekatan eval alih-alih menggunakan peta.Penjelasan:
Cobalah online!
sumber
z == l[1]
bukanz is l[1]
. Kode saat ini dapat memberikan negatif palsu jika angkanya cukup tinggi.Java 10, 66 byte
Ini adalah lambda dari
String
keint
.Bilangan bulat negatif tidak didukung. Agaknya tidak apa-apa.
Cobalah secara Online
Ucapan Terima Kasih
sumber
[^0-9]
untuk\D
beberapa byte, Anda juga dapat beralihlong
danString
untukvar
(meskipun Anda harus mengubah jenis kembali keint
Ruby,
3227 karakterUcapan Terima Kasih
sumber
*?+
bukan.join ?+
untuk -7 byte. Lihat ary * strCubix , 17 byte
Cobalah online!
Lihat saja
Yang cukup sederhana.
I
di cubix akan mengambil integer pertama di input dan mendorongnya ke stack. Ini memiliki efek melewatkan semua karakter. Selebihnya berurusan dengan tambahan dan mendeteksi akhir input.I!
Masukkan bilangan bulat dan uji untuk 0s+q;;
Jika tidak nol, tukar TOS (gaya dan awal 0) dan tambahkan. Dorong hasil ke bagian bawah tumpukan dan bersihkan bagian atas. Kembali ke awal./i?
Jika nol, arahkan ulang dan lakukan input karakter untuk memeriksa|?;/
Jika positif (karakter) berbelok ke kanan menjadi pantulan, ini kemudian mendorongnya kembali melalui checker?
dan berbelok ke kanan ke pop dari tumpukan, meninggalkan 0 pada TOS. IP kemudian dialihkan kembali ke loop utama.I>p.O@
jika negatif (akhir input) belok kiri, lakukan input integer, bawa bagian bawah tumpukan ke atas, keluaran dan hentikan.sumber
PHP ,
4039 byteCobalah online!
Jalankan dengan
php -nF
input dari STDIN. Contoh:sumber
Haskell , 43 byte
Cobalah online!
Menggunakan
reads
.sumber
Depan , 13 byte
Ini berfungsi karena
I
cukup memindai aliran input untuk token berikutnya yang terlihat seperti angka, mengabaikan hal lain.Cobalah online!
sumber
QuadR , 9 byte
Cobalah online!
+/
jumlah dari⍎
evaluasi sebagai APL dari⍵
hasil dari\D
mengganti setiap non-digit dengansumber
Japt
-x
, 5 byteCobalah online!
sumber
Attache , 23 byte
Cobalah online!
Jawaban yang lebih menarik, tetapi tidak langsung, (37 byte):
{Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Penjelasan
Ini memiliki bentuk:
yang, ketika diperluas dan dipatenkan, menjadi:
##
menyusun dua fungsi bersama-sama,=>
membuat fungsi memetakan fungsi kiri atas hasil fungsi yang tepat, dan&
mengikat argumen ke sisi fungsi. Untuk input_
, ini setara dengan:Pertama, kemudian, kita
MatchAll
menjalankan karakter digit (\\d+
). Setelah itu, kami mengonversi setiap proses ke integer aktual menggunakanN
fungsi. Akhirnya, kami mengambil jumlah dari angka-angka ini menggunakanSum
.sumber
APL (NARS), karakter 13, byte 26
uji:
sumber
C # (Visual C # Interactive Compiler),
117111 byteCobalah online.
sumber
Perl 5
-p
, 17 byteCobalah online!
sumber
Japt v2.0a0
-x
, 3 byteTest drive lain untuk penerjemah (sangat-WIP) saya.
Cobalah
sumber
Java 8,
53130 byte105 byte + 25 byte untuk impor regex
Cobalah online!
Penjelasan
sumber
SNOBOL4 (CSNOBOL4) , 81 byte
Cobalah online!
sumber
Swift, 109 byte
Cobalah online!
sumber
Pip , 6 byte
Memperlakukan
-123
sebagai bilangan bulat negatif. Cobalah online!Jika tanda hubung harus diabaikan daripada diperlakukan sebagai tanda minus, maka berikut ini berfungsi untuk 7 byte :
XD
adalah variabel preset untuk`\d`
;+XD
menambahkan+
pengubah regex ke dalamnya, membuatnya cocok dengan 1 atau lebih digit.sumber
Java (JDK) ,
989493 byteCobalah online!
-4 bytes
dengan menggunakanLong::new
bukanLong::valueOf
.-1 byte
dengan memperpendek regex - jika kita sudah menghapus string kosong nanti, membuat beberapa tambahan saat pemisahan baik-baik saja.Dijelaskan
sumber