Dalam tantangan ini, Anda akan mendapatkan empat tugas berbeda namun agak terkait yang harus diselesaikan secara spesifik. Pertama, saya akan menjelaskan tugasnya, kemudian ikuti penjelasan tentang bagaimana Anda harus menyelesaikannya.
Kode Anda harus untuk keempat tugas mengambil dua bilangan bulat positif sebagai input:, di n,m
mana n<m
. Semua tugas harus diselesaikan dalam bahasa yang sama. Orientasi matriks bersifat opsional (n-by-m dapat diartikan sebagai "n rows, m kolom", atau "n kolom, m rows").
Tugas 1:
Buat (dan output / print) vektor / daftar yang terdiri dari unsur-unsur: n, n+1 ... m-1, m
. Jadi, untuk n=4, m=9
, Anda harus output: 4,5,6,7,8,9
.
Tugas 2:
Buat (dan hasilkan / cetak) matriks / array / daftar daftar (atau yang setara) yang terlihat seperti ini:
n, n+1, ... m-1, m
n+1, n+2, ... m-1, m+1
...
n+m, n+m+1, ... 2*m-1, 2*m
Untuk n=4, m=9
Anda harus mengeluarkan:
4, 5, 6, 7, 8, 9
5, 6, 7, 8, 9, 10
...
13, 14, 15, 16, 17, 18
Tugas 3:
Buat (dan hasilkan / cetak) tabel perkalian n-by-m (pada format apa pun yang sesuai). Contoh untuk n=4, m=9
:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
5 10 15 20
6 12 18 24
7 14 21 28
8 16 24 32
9 18 27 36
Tugas 4:
Keluaran / cetak vektor / daftar yang terdiri dari elemen-elemen dalam tabel perkalian dari tugas 3, diurutkan dalam urutan menaik, menjaga nilai duplikat. Untuk n=4, m=9
, Anda harus output: 1, 2, 2, 3, 3, 4, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 9, 9, 10, 12, 12, 12, 14, 15, 16, 16, 18, 18, 20, 21, 24, 24, 27, 28, 32, 36
.
Tantangan:
Sekarang, semua tugas di atas cukup sepele. Tantangan sebenarnya di sini adalah bahwa kode untuk tugas 2 harus dimulai dengan kode untuk tugas 1, kode untuk tugas 3 harus dimulai dengan kode untuk tugas 2 dan kode untuk tugas 4 harus dimulai dengan kode untuk tugas 3.
Untuk membuatnya lebih jelas:
Misalkan kode untuk Tugas 1 adalah (berfungsi dalam Oktaf):
@(n,m)(n:m)
Maka kode Anda untuk Tugas 2 dapat berupa (berfungsi dalam Oktaf):
@(n,m)(n:m)+(0:m)'
Kode untuk tugas Tugas 3 harus (tidak berfungsi dalam Oktaf):
@(n,m)(n:m)+(0:m)'"Code_for_task_3"
Dan akhirnya, kode untuk Tugas 4 harus (tidak berfungsi dalam Oktaf):
@(n,m)(n:m)+(0:m)'"Code_for_task_3""Code_for_task_4"
Ini adalah kode-golf , sehingga pengajuan dengan kode terpendek untuk tugas 4 di setiap bahasa menang. Seperti biasa: Penjelasan sangat dianjurkan.
>2;
sehingga kode tugas sebelumnya pada dasarnya diberikan no-op?0<n<m
atau0<=n<m
?Jawaban:
Jelly , 12 byte
Tugas 1
Cobalah online!
Tugas 2
Cobalah online!
Tugas 3
Cobalah online!
Tugas 4
Cobalah online!
Bagaimana itu bekerja
Tugas 1
r
adalah atom rentang diad dan melakukan persis apa yang diminta tugas itu.Tugas 2
Rantai diad yang dimulai dengan tiga ikatan diad adalah garpu ; tautan terluar dievaluasi terlebih dahulu, kemudian tautan tengah disebut dengan hasil di kedua sisi sebagai argumen.
r
berperilaku seperti sebelumnya, menghasilkan [n, ..., m] .0r$}
adalah tautan cepat (atau tautan cepat, jika Anda mau).Quick
$
(rantai monadich) mengkonsumsi tautan0
(hasil 0 ) danr
(kisaran diad) dan mengubahnya menjadi rantai monadik. Ketika dipanggil dengan argumen k , ini akan menghasilkan [0, ..., k] .Quick
}
(argumen kanan) mengambil quicklink yang dibuat oleh$
dan mengubahnya menjadi link diad yang memanggil0r$
dengan0r$}
argumen benar.0r$}
akan dipanggil dengan argumen kiri n dan argumen kanan m , sehingga0r$
digabungkan dengan argumen m dan menghasilkan [0, ..., m] .+þ
adalah tautan cepat lain.þ
(tabel) akan memanggil+
(penambahan) untuk setiap elemen dalam argumen kirinya dan setiap elemen dalam argumen kanannya, mengelompokkan hasil untuk setiap argumen kanan menjadi satu baris.+þ
akan dipanggil dengan argumen kiri [n,…, m] dan argumen kanan [0,…, m] , menghasilkan tabel yang diinginkan.Tugas 3
Setiap baris dalam program Jelly mendefinisikan tautan yang berbeda. Yang terakhir adalah tautan utama dan, seperti
main
fungsi C , adalah satu-satunya tautan yang dijalankan secara default. Tautan yang tersisa dapat dipanggil dari tautan utama, tetapi kami tidak akan melakukan ini di sini.Seperti sebelumnya,
þ
(tabel) akan memanggil×
(penambahan) untuk setiap elemen dalam argumen kiri dan setiap elemen dalam argumen kanannya, mengelompokkan hasil untuk setiap argumen kanan menjadi satu baris.Karena kedua argumen menjadi
×þ
bilangan bulat,þ
berikan mereka ke rentang, mengubah argumen n dan m menjadi [1,…, n] dan [1,…, m] .Tugas 4
×þ
bekerja seperti sebelumnya. Tautan berikut bersifat monadik, membuatnya di atas , yaitu, diterapkan di atas yang sebelumnya.Setelah mengeksekusi
×þ
,F
ratakan array 2D yang dihasilkan, danṢ
urutkan array 1D yang dihasilkan.sumber
05AB1E ,
1817 byteTugas 1
Cobalah online
Tugas 2
Cobalah online
Tugas 3
Cobalah online
Tugas 4
Cobalah online
Penjelasan
Tugas 1
Tugas 2
Tugas 3
Tugas 4
sumber
MATL ,
1817 byteTugas 1
Cobalah online!
Tugas 2
Cobalah online!
Tugas 3
Cobalah online!
Tugas 4
Cobalah online!
Penjelasan
Tugas 1
Tugas 2
Tugas 3
Tugas 4
sumber
Mathematica,
8477 byteSunting: Terima kasih kepada Martin Ender karena telah menyimpan 7 byte.
Tugas 1:
Murni
Function
dengan argumenn
danm
yang menghasilkann~Range~m
, bentuk infiks dariRange[n,m]
.Tugas 2:
n~Range~m~Table~(m+1)
membuat array 2D denganm+1
baris, di mana setiap baris adalah output dari tugas sebelumnya. Kemudian//0~Range~m+#&
adalah aplikasi postfix dari fungsi0~Range~m+#&
yang secara efektif ditambahkan0
ke baris pertama,1
ke baris kedua, dan seterusnya hinggam
untukm+1
baris-ke-10.Tugas 3:
Ini hanya menerapkan fungsi konstan
1##&~Array~{n,m}&
ke output dari tugas sebelumnya.Tugas 4:
Flatten
s danSort
s tabel perkalian.sumber
Python, 183 byte
Tugas 1, 29 byte
Cobalah online!
Tugas 2, 84 byte
Cobalah online!
Tugas 3, 137 byte
Cobalah online!
Tugas 4,
183167 byteCobalah online!
Penjelasan:
Tugas 1:
Cukup sederhana, itu menghasilkan
n
kem
daftar menggunakan Python built-inrange
fungsi.Tugas 2:
Untuk setiap nomor
0
untukm+1
itu, menambahkan bahwa angka untuk setiap item dari daftar darin
kem
.Tugas 3:
Untuk setiap nomor dari
1
hinggam
, itu mengalikan angka itu dengan setiap angka dalam daftar dari1
menjadin
.Tugas 4:
Ini menggunakan
sorted
fungsi bawaan Python yang mengurutkan daftar dari yang paling sedikit hingga yang paling besar. Pemahaman daftar dalam fungsi digunakan untuk meratakan daftar. Ini membuat daftar setiap item dalam setiap item dari daftar yang diberikan kepadanya berdasarkan tugas 3.Disimpan sangat banyak byte berkat @math_junkie.
sumber
def s(n,m):return [[w+i for w in r(n,m)] for i in a(0,m+1)]
,, adalah fungsi yang lengkap ketika kode untuk tugas 1 ditentukan.a=lambda n,m:...
untuk setiap definisi fungsi Anda. Fungsi anonim selalu lebih pendek dalam pythonPHP 7, 200 byte
Menggunakan buffer output untuk menghapus output sebelumnya.
Tugas 1
Menyimpan kode
$s
untuk menggunakannya kembali nanti. Itu$v
variabel untuk tugas terakhir.Tugas 2
Mencetak garis yang tersisa.
Tugas 3
Menghapus buffer output dan mencetak tabel perkalian, menyimpan nomor
$v
.Tugas 4
Bersihkan buffer output lagi dan cetak
$v
.sumber
PowerShell , 126 byte
Tugas 1
Cobalah online!
Menggunakan
..
operator jangkauan bawaan. Perilaku default untuk tersiratWrite-Output
memasukkan baris baru antara elemen, jadi itu sebabnya output ditampilkan sebagai baris baru dipisahkan.Tugas 2
Cobalah online!
Dumps tugas pertama ke STDERR dengan
>2;
, kemudian loop dari0
ke$m
, setiap pembantu pengaturan iterasi$i
sebelum mengulang lagi dari$n
ke$m
dan menambah setiap angka dengan$i
. Itu-join
diedit bersama dengan koma, kalau tidak, ini akan menjadi output elemen-per-baris panjang raksasa yang ambigu.Tugas 3
Cobalah online!
Hal yang sama
>2;
untuk membuang yang sebelumnya ke STDERR. Kemudian kita hanya putaran ganda dari1
ke$m
kemudian1
ke$n
, pengaturan helper$i
di sepanjang jalan, kalikan nilai-nilai, dan-join
dengan ruang untuk membuatnya tabular. Perhatikan parens enkapsulasi - mereka akan ikut bermain pada tugas berikutnya - tetapi di sini mereka hanya memastikan bahwa output dimasukkan ke dalam pipa (yang sudah jadi, jadi mereka mubazir).Tugas 4
Cobalah online!
Aha! Akhirnya beberapa redundansi. Karena tugas sebelumnya memiliki parens, kita dapat menempel
-split
pada spasi putih tanpa khawatir, melemparkan masing-masing ke integer|%{+$_}
, dan kemudian|sort
. Outputnya lagi dipisahkan baris baru.Saya pikir ada beberapa cara untuk lebih memanfaatkan redundansi antara tugas - masih golf beberapa.
sumber
ES2016-ish,
401384 karakterInilah percobaan pertama. Saya yakin itu bisa sedikit terkondensasi, tapi cukup pendek. Fungsi panah, FTW! (Suka pernyataan pengembalian implisit itu.) Baru dan ditingkatkan dengan string template!
Tugas 1
Panggilan
z(n,m)
untuk keluaran log. (Saya aliasing console.log untuk bermain golf nanti.)Tugas 2
Ayat kedua ... berkembang pada yang pertama.
Sekarang telepon
y(n,m)
. Cantik, bukan?Tugas 3
Harus memotong sebagian besar fungsi yang ada
<sadface />
.Sekarang nama metode adalah
v
. Sebut saja dengan cara yang sama.Tugas 4
Dan sekarang kita bisa menggunakan kembali.
Harus melewati
u
metode saya, jadi itut
. Menyesal bahwa saya harus memasukkan fungsi semacam itu, karenaString.match
mengembalikan nilai sebagai ... string.sumber
Ruby,
121103 byteSegala sesuatu di Ruby adalah benar kecuali untuk
nil
danfalse
, yang berarti bahwa tugas-tugas dapat diatur untuk mengabaikan input sebelumnya dengan sia-sia tetapi ditempatkan dengan baikand
/&&
.Tugas 1
Cobalah online!
Tugas 2
Cobalah online!
Tugas 3
Cobalah online!
Tugas 4
Cobalah online!
sumber