Memasukkan
Bilangan bulat n (≥ 1) dan digit d (bilangan bulat sehingga 0 ≤ d ≤ 9).
Dalam urutan apa pun; dari stdin atau parameter atau apa pun; ke suatu program atau fungsi; dll.
Keluaran
Bilangan bulat dari 1 sampai n inklusif (agar) yang representasi desimal mengandung bahkan jumlah d s. (Artinya, bilangan bulat dalam daftar adalah bilangan bulat yang memiliki, masing-masing, jumlah yang lebih dari d s.)
Dalam format standar apa pun, dll. Secara khusus, output tidak perlu direpresentasikan dalam desimal.
Jika output sebagai string tunggal, bilangan bulat harus dipisahkan entah bagaimana (spasi, koma, baris baru, byte nol, apa pun).
Contohnya
in(d,n) ↦ out
1,12 ↦ 2 3 4 5 6 7 8 9 11
0,111 ↦ 1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,41,42,43,44,45,46,47,48,49,51,52,53,54,55,56,57,58,59,61,62,63,64,65,66,67,68,69,71,72,73,74,75,76,77,78,79,81,82,83,84,85,86,87,88,89,91,92,93,94,95,96,97,98,99,100,111
Terima kasih
Untuk kuintopia untuk judul.
Jawaban:
Jelly, 7 byte
Cobalah online!
Bagaimana itu bekerja
sumber
05AB1E ,
1110 byteKode:
Penjelasan:
Cobalah online
Menggunakan pengodean CP-1252 .
sumber
Haskell,
69635250 byteSolusi straightforwared untuk posting pertama saya di sini. Ini digunakan
show
untuk menghitung jumlahd
's. Saya secara eksplisit tidak menggunakanChar
sebagai masukan untukd
, yang akan menyelamatkan126 (setelah mengedit Damien) byte.EDIT: 11 byte lebih sedikit berkat Damien! EDIT 2: 2 byte lagi lebih sedikit berkat nimi!
sumber
Befunge,
1080945 byteSkor diberikan bahwa kami menghitung seluruh kotak, termasuk baris baru, yang masuk akal. Anda dapat menyalin tempel kode ke interpeter . Berikan dua input, pertama d dan kemudian n . Solusi ini tidak berfungsi untuk nilai yang lebih besar dari n > 999.
Ini jelas tidak akan menjadi pesaing untuk hadiah utama, tapi saya sudah lama ingin menerapkan codegolf di Befunge untuk saat ini, jadi saya memutuskan untuk melakukannya saja. Saya pikir ini tidak akan mendekati solusi Befunge yang optimal, karena ini adalah hal aktual pertama yang saya lakukan di Befunge. Jadi, saran dipersilahkan, jika Anda memerlukan klarifikasi atau informasi lebih lanjut, silakan beri tahu saya di komentar.
Mencoba penjelasan:
Di kolom pertama ke bawah kita membaca bilangan bulat dari input, tambahkan 48 (6 * 8, Anda akan melihat ini lebih sering) untuk mengubahnya menjadi nilai ASCII yang sesuai dan memasukkannya ke
(10, 0)
.&
- baca input68*+
- tambahkan 4855+0p
- beri nilai pada(10, 0)
Perhatikan bahwa
d
at(1, 0)
hanya cara mudah untuk mendapatkan angka 100 di tumpukan.Setelah itu, kita pergi ke timur dan membaca integer lain dan masuk ke apa yang saya sebut ASCIIfier. Ini mengubah angka saat ini menjadi serangkaian karakter ASCII. ASCIIfier adalah potongan segi empat dari
(13, 12)
hingga(26, 17)
. Ini terdiri dari dua loop, pertama menghitung hunder dan dari puluhan dan menempatkan mereka ke dalam tiga digit di(6, 0)
dan(5, 0)
. Setelah itu digit terakhir dimasukkan ke dalam(4, 0)
. Jadi angkanya sebenarnya terbalik.Setelah meletakkan integer saat ini ke dalam serangkaian karakter ASCII, kami bergerak sedikit lebih ke selatan untuk menghapus nol yang berurutan. Dengan demikian, setelah itu, apa yang awalnya tiga nol di atas, akan menjadi angka saat ini, tanpa nol yang diawali.
Lalu kami naik kembali, jauh ke utara, di mana kami meletakkan tiga digit di tumpukan. Kami mengulangi tiga digit di loop atas, setiap kali menambah penghitung terletak di
(1, 1)
jika digit saat ini sesuai dengan input dKetika itu selesai, kita pergi dan memeriksa untuk melihat apakah penghitung yang terletak di
(1, 1)
ganjil atau genap. Jika itu genap, kami menampilkan angka saat ini dan beralih ke loop luar yang besar untuk mengurangi nilai saat ini dan mulai dari awal lagi.sumber
Python 2, 50 byte
Fungsi rekursif yang mengambil digit
d
sebagai string dan batas atasn
sebagai angka.Hitungan angka
d
di 'sn
diuji untuk menjadi lebih dengan mengambil itu sedikit pelengkap modulo 2, yang memberikan1
bahkan dan0
untuk ganjil. Banyakn
ini menambahkan ke daftar, dan fungsi berulang ken-1
, berhenti melalui hubung singkat logis pada daftar kosong ketikan==0
.Jika output dapat diberikan dalam urutan menurun, satu byte dapat disimpan, untuk 49 byte:
Solusi 51 byte lama:
Fungsi anonim yang mengambil digit
d
sebagai string dan batas atasn
sebagai angka.Dua trik digunakan:
range
adalah indeks-nol0...n-1
, jadi kami menambahkan satu untuk setiap nilai potensialx
. Kemudian, untuk menghitungd
's dix+1
, menghemat karakter untuk menggunakan negasi~x
sebagai gantinya.~_%2
, bit-flip yang pertama untuk mengganti paritas, kemudian mengambil bit terakhir dengan&1
(sama seperti di%2
sini), menghasilkan nilai yang benar hanya jika yang asli genap.sumber
Pyth, 10 byte
Cobalah online. Suite uji.
sumber
Lua, 86 Bytes
Jika menggunakan pemisah yang tidak konsisten diizinkan, saya bisa menggantinya
io.write
denganprint
, artinya angka akan dipisahkan oleh satu atau beberapa baris baru.Ini adalah program penuh, yang harus disebut seperti ini:
lua file.lua d n
.Ini menghapus semua non-
d
karakter dari angka saat ini dan menggunakan ukuran string yang dihasilkan untuk memutuskan apakah kita harus mengeluarkannya atau tidak.sumber
JavaScript (ES6) 64
Fungsi anonim dengan output ke konsol. Implementasi langsung menggunakan
split
untuk menghitung angka.Output menggunakan
alert
akan menjadi 6 byte lebih sedikit, tapi saya benar-benar tidak menyukainya (dan saya toh tidak akan mengalahkan bahasa mainan)sumber
MATL ,
1210 byteInput pertama adalah n , kedua adalah d sebagai string. Sebagai contoh:
Cobalah online!
sumber
Ruby,
4742 byteJalankan dengan d dan n sebagai parameter baris perintah, mis
sumber
?1
untuk"1"
. Dan itu kurang cantik, tapi byte lebih pendek, untuk melakukan%2>0
alih-alih.odd?
PowerShell,
6255sunting: menggunakan blok param dalam hal ini lebih pendek. menghapus beberapa ruang yang berlebihan
Bukan bahasa golf tapi itu satu-satunya yang saya benar-benar tahu. Ini akan berhasil disimpan sebagai skrip dan disebut seperti ini
M:\Scripts\cgNeverTellMeTheOdds.ps1 1 12
. Argumen pertama adalah digit d dan yang kedua adalah integer n .Buat array angka 1 ke n . Untuk masing-masing konversi itu menjadi array karakter. 10 akan menjadi 1,0. Menggunakan
-match
sebagai operator array mengembalikan semua elemen yang cocok dengan digit d . Hitung jumlah elemen yang dikembalikan dan mod 2 hasilnya. Hasilnya akan 0 untuk genap dan 1 untuk ganjil. 0 sebagai boolean adalah false sehingga kami menggunakan!
untuk loop untuk mengevaluasi hasil ganjil ke false dan bahkan hasil menjadi benar.Output adalah baris baru yang dibatasi pada konsol.
sumber
Retina ,
99105 bytePerhatikan spasi tambahan.
<empty>
mewakili garis kosong.Mengambil input seperti
1 12
. Output adalah ruang yang dipisahkan dalam urutan menurun.Saya dimodifikasi
0*1(0|10*1)*
untuk mencocokkan angka ganjil\1
dalam angka. Aku berubah0
ke(?!\1)\d
, dan1
untuk\1
menciptakan garis regex lama Anda lihat di atas. Memahami cara kerja regex tertaut sangat penting.Cobalah online
Penjelasan komentar tentang versi lama
Jika pesanan menurun baik-baik saja
sumber
1+
dan$.0
melakukan konversi dari unary back ke desimal.Utilitas Bash + GNU, 37
sumber
*
berikut pembukaan kurung tampaknya berlebihan. Menghapusnya menghemat 1 byte.Python 3.4,
92857985 byteMenyimpan 7 byte berkat Mego
Menyimpan 6 byte lainnya berkat mbomb007
kembali 6 byte itu karena Python 3.x
Ini adalah pukulan pertama saya di kode golf, jadi tidak ada yang terjadi!
sumber
`d`
sebagai gantistr(d)
, dan jika Anda menganggap n adalah bilangan bulat (<2 ** 32), Anda dapat menggunakan`i`
sebagai gantinyastr(i)
.__repr__
di python 2, mereka dihapus di python 3. Anda mungkin harus mengubah header Anda untuk mencerminkan pembatasan itu.Perl 6, 38 byte
sumber
Brachylog , 32 byte
Mengharapkan N sebagai input dan digit sebagai output, mis
brachylog_main(12,1).
Penjelasan
sumber
Mathematica, 54 byte
sumber
Perl, 28
2931byteTermasuk +2 untuk
-an
Jalankan dengan digit spesifikasi dan hitung pada garis berurutan pada STDIN:
sumber
Oracle SQL 11.2,
11182 bytesumber
Kotlin, 136 byte
Program yang berfungsi penuh, mengambil argumen sebagai: nd
Cobalah online!
sumber
Java 8, 84 byte
Ini adalah ungkapan lambda untuk
BiConsumer< Integer, Integer>
:Penjelasan:
untuk setiap angka antara 1 dan n, konversi angka menjadi string dan pisahkan dengan menggunakan d sebagai pembatas. Jika itu dibagi menjadi beberapa bagian ganjil, lalu cetak nomor diikuti oleh baris baru.
sumber
Retina,
727155Terima kasih banyak untuk Martin, yang secara tidak sengaja mengingatkan saya pada kelompok pencocokan atom!
Cobalah online!
Penjelasan:
Ganti nomor, tetapi bukan digit, dengan padanan unary.
\B
cocok dengan setiap posisi (lebar nol) yang bukan batas kata. Perhatikan bahwa ini tidak akan cocok dengan yang berikut ini: awal string, akhir string, atau posisi apa pun di sekitar karakter koma. Masing-masing dari non-batas ini kemudian diganti dengan baris baru dan kemudian string yang muncul sebelum pertandingan ($`
). Ini memberikan daftar seperti:Di mana
d
ada angka desimal tunggal.Ini mengubah semua daftar
1
s menjadi representasi desimal panjangnya. Ini dengan mudah tidak akan mempengaruhi1
yang bisa sebelum koma, karena itu panjangnya selalu1
juga.Di sini, itu
G
nyalakan mode grep, yang berarti bahwa garis yang cocok dengan regex disimpan, dan garis lainnya dibuang. Regex ini rumit, tetapi pada dasarnya cocok dengan grup 2 digit terdepan (disimpan dalam grup capture 1, jadi kita bisa merujuknya dengan\1
).Kuncinya di sini, adalah bahwa jika gagal ketika menggunakan kecocokan non-serakah hingga dua penampilan awal dari digit, maka kemudian akan kembali dan coba lagi, dengan
.
pencocokan atas digit. Ini akan membuat angka seperti 111 cocok ketika digit kami adalah 1. Oleh karena itu, kami menggunakan?>
untuk membuat atom pertandingan, pada dasarnya mencegah regex dari mundur ke sebelum cocok dengan nilai ini. Pencocokan atom bekerja seperti pencocokan possesif seperti dalam rasa tertentu. Karena*
meta-karakter diikuti oleh karakter?
yang.
akan cocok hingga itu mampu mencocokkan apa yang kami simpan di cocok dengan karakter tambahan, digit kami , yang akan menciptakan kecocokan yang tidak valid.\1
. Kemudian setelah kita melakukan ini dua kali, "memori" ekspresi reguler dihancurkan, mencegah perilaku yang biasanya terjadi, di mana ia kembali dan memiliki.
\1
Kemudian, kami memeriksa bahwa dari posisi akhir, setelah mencocokkan kelompok berulang dari dua digit input, bahwa kami tidak dapat mencocokkan digit input lainnya.
Di sini kita hanya menghapus digit dan koma dari masing-masing string, jadi kita hanya mendapatkan jawaban yang bagus.
sumber
Python 2,
5754 bytePemakaian
sumber
Julia, 44 byte
Ini adalah fungsi yang menerima dua bilangan bulat dan mengembalikan array.
Kami mulai dengan set bilangan bulat dari 1 hingga
n
inklusif. Untuk setiap bilangan bulati
, kami menentukan digit desimal mana yang sama dengand
, yang menghasilkan array Boolean. Kitasum
ini untuk mendapatkan jumlah kemunculand
sebagai digiti
, danfilter
rentang asli berdasarkan paritas jumlah.Coba di sini
sumber
Serius, 17 byte
Mengambil input sebagai
n\n'd'
(integer, baris baru, string).Cobalah online!
Penjelasan:
sumber
Mathematica, 45 byte
Menggunakan built-in
DigitCount
.sumber
Japt,
1312 byteInput n , lalu d dibungkus dengan tanda kutip.Uji secara online!
Bagaimana itu bekerja
sumber
CJam, 38 byte
Penjelasan
sumber
Scala, 66 byte
sumber
R, 145 byte (Saya yakin ada cara untuk mempersingkat ini lebih lanjut) :)
sumber