Napisz funkcję f (n, k), która wyświetla k-wymiarowe odliczanie od n.
Wygląda jednowymiarowe odliczanie z 5
54321
Wygląda na 2-wymiarowe odliczanie z 5
54321
4321
321
21
1
Wreszcie wygląda trójwymiarowe odliczanie z 5
54321
4321
321
21
1
4321
321
21
1
321
21
1
21
1
1
Formalna definicja
1-wymiarowe odliczanie z dowolnego n jest pojedynczą linią z cyframi n, n-1, ..., 1 połączonymi (po których następuje nowa linia).
Dla każdego k odliczanie k-wymiarowe od 1 jest pojedynczą linią
1
Dla n> 1 i k> 1 odliczanie k-wymiarowe od n jest odliczaniem wymiarowym (k-1) od n, a następnie odliczanie k-wymiarowe od n-1.
Wejście
Dwie dodatnie liczby całkowite k i n = 9, w dowolnym wybranym formacie.
Wynik
Odliczanie k-wymiarowe od n, z nową linią po każdym odliczaniu 1-wymiarowym. Dodatkowe znaki nowej linii są dozwolone w danych wyjściowych.
Punktacja
Standardowa punktacja golfowa.
Przykład bonusu
Oto przykład z k> n, 4-wymiarowym odliczaniem od 3 (z dodatkowymi komentarzami, których nie należy uwzględniać w rzeczywistych rozwiązaniach):
-- 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
Wyjaśnienia:
Cyfry na linii nie muszą sąsiadować, ale muszą być równomiernie rozmieszczone.
Jeśli wolisz, możesz napisać pełny program zamiast tylko funkcji.
Odpowiedzi:
Python, 60 bajtów
Przetestuj na Ideone .
Jak to działa
K wymiarową odliczanie z N może być określona w jednym przypadku podstawowego:
Używając definicji rekurencyjnej z pytania
f(n,k)
zwraca,f(n,k-1)+f(n-1,k)
jeśli n> 1 i k> 1 ; w przeciwnym razie zwraca ostatnie n + 1 znaków'987654321\n'
.źródło
Galaretka , 8 bajtów
Jest to pełny program, który oczekuje n i k jako argumentów wiersza poleceń.
Wypróbuj online!
Jak to działa
źródło
Y
działa zamiastp⁷
?5, 1
, wyświetla[54321]
.JavaScript,
403837 bajtówZapisano 1 bajt dzięki @ edc65:
Poprzednie odpowiedzi
38 bajtów dzięki @Neil:
40 bajtów:
źródło
||
zamiast?n:
. Zapisz kolejny bajt, używając dosłownego nowego wiersza wewnątrz`
s zamiast'\n'
.f=(n,k)=>n?(k?f(n,k-1):n)+f(n-1,k):k?``:`\n`
*
zamiast tego&&
.Python,
7675 bajtów-1 bajt dzięki @ Sp3000
Wykonuje procedurę opisaną w PO: łączy malejące
n
wyniki dlak-1
nowych wierszy z podstawą rekurencji'n...1'
ciągu, gdyk
jest1
(k
nie większa niż,1
ponieważ mamy zagwarantowany pozytywnyk
wkład).Testuj przypadki na ideone
źródło
Python,
868180 bajtówd
jest liczbą wymiarów,n
jest liczbą odliczania.Wkrótce opublikuje wyjaśnienie.
EDYCJA 1: Zmieniłem ją na lambda.
EDYCJA 2: Zapisano 1 bajt dzięki @DestructibleWatermelon.
źródło
Haskell, 57 bajtów
Przykład użycia:
5 # 3
->"\n54321\n4321\n321\n21\n1\n4321\n321\n21\n1\n321\n21\n1\n21\n1\n1"
.Bezpośrednie wdrożenie definicji.
źródło
Rakieta 215 bajtów
Testowanie:
źródło
54321
pojawia się dwa razy?λ
) jest zawsze mniej bajtów niż użyciedefine
. Ponadto dane wejściowe dlan
określono jako liczbę, dla której budujesz(range 1 n)
. Zobacz także o zamianie twojegocond
naif
, ponieważ zapisujesz bajty welse
.J,
383732 bajtyJest to funkcja, która bierze k na LHS i n na RHS.
Zapisano 5 bajtów z pomysłami z @ Adám.
Stosowanie
Wyjaśnienie
źródło
Dyalog APL , 18 bajtów
Monituje o n , a następnie o k .
~∘'0'⍤1
usuń (~
)∘
zera ('0'
) z wierszy (⍤1
) (wypełnienie spacjami w razie potrzeby) z⍕
reprezentacja postaci(⌽⍳)⍤0⍣⎕
odwrócone (⌽
) liczą do (⍳
) każdego czasu skalarnego (⍤0
), powtarzanego (⍣
) wejścia (⎕
)⊢
na⎕
wprowadzanie numeryczneWypróbuj APL online!
źródło
C 93 bajtów
Iteracyjna implementacja.
C
6765615652 bajtówImplementacja rekurencyjna
źródło
m
wewnątrzputs()
połączenia na"987654321"
.Partia, 117 bajtów
Odpowiedź Portona Dennisa na Python.
źródło
Rubinowy, 56 bajtów
Stosowanie
Kiedy wyświetlasz jakieś rozwiązania, powinieneś użyć „Kernel # puts”.
Przykład:
źródło