Mój nauczyciel Precalc ma jeden ze swoich ulubionych problemów, które wymyślił (lub bardziej prawdopodobne, że ukradł zainspirowany xkcd ), który dotyczy szeregu n
pisuarów. „Szach-mat” to sytuacja, w której każdy pisuar jest już zajęty LUB ma obok niego zajęty pisuar. Na przykład, jeśli dana osoba jest X
, to
X-X--X
jest uważany za mat. Pamiętaj, że osoba nie może zajmować pisuaru obok już zajętego pisuaru.
Zadanie
Twój program przyjmie liczbę stdin
, argumenty wiersza poleceń lub argument funkcji. Twój program wydrukuje następnie lub zwróci liczbę sposobów, w jakie może wystąpić mat z wprowadzoną liczbą pisuarów.
Przykłady
0 -> 1
(zero przypadku liczona jako mata)
1 -> 1
( X
)
2 -> 2
( X-
i -X
)
3 -> 2
( X-X
i -X-
)
4 -> 3
( X-X-
, -X-X
, a X--X
)
5 -> 4
( X-X-X
, X--X-
, -X-X-
, a -X--X
)
6 -> 5
( X-X-X-
, X--X-X
, X-X--X
, -X--X-
i -X-X-X
)
7 -> 7
( X-X-X-X
, X--X-X-
, -X-X--X
, -X--X-X
, X-X--X-
, X--X--X
i -X-X-X-
)
8 -> 9
( -X--X--X
, -X--X-X-
, -X-X--X-
, -X-X-X-X
, X--X--X-
, X--X-X-X
, X-X--X-X
, X-X-X--X
, X-X-X-X-
)
...
Punktacja
Najmniejszy program w bajtach wygrywa.
''
. Jest to to samo, co dla silni i permutacji, 0! = 1, ponieważ jest dokładnie 1 sposób na zorganizowanie 0 przedmiotów.Odpowiedzi:
Oaza , 5 bajtów
Kod
Rozszerzona wersja
Wyjaśnienie
Wypróbuj online!
źródło
info.txt
info.txt
jest przydatny, zawiera dokumentację dla wszystkich poleceń OasisJava 7,
6542 bajtówSekwencja po prostu dodaje poprzednie elementy, aby uzyskać nowe. Kapelusz do orlp i Rod dla tej krótszej metody;)
Stary:
Po piątym elemencie odstęp w sekwencji wzrasta o element pięć poprzednich.
źródło
f
Używałem mojej funkcji z drugiego fragmentu zamiast rekurencji. Głupi ja, naprawiam ...u>0?u:1;
) nie może się stać1;
?u>0?u:1;)
przez,1;
jeśli zmienisz pierwsze porównanie nau>1
, a następnie u = 2 wyjście będzie g (0) + g (-1), co będzie 2Python 2,
42403935 bajtówGenerowanie rzeczywistych zestawów:
źródło
Rubin,
5834 bajtówMocno zainspirowany oryginalną odpowiedzią Javy na Geobits.
Zobacz na repl.it: https://repl.it/Dedh/1
Pierwsze podejscie
Zobacz na repl.it: https://repl.it/Dedh
źródło
Python, 33 bajty
Wykorzystuje przesunięte skrzynki podstawowe
f(-1) = f(0) = f(1) = 1
. GdybyTrue
można było użyć dla 1, nie potrzebowalibyśmy 3 bajtów dla+()
.źródło
J,
312723 bajtówZaoszczędzone 4 bajty dzięki kilometrom!
Wyjaśnienie będzie wkrótce.
Stare rozwiązanie
To jest agenda. LHS jest gerundem złożonym z dwóch czasowników:
>.1&^
i-&3+&$:-&2
. Pierwszy jest używany, jeśli warunek (2&<
) nie powiedzie się. Oznacza to, że rozwidlenie>.1&^
jest aktywowane nad argumentem. Przestrzegać:Tutaj
>.
bierze maksymalnie dwie wartości. Zatem daje 1, 1 i 2 jako warunki początkowe.Drugi czasownik w gerund to rozwidlenie:
Lewe i prawe zęby są stosowane do czasownika, odejmując odpowiednio 3 i 2; wtedy środkowy czasownik jest wywoływany z lewymi i prawymi argumentami równymi tym.
$:
wywołuje czasownik dla każdego argumentu i+
dodaje te dwa. Jest to w zasadzie odpowiednik($: arg - 3) + ($: arg - 2)
Przypadki testowe
źródło
MATL ,
2523 bajtówWypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Dwie zwoje! Tak!
To buduje tablicę, powiedzmy A, gdzie każda możliwa konfiguracja jest rzędem.
1
w tej tablicy reprezentuje zajmowaną pozycję. Na przykład dla danych wejściowych4
tablica A toKod następnie przekształca tablicę A za pomocą
[1 1 1]
. Daje to tablicę B. Zajęte pozycje i sąsiedzi zajętych pozycji w A dają niezerowy wynik w tablicy B:Zatem pierwszym warunkiem, aby konfiguracja była matą, jest to, że B nie zawiera zer w tym wierszu. Oznacza to, że w tym rzędzie A nie ma pustych pozycji lub były pewne, ale byli sąsiedzi zajętych pozycji.
Potrzebujemy drugiego warunku. Na przykład ostatni wiersz spełnia powyższy warunek, ale nie jest częścią rozwiązania, ponieważ konfiguracja nie była poprawna na początek. Prawidłowe konfiguracje nie mogą mieć dwóch sąsiednich zajętych pozycji, tj. Nie mogą mieć dwóch sąsiadujących ze sobą liter
1
w A. Równolegle nie mogą mieć dwóch sąsiadujących wartości w B przekraczających1
. Możemy to wykryć, splatając B[1 1]
i sprawdzając, że w wynikowej tablicy C,żadna wartość w tym wierszu nie przekracza
3
. Ostatecznym wynikiem jest liczba konfiguracji, które spełniają dwa warunki.źródło
PHP,
10511393 bajtów+3 dla
n=1
; +9 za$argv
, -1-3 grał w golfa-20: zauważyłem, że nie muszę kombinować, ale tylko ich liczbę
Biegnij z
-r
pętla od 2 ** n-1 do 0:
11
,000
,00
na początku lub na końcu, czy pojedyncza0
wydrukuj wynik
ten sam rozmiar, nieco prostsze wyrażenie regularne
11
,00
na początku lub na końcu, lub000
PHP, 82 bajty
Odpowiedź Arnaulda została przeniesiona i zagrana w golfa:
nie drukuje nic dla n = 0
źródło
n=0
: wstaw?:1
przed finałem;
Galaretka , 11 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
JavaScript (ES6) / Recursive,
3027 bajtówEdycja: zapisane 3 bajty dzięki Shaun H.
JavaScript (ES6) / Nierekurencyjne
9077 bajtówEdycja: zapisano 13 bajtów dzięki Conorowi O'Brienowi i Tytusowi
źródło
((i|r|l)&(k-1))
może zostać((i|r|l)&k-1)
, a nawet((i|r|l)&~-k)
i<<1
->i*2
lubi+i
!(i&(x=i>>1|i+i))&&((i|x)&(k-1))==k-1
; i czy można wstawić,k--
gdzieś można zastąpićk-1
zk
aby zapisać parens.&(k-1)
i tak nie potrzebuje parens; ale możesz użyć&~k
zamiast tego.f=n=>n<3?n||1:f(n-2)+f(n-3)
Mathematica, 35 bajtów
Definiuje funkcję
a
. Pobiera liczbę całkowitą jako dane wejściowe i zwraca liczbę całkowitą jako wartość wyjściową. Proste rozwiązanie rekurencyjne.źródło
AnyDice , 51 bajtów
Tutaj powinno być więcej odpowiedzi AnyDice.
Moje rozwiązanie definiuje funkcję rekurencyjną, która oblicza
a(n)=a(n-2)+a(n-3)
. Powracaa(0)=a(1)=1
ia(2)=2
używa magii podziału na liczby całkowite.Wypróbuj online
Uwaga: wynik może wyglądać dziwnie, a to dlatego, że zwykle służy do wyrzucania prawdopodobieństwa kości. Wystarczy spojrzeć na liczbę po lewej stronie wykresu słupkowego.
źródło
Perl,
3534 bajtówObejmuje +1 dla
-p
Podaj dane na STDIN
checkmate.pl
:Nowo opracowana tajna formuła. Ripple aktualizuje 3 zmienne stanu bez potrzeby równoległych przypisań.
Jest równie krótki (ale o wiele wolniejszy i zajmuje dużo więcej pamięci), aby rozwiązać pierwotny problem:
ale to nie działa
0
źródło
JavaScript (ES6), 62 bajty
Po raz pierwszy potrzebuję dwóch fałszywych nazw zmiennych. Wersja rekurencyjna byłaby prawdopodobnie krótsza, ale naprawdę podoba mi się
reduce
... Edycja: Znaleziono rozwiązanie, również 62 bajty, które ma tylko jedną zmienną fikcyjną:źródło
Galaretka , 19 bajtów
Rozwiązanie rekurencyjne jest
prawdopodobniekrótsze ...Zobacz na TryItOnline
Lub zobacz serię
n = [0, 99]
, także na TryItOnlineW jaki sposób?
Zwraca
n+3
liczbę th Padovana, licząc kombinacjeźródło
> <> , 25 + 2 = 27 bajtów
Wymaga obecności danych wejściowych na stosie przy starcie programu, więc +2 bajty dla
-v
flagi. Wypróbuj online!Pierwszy wiersz inicjuje stos do
1 1 2 n
, gdzien
jest liczbą wejściową. Drugi wiersz, biegnący do tyłu, sprawdza, żen
jest większy niż 1. Jeśli tak,n
jest zmniejszany, a następny element w sekwencji jest generowany w następujący sposób:Ostatni wiersz wyświetla liczbę na dole stosu, która jest wymaganym elementem w sekwencji.
źródło
CJam , 20 bajtów
Wypróbuj online!
Wyjaśnienie
Wykorzystuje to relację powtarzalności pokazaną na stronie OEIS .
źródło
05AB1E , 12 bajtów
Wyjaśnienie
Wypróbuj online!
źródło
FRACTRAN,
10493 bajtyWejście jest
11**n*29
i wyjście jest29**checkmate(n)
.Jest to głównie dla zabawy, zwłaszcza, że obecnie jestem obeznany z Pythonem, JS i Javą. Jednak taka sama liczba bajtów jak PHP: D Sugestie dotyczące gry w golfa mile widziane.
Ungolfing
źródło
Właściwie 25 bajtów
Wydaje się to trochę za długie jak na
f(n) = f(n-2) + f(n-3)
relację nawrotu. Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!Ungolfing
źródło
Właściwie 18 bajtów
To właściwie port dłuższej galaretki Dennisa. Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Ungolfing
źródło
Stax , 7 bajtów
Uruchom i debuguj
Wykorzystuje relację powtarzalności.
C(n) = C(n-2) + C(n-3)
źródło
C (gcc) , 33 bajty
Wypróbuj online!
źródło
Haskell , 27 bajtów
Wypróbuj online!
źródło