두 단계 앞으로 그리고 한 단계 뒤로


15

목적지에서 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

골퍼들!


7
흠 ... 이것은 매우 친숙한 느낌입니다.
얽히고 설킨


@로드 후 레이! 나는 그것을 멀리 도망 쳤다! ;)
AJFaraday

그래, 내가 생각했던 것 같아, @Rod.
얽히고 설킨

@Shaggy Rod는 그의 의견을 조금 변경했습니다. 이전의 질문에 따르면 달팽이 / 우물 질문은 반복 횟수를 요구하고 있지만 적용되는 거리를 요구하고 있습니다.
AJFaraday

답변:


5

오아시스 , 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

1
을 제외 할 수 있습니다 b.
Adnan

나는 당신이 3을 곱한 것이 아니라 그것을 곱한 것이라고 생각합니다.
Outgolfer Erik

@EriktheOutgolfer 프로그램은 a (n)a (n-1) +3 으로 계산 합니다 .
Dennis




9

폴리 글롯 : 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

팻 화살표를 사용하는 경우 JavaScript 폴리 글롯.
얽히고 설킨

@Shaggy C # .NET뿐만 아니라 추가됨 :) n=>(--n*3||4)-1JavaScript (14 바이트)에서도 가능합니다.
케빈 크루이 센













3

x86_64의 MachineCode , 34 32 24 바이트

8d47fe9931d029d08d0447c3

i정수 출력을위한 플래그가 필요합니다 . 입력은 코드에 수동으로 추가하여 이루어집니다.

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


24 바이트 MachineCode 프로그램을 찾기 위해 다음 4 가지 C 함수를 살펴 보았습니다.

  • n+2*abs(n-2)= 8d47fe9931d029d08d0447c3(24 바이트)
  • 3*n-4*!!~-n= 8d047f31d2ffcf0f95c2c1e20229d0c3(32 바이트)
  • n*3-4*(n>1)= 31d283ff028d047f0f9dc2c1e20229d0c3(34 바이트)
  • n<2?3:n*3-4= 83ff01b8030000007e068d047f83e804c3(34 바이트)

이 언어는 정확히 무엇입니까?
qwr

@qwr 간단한 설명은 저장소의 README를 확인하십시오.
MD XF


2

4 , 54 바이트

3.6010160303604047002020003100000180010202046000095024

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

입력 방법에 의문이 있으면 먼저 숫자 입력을 방문 하여 출력을 문자 코드 메타 포스트 로 제공 할 수 있습니다 .


이것이 왜 하향 조정 되었습니까?
Uriel

답변이 1/4 인 것으로 보이므로 올바른 결과가 아닙니다. 내가 알 수있는 한, 문제를 해결하지 못합니다.
AJFaraday

@AJFaraday는 메타 합의에 의해 유효한 바이트 입력 및 출력을 사용합니다. 입력 섹션 내부 설명
Uriel

결과를 해석하는 방법에 대한 자료가 있습니까? 아니면 입력?
AJFaraday

1
@ AJFaraday 결과의 문자 코드가 답입니다. 관련 메타 게시물을 포함하도록 질문을 편집했습니다. 4문자 입력 만 있습니다.
Uriel

2

apt, 7 바이트

Lynn의 Python 솔루션 포트.

*3É%U*4

시도 해봐


대안

이것은 불행하게도 1 바이트 더 긴 닫힌 수식 솔루션에 대한 재미있는 대안이었습니다.

_+3}gN³²

시도 해봐




2

65816 머신 코드, 22 바이트

이 65C02 머신 코드를 3 바이트로 쉽게 만들 수 있었지만 65C02의 레지스터 크기는 16 비트 대신 8 비트이므로 그렇지 않았습니다. 작동하지만 실제로는 낮은 숫자 만 사용할 수 있기 때문에 지루합니다. ;-)

xxd 덤프 :

00000000: 7aa9 0000 aa89 0100 d004 8888 e824 c8e8  z............$..
00000010: 1ac0 0000 d0ef                           ......

분해 / 코드 설명 :

; target is on the stack
  ply              7A                  ; pull target from stack
  lda #$0000       A9 00 00            ; set loop counter to 0
  tax              AA                  ; set step counter to 0
