Powiedzmy, że jestem dziesięć kroków od celu. Idę tam, kierując się starym powiedzeniem: „Dwa kroki do przodu i jeden do tyłu”. Robię dwa kroki do przodu, jeden do tyłu, aż stoję dokładnie na miejscu. (Może to obejmować przekroczenie celu i powrót do niego). Ile kroków przeszedłem?
Oczywiście może nie być 10 kroków dalej. Mogę być 11 kroków lub 100. Mógłbym zmierzyć dziesięć kroków i chodzić tam i z powrotem, aby rozwiązać problem, lub ... Mógłbym napisać kod!
- Napisz funkcję, aby obliczyć, ile kroków potrzeba, aby oddalić N kroków w sekwencji: dwa kroki do przodu, jeden krok do tyłu.
- Załóżmy, że zacząłeś od kroku 0. Policz „dwa kroki do przodu” jako dwa kroki, a nie jeden.
- Załóż, że wszystkie kroki mają jednakową długość.
- Powinien zwrócić liczbę kroków, które po raz pierwszy wykonałeś po dotarciu do tego miejsca. (Na przykład 10 kroków dalej zajmuje 26 kroków, ale uderzyłbyś go ponownie w kroku 30). Interesuje nas 26.
- Użyj dowolnego języka, który ci się podoba.
- Powinien akceptować każdą dodatnią liczbę całkowitą jako dane wejściowe. To reprezentuje krok docelowy.
- Wygrywa najmniejsza liczba bajtów.
Przykład:
Chcę dostać się 5 kroków dalej:
| | | | | | <- I'm at step 0, not yet on the grid.
| |X| | | | <- I take two steps forward, I'm on step 2: the count is 2
|X| | | | | <- I take one step back, I'm on step 1: the count is 3
| | |X| | | <- I take two steps forward, I'm on step 3: the count is 5
| |X| | | | <- I take one step back, I'm on step 2 again: the count is 6
| | | |X| | <- I take two steps forward, I'm on step 4: the count is 8
| | |X| | | <- I take one step back, I'm on step 3 again: the count is 9
| | | | |X| <- I take two steps forward, I'm on step 5: the count is 11
W takim przypadku wynikiem funkcji byłoby 11.
Przykładowe wyniki:
1 => 3
5 => 11
9 => 23
10 => 26
11 => 29
100 => 296
1000 => 2996
10000 => 29996
100000 => 299996
Miłej zabawy, golfiści!
code-golf
math
arithmetic
AJFaraday
źródło
źródło
Odpowiedzi:
Oaza ,
54 bajtów1 bajt zapisany dzięki @Adnan
Nie należy mylić
23+3
Wypróbuj online!
W jaki sposób?
źródło
b
.Python 2 , 18 bajtów
Wypróbuj online.
Kilka dni temu wybrałem tę sztuczkę od Xnora …!
źródło
Python 2 , 20 bajtów
Wypróbuj online!
źródło
Python 2 , 17 bajtów
Wypróbuj online!
Znalazłem to wyrażenie za pomocą poszukiwania siły. Skutecznie oblicza
n+2*abs(n-2)
.źródło
Polyglot: Java 8 / JavaScript / C # .NET,
161412 bajtówWypróbuj online (Java 8).
Wypróbuj online (JavaScript).
Wypróbuj online (C # .NET) .
Port odpowiedzi na Python 2 w @Lynn , więc pamiętaj, aby głosować na jego odpowiedź.
Stara odpowiedź:
Polyglot: Java 8 / JavaScript / C # .NET,
1614 bajtówWypróbuj online (Java 8).
Wypróbuj online (JavaScript).
Wypróbuj online (C # .NET) .
Wyjaśnienie:
źródło
n=>(--n*3||4)-1
jest to również możliwe w JavaScript (także 14 bajtów).R , 20 bajtów
Wypróbuj online!
Nie zauważyłem wzoru, dopóki nie wdrożyłem mojego mniej eleganckiego rozwiązania.
źródło
05AB1E ,
87 bajtówWypróbuj online!
-1 bajt dzięki Emignie!
źródło
3*s≠i4-
zapisuje bajtOaza , 5 bajtów
Wyjaśnienie:
Wypróbuj online!
źródło
Haskell , 15 bajtów
Wypróbuj online!
źródło
Standardowy ML , 16 bajtów
Wypróbuj online!
źródło
Dodos , 27 bajtów
Wypróbuj online!
źródło
Galaretka , 6 bajtów
Wypróbuj online!
źródło
Prolog (SWI) , 21 bajtów
Wypróbuj online!
źródło
MATL , 7 bajtów
Używa
3*n-4*(n>1)
wzoru. Pomnóż wejście przez 3 (3*
), wciśnij ponownie wejście (G
) i zmniejsz je (q
). Jeśli wynik nie jest równy zero (?
), odejmij 4 od wyniku (4-
).Wypróbuj online!
źródło
2-|EG+
Galaretka , 4 bajty
Wypróbuj online!
Jak to działa
źródło
APL (Dyalog) , 9 bajtów
Wypróbuj online!
źródło
C (gcc) , 20 bajtów
Wypróbuj online!
źródło
f(n){n=n<2?3:n*3-4;}
f(n){n=n*3-4*(n>1);}
MachineCode na x86_64,
343224 bajtówWymaga
i
flagi dla wyjścia liczb całkowitych; dane wejściowe są pobierane poprzez ręczne dołączenie do kodu.Wypróbuj online!
Przejrzałem te 4 różne funkcje C, aby znaleźć 24-bajtowy program MachineCode:
n+2*abs(n-2)
=8d47fe9931d029d08d0447c3
(24 bajty)3*n-4*!!~-n
=8d047f31d2ffcf0f95c2c1e20229d0c3
(32 bytes)n*3-4*(n>1)
=31d283ff028d047f0f9dc2c1e20229d0c3
(34 bytes)n<2?3:n*3-4
=83ff01b8030000007e068d047f83e804c3
(34 bytes)źródło
><>,
109 bytesSaved 1 byte thanks to Jo King
Try it online!
źródło
4, 54 bytes
Try it online!
If you question the input method, please visit first the numerical input and output may be given as a character code meta post.
źródło
4
has only char input.Japt, 7 bytes
A port of Lynn's Python solution.
Try it
Alternative
This was a fun alternative to the closed formula solutions that is, unfortunately, a byte longer:
Try it
źródło
TI-Basic, 8 bytes
źródło
05AB1E, 4 bytes
Uses the abs-method from Dennis' Jelly answer
Try it online!
Explanation
źródło
65816 machine code, 22 bytes
I could have made this 65C02 machine code easily for 3 bytes less, but didn't, since the register size on the 65C02 is 8-bit instead of 16-bit. It would work, but it's boring because you can only use really low numbers ;-)
xxd dump:
disassembly / code explanation:
Testing it out on a 65816-compatible emulator:
źródło
SHELL , 28 Bytes
Tests :
Explanation :
The formula is :
following the sequence of 3 steps "Two steps forward and one step back", we will have the arithmetic series :
At the minimum, or first coincidence :
in one formula :
źródło
$((…))
) is done, probably not.F(){bc<<<$1*3-$(($1>1))*4}
works in zsh though and removes 2 bytesPython 3, 48 bytes
Try It Online!
źródło
J, 9 bytes
Try it online!
źródło
MATLAB/Octave, 15 bytes
Try it online!
Kind of surprised there isn't already a MATLAB answer. Same algorithm of
3*n-4
if greater than 1, or3*n
otherwise.źródło
Brain-Flak, 38 bytes
Try it online!
The first answer I see to calculate the answer by stepping back and forth.
źródło
W
d
, 7 bytesExplanation
Evaluates
(a*3)-4*(a>1)
.Another possible alternative
Evaluates
(a*3)-4*(1%a)
.źródło