Tantangan yang cukup sederhana hari ini:
Tulis program atau fungsi yang mengambil dalam bilangan bulat positif N dan mencetak atau mengembalikan daftar angka unik yang diurutkan dalam tabel perkalian yang baris dan kolomnya dikalikan baik dari 1 hingga N inklusif.
Daftar ini dapat disortir dalam urutan menaik (terkecil ke terbesar) atau urutan menurun (terbesar ke terkecil), dan dapat dihasilkan dalam format apa pun yang masuk akal.
Kode terpendek dalam byte menang!
Contoh
Ketika N = 4, tabel perkalian tampak seperti:
1 2 3 4
-----------
1| 1 2 3 4
|
2| 2 4 6 8
|
3| 3 6 9 12
|
4| 4 8 12 16
Angka unik dalam tabel adalah 1, 2, 3, 4, 6, 8, 9, 12, 16
. Ini sudah diurutkan, jadi
1, 2, 3, 4, 6, 8, 9, 12, 16
mungkin output tepat Anda untuk N = 4. Tapi karena pengurutan dapat dibalik dan ada beberapa kelonggaran dalam format, ini juga akan menjadi output yang valid:
[16,12,9,8,6,4,3,2,1]
1
2
3
4
6
8
9
12
16
16 12 9 8 4 3 2 1
Uji Kasus
N=1 -> [1]
N=2 -> [1, 2, 4]
N=3 -> [1, 2, 3, 4, 6, 9]
N=4 -> [1, 2, 3, 4, 6, 8, 9, 12, 16]
N=5 -> [1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 20, 25]
N=6 -> [1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 30, 36]
N=7 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 28, 30, 35, 36, 42, 49]
N=8 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 28, 30, 32, 35, 36, 40, 42, 48, 49, 56, 64]
N=9 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, 30, 32, 35, 36, 40, 42, 45, 48, 49, 54, 56, 63, 64, 72, 81]
N=10 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, 30, 32, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72, 80, 81, 90, 100]
N=11 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 35, 36, 40, 42, 44, 45, 48, 49, 50, 54, 55, 56, 60, 63, 64, 66, 70, 72, 77, 80, 81, 88, 90, 99, 100, 110, 121]
N=12 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 35, 36, 40, 42, 44, 45, 48, 49, 50, 54, 55, 56, 60, 63, 64, 66, 70, 72, 77, 80, 81, 84, 88, 90, 96, 99, 100, 108, 110, 120, 121, 132, 144]
sumber
Jawaban:
Pyth, 8 byte
Cobalah online.
Penjelasan:
SQ
mengambil input daftar yang dievaluasi (Q
) dan membuat daftar[1, 2, ..., Q]
.^SQ2
membawa produk Cartesian dari daftar itu dengan sendirinya - semua kombinasi produk yang mungkin.*M
mengalikan semua pasangan ini bersama-sama untuk membentuk semua hasil yang mungkin di tabel perkalian danS{
membuatnya unik dan mengurutkannya.sumber
M
. +1Python 2,
6151 byteTerima kasih kepada xnor untuk mempersingkat beberapa sintaks.
sumber
set(...)
bisa menjadi set comp{...}
. Selain itu, fungsi diizinkan secara default di sini, jadi Anda bisa menulislambda n:...
.f=lambda n:n*[0]and sorted(set(range(n,n*n+n,n)+f(n-1)))
.APL,
1816 byteIni adalah fungsi monadik yang tidak disebutkan namanya. Output dalam urutan menaik.
Penjelasan:
Memperbaiki masalah dan menyimpan 2 byte berkat Thomas Kwa!
sumber
CJam,
1412 byteVersi terbaru dengan perbaikan yang diusulkan oleh @aditsu:
Ini adalah fungsi anonim. Cobalah online , dengan kode input / output yang diperlukan untuk mengujinya.
@ Martin mengusulkan solusi lain yang sangat elegan (
{,:)_ff*:|$}
) dengan panjang yang sama. Saya menggunakan yang oleh aditsu karena itu jauh lebih mirip dengan solusi asli saya.Perbedaan utama dengan solusi asli saya adalah bahwa ini menjaga
0
nilai dalam urutan asli, yang menghemat 2 byte di awal. Anda akan berpikir bahwa ini tidak akan membantu, karena Anda harus menghapus0
nilai dari hasilnya. Tapi inti dari ide @ aditsu adalah0^
pada akhirnya, yang merupakan perbedaan yang ditetapkan0
. Ini menghapus0
, dan pada saat yang sama, karena ini adalah operasi yang ditetapkan, menghilangkan elemen duplikat dari rangkaian solusi. Karena saya sudah membutuhkan 2 byte untuk menghilangkan duplikat sebelumnya, menghapus0
itu pada dasarnya gratis.Penjelasan:
sumber
{2m*::)::*_&$}
,,{)2m*::*_&$0-}
{,:)_ff*:|$}
{)2m*::*0^$}
Oktaf, 22 byte
sumber
Julia, 24 byte
Ini adalah fungsi anonim yang menerima integer dan mengembalikan array integer.
Tidak Disatukan:
sumber
MATLAB, 24 byte
sumber
zsh,
8656 byteterima kasih kepada @Dennis karena telah menghemat 30 (!) byte
Penjelasan / ungolfed:
Ini tidak berfungsi di Bash karena Bash tidak berkembang
{1..$1}
— itu hanya menafsirkannya secara harfiah (jadi,a=5; echo {1..$a}
output{1..5}
bukan1 2 3 4 5
).sumber
Ruby,
5048 byteTidak Disatukan:
Menggunakan nested loop untuk mengalikan setiap angka dengan setiap angka lainnya hingga n lalu menyortir array.
50 byte
Pemakaian:
sumber
R, 39 byte
Ini membaca bilangan bulat dari STDIN dan menulis daftar yang dibatasi ruang untuk STDOUT.
Kami membuat tabel perkalian sebagai menggunakan matriks
outer
, secara implisit meratakan menjadi vektor dan mengurutkan menggunakansort
, pilih elemen unik menggunakanunique
, dan ruang cetak dibatasi menggunakancat
.sumber
Mathematica, 25 byte
sumber
K, 17 byte
Tidak banyak bicara di sini. Sortir (
t@<t:
) item unik (?
) dari,/
produk-sendiri kartesian yang diratakan ( ) berlipat ganda (t*\:t:
) dari 1 hingga dan termasuk N (1+!
).Dalam aksi:
sumber
Haskell,
5554 byteContoh penggunaan:
f 4
->[1,2,3,4,6,8,9,12,16]
.nub
menghapus elemen duplikat dari daftar.Sunting: @Zgarb menemukan berlebihan
$
.sumber
J,
2120 byteTerima kasih kepada @Zgarb untuk -1 byte!
Jawaban J pertamaku! Tips golf sangat dihargai, jika ada sesuatu untuk golf.
Ini adalah fungsi monadik; kami mengambil produk luar dengan mengalikan daftar
1..input
itu sendiri, meratakan, mengambil elemen unik, dan mengurutkan.sumber
Kotlin, 70 byte
Versi tidak disatukan:
Uji dengan:
sumber
Shell + utilitas umum, 41
Atau sebagai alternatif:
Bash + coreutils, 48
Membangun ekspansi penjepit di dalam ekspansi aritmatika:
\$[{1..n}*{1..n}]
memperluas ke ekspansi aritmatika$[1*1] $[1*2] ... $[1*n] ... $[n*n]
yang dievaluasi dan diteruskan keprintf
, yang mencetak satu per baris, yang disalurkan kesort
.Penggunaan kutipan, kehati-hatian, dan
eval
memastikan ekspansi terjadi dalam urutan yang disyaratkan.Atau sebagai alternatif:
Bash Murni, 60
sumber
Pyth, 10
Cobalah secara Online atau jalankan Test Suite
sumber
Minkolang 0,14 ,
252218 byteSaya ingat bahwa saya sangat mudah menerapkan produk Cartesian sebelum pertanyaan ini diposting !
Coba di sini. (Output dalam urutan terbalik.)
Penjelasan
sumber
JavaScript (ES6),
9290 bytePenjelasan
Uji
sumber
Perl 6 , 27 byte
Contoh penggunaan:
sumber
Haskell, 51 byte
Membosankan. Cukup saring daftar
[1..n*n]
ke elemen formulira*b
dengana
danb
di[1..n]
. Menggunakanfilter
memberi panjang yang samaSaya mencoba untuk sementara waktu untuk menghasilkan daftar produk dengan sesuatu yang lebih pintar seperti
concatMap
ataumapM
, tetapi hanya mendapat hasil yang lebih lama. Pemeriksaan keanggotaan yang lebih canggih datang pada 52 byte, 1 byte lebih lama, tetapi mungkin dapat dipersingkat.sumber
(*)<$>..<*>..
seperti iniJAVA - 86 Bytes
Tidak disatukan
sumber
Pyth, 11 byte
Ini mirip dengan jawaban Julia. Terima kasih kepada @Maltysen
sumber
PHP,
74,7370bytesTidak Disatukan:
Sebelumnya:
while(($j=$i++)<$n)for(;$j++<$n;)$a[]=$i*$j;$a=array_unique($a);sort($a);
Tidak 100% yakin apa yang harus dilakukan dengan output, tetapi
$a
berisi array dengan angka yang sesuai.$n
adalah nomor geven via$_GET['n']
, denganregister_globals=1
sumber
TeaScript ,
3735 karakter; 40 byteDisimpan 2 byte berkat @Downgoat
TeaScript adalah JavaScript untuk bermain golf.
Cobalah online!
Tidak terseret dan penjelasan
sumber
r
alih-alihA.r
untuk menghasilkan rentangC, 96 byte
Ini mencetak angka dalam urutan menurun. Saran disambut karena ini terlihat jauh dari optimal.
sumber
JavaScript (ES6), 86 byte
Mencari untuk mempersingkat (mungkin akan mencoba loop bersarang).
sumber
Perl 5, 91 byte
untuk dijalankan dengan melewati argumen di baris perintah. Ini adalah beberapa deklarasi pendek berjalan dengan striktur dan peringatan.
sumber
Python,
124102 byteLebih banyak pythonic!
sumber
l.append(i*j)
baris yang sama dengan kondisional if. Saya pikir itu akhirnya menjadi 102 byte sama sekali.+=
sebagai gantinyaappend
.list(set(l))
tidak dijamin akan disortir.Perl 5, 67 byte
sumber