Berdasarkan pertanyaan Berapa banyak bilangan bulat positif <1.000.000 mengandung angka 2? . Saya mencari solusi paling kreatif untuk menghitung semua Integer dari X
hingga Y
mengandung Integer Z
. Z
dapat dari 0 hingga Y
.
Setiap bilangan bulat yang ditemukan hanya dihitung satu kali, bahkan jika bilangan bulat Z
lebih sering muncul. Sebagai contoh:
Z = 2
123 counts 1
22222 also counts 1
Saya akan mulai dengan algoritma yang sangat sederhana yang ditulis dalam Java (karena dicintai oleh semua orang):
public class Count {
public static void main(String[] args) {
int count = 0;
for (int i = Integer.parseInt(args[0]); i <= Integer.parseInt(args[1]); i++) {
if (Integer.toString(i).contains(args[2])) {
count++;
}
}
System.out.println(count);
}
}
jika Anda menjalankan ini dengan
java -jar Count.jar 0 1000000 2
Anda mendapatkan ini sebagai hasilnya:
468559
Karena masalah ini tidak sulit untuk diselesaikan, itu hanya kontes popularitas . Jawaban yang paling banyak diposting diposting oleh 28 Februari menang!
popularity-contest
counting
Obl Tobl
sumber
sumber
N
bisa123
dan hanya akan cocok jika substring 123 ada?Jawaban:
bash (20)
Pemakaian
sumber
Funciton
Seperti biasa, karena ketinggian garis yang ditambahkan oleh StackExchange memecah garis, pertimbangkan untuk menjalankan
$('pre').css('line-height',1)
konsol browser Anda untuk memperbaikinya.Tidak seperti jawaban Funciton saya yang lain, yang ini tidak menggunakan deklarasi fungsi apa pun. Itu hanya sebuah program. Ia menggunakan ekspresi lambda, meskipun - fitur yang saya tambahkan ke Funciton pada bulan Desember :)
Mengharapkan input sebagai tiga bilangan bulat desimal (bisa negatif) dipisahkan oleh spasi (yaitu
x y z
). Bahkan,z
bisa berupa string apa pun; misalnya, bisa jadi hanya tanda minus (−
, U + 2212) untuk menghitung jumlah angka negatif dalam interval :)sumber
C #
Contoh
sumber
.Range
menerima(int start, int count)
, tidak(start, end)
. Saya selalu jatuh ke dalam perangkap ini sendiri :)APL (29)
Ini adalah fungsi yang mengambil
Z
sebagai argumen kiri dan interval[X,Y]
sebagai argumen kanan:sumber
Python 2.7
Perlu untuk kecepatan
Penjelasan
Penerapan
Demo
Perbandingan
@Dennis
@arshajii
sumber
key
dapat berupa bilangan bulat apa pun , bukan digit, antaralo
danhi
.Python 2.7
Solusi menggunakan ekspresi reguler:
sumber
re.findall
dalam satu__import__('re').findall('\d...
pesta -
32311714 karakter + panjang X, Y dan ZTerima kasih kepada devnull untuk sarannya
seq
!misal X = 100, Y = 200, Z = 20
misal X = 100, Y = 200, Z = 10
misal X = 0, Y = 1000000, Z = 2
sumber
echo
saat Anda bisa menggunakanseq
dan mengurangi panjangnya hingga 4 karakter? (1 untuk panjang perintah, 2 karena bisa menghilangkan kurung kurawal dan 1 untuk mengganti..
dengan satu spasi)xargs
danwc
- dan itu juga berjalan lebih cepat!PHP
Tidak ada yang orisinal, hanya merayakan posting pertama saya di sini.
Memasukkan
Keluaran
sumber
Scala:
args(0).toInt to args(1).toInt count (_.toString contains args(2))
sumber
Rubi
Ini adalah contoh yang bagus untuk menggunakan pengurangan!
Memasukkan:
Keluaran:
sumber
Golf Python - 61
Python bukan golf
sumber
Java8
Menggunakan hal-hal IntStream baru, ini menjadi dasarnya satu liner, jika Anda mengabaikan hal-hal Java Framework wajib:
Itu bisa dijalankan di sini , walaupun saya memang harus meng-hardcode nilai-nilainya.
sumber
F #
Solusi ini digunakan
IndexOf
untuk mencari string, kemudian sedikit mengutak-atik angka untuk mengkonversi hasilnya menjadi 1 jika ditemukan, dan 0 jika tidak ditemukan, kemudian jumlah hasilnya:Dan itu bisa disebut seperti ini:
sumber
Ekspresi Reguler
Mengikuti akan menghitung angka 1 hingga 49.
sumber
R 23
2527karakterDapatkan saja alat yang tepat untuk pekerjaan itu. Penggunaan sederhana grep di R, tidak ada yang mewah.
Inilah yang dilakukannya:
grep
semua instance2
dalam vektor0
sampai10e6
dan menghitung jumlah hasil yang digunakanlength
.length(grep(2,0:100000,value=TRUE))
Hasil:
[1] 468559
Di luar kantor, Anda dapat menulis fungsi yang menggunakan angka-angka sebagai input, seperti yang ditunjukkan pada contoh.
Sekarang Anda dapat memanggil
count
dengan x, y dan z, jika tidak disetel (secara default), nilai untuk x, y dan z masing-masing adalah 0, 1000000 dan 2. Beberapa contoh:atau
atau
Beberapa di sini menganggap waktu itu penting, menggunakan fungsi ini dalam R membutuhkan waktu sekitar 1 detik.
sumber
JavaScript (ES6), 63
Pemakaian:
Tidak golf:
sumber
Rubi
Pada dasarnya saya mengambil jawaban Pablo dan semi-golf (38 karakter jika Anda menjatuhkan spasi yang tidak perlu) menjadi contoh penggunaan yang tidak terlalu bagus
select
.Ini memilih setiap indeks dalam rentang
(x .. y)
yang berisiz
. Sayangnya, hasil antara ini disimpan dalam array, yang ukurannya kemudian dikembalikan.Kelihatannya cukup rapi baik secara sintaksis maupun semantik, meskipun
i[z]
bagian itu tampaknya tidak masuk akal.Ini bekerja karena
x
dany
sebenarnya adalah string, bukan angka! Dengan demikian masingi
- masing juga merupakan string, dani[z]
tentu saja memeriksa apakah stringz
tersebut terkandung dalami
.sumber
Python 2.7, 70 tanda
Lebih pendek, 65 tanda
sumber
range(0,y+1)
jikarange(y+1)
melakukan hal yang sama. Juga, Anda dapat menghapus sebagian besar ruang tersebut jika Anda bermain golf ...Menggunakan ruby
Enumerable#grep
:sumber
T-SQL
Jika saya bisa berasumsi variabel
@X
,@Y
dan@Z
yang tersedia:Dengan tabel (nomor besar sembarang;) yang ada - 65
Dengan CTE rekursif - 127
Jika variabel perlu didefinisikan secara eksplisit:
Tambahkan 58 pada kedua jawaban - Tabel angka: 123, CTE Rekursif: 185
Saya tidak tahu berapa banyak memori yang dapat digunakan oleh CTE rekursif, tetapi tentu saja tidak akan memenangkan kontes kecepatan. Contoh mencari 2 dalam 0 hingga 1000000 membutuhkan 8 detik pada sistem saya.
Inilah SQL Fiddle jika ada yang ingin bermain dengannya. Kueri 1000000 membutuhkan waktu 30+ detik untuk dijalankan.
sumber
Rebol
Contoh penggunaan dalam konsol Rebol (REPL):
sumber
PowerShell
Dua solusi, keduanya
4037 karakter.Untuk semua versi PowerShell:
PowerShell V3 ke atas memiliki
sls
alias untukSelect-String
. Ini mengharuskan@
untuk memaksa array jika hanya satu nilai yang membuatnya melalui pipa.sumber
Batch
Sedikit lebih mudah dibaca -
Bagus dan sederhana. Menggunakan manipulasi string untuk memeriksa apakah variabel
!b!
sama dengan dirinya sendiri tanpa input pengguna ketiga,%3
(!b:%3=!
).sumber
Mathematica
Cara pertama: string
x, y, z
dikonversi menjadi string. Jika string-integer tidak bebasz
, itu dihitung.Contohnya
Cara kedua: daftar digit
Contohnya
sumber
GolfScript
Saya sudah mencoba untuk meningkatkan keterampilan GolfScript saya jadi saya pikir saya akan mencobanya dengan pertanyaan ini. Inilah yang saya pikirkan:
Ini dapat dipecah seperti ini:
Meskipun itu adalah GolfScript, dengan tujuan lebih untuk membuatnya relatif efisien daripada kompak, jadi saya yakin seseorang dapat menunjukkan berbagai cara ini dapat ditingkatkan.
Demonstrasi : Perhatikan bahwa saya telah mengurangi Y di demo sehingga dapat selesai dalam <5 detik.
sumber
PHP - 112
Tidak ada loop yang terlihat, tetapi sedikit berat pada memori!
Pemakaian
php script.php 0 1000000 2
sumber
ECMAScript 3 hingga 6
(javascript, JScript, dll)menggunakan regex:
kerusakan:
menggunakan indexOf:
kerusakan:
fungsi-tubuh ini adalah satu karakter kurang dari florent, jadi ketika menggunakan
=>
notasi fungsi ES6 total akan menjadi 62 karakterContoh panggilan:
f(0,1e6,2)
Contoh penggunaan:
alert( f(0,1e6,2) );
JSFiddle di sini
PS: kedua fungsi di atas mengembalikan variabel lokal mereka
r
.Jadi ketika membocorkan variabel hasil
r
ke lingkup global, orang dapat lagi menyimpan 10 karakter:Contoh penggunaan:
alert( f(0,1e6,2)||r );
sumber
Delphi - 120
Agak banyak untuk seleraku, akan melihat apakah aku bisa mendapatkan beberapa.
sumber
Python 2.7 - 50 karakter
Sedikit penghematan pada jawaban Python yang ada.
Menggunakan trik berikut:
z+x
dalamn
'Beraksi:
sumber
k [28 karakter]
Pemakaian
sumber
$:[z]
dengan($z)
.