Di Rusia kami memiliki sesuatu seperti tradisi: kami ingin mencari tiket keberuntungan.
Seperti apa bentuk tiket reguler:
Seperti yang Anda lihat, tiket memiliki nomor enam digit.
Angka enam digit dianggap beruntung jika jumlah dari tiga digit pertama sama dengan jumlah dari tiga digit terakhir.
Nomor pada foto tidak beruntung:
038937
038 937
0 + 3 + 8 = 11
9 + 3 + 7 = 19
11 != 19
Tantangan
Dengan batas tertentu (termasuk), kembalikan jumlah nomor tiket keberuntungan yang terkandung di dalamnya.
Parameter
- Input: 2 bilangan bulat: bilangan bulat pertama dan terakhir dalam kisaran
- Input akan termasuk antara 0 dan 999999 inklusif
- Output: 1 integer: berapa banyak angka keberuntungan dalam kisaran
- Anda dapat mengambil input dan mengembalikan output dalam format apa pun yang dapat diterima
- Asumsikan nol terdepan untuk angka kurang dari 100000.
Contohnya
0, 1 => 1
100000, 200000 => 5280
123456, 654321 => 31607
0, 999999 => 55252
Ini adalah kode-golf sehingga jawaban terpendek dalam byte di setiap bahasa menang.
Jawaban:
05AB1E ,
8 (atau 10?)11 (atau 13?) ByteCobalah secara online atau verifikasi beberapa kasus uji lagi .
CATATAN: Dalam string dan bilangan bulat 05AB1E dapat dipertukarkan, sehingga nomor output tidak mengandung angka nol di depan. Namun ini bisa diperbaiki dengan 1 byte tambahan ( 12 byte ):
Cobalah secara online atau verifikasi beberapa kasus uji lagi .
+3 byte untuk memperbaiki bug angka dengan panjang 3 atau kurang (kisaran
[000000, 000999]
).Penjelasan:
EDIT: Sepertinya saya (dan sebagian besar jawaban lainnya) sedikit salah membaca tantangan dan jumlah angka yang ditanyakan alih-alih angka itu sendiri dalam kisaran. Dalam hal ini sebuah trailing
}g
dapat ditambahkan (tutup filter; dan dapatkan jumlah angka yang tersisa dalam daftar yang difilter), jadi sebagai gantinya1013 byte :Cobalah secara online atau verifikasi beberapa kasus uji lagi .
sumber
R
.C # (.NET Core) , 93 + 18 = 111 byte
Cobalah online!
18 byte untuk
using System.Linq;
. Saya kira format input dan output bisa fleksibel. Jadi saya mengambil dua bilangan bulat sebagai input (kisaran, inklusif).Beberapa hasil tes:
sumber
JavaScript (ES6), 66 byte
Mengambil input dalam sintaks currying
(m)(n)
, di mana m adalah batas atas inklusifeksklusifdan n adalah batas bawah inklusif.Cobalah online!
Bagaimana?
Kami menguji setiap nomor dengan berjalan melalui digit d i dan memperbarui total t :n dsaya t
Jika kita memiliki pada akhir proses, maka n adalah angka keberuntungan.t = 0 n
JavaScript (ES6), 67 byte
Format input yang sama.
Cobalah online!
Bagaimana?
38937 --> 38.937
['3','8','.','9','3','7']
+
:"3+8+.+9+3+7"
+.
dengan^
:"3+8^+9+3+7"
24
Jika , tidak ada titik desimal yang dihasilkan dan ekspresi yang dievaluasi hanyalah jumlah positif (falsy), kecuali (benar). Ini adalah hasil yang diharapkan dalam kedua kasus.n = 0n ≡ 0( mod1000 ) n = 0
sumber
Ruby ,
5654 byteCobalah online!
Metode:
sumber
Japt ,
3815 byte-23 terima kasih kepada Shaggy!
Pengajuan Japt pertama saya; terima kasih kepada Shaggy untuk semua bantuannya!
Cobalah online!
sumber
Python 3,
117113106135 byteIni adalah jawaban pertama saya, jadi saya yakin ada ruang untuk perbaikan.
Mendapat tiga digit pertama melalui divisi integer, dan tiga digit terakhir melalui modulo. Bilangan bulat pertama dan terakhir dalam kisaran yang diinput sebagai argumen dari
x
fungsi, sepertia
danb
, masing-masing. Keluarann
dicetak.Tidak Disatukan:
sumber
n=n+1
dengann+=1
dan memindahkannya tepat setelah pernyataan if (if...:n+=1
)a
danb
sebagai variabel yang dideklarasikan sebelumnya. Anda harus memiliki fungsi atau membawanya melalui inputn=0
bagian ke header, sepertidef x(a,b,n=0)
R ,
9386 byteLogika yang lebih pendek di akhir pujian dari @ Giuseppe /
Cobalah online!
Input integer. Pad dengan mereka
0
. Konversikan ke enam poin kode ASCII. MenyalahgunakanF
builtin.sumber
scipen
masalah. Baiklah.Sekam , 12 byte
Cobalah online!
Penjelasan
sumber
[000000, 001001]
harus menghasilkan2
(000000
dan001001
), tetapi menghasilkan1001
sebaliknya. (Saya menambahkan1,000,000
dan menghapus trailing1
sebagai perbaikan untuk itu, tidak yakin seberapa mudah / byte-efisien yang ada di Husk.)Arang , 15 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Saya awalnya berpikir bahwa itu adalah daftar angka keberuntungan yang diperlukan. Ini dapat dilakukan dalam 14 byte (dengan menghapus
L
, yang membutuhkan panjang daftar), atau dalam 20 byte jika Anda menginginkan beberapa format yang bagus:Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
Perl 5 +
-pl -MList::Util+(sum)
, 49 byteCobalah online!
Perl 5 +
-nl -MList::Util+(sum) -M5.010
, 50 byteSebaliknya, untuk menghasilkan setiap tiket adalah +1 byte:
Cobalah online!
sumber
Python 3 ,
8986 byte-2 Terima kasih kepada Tn. Xcoder.
-3 Menginspirasi dari jawaban Asone Tuhid.
Hasil tes:
Cobalah online!
sumber
sum
dapat membuat generator apa pun sehingga kurung[...]
tidak diperlukanrange(a,b+1)
spec sekarang menyatakan "inklusif" (jika bukan Anda bisa menggunakan*r
sebagai gantinyaa,b
- lihat jawaban Python 2 saya). Perhatikan juga bahwa spesifikasi sekarang mengkonfirmasi bahwa memang seharusnya jumlah yang dihasilkan.MATL , 24 byte
Cobalah online!
(-2 byte terima kasih kepada Luis Mendo.)
&:
- Buat rentang inklusif antara dua angka yang diberikan1e3&\
- 'divrem' - bagi dengan 1000 dan dapatkan pengingat dan negosiasi dasar dalam dua array.,
- lakukan dua kali!'03d'&V
- transpos dan konversi setiap nilai menjadi string tiga-lebar tanpa-empuk&s
- jumlahkan nilai setiap barisw
- aktifkan untuk mengeluarkan array pengingat dan lakukan ini lagi]
- akhir lingkaran=
- periksa kesetaraan (mengembalikan 1s di tempat-tempat di mana arraynya sama)s
- jumlah mereka untuk mendapatkan hitungan (output implisit)sumber
Kotlin ,
152119 byteCobalah online!
Mengambil dua bilangan bulat dari mengubahnya menjadi enam string simbol dan menghitung.
Dioptimalkan berkat mazzy dan solusinya hingga 119 byte.
Cobalah online!
sumber
{a:Int,b:Int->(a..b).map{"%06d".format(it)}.filter{(it[0]-'0')+(it[1]-'0')+(it[2]-'0')==(it[3]-'0')+(it[4]-'0')+(it[5]-'0')}.count()}
dc , 44 byte
Membawa dua argumen dari tumpukan kosong, output ke atas tumpukan.
Cobalah online!
Bit pintar di sini adalah penggunaan makro yang tidak disebutkan namanya (yaitu, tidak disimpan) yang diduplikasi sebelum eksekusi untuk menjalankan salinan dirinya pada bagian tiga digit lainnya.
Penjelasan
Makro dalam
[rA~rA~++rx]
memiliki efek "menghitung jumlah digit dari angka tiga digit yang kedua-ke-atas pada tumpukan, kemudian jalankan bagian atas tumpukan yang asli sebagai makro".Program utama:
sumber
Pascal (FPC) ,
163153 byteCobalah online!
Penjelasan
Berikut ini beberapa kode yang terlihat normal:
Cobalah online!
Lalu saya menyalahgunakan perilaku for for:
a
keb
), sehinggaa
dapat digunakan kembali sebagai variabel loop, menjatuhkani
;b
sebelum loop). Saya menggunakanb
sebagai wadah, menambahkannya ketika nomor keberuntungan ditemukan dan pada akhir loopb
jauh dari nilai lamanya dengan jumlah angka keberuntungan, sehinggab-a
memberikan hasil yang benar. Ini jatuhs
.Mengganti
d
dengan operasi langsung padaa
memperpendek loop. Menggantic
dengan operasi langsung padaa
dosis tidak mempersingkat loop, tetapi, setelah menjatuhkand
, loopbegin
danend
tidak perlu dan saya berakhir dengan hanya menggunakan 2 variabel :)$
memulai konstanta heksadesimal dalam kode golf. Meskipun mereka tidak menyimpan byte, mereka menghilangkan ruang yang dibutuhkan sebelum konstanta desimal.sumber
Java (OpenJDK 8) , 162 byte
... meminjam dari contoh Kotlin di atas.
Cobalah online!
Membandingkan jumlah byte String sama baiknya dengan menjumlahkan digit yang sebenarnya.
sumber
a->b->
), tetapi Anda harus memenuhi syarat sepenuhnyaIntStream
karena tidak ada dijava.lang
.java.util.stream.
di depanIntStream
kode dan byte-count Anda. Seperti yang disebutkan oleh Jakob , Anda dapat menyimpan byte dengan menggunakana->b->
, dan Anda juga dapat menyimpan beberapa byte tambahan dengan mengubahString.format
ke"".format
. Cobalah online: 139 byte . Jawaban pertama yang bagus. +1 dari saya. Selamat menikmati!PHP , 131 byte
Untuk menjalankannya:
Contoh:
Atau Coba online!
sumber
Perl 6 ,
5149 byteCobalah online!
Blok kode anonim yang mengambil dua angka dan mengembalikan jumlah yang beruntung. Waktu habis untuk input yang lebih besar
sumber
Jelly ,
98 byte-1 berkat Dennis (
rµ...E)S
->r...E€S
karena semuanya vektorisikan.)Sebuah dyadic Link yang menerima dua titik akhir dari kisaran (baik yang sebaliknya) yang menghasilkan jumlah tiket yang beruntung.
Cobalah online! Atau lihat test-suite
Bagaimana?
sumber
E€S
menyimpanµ
.Powershell, 85 byte
Skrip uji:
Keluaran:
sumber
Kotlin, 95 byte
.kt
untuk tes:Penjelasan
Hitung angka dari rentang di mana jumlah semua digit angka sama dengan jumlah ganda dari 3 digit pertama.
sumber
Stax , 14 byte
Jalankan dan debug , tapi bersabarlah!
sumber
Python 2 ,
8380 byte-3 dengan menggunakan pengamatan Asone Tuhid - pergi berikan kredit!
Cobalah online!
Sama seperti jawaban Jelly saya (tetapi input harus diurutkan di sini yaitu
a<=b
)75 byte untuk input
a, b+1
(yaitu rentang tidak termasuk batas kanan):Coba yang ini
sumber
Clojure, 102 byte
Memadukan string dan matematika tidak terlalu menyenangkan.
sumber
J , 35 byte
Cobalah online!
sumber
C (gcc),
9088 bytePort jawaban Java saya . Cobalah online di sini . Berkat ceilingcat untuk bermain golf dua byte.
Tidak Disatukan:
sumber
L'✐'
alih-alih10000
dan tetapkan10
ke variabel.L'…'
triknya, itu rapi; tetapi apakah itu menghemat byte? Menurut saya itu adalah karakter multi-byte, jadi saat menyimpan karakter, ia tidak dapat menyimpan byte ... atau bukan?Java 8,
10199 bytePendekatan yang berbeda dari jawaban Java lainnya . Alih-alih menggunakan stream dan Strings, ini menggunakan loop dan mengevaluasi angka-angka secara langsung. Cobalah online di sini .
Berkat ceilingcat untuk bermain golf dua byte.
Tidak Disatukan:
sumber
VBA (Excel), 159 byte
Menggunakan Jendela dan Sel Segera
[A1]
[A2]
sebagai input.sumber
F #, 110 byte
Cobalah online!
t
mengubah string menjadi angka dan merangkumnya.r
mengambil rentang angka daris
hinggae
, dan memfilter angka-angka yang tidak beruntung. Tiga digit pertama dikumpulkan olehn/1000
. Tiga digit kedua dihitung olehn-(n/1000)*1000
.sumber