Buat program yang mencetak semua bilangan bulat secara inklusif antara interval (a, b)
, dan mengganti kelipatan 8 dalam urutan dengan acak (terdistribusi secara seragam, tidak tergantung pada karakter lain), karakter ASCII non-numerik, non-spasi putih, dapat dicetak.
Asumsikan 0 <a <b dalam semua kasus.
Jika jumlahnya memiliki lebih dari 1 digit, pastikan jumlah karakter dalam pertandingan yang cocok!
Contoh:
(1, 16) -> 1 2 3 4 5 6 7 $ 9 10 11 12 13 14 15 n@
(115, 123) -> 115, 116, 117, 118, 119, :F<, 121, 122, 123
(1, 3) -> 1 2 3
Non-Contoh:
(1, 16) -> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
(115, 123) -> 115 116 117 118 119 $ 121 122 123
Ini kode golf, jadi kode terpendek dalam byte menang!
Pemenang saat ini:
Pyke (21 bytes) oleh muddyfish
Paling Populer:
Jawaban:
Pyke,
2221 byteCoba di sini!
Mengambil input dalam bentuk:
higher
,lower
sumber
Python 2, 126 byte
Cobalah online!
Terima kasih banyak kepada Flp.Tkc dan EasterlyIrk atas semua bantuan mereka!
sumber
b/a
sebagai gantinyaa<=b
dan Anda tidak membutuhkannya;
di akhir. Jugaimport random,string
menghemat beberapa byte. tio.run/nexus/…Python 2 , 119 byte
Cobalah online!
sumber
zsh,
10098 byteDua argumen input dilewatkan sebagai argumen baris perintah, dan angka-angka tersebut dikeluarkan pada baris yang berbeda.
sumber
Mathematica, 96 byte
Penjelasan
Untuk input
m
dann
:Menghasilkan
{m, m + 1, m + 2, ... , n}
Untuk semua nomor yang dapat dibagi 8 (sebutkan itu
a
), terapkan aturan penggantian ini:Dapatkan daftar semua karakter ASCII yang dapat dicetak, kecuali digit.
Pseudo-acak memilih
Floor[Log10[a] + 1]
karakter dari daftar, memungkinkan duplikat.Bergabunglah dengan karakter.
sumber
FromCharacterCode
(r=Range)@##/.a_?(8∣#&):>FromCharacterCode[Join[33~r~47,58~r~127]~RandomChoice~⌊Log10@a+1⌋]<>""&
R, 73 byte
Membaca input dari stdin dan menggantikan angka yang dapat dibagi
8
dengan sampel karakter ascii yang dipilih secara seragam dalam rentang32...47, 58...126
. Untuk menggambar sampel acak, kita membutuhkan vektor karakter, sayangnyaintToUtf8()
mengembalikan satu string daripada vektor sehingga kita juga harus membuat vektor pada rentang menggunakansapply
.sumber
Python 2, 126 byte
(Seseorang tidak hanya mengalahkan Dennis)
Melihat saya melakukan banyak pekerjaan pada jawaban heather, saya pikir saya akan memposting solusi saya sendiri juga.
Ini adalah fungsi yang mengambil dua argumen dan mencetak langsung ke
STDOUT
.127 byte
Ini adalah fungsi anonim tanpa nama - untuk menggunakan, menetapkan ke variabel (seperti
f
), dan kemudian memanggil denganf(a, b)
. Ini mengembalikan output sebagai daftar.sumber
Pip , 28 byte
Mengambil angka sebagai argumen baris perintah dan mencetak daftar hasil baris baru. Cobalah online!
Penjelasan:
sumber
JavaScript (ES6), 114 byte
Mereka sangat built-in dengan nama 23-byte ....
sumber
MATL , 26 byte
Cobalah online!
Penjelasan
sumber
Pyth , 24 byte
Cobalah online!
Penjelasan:
sumber
Bash + apg ,
64, 76 byteEDIT:
Golf
Uji
sumber
crazy8 8 8
akan dihasilkanPerl 6 , 60 byte
Penjelasan:
{ map { }, $^a .. $^b }
: Sebuah lambda yang mengambil dua argumen, menghasilkan daftar bilangan bulat dalam rentang itu, dan mengembalikannya dengan transformasi berikut yang diterapkan ke setiap elemen:$_ % 8 ?? $_ !!
: Jika elemen tidak habis dibagi 8, bagikan tidak berubah. Jika tidak...S:g/./{ }/
: ... ganti setiap karakter dari representasi stringnya dengan nilai yang dihasilkan oleh ungkapan ini:grep(/\D/, "!" .. "~").pick
: Hasilkan kisaran karakter antara!
dan~
(dalam urutan Unicode), filter keluar angka, dan pilih salah satu karakter yang tersisa secara acak.sumber
PHP, 163 byte
Penjelasan:
$n = range(48,57)
Ini adalah kode ASCII untuk angka, yang berada di tengah karakter khusus (32-47) dan karakter lainnya (58-126).$c = array_diff(range(32,126), $n)
Dengan menggunakan$n
larik, kecualikan karakter numerik dan buat larik karakter ASCII yang dapat diterima.foreach(range($a,$b) as $v)
Ulangi rentang nilai dari$a
hingga$b
(inklusif), sebagai $ v di dalam loop.if($v % 8 != 0) { echo $v; }
Tes untuk $ v yang dapat habis dibagi dengan 8 menggunakan operator mod%
.else { for($i = 0; $i < strlen($v); $i++) { ... }}
Jika tidak habis dibagi 8, berulang kali cukup untuk jumlah digit dalam angka dan cetak karakter (pada langkah berikutnya).echo chr($c[array_rand($c)])
Cetak satu karakter dari larik nilai ASCII yang dapat diterima di$c
.array_rand
mengembalikan indeks dalam array, jadi kita harus mendapatkan nilai aktual menggunakan indeks itu$c[random_key]
.Saya mungkin bisa membuat ini lebih kecil dengan membuat
$c
berbeda, dan loop untuk mencetak karakter ASCII terasa kikuk jadi saya akan terus merenungkan bagaimana mempersingkat itu.sumber
postgresql9.6 251 karakter
kode yang sangat panjang tetapi postgresql juga melakukannya.
sql yang diformat ada di sini:
sumber
Perl, 66 byte
Jalankan dengan
-E
bendera:Ini cukup mudah:
-
<>..<>
membuat daftar angka antara 2 input angka. Dan kemudianmap
beralih di atasnya:-
$_%8||...
:...
dijalankan hanya jika$_
merupakan kelipatan dari 8.-
s%.%xxx%ge
: ganti setiap karakter denganxxx
.-
do{$_=chr rand 126}until/[!-\/:-~]/
pilih karakter acak (dari kode 0 hingga 126) sampai kita mendapatkan satu yang memuaskan/[!-\/:-~]/
, yaitu. yang dapat dicetak dan bukan angka.-
say
: cetaksumber
C (gcc) ,
129119 byteCobalah online!
129 → 119 Gunakan
%94+33
trik dari OOBalanceTidak Disatukan:
sumber
puts
bukanprintf
).C,
157115 byteCobalah online sini . Berkat jxh untuk bermain golf 42 byte.
Versi tidak disatukan:
sumber
Java 10,
149147 byte (fungsi lambda)Cobalah online.
Java 10,
227225 byte (program penuh)Cobalah online.
Penjelasan:
sumber
t<33|(t>47&t<59)|t>126;
untuk di atasnya. Ini pada dasarnya menghasilkan angka acak dalam kisaran[0,127)
, kemudian memeriksa apakah itu valid (jadi dalam kisaran[33..47,59..126]
, semua karakter ASCII yang tidak dapat dicetak). Jika ya: bagus, tambahkan saja. Jika tidak: buat angka acak dalam rentang[0,127)
lagi dan validasi lagi sampai kami menemukan karakter yang valid.APL (Dyalog Extended) , 32 byte
Cobalah online!
Terima kasih banyak untuk Adám dan dzaima atas bantuan mereka. Pertama kali menggunakan Dyalog Extended!
Penjelasan:
sumber
Scala , 198 byte
Versi fungsional yang ditingkatkan dengan keadaan tidak berubah (03-04-2018)
Cobalah online!
Solusi gaya fungsional di Scala (350 byte) untuk bersenang-senang.
Saran untuk perbaikan disambut.
sumber
Python 2, 180 Bytes
EDIT:
Terima kasih @ Flp.Tkc karena menyadari saya belum membaca tugas dengan benar.
Terima kasih @ Caleb untuk menunjukkan saya bisa menggunakan beberapa untuk mengurangi jumlah byte.
Terima kasih @ Dennis untuk menunjukkan tentang fakta bahwa angka tidak dapat dimasukkan.
EDIT 2:
Versi saat ini mungkin bisa disederhanakan lebih dari itu.
sumber
PowerShell ,
8289 byteCobalah online!
sumber
QBIC , 79 byte
Melewatkan angka adalah urusan yang mahal, inilah versi yang mungkin juga secara acak memilih
0-9
kurang dari 20 byte:Output sampel untuk
1, 89
Penjelasan:
sumber
05AB1E , 17 byte
Mengambil input sebagai
highest\nlowest
, dan menampilkan daftar.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Japt , 20 byte
Cobalah
sumber
Keempat (gforth) , 128 byte
Cobalah online!
Penjelasan
Ulangi dari awal hingga akhir, cetak angka jika bukan kelipatan 8, jika tidak dapatkan jumlah digit dalam angka dan cetak banyak karakter acak diikuti oleh spasi
Penjelasan Kode
Tidak disatukan
Saya biasanya tidak ungolf solusi saya, tetapi ini panjang / cukup rumit yang saya pikir itu diperlukan
sumber
PHP , 130 byte
Cobalah online!
Tidak Disatukan:
sumber
$x-= $x > 58 ?: 11; // subtract 11, if x is less than 58
- bisakah Anda menguraikan?Subtract one from x. If x was less than or equal to 58, subtract a further ten from it.
, bukan?Kotlin , 136 byte
Cobalah online!
sumber