loop:
  bit #$0001       89 01 00            ; sets Z if loop counter is even
  bne odd          D0 04               ; if Z is not set, jump to 'odd'
  dey              88                  ; decrement target twice
  dey              88
  inx              E8                  ; increment step counter
  .byte $24        24                  ; BIT $xx opcode, effectively skips the next byte
odd:
  iny              C8                  ; increment target

  inx              E8                  ; increment step counter
  inc a            1A                  ; increment loop counter

  cpy #$0000       C0 00 00            ; sets zero flag, can be optimized maybe?
  bne loop         D0 EF               ; if Y is non-zero, loop

; result is in register X

65816 호환 에뮬레이터에서 테스트하십시오.

testing


1

, 28 바이트

F(){ bc<<<$1*3-$(($1>1))*4;}

테스트 :

F 1
3

F 2
2

F 3
5

F 4
8

F5
11

F 11
29

F 100
296

F 100000
299996

설명 :

공식은 다음과 같습니다.

if n == 1  ==> F(1) = 3
else F(n) = 3*n - 4

"2 단계 앞으로 및 1 단계 뒤로"의 3 단계 순서에 따라 산술 시리즈를 갖게됩니다.

 +2  2 => 2  ( or 6 )
 -1  1 => 3
 -----------
 +2  3 => 5  ( or 9 )
 -1  2 => 6
 -----------
 +2  4 => 8  ( or 12 )
 -1  3 => 9
 -----------
 +2  5 => 11 ( or 15 )
 -1  4 => 12
 -----------
 +2  6 => 14 ( or 18 )
 -1  5 => 15 
 -----------
 +2  7 => 17 ( or 21 )
 -1  6 => 18

최소 또는 첫 번째 우연의 일치 :

 1 => 3
 2 => 2
 3 => 5
 4 => 8
 5 => 11
 6 => 14

하나의 공식으로 :

F(n) = 3*n - 4(n>1)     with n>1 is 1 or 0 (if n==1)

이것이 어떤 쉘인지 설명하십시오
qwr

Cygwin에서 테스트 (CYGWIN_NT-10.0 2.3.1 (0.291 / 5 / 3) 2015-11-14 12:44 x86_64 Cygwin)
Ali ISSA

bc로 직접 쓸 수 있습니까?
qwr

나는 bc에 익숙하지 않지만 함수 ($ 1)의 인수가 여러 번 사용되며 일부 쉘 관련 항목 (산술 확장 $((…)))이 수행되기 때문에 아마 아닐 것입니다.
2xsaiko

1
F(){bc<<<$1*3-$(($1>1))*4}zsh에서 작동하고 2 바이트를 제거합니다
2xsaiko

1

파이썬 3 , 48 바이트

def a(x):
    if x!=1:
        return((3*x)-4)
    return(3)

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


잘 했어. "Footer"섹션에 코드를 추가 할 수도 있습니다. 그렇게하면 골프 항목을 채우지 않고도 기능을 테스트 할 수 있습니다 ...
AJFaraday

@AJFaraday 내 게시물이나 코드의 바닥 글?
Nathan Dimmer

온라인으로 시도; 코드와 함께 실행되지만 바이트 길이에는 포함되지 않는 바닥 글을 추가 할 수 있습니다. 그런 다음 출력에는 직장에서 코드가 표시됩니다.
AJFaraday


@JoKing 파이썬에서 람다 함수에 대한 좋은 안내서를 알고 있습니까? 나는 구문이 어떻게 작동하는지 이해하지 못한다.
Nathan Dimmer



1

Brain-Flak , 38 바이트

({<([()()]{})>()(){(<((){})>)()}{}}{})

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

첫 번째 대답은 앞뒤로 움직여 답을 계산하는 것입니다.

({ while not at 0
  <([()()]{})>()() take two steps forward, counting 2 steps
  {(<((){})>)()}{} take one step back, if not at 0, and add 1 step
}{}) remove the 0 and push step sum

1

W d , 7 바이트

♦óÖ╣░Θ$

설명

3*1a<4*-

평가 (a*3)-4*(a>1)합니다.

또 다른 가능한 대안

3*1am4*-

평가 (a*3)-4*(1%a)합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.