Ambil string sebagai input, dan lakukan penambahan / pengurangan semua digit dalam string dan hasilkan jumlah operasi tersebut sebagai hasilnya.
Aturan
- Digit dalam string dibaca dari kiri ke kanan
- Jika digit (n) ganjil, lakukan penambahan dengan digit berikutnya (n + n1)
- Jika digit (n) genap, lakukan pengurangan dengan digit berikutnya (n - n1)
- Jika Anda telah mencapai digit terakhir dalam string, lakukan operasi dengan digit pertama dalam string
- Output akan menjadi jumlah dari semua nilai yang dihasilkan
- Jika hanya ada satu digit dalam string, lakukan operasi dengan sendirinya (n + n atau nn)
- Jika tidak ada digit dalam string, output adalah 0
Contoh
Input: r5e6o9mm!/3708dvc
Process: (5+6) + (6-9) + (9+3) + (3+7) + (7+0) + (0-8) + (8-5)
Output: 32
Catatan
- Fungsi atau program lengkap diterima
- Panjang input maksimum akan tergantung pada batas bahasa Anda untuk input string
- Tidak ada batasan pada input karakter, tetapi hanya digit setengah lebar yang dihitung untuk output
- Bytes paling sedikit menang
""
,"0"
,"1"
Jawaban:
Jelly ,
17 1512 byteCobalah online!
Coba uji kasus.
Program ini hanya menyimpan digit yang mengikuti digit ganjil kemudian menghitung dua kali jumlah.
sumber
K (oK) ,
47434031 byteLarutan:
Cobalah online!
Penjelasan:
Hapus semua dari string yang bukan angka (sementara juga mengkonversi), modulo 2, kalikan dengan 2, kalikan dengan x yang diputar oleh 1, dan jumlahkan.
Solusi naif:
Hapus semuanya dari string yang bukan angka (sambil juga mengonversi), ambil jendela geser 2-item, cari tahu apakah itu ganjil atau genap, terapkan add / kurangi seperlunya, lalu jumlahkan.
Cobalah online!
Catatan:
sumber
x:48!x@&x in,/$!10
->x^:(x-:48)^!10
':
sebagai "jendela geser" - menarik.Python 2 , 86 byte
Cobalah online!
sumber
Perl 6 , 41 byte
Cobalah online!
Menggunakan logika yang sama dengan jawaban Jelly dylnan . Jumlah ini hanya digit yang mengikuti angka ganjil dan kemudian dikalikan dengan 2.
sumber
Powershell,
807876 byte-2 byte terima kasih Neil dengan solusi Retina
-2 byte terima kasih AdmBorkBork
Skrip uji:
Penjelasan
Pertama-tama: itu bisa menambahkan 2 * n jika digit sebelumnya ganjil, dan 0 jika digit sebelumnya genap.
Ekstra, 99 byte
Terinspirasi oleh @Neil. Regex angka yang cocok hanya dengan 'digit sebelumnya ganjil'.
Matches
adalah variabel otomatis .sumber
|?{$_}
untuk-ne''
dan yang lain dengan pindah$d="$args"-split'\D*'-ne''
ke parens like($d="$args"-split'\D*'-ne'')+$d[0]
.MATL ,
1817 byteCobalah online!
(-1 byte berkat Luis Mendo / Giuseppe / keduanya!)
Penjelasan:
Ide dasarnya adalah bahwa angka yang mengikuti angka genap dapat diabaikan, sedangkan angka yang mengikuti angka ganjil digandakan - dan hasil akhirnya adalah jumlah dari nilai yang digandakan.
Saya tidak berpikir
f
setelah pemeriksaan paritaso
akan diperlukan, tetapi untuk beberapa alasan MATL tidak melihat array dari 0 dan 1 yang dihasilkan dario
sebagai array logis, sebagai gantinya mengambil mereka sebagai indeks numerik dan indeks ke posisi1
danend
.sumber
!U
bukan48-
. Transpos tampaknya tidak membahayakan di sini.o
untukdouble
input sajamod(...,2)
, jadi outputnyadouble
.NaN
Trik input yang bagus ! Jika itu dimaksudkan untuk menyelesaikan keluaran luar biasa dalam STDOUT, Dennis punya ide dan mungkin akan segera memperbaikinya!U
bukannya48-
o
memberikan output array logis kemudian - atau tidak? (Harus saya akui saya tidak pernah benar-benar melihat ke sistem tipe numerik MATLAB.) Dan ya, saya pikirNaN
akan membuat sentinel yang bagus karena tidak mungkin menjadi input aktual di mana saja, tetapi bagus untuk mengetahui bahwa itu tidak akan diperlukan lebih lama lagi !K (ngn / k) , 33 byte
Cobalah online!
{
}
adalah fungsi dengan argumenx
!10
adalah daftarnya0 1 ... 9
$
konversikan ke string,/
menggabungkanx^
artinyax
tanpa apa yang di kananx^x^
berartix
berpotongan dengan apa yang ada di sebelah kanan, yaitu hanya menyimpan digit darix
-48+
kurangi48
, yang merupakan kode ASCII dari"0"
x:
menetapkan kex
2!
mod 22*
dikalikan dengan 21_x,*x
adalah satu tetes:x
diikuti oleh yang pertama darix
; yaitux
diputar ke kiri dengan satu langkah+/
jumlahsumber
Japt (v2.0a0),
2519 byte-6 byte terima kasih kepada Shaggy .
Coba di sini .
Ini berfungsi tanpa digit saat ini! Input adalah daftar karakter.
sumber
x
. Ping saya dalam obrolan jika Anda memiliki pertanyaan.05AB1E ,
129 byteMenghemat 1 byte di atas metode naif dengan memanfaatkan trik paritas dylnan,
tersimpan 3 byte berkat Tn. Xcoder
Cobalah online!
Penjelasan
sumber
þÀIþ€ÉÏSO·
,þÀDÁ€ÉÏSO·
,þÀ¹þ€ÉÏSO·
atauþÀsþ€ÉÏSO·
lulus semua kasus uji untuk -2 byte?þDÁ€ÉÏSO·
untuk -3 :)Retina , 37 byte
Cobalah online! Penjelasan:
Tambahkan duplikat dari digit pertama.
Cocokkan apa pun yang angka pertama sebelumnya aneh.
Ubah semua kecocokan menjadi unary dan gandakan. (Non-digit diperlakukan sebagai nol.)
Ambil jumlahnya. Jika tidak ada kecocokan, maka ini menghasilkan nol sesuai kebutuhan.
Yang terbaik yang bisa saya lakukan di Retina 0.8.2 adalah 44 byte:
Cobalah online! Penjelasan:
Hapus yang bukan digit.
Tambahkan salinan digit pertama.
Hapus digit yang tidak mengikuti digit aneh.
Konversikan ke unary.
Gandakan mereka.
Ambil jumlahnya.
sumber
Jelly , 15 byte
Cobalah online!
sumber
1ịṭƊ
JavaScript (ES6), 56 byte
Mengambil input sebagai array karakter.
Cobalah online!
Berkomentar
sumber
JavaScript (Node.js) ,
85848382 byte-1 byte berkat ovs
Cobalah online!
Mengambil input string, menemukan digit sebagai array karakter atau mengembalikan array kosong jika tidak ditemukan, dan kemudian menggunakan tipe paksaan untuk memastikan nilai ditambahkan / dikurangi dengan benar. Pencarian maju preincrements indeks dan menggunakan pemeriksaan nol untuk singkatnya, dan kemudian bagian terakhir memeriksa apakah angka ganjil atau genap untuk kemudian memaksa penambahan atau pengurangan (+ dan - adalah -, dll)
sumber
n-0
bisa+n
R , 58 byte
Cobalah online!
sumber
array
output.xxx
sehingga 68 byte dengan menggunakan perubahan dalam pengindeksana
untuk menghasilkany
.strtoi
bukanas.double
, tapi ya, itu seharusnya baik-baik saja.Perl 5 , 48 byte
Cobalah online!
Saya cukup suka bagaimana samar ini terlihat, tetapi itu adalah lingkaran yang cukup mudah di sekitar semua angka dalam string.
sumber
Julia 0,6 ,
7769 byteCobalah online!
sumber
C Tajam 180 byte
Ini bukan golf yang bagus, lol.
Tidak Disatukan:
sumber
Stax , 14 byte
Jalankan dan debug itu
Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.
Jalankan yang ini
sumber
JavaScript (ES6), 52 byte
Diharapkan input sebagai array karakter. Peringatan: Karena penggunaan bit-shifting, output memiliki batas atas
2^31-1
Cobalah online!
Penjelasan
Pada dasarnya menggandakan jumlah digit mengikuti nilai ganjil.
sumber