두 단계 앞으로 그리고 한 단계 뒤로 공간에 도달했을

목적지에서 10 걸음 떨어진 곳에 있다고 가정하겠습니다. 나는 “두 걸음 앞으로 한 걸음 뒤로”라는 옛말에 따라 거기를 걷습니다. 목적지에 정확히 서있을 때까지 한 걸음 뒤로 두 단계 앞으로 나아갑니다. (여기에는 목적지를 건너서 돌아 오는 것이 포함될 수 있습니다). 몇 걸음 걸었습니까?

물론, 나는 10 걸음 떨어져 있지 않을 수도 있습니다. 11 걸음 또는 100 걸음 거리에 있습니다. 10 단계를 측정하고 문제를 해결하기 위해 앞뒤로 계속 걸어 갈 수 있습니다. 또는 … 코드를 작성할 수 있습니다!

  • 순서대로 N 단계를 제거하는 데 걸리는 단계 수를 계산하는 함수를 작성하십시오. 두 단계 앞으로, 한 단계 뒤로.
  • 0 단계에서 시작했다고 가정합니다. “2 단계 앞으로”는 1 단계가 아닌 2 단계로 계산하십시오.
  • 모든 단계가 균일 한 길이라고 가정하십시오.
  • 해당 공간에 도달했을 때 처음 수행 한 단계 수를 반환해야합니다. (예를 들어, 10 걸음 거리는 26 걸음이지만 30 단계에서 다시 한 번칩니다). 우리는 26에 관심이 있습니다.
  • 원하는 언어를 사용하십시오.
  • 양수를 입력으로 받아 들여야합니다. 이것은 목표 단계를 나타냅니다.
  • 가장 적은 바이트 수가 이깁니다.

예:

5 걸음 거리를두고 싶습니다 :

| | | | | | <- 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

이 경우 함수의 결과는 11입니다.

결과 예 :

1      =>  3
5      =>  11
9      =>  23
10     =>  26
11     =>  29
100    =>  296
1000   =>  2996
10000  =>  29996
100000 =>  299996

골퍼들!



답변

오아시스 , 5 4 바이트

@Adnan 덕분에 1 바이트 절약

3+23

혼동하지 마십시오 23+3

온라인으로 사용해보십시오!

어떻게?

      implicitly push a(n-1)
3     push 3
 +    sum and implicitly print
  2   a(2) = 2
   3  a(1) = 3


답변

파이썬 2 , 18 바이트

lambda n:3*n-1%n*4

온라인으로 사용해보십시오.

며칠 전에 xnor 에서이 트릭을 선택했습니다 …!


답변

파이썬 2 , 20 바이트

lambda n:n*3-4*(n>1)

온라인으로 사용해보십시오!


답변

파이썬 2 , 17 바이트

lambda n:n-3%~n*2

온라인으로 사용해보십시오!

무차별 검색으로 표현을 찾았습니다. 효과적으로 계산합니다 n+2*abs(n-2).


답변

폴리 글롯 : Java 8 / JavaScript / C # .NET, 16 14 12 bytes

n->3*n-1%n*4

온라인으로 사용해보십시오 (Java 8).

n=>3*n-1%n*4

온라인으로 사용해보십시오 (자바 스크립트).
온라인으로 사용해보십시오 (C # .NET) .

@Lynn 의 Python 2 답변 포트 이므로 답변 을 올리십시오.


오래된 답변 :

폴리 글롯 : Java 8 / JavaScript / C # .NET, 16 14 바이트

n->n<2?3:n*3-4

온라인으로 사용해보십시오 (Java 8).

n=>n<2?3:n*3-4

온라인으로 사용해보십시오 (자바 스크립트).
온라인으로 사용해보십시오 (C # .NET) .

설명:

n->       // Method with integer as both parameter and return-type
  n<2?    //  If the input is 1:
   3      //   Return 3
  :       //  Else:
   n*3-4  //   Return the input multiplied by 3, and subtract 4


답변

아르 자형 , 20 바이트

N=scan();3*N-4*(N>1)

온라인으로 사용해보십시오!

덜 우아한 솔루션을 구현하기 전까지는 패턴을 알지 못했습니다.


답변

05AB1E , 8 7 바이트

3*s≠i4-

온라인으로 사용해보십시오!

Emigna 덕분에 -1 바이트!