Twoim celem jest napisanie programu, który pobiera dane wejściowe, a gdy razem zostaną połączone razem N
, wykonuje „sekwencyjne mnożenie”. Co to jest mnożenie sekwencyjne, możesz zapytać? Jest to sekwencja ze a
zdefiniowanym w ten sposób ziarnem :
f(0) = a
f(n+1) = f(n)*(f(n)-1)
Więc pozwól a = 5
. Zatem f(0) = 5
, f(1) = f(0)*(f(0)-1) = 5*4 = 20
oraz f(2) = f(1)*(f(1)-1) = 20*19 = 380
.
Jeśli twój program był ABC
, to ABC
powinien wziąć dane wejściowe a
i wyjściowe f(1)
. Program ABCABC
powinien generować dane wyjściowe f(2)
itp. Serie programów powinny pobierać dane tylko raz, a dane wyjściowe tylko raz.
To jest golf golfowy, więc wygrywa najkrótszy program w bajtach. Standardowe luki są zabronione.
źródło
if
ielse
.CJam, 5 bajtów
Wypróbuj online!
Jak to działa
źródło
pl, 5 bajtów
Wypróbuj online.
Byłby 4 bajty, gdybym nie był leniwy i nie został wdrożony „przypisać do _” ...
Wyjaśnienie
źródło
05AB1E , 3 bajty
Kod:
Wyjaśnienie:
Wypróbuj online!
źródło
GolfScript, 5 bajtów
Wypróbuj online.
Grał w golfa i skomentował:
Interpretator GolfScript automatycznie odczytuje dane wejściowe i umieszcza je na stosie, ale jako ciąg, a nie liczbę. Dlatego musimy przekształcić dane wejściowe w liczbę za pomocą
~
, a następnie za pomocą`
. Na koniec interpreter automatycznie wydrukuje strunowany numer na stosie.(Teraz, gdyby wyzwanie polegało na iteracji
f(n+1) = f(n)*(-f(n)-1)
, mógłbym to zrobić w 4 bajtach~.~*
. Zrozumienie, jak i dlaczego to działa, pozostawia się jako ćwiczenie. :)źródło
JavaScript REPL,
2520 bajtówBędzie pracował nad wyeliminowaniem REPL
źródło
Lua,
3518 bajtówTo coś, co Lua może zrobić dość łatwo choć raz!
Edycja: Odkąd to zrobiłem, odkryłem wiele rzeczy w Lua, więc aktualizuję to :)
...
zawiera rozpakowany argument wiersza poleceń, co oznacza, że użyje w tym przypadku pierwszej wartości, ponieważ nie będzie można go wydać, co spowoduje jedynie drukowanien*(n-1)
.źródło
Y , 7 bajtów
Wypróbuj tutaj!
Tak to działa:
j
pobiera dane liczbowe.z
aktywuje drukowanie niejawne.C
rozpoczyna nowy link.:
duplikuje wartość na stosie it
zmniejsza ją, pozostawiając nam wartość[a a-1]
. Następnie otrzymujemy[a*a-a]
od*
.!
pomija następne polecenie; na EOF nic nie robi. Po połączeniu w łańcuch pomija polecenie wprowadzania i proces rozpoczyna się od nowa.źródło
Jolf, 6 bajtów
Wypróbuj tutaj!
Wyjaśnienie
źródło
𝔼𝕊𝕄𝕚𝕟, 5 znaków / 7 bajtów
Try it here (Firefox only).
Czy naprawdę muszę to wyjaśnić? No cóż, proszę bardzo ...
Wyjaśnienie
Zasadniczo ocenia
input*=--input;
w JS.źródło
Perl, 23 bajty
Alternatywna wersja, 10 bajtów
Wymaga to
-p
przełącznika. Nie jestem pewien, czy jest to uczciwa gra w kwestii układu źródłowego .źródło
Haskell,
1411 bajtówPrzykład użycia
Może to nie jest właściwa funkcja. Jeśli robisz dupki, możesz iść z
(*)=<<pred$id
(<- na końcu jest spacja) dla 14 bajtów.Edycja: @Zgarb przepisał funkcję za pomocą funkcji monad i zapisał 3 bajty. Dzięki!
źródło
(*)=<<pred$
oszczędza 3 bajty. Należy również zauważyć, że nie jest to tak naprawdę funkcja, a wartość wejściowa musi być umieszczona bezpośrednio za nią.id
sprawia, że jest to właściwa funkcja. W odpowiedzi umieściłem notatkę.Pure Bash (bez narzędzi), 40
źródło
TI-Basic,
65 bajtówDziała na kalkulatorach TI-83/84
Ten program działa, ponieważ zamiast zwykłego
Done
tekstu wypisywane jest wyrażenie w ostatnim wierszu programu .źródło
:Ans²-Ans
Mathcad, 39 „bajtów”
Z perspektywy użytkownika Mathcad jest tablicą 2D, której wyrażenia są oceniane od lewej do prawej, od góry do dołu. Mathcad nie obsługuje tradycyjnego wprowadzania „tekstu”, ale zamiast tego używa kombinacji tekstu i specjalnych klawiszy / paska narzędzi / elementów menu, aby wstawić wyrażenie, tekst, fabułę lub komponent. Na przykład wpisz „:”, aby wprowadzić operator definicji (pokazany na ekranie jako „: =”), „[”, aby wprowadzić indeks tablicy lub „ctl-]”, aby wprowadzić operator pętli while (w tym symbole zastępcze dla kontrolowanie stanu i ekspresji jednego ciała). To, co widać na powyższym obrazku, jest dokładnie tym, co pojawia się w interfejsie użytkownika i jest „wpisane”.
Na potrzeby gry w golfa liczba „bajtów” jest równoważną liczbą operacji na klawiaturze wymaganych do wprowadzenia wyrażenia.
Jedną rzeczą, o której jestem jeszcze mniej pewny (z punktu widzenia równoważności „bajtowej”) jest to, jak liczyć tworzenie nowego regionu (np. A: = 5 lub k: = 0..n-1). Zrównoważyłem każdy ruch do nowego regionu jako równy nowej linii, a zatem 1 bajt (w praktyce używam myszy, aby kliknąć tam, gdzie chcę region).
Dołączyłem tylko aktywne instrukcje, a nie komentarze, i dołączyłem 2 bajty dla danych wejściowych ai n, ale nie same wartości (5 i 7 w przykładzie).
źródło
Haskell, 72 bajty
Wyzwanie to nie jest przyjazne dla Haskell. Jednak następujące działania działają, jeśli dane wejściowe są jednoargumentowe, a kod jest wykonywany w GHCI:
Wyjaśnienie:
Unary jest zawsze nieparzysty, więc pierwsza aplikacja zamieni się na dziesiętną.
x*(x-1)
jest zawsze parzyste, więc w przeciwnym razie zwracax*(x-1)
, gdziex
jest wejście. Ponieważ Haskell jest mocno wpisany i nie można nazwać „specjalnymi” symbolami&1
, uważam, że jest to właściwie jedyny sposób na ukończenie tego w Haskell, chyba że użyje się zmiennych globalnych lub nawet niepoprawnej formy wprowadzania.źródło
C ++ (gcc) , 173/176 bajtów
Obie wersje mają na końcu kluczową nową linię.
Wersja makro, 173 bajtów
Wypróbuj online!
Wersja szablonu, 176 bajtów
Nieco więcej C ++:
Wypróbuj online!
źródło
Burleska - 5 bajtów
źródło