Tulis fungsi f (n, k) yang menampilkan hitung mundur k-dimensional dari n.
Seperti hitungan mundur 1 dimensi dari 5
54321
Hitungan 2 dimensi dari 5 terlihat seperti
54321
4321
321
21
1
Akhirnya, hitungan mundur 3 dimensi dari 5 terlihat seperti
54321
4321
321
21
1
4321
321
21
1
321
21
1
21
1
1
Definisi formal
Hitungan mundur 1 dimensi dari sembarang n adalah satu garis dengan angka n, n-1, ..., 1 digabungkan (diikuti oleh garis baru).
Untuk setiap k, hitungan mundur k-dimensi dari 1 adalah garis tunggal
1
Untuk n> 1 dan k> 1, hitung mundur k-dimensi dari n adalah hitung mundur (k-1) dari n diikuti oleh hitung mundur k-dimensi dari n-1.
Memasukkan
Dua bilangan bulat positif k dan n <= 9, dalam format apa pun yang Anda pilih.
Keluaran
Countdown k-dimensional dari n, dengan baris baru setelah setiap countdown 1-dimensi. Baris baru ekstra diizinkan dalam output.
Mencetak gol
Penilaian standar golf.
Contoh bonus
Berikut ini contoh dengan k> n, hitungan mundur 4 dimensi dari 3 (dengan komentar tambahan yang tidak dimasukkan dalam solusi aktual):
-- 3-dimensional countdown from 3
321
21
1
21
1
1
-- 4-dimensional countdown from 2:
---- 3-dimensional countdown from 2:
21
1
1
---- 4-dimensional countdown from 1:
1
Klarifikasi:
Digit pada garis tidak perlu berdekatan, tetapi harus spasi merata.
Anda dapat menulis program lengkap alih-alih hanya fungsi, jika diinginkan.
Jawaban:
Python, 60 byte
Uji di Ideone .
Bagaimana itu bekerja
The k mundur berdimensi dari n dapat didefinisikan dengan kasus dasar tunggal:
Menggunakan definisi rekursif dari pertanyaan,
f(n,k)
mengembalikanf(n,k-1)+f(n-1,k)
jika n> 1 dan k> 1 ; selain itu mengembalikan n + 1 karakter terakhir dari'987654321\n'
.sumber
Jelly , 8 byte
Ini adalah program lengkap yang mengharapkan n dan k sebagai argumen baris perintah.
Cobalah online!
Bagaimana itu bekerja
sumber
Y
bekerja di tempatp⁷
?5, 1
, ini ditampilkan[54321]
.Javascript,
403837 byteDisimpan 1 byte berkat @ edc65:
Jawaban sebelumnya
38 byte berkat @Neil:
40 byte:
sumber
||
alih-alih?n:
. Simpan byte lain dengan menggunakan baris literal literal di dalam`
bukan'\n'
.f=(n,k)=>n?(k?f(n,k-1):n)+f(n-1,k):k?``:`\n`
*
saja&&
.Python,
7675 byte-1 byte terima kasih kepada @ Sp3000
Karies keluar prosedur seperti yang dijelaskan dalam OP: bergabung dengan penurunan
n
hasil untukk-1
pada baris dengan dasar rekursi dari'n...1'
string bilak
ini1
(k
tidak lebih besar dari1
karena kita dijamin positifk
input).Uji kasus pada ideone
sumber
Python,
868180 byted
adalah jumlah dimensi,n
adalah angka hitung mundur.Akan segera memposting penjelasan.
EDIT # 1: Mengubahnya menjadi lambda.
EDIT # 2: Disimpan 1 byte berkat @DestructibleWatermelon.
sumber
Haskell, 57 byte
Contoh penggunaan:
5 # 3
->"\n54321\n4321\n321\n21\n1\n4321\n321\n21\n1\n321\n21\n1\n21\n1\n1"
.Implementasi langsung dari definisi.
sumber
Racket 215 byte
Pengujian:
sumber
54321
muncul dua kali?λ
) selalu lebih sedikit byte daripada menggunakandefine
. Juga, input untukn
ditentukan sebagai angka yang Anda buat(range 1 n)
. Lihat juga tentang mengganticond
dengan Andaif
, karena Anda menyimpan byte dielse
.J,
383732 byteIni adalah fungsi yang dibutuhkan k pada LHS dan n pada RHS.
Disimpan 5 byte dengan ide dari @ Adám.
Pemakaian
Penjelasan
sumber
Dyalog APL , 18 byte
Anjuran untuk n , lalu untuk k .
~∘'0'⍤1
menghapus (~
)∘
nol ('0'
) dari baris (⍤1
) (padding dengan spasi sesuai kebutuhan) dari⍕
representasi karakter(⌽⍳)⍤0⍣⎕
input terbalik (⌽
) dihitung hingga (⍳
) setiap skalar (⍤0
), berulang (⍣
) (⎕
) kali⊢
di⎕
input numerikTryAPL online!
sumber
C 93 Bytes
Implementasi berulang.
C
6765615652 BytesImplementasi rekursif
sumber
m
di dalamputs()
panggilan dengan"987654321"
.Batch, 117 byte
Port of Dennis ♦ adalah jawaban Python.
sumber
Ruby, 56 byte
Pemakaian
Ketika Anda menampilkan solusi apa pun, Anda harus menggunakan "Kernel # puts".
Contoh:
sumber