까마귀 vs 택시


36

수평으로 1 마일 , 현재 위치에서 수직으로 B 마일 떨어진 지점으로 여행한다고 상상해보십시오 . 다른 말로하면, (0, 0)지점 간 여행입니다 (a, b). 여행을 얼마나 끝내야합니까? 이것은 간단한 질문처럼 보이지만 대답은 당신이 누구에게 물어 느냐에 달려 있습니다. 당신이 까마귀있어, 당신이 여행 할 수 있다면 까마귀 파리로 , 거리 단지입니다 여행 유클리드 거리(a, b). 이것은

sqrt(a^2 + b^2)

그러나 당신이 지루한 인간이라면, 먼 거리를 걷고 싶지 않기 때문에 택시를 타야합니다. 대부분의 택시는 일반적으로 도로에 머 무르려고하기 때문에 목적지를 향해 직선으로 운전하지 않습니다. 따라서 이동하게 될 실제 거리는 수직 거리와 수평 거리의 합입니다. 또는 공식은 다음과 같습니다.

abs(a) + abs(b)

이것을 Taxicab Distance 라고합니다 . 이 그림은이 둘의 차이점을 잘 보여줍니다.

여기에 이미지 설명을 입력하십시오

여행을 (6, 6), 까마귀는 녹색 선에 비행 할 수 있으며, 이것은 거리 제공 6 * sqrt(2)대략 8.49 또는. 택시는 빨간색, 파란색 또는 노란색 경로를 이용할 수 있지만 모두 12 개가 소요됩니다.

이것은 내가 묻는 실제 질문으로 이어집니다. 까마귀와 택시가 모두 지점 (0, 0)에서 출발하여 지점 으로 이동하는 경우 (a, b), 택시의 경로는 얼마나 더 걸립니까? 더 많은 수학 용어로

2 차원 벡터가 주어지면 벡터의 norm2와 벡터의 norm1 사이의 차이를 결정하십시오.

이 질문에 대답하려면 가능한 가장 짧은 프로그램이나 기능을 작성해야합니다. 'a'와 'b'를 두 개의 개별 입력 또는 두 개의 항목 튜플로 선택할 수 있습니다. 합리적인 형식으로 입력 및 출력 할 수 있습니다. 차이가 정수가 아닌 경우 소수점 이하 두 자리까지 정확해야합니다.

항상 'a'와 'b'는 정수이고 둘 다 0이 아니라고 가정 할 수 있습니다.

평소와 같이 표준 허점이 적용되어 프로그램을 가능한 한 짧게 바이트 단위로 계산하려고 시도합니다.

코드가 어떻게 작동하는지에 대한 설명을 게시하고 바이트를 절약하는 데 사용되는 멋진 트릭을 보여주는 답변을지지합니다.

다음은 코드를 테스트 할 수있는 몇 가지 예입니다.

#input    #output
3, 4      2
-3, 4     2
-3, -4    2
6, 6      3.51
42, 0     0
10, 10    5.86
3, 3      1.76

즐거운 골프 되세요! :)


9
입력을 복소수로 취할 수 있습니까?
Uriel

나는 테스트 케이스 10,10가 5.86이어야 한다고 생각합니다 5.85786....
numbermaniac

4
나는 처음에 소와 택시 로 제목을 읽고 충돌 물리학과 관련된 것을 찾기를 바랐다 ...
MooseBoys

부정적인 결과를 줄 수 있습니까?
Adám

@ Adám No. (개념적으로, 거리는 항상 긍정적입니다)
DJMcMayhem

답변:


108

택시 , 7394 3773 바이트

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to Tom's Trims.Pickup a passenger going to Tom's Trims.Go to Tom's Trims:n.[a]Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l 1 l 2 r.Pickup a passenger going to Addition Alley.Pickup a passenger going to Multiplication Station.1 is waiting at Starchild Numerology.Go to Starchild Numerology:s 2 l 2 r.Pickup a passenger going to Cyclone.Go to Cyclone:w 1 r 4 l.Pickup a passenger going to Addition Alley.Go to Addition Alley:n 2 r 1 r.Pickup a passenger going to The Underground.Go to Cyclone:n 1 l 1 l.Pickup a passenger going to Multiplication Station.Go to The Underground:n 2 r 2 r.Switch to plan "b" if no one is waiting.Pickup a passenger going to Charboil Grill.Go to Charboil Grill:s 2 r 1 l 1 l 2 r.-1 is waiting at Starchild Numerology.Go to Starchild Numerology:e 2 r.Pickup a passenger going to Multiplication Station.Go to The Underground:w 1 r 2 r 1 r 2 l.[b]Go to Multiplication Station:s 1 l 1 r.Go to Tom's Trims:s 1 r 3 r.Switch to plan "c" if no one is waiting.Switch to plan "a".[c]Go to Multiplication Station:s 1 l 3 l.Pickup a passenger going to Cyclone.Pickup a passenger going to Cyclone.Go to Cyclone:s 1 r 2 l 2 r.Pickup a passenger going to Addition Alley.Pickup a passenger going to Cyclone.Pickup a passenger going to Addition Alley.Go to Addition Alley:n 2 r 1 r.Pickup a passenger going to Multiplication Station.-1 is waiting at Starchild Numerology.Go to Starchild Numerology:n 1 l 1 l 1 l 3 l.Pickup a passenger going to Multiplication Station.Go to Multiplication Station:w 1 r 2 r 1 r 4 l.Pickup a passenger going to Rob's Rest.Go to Rob's Rest:s 1 r 2 l 1 l 1 r 1 r.Go to Cyclone:s 1 l 1 l 1 l 1 r.Pickup a passenger going to Cyclone.[d]Pickup a passenger going to Multiplication Station.Pickup a passenger going to Multiplication Station.Go to Multiplication Station:s 1 l 2 r 4 l.Pickup a passenger going to Addition Alley.Go to Cyclone:s 1 r 2 l 2 r.Switch to plan "e" if no one is waiting.Switch to plan "d".[e]Go to Addition Alley:n 2 r 1 r.Pickup a passenger going to Cyclone.99 is waiting at Starchild Numerology.Go to Starchild Numerology:n 1 l 1 l 1 l 3 l.Pickup a passenger going to The Underground.Go to Cyclone:e 1 l 2 r.Pickup a passenger going to Trunkers.Pickup a passenger going to Sunny Skies Park.Go to Sunny Skies Park:n 1 r.Go to Trunkers:s 1 l.[f]Pickup a passenger going to Cyclone.Go to Cyclone:w 2 r.Pickup a passenger going to Divide and Conquer.Pickup a passenger going to Trunkers.Go to Trunkers:s 1 l.Go to Sunny Skies Park:w 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l.Pickup a passenger going to Divide and Conquer.Go to Zoom Zoom:n.Go to Divide and Conquer:w 1 l 2 r 1 r.Pickup a passenger going to Addition Alley.Go to Cyclone:e 1 l 1 l 2 l.Pickup a passenger going to Addition Alley.Go to Addition Alley:n 2 r 1 r.Pickup a passenger going to Divide and Conquer.2 is waiting at Starchild Numerology.Go to Starchild Numerology:n 1 l 1 l 3 l 2 r.Pickup a passenger going to Divide and Conquer.Go to Divide and Conquer:w 1 r 2 r 1 r 2 l 3 l.Pickup a passenger going to Sunny Skies Park.Go to Sunny Skies Park:e 1 l 1 l 2 l 1 l.Go to The Underground:s 1 l 1 r 2 l.Switch to plan "g" if no one is waiting.Pickup a passenger going to The Underground.Go to Trunkers:s 2 r 1 l.Switch to plan "f".[g]Go to Rob's Rest:n 3 l 2 l 1 l 2 r 1 r.Pickup a passenger going to What's The Difference.Go to Sunny Skies Park:s 1 l 1 l.Pickup a passenger going to What's The Difference.Go to What's The Difference:n 1 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:e 3 r.Pickup a passenger going to Post Office.Go to Post Office:n 1 l 1 r.

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

훨씬 더 숙련 된 택시 골퍼 인 엔지니어 토스트 (Toast Toast )는 기본적으로 재 작성하여 시간을 내고 (내보다 훨씬 적은 시간) 택시 프로그램을 다운하기로 결정했습니다. 편집 내역에서 이전 답변 본문과 이전 TIO에 대한 링크를 찾을 수 있습니다.

엔지니어 토스트의 언 제곱근 알고리즘 : 온라인으로 사용해보십시오!

설명이없는 언 골프 드 :

[ Crow vs. Taxi ]


[ GET THE NEGATIVE ABSOLUTE VALUES OF BOTH STDINS ]

[Move the stdin values to Tom's Trims b/c:]
[1) Stdin doesn't count as a passenger waiting]
[2) Checking for no one waiting is shorter that keeping tracker of a count for just 2 iterations OR repeating all the code over again]
Go to Post Office:w 1 l 1 r 1 l.
Pickup a passenger going to Tom's Trims.
Pickup a passenger going to Tom's Trims.
Go to Tom's Trims:n.

[a]
[Clone the first waiting value]
[If we've already picked up both, move to the next process]
[Switch to plan "c" if no one is waiting.]
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:s 1 l 1 r.
Pickup a passenger going to Cyclone.
Go to Cyclone:n 1 l 1 l 2 r.
Pickup a passenger going to Addition Alley.
Pickup a passenger going to Multiplication Station.

[Add one to the value]
1 is waiting at Starchild Numerology.
Go to Starchild Numerology:s 2 l 2 r.
Pickup a passenger going to Cyclone.
Go to Cyclone:w 1 r 4 l.
Pickup a passenger going to Addition Alley.
Go to Addition Alley:n 2 r 1 r.
Pickup a passenger going to The Underground.

[Pick up a clone of that one to feed into Multiplication Station]
Go to Cyclone:n 1 l 1 l.
Pickup a passenger going to Multiplication Station.

[Subtract one and see if that's more than zero]
Go to The Underground:n 2 r 2 r.
Switch to plan "b" if no one is waiting.

[It was more than zero so we make it negative]
[First, though, get rid of the pesky result from The Underground]
Pickup a passenger going to Charboil Grill.
Go to Charboil Grill:s 2 r 1 l 1 l 2 r.
-1 is waiting at Starchild Numerology.
Go to Starchild Numerology:e 2 r.
Pickup a passenger going to Multiplication Station.
Go to The Underground:w 1 r 2 r 1 r 2 l.

[b]
[Make sure it's a negative value and leave it at Multiplication Station]
[Either it was already negative OR we now have -1 as a passenger]
Go to Multiplication Station:s 1 l 1 r.

[Get the next stdin unless we've already gotten them both]
Go to Tom's Trims:s 1 r 3 r.
Switch to plan "c" if no one is waiting.
Switch to plan "a".


[ ADD THE TWO NEGATIVES AND INVERT TO GET THE TAXI DISTANCE]

[c]
[Pickup the two negative absolute values and clone them]
Go to Multiplication Station:s 1 l 3 l.
Pickup a passenger going to Cyclone.
Pickup a passenger going to Cyclone.
Go to Cyclone:s 1 r 2 l 2 r.
Pickup a passenger going to Addition Alley.
Pickup a passenger going to Cyclone.
Pickup a passenger going to Addition Alley.

[Add the two clones values to get the negative Taxi distance]
Go to Addition Alley:n 2 r 1 r.
Pickup a passenger going to Multiplication Station.

[Invert to get the Taxi distance and store it at Rob's Rest]
-1 is waiting at Starchild Numerology.
Go to Starchild Numerology:n 1 l 1 l 1 l 3 l.
Pickup a passenger going to Multiplication Station.
Go to Multiplication Station:w 1 r 2 r 1 r 4 l.
Pickup a passenger going to Rob's Rest.
Go to Rob's Rest:s 1 r 2 l 1 l 1 r 1 r.


[ FIND THE CROW DISTANCE ]
[Uses the Babylonian method: https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method ]

[Square and Sum the cloned values]
Go to Cyclone:s 1 l 1 l 1 l 1 r.
Pickup a passenger going to Cyclone.
[d]
Pickup a passenger going to Multiplication Station.
Pickup a passenger going to Multiplication Station.
Go to Multiplication Station:s 1 l 2 r 4 l.
Pickup a passenger going to Addition Alley.
Go to Cyclone:s 1 r 2 l 2 r.
Switch to plan "e" if no one is waiting.
Switch to plan "d".
[e]
Go to Addition Alley:n 2 r 1 r.
Pickup a passenger going to Cyclone.

[Pickup our cycle counter]
[It's cheaper to do this than to check each iteration's value as equal to the last]
[Taxi can only handle integers up to 2^31-1 so 99 iterations is sufficient.]
99 is waiting at Starchild Numerology.
Go to Starchild Numerology:n 1 l 1 l 1 l 3 l.
Pickup a passenger going to The Underground.

[Duplicate stdin to be stored as S at Trunkers and as x0 at Sunny Skies Park]
[a & b are always integers so Trunkers won't hurt S and it's close with a short name so it's good for golfing]
Go to Cyclone:e 1 l 2 r.
Pickup a passenger going to Trunkers.
Pickup a passenger going to Sunny Skies Park.
Go to Sunny Skies Park:n 1 r.
Go to Trunkers:s 1 l.

[ This is our starting position for square root:           ]
[  • x at Sunny Skies Park                                 ]
[  • S at Trunkers                                         ]
[  • Taxi at Trunkers                                      ]
[  • The iterator as a passenger going to The Underground  ]

[f]

[Duplicate S so we don't lose it]
Pickup a passenger going to Cyclone.
Go to Cyclone:w 2 r.
Pickup a passenger going to Divide and Conquer.
Pickup a passenger going to Trunkers.
Go to Trunkers:s 1 l.

[Diplicate x for division and addition]
Go to Sunny Skies Park:w 1 r.
Pickup a passenger going to Cyclone.
Go to Cyclone:n 1 l.
Pickup a passenger going to Divide and Conquer.

[Gas will be super important in this loop]
Go to Zoom Zoom:n.

[Perform (x + S/x)/2]
[(/2) turns out to be a few bytes shorter than (*.5), mostly due to place names]
Go to Divide and Conquer:w 1 l 2 r 1 r.
Pickup a passenger going to Addition Alley.
Go to Cyclone:e 1 l 1 l 2 l.
Pickup a passenger going to Addition Alley.
Go to Addition Alley:n 2 r 1 r.
Pickup a passenger going to Divide and Conquer.
2 is waiting at Starchild Numerology.
Go to Starchild Numerology:n 1 l 1 l 3 l 2 r.
Pickup a passenger going to Divide and Conquer.
Go to Divide and Conquer:w 1 r 2 r 1 r 2 l 3 l.
Pickup a passenger going to Sunny Skies Park.
Go to Sunny Skies Park:e 1 l 1 l 2 l 1 l.
[Now we have the next iteration of x]

[Check the iterator]
Go to The Underground:s 1 l 1 r 2 l.
Switch to plan "g" if no one is waiting.
Pickup a passenger going to The Underground.

[Reset the loop]
Go to Trunkers:s 2 r 1 l.
Switch to plan "f".


[ ADD THE NEGATIVE SUM TO THE SQUARE ROOT TO GET THE NEGATIVE DIFFERENCE ]

[g]
Go to Rob's Rest:n 3 l 2 l 1 l 2 r 1 r.
Pickup a passenger going to What's The Difference.
Go to Sunny Skies Park:s 1 l 1 l.
Pickup a passenger going to What's The Difference.
Go to What's The Difference:n 1 r 1 l.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:e 3 r.
Pickup a passenger going to Post Office.
Go to Post Office:n 1 l 1 r.

1
이것은 미쳤다 ...
그리폰-복원 모니카

2
@Gryphon 미친 것 나는 100 % 확신합니다. 반 자지 않는 동안 논리를 다시 방문하면 이천 바이트처럼 제거 할 수 있습니다.
Stephen

4
4 시간은 그 자체로 +1을받을 가치가 있습니다!
얽히고 설킨

4
나는 전체 설명을 읽는 골퍼의 수가 귀하의 바이트보다 적을 것이라고 확신합니다 : D
Grajdeanu Alex.

1
-1 is waiting at Starchild Numerology.
Keyu Gan에

10

자바 스크립트 (ES6), 36 바이트

@dtkaias 덕분에 -1 바이트

(x,y,s=Math.hypot)=>s(x)+s(y)-s(x,y)

코드 스 니펫 예제 :

f=

(x,y,s=Math.hypot)=>s(x)+s(y)-s(x,y)

for(i=0;i<7;i++)
  a=[3,-3,-3,6,42,10,3][i],
  b=[4,4,-4,6,0,10,3][i],
  console.log(`f(${a},${b}) = ${f(a,b)}`)


ES6에는이 없습니다 **.
Neil

2
진정한 ES6 버전은 아마도 41 바이트 일 것입니다 (x,y,s=Math.sqrt)=>s(x*=x)+s(y*=y)-s(x+y).
Neil

@DanEsparza 그것은 분명히 사용됩니다. 이것은 개정 역사입니다 ...
Neil

왜 안돼 a=>b=>a+b-Math.hypot(a,b)?
dtkaias

1
오른쪽, 방법에 대해 (x,y,s=Math.hypot)=>s(x)+s(y)-s(x,y), 36 바이트, ES6 호환도에 대한
dtkaias

8

줄리아, 20 바이트

x->norm(x,1)-norm(x)

소요 ab목록으로.

Julia의 norm두 번째 인수의 기본값은 2입니다. 따라서 이것은와 같습니다 norm(x, 1) - norm(x, 2).


나는 또한 Julia를 사용하는 것에 대해 생각했습니다!
enedil

내가 게시하려고하는 MATLAB 답변과 매우 유사합니다.
TheIncredibleZ1

6

자바 8, 47 바이트

골프 :

(a,b)->(a<0?-a:a)+(b<0?-b:b)-Math.sqrt(a*a+b*b)

이것이 얻는 것만큼이나 기본적입니다. 차이를 찾기 위해 두 개의 계산 된 값을 빼십시오. 이것은 Math.abs()발생마다 1 바이트를 저장하는 대신 삼항 논리를 사용합니다 . 불행하게도, 연산자 우선 순위로 인해 괄호가 필요합니다.

출력은 Java가 double보유 할 수있는 모든 것입니다. 소수점 이하 두 자리까지 정확하며 질문의 정확성 요구 사항을 충족시킵니다.

언 골프 드 :

public class TheCrowVsTheTaxicab {

  public static void main(String[] args) {
    int[][] inputs = new int[][] { { 3, 4 }, { -3, 4 }, { -3, -4 }, { 6, 6, }, { 42, 0 }, { 10, 10 }, { 3, 3 } };
    double[] outputs = new double[] { 2, 2, 2, 3.51, 0, 5.85, 1.76 };

    for (int i = 0; i < inputs.length; ++i) {
      double actual =
        f((a, b) -> (a < 0 ? -a : a) + (b < 0 ? -b : b) - Math.sqrt(a * a + b * b), inputs[i][0], inputs[i][1]);

      System.out.println("Input:    " + inputs[i][0] + ", " + inputs[i][1]);
      System.out.println("Expected: " + outputs[i]);
      System.out.println("Actual:   " + actual);
      System.out.println();
    }
  }

  private static double f(java.util.function.BiFunction<Integer, Integer, Double> f, int a, int b) {
    return f.apply(a, b);
  }
}

산출:

Input:    3, 4
Expected: 2.0
Actual:   2.0

Input:    -3, 4
Expected: 2.0
Actual:   2.0

Input:    -3, -4
Expected: 2.0
Actual:   2.0

Input:    6, 6
Expected: 3.51
Actual:   3.5147186257614305

Input:    42, 0
Expected: 0.0
Actual:   0.0

Input:    10, 10
Expected: 5.85
Actual:   5.857864376269049

Input:    3, 3
Expected: 1.76
Actual:   1.7573593128807152

1
currying을 사용하여 바이트를 저장할 수 있습니다 a->b->.
Jakob

4

수학, 32 바이트

N[Tr@Abs[a={##1}]-Sqrt@Tr[a^2]]&

또는

Mathematica, 31 바이트

N[Abs@#+Abs@#2-Sqrt[#^2+#2^2]]&

또는 @ 나무가 아닌 제안

Mathematica, 26 바이트

N[Tr@Abs@{##}-Abs[#+I#2]]&

또는 @alephalpha의 제안

매스 매 티카, 19 바이트

N[#~Norm~1-Norm@#]&

잘 했어! 유클리드 부분에 대해 복잡한 숫자를 사용하여 몇 바이트를 절약 할 수 있습니다.N[Tr@Abs@{##}-Abs[#+I#2]]&
나무가 아님

2
N[#~Norm~1-Norm@#]&.
alephalpha

2
@alephalpha #~Norm~1-N@Norm@#&아마도?
Martin Ender


4

R , 30 바이트

function(v)norm(v)-norm(v,'f')

얻어 v1 열의 매트릭스. norm디폴트는 L1 표준 (taxicab) 및 fL2 표준 ( 'f'Frobenius / Euclidean의 경우) 으로 행렬의 특정 표준을 계산합니다 .

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


와우, R은 모두 내장되어 있습니다.
BLT

3

파이썬 2 , 40 38 바이트

vaultah 덕분에 -2 바이트

재미있는 사실,이 코드의 11 바이트는 질문에서 복사되어 골프를 쳤습니다.

lambda a,b:abs(a)+abs(b)-(a*a+b*b)**.5

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


1
나는 닌자
Mr. Xcoder

@ Mr.Xcoder 나는 그것에 대해 너무 걱정하지 않을 것입니다. 아마도 골프를 칠 것입니다. : P
완전히 인간적인

@ vaultah 오, 좋은 지적입니다. 감사!
완전히 인간적인

5
abs(a+b*1j)대신 작동해야 함(a*a+b*b)**.5
SteamyRoot

3

Japt , 11 9 바이트

@ETHproductions 덕분에 -2 바이트

Nxa -MhUV

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

설명

Nxa -MhUV   // implicit: U and V are input integers, N = [U,V]

N a         // get absolute value of both inputs
 x          // sum those values
    -MhUV   // subtract hypot(U, V) -> sqrt(U^2 + V^2)

좋았어요. 처음 본 것 같아요 Mh. 나는 당신 Ua +VaNxa( a각 입력에서 실행되는 입력의 합)을 단축 할 수 있다고 생각합니다.
ETHproductions

@ETHproductions 아 맞습니다. 그 합계에는 선택적 map 매개 변수가 있습니다. 감사!
Justin Mariner

"에 대한 사용 그래서 거기에 *입니다 Mh참조 인수로 자동 기능"JAPT에서 D 대부분의 방법이 부르는 @ETHproductions 걸릴 수 있습니다! ". 이 팁 그들에 대한 자세한 내용을 그리고 팁 내일 최대 기록됩니다. 배열 축소와 함께 자동 함수를 사용하여 몇 가지 흥미로운 결과를 얻습니다 (예 : rw배열에서 가장 큰 정수를 반환 함)
Shaggy

@Shaggy 고마워, 나는 "자동 기능"의 기본 아이디어를 가지고 있지만 Japt 팁에 대한 게시물이 있다는 것을 몰랐습니다. 분명히 그 게시물을 살펴보십시오.
Justin Mariner

우리는 여전히 그 질문에 대해 약간의 노력을 기울이고 있으므로 추가 할 수 있다고 생각되는 것이 있으면하십시오. 또는 여기에 맞는 쿼리가 있으면 의견을 말하거나 채팅방에 참여하십시오 .
얽히고 설킨

3

구성표-58 바이트

(define (f a b) (-(+(abs a)(abs b))(sqrt(* a a)(* b b))))

3
PPCG에 오신 것을 환영합니다!
Martin Ender

사이 한 - 두 공간을 제거 할 수 있습니다 define(,와 사이에 하나 )와를 (.
clismique

Error: sqrt: too many arguments (at most: 1 got: 2) [f, sqrt]
Aaron

(lambda(a b)(...))이름에 바인딩하는 대신 충분해야합니다. 또한 (sqrt(* a a b b))몇 바이트를 절약 할 수 있습니다.
Daniel Schepler


3

APL (Dyalog) , 14 바이트

형식으로 인수를 취합니다 xJy. 예 :3J4

||-2+/∘|9 11○⊢

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

|Doc  의 규모

| 논증의 규모

- 마이너스

2+/ 쌍별 합계

 의

| 의 크기

9 11.○⊢ 논증의 실수와 허수 부분. 문서

골프를위한 특별한 속임수는 쌍방향 감소 ( 2+/)를 +/사용하여 좌익이없는 논증을 제공함으로써 괄호를 피하는 것입니다.||-(+/∘|9 11○⊢)


3

J, 13 바이트

+/@:|-+/&.:*:

이것은 좌표를 배열로 취하는 함수입니다. 예 :

   (+/@:|-+/&.:*:) _3 4
2

설명:

+/             sum
  @:           of
    |          absolutes
     -         minus
      +/       sum
        &.:    under
           *:  square

잘 사용했습니다 &.:-나는 :Under of를 알지 못했습니다 .
Jonah


2

TI 기본 (TI-84 Plus CE), 10 바이트

sum(abs(Ans))-√(sum(Ans2

프로그램에있는 두 정수리스트로서 입력 Ans으로 예 호 {3,4}:prgmCROW(대체3,4 with input 및 CROW프로그램 이름으로 ).

설명:

sum(abs(Ans))-√(sum(Ans2
        Ans               # The input list of two integers
    abs(   )              # Absolute value of each item in the list
sum(        )             # Sum of the list
                    Ans   # The input list of two integers
                       2  # Square of each item in the list
                sum(      # Sum of the list
              √(          # Square root of the sum
             -            # Difference of the two values

어떻게 그리고 $ Ans ^ 2 $가 어떻게 인코딩 되는지에 따라 24-26 바이트처럼 보입니다 . 아마도 10 번의 키 입력 은 똑같지는 않습니다.
Ray

@Ray TI-Basic은 토큰 화 된 언어 입니다.
pizzapants184

TI-89 Basic에 대해 잘 알고 있습니다. 이의 제기 철회.
Ray



2

GNU APL 1.2, 24 바이트

∇f P
(+/|P)-(+/P*2)*.5
∇

∇f P선언 함수 f벡터 얻어 P인수로 거리를 포함하는 (예 [3, 4])

APL은 벡터에서 작동하므로 연산자 ( 함수)를 벡터의 각 요소에 +/|P적용한 다음 평가합니다.|abs+ 각 요소 하므로 모든 요소를 ​​추가합니다. 이것은 택시 거리를 제공합니다.

P*2P각 요소의 제곱 과 같지만 동일한 벡터를 생성합니다 . +/P*2APL이 오른쪽에서 왼쪽이므로 우선 순위를 괄호로 묶습니다.*.5 제곱근을 얻으려면 ( . 이것은 까마귀 거리를 제공합니다.

우선 순위에 대해 택시 거리에 괄호를 추가하고 차이를 계산하십시오.

기능을 종료합니다.


1
익명의 람다를 사용할 수 없습니까? {(+/|⍵)-(+/⍵*2)*.5}?
Adám

@ Adám APL에 대한 경험이 많지 않고 최신 버전의 GNU 인터프리터 (1.7)가 Mac에서 컴파일되지 않으므로 일부 제한이있을 수 있습니다. 나중에 작동하는지 확인하겠습니다. 팁 고마워.
Arc676

GNU APL의 거의 모든 기능은 Dyalog APL에도 있으며 Mac에서 무료로 사용할 수 있습니다 . 온라인으로 시도 할 수도 있습니다 .
Adám

또한 APL 대화방 에 가입 하여 APL 에 대해 자세히 알아보십시오.
Adám

2

J , 9 8 바이트

동료 인 Marshall에게 감사합니다.

+&|-|@j.

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

소요 왼쪽 인자와 같은 B 오른쪽 인자로.

+ 합계

& 의

| 크기

- 마이너스

| 규모

@ 의

j.A + B i

골프 트릭 : 대각선이 쉽게 구할 수 있기 때문에 값을 단일 복소수로 결합하고, 합이 구하기 쉬우므로 값을 별도로 유지하십시오.


2

추가 ++ , 59 57 바이트

D,f,@@,|@|+
D,g,@@,d*@d*+
_
$f>G>G
V
$g>?>?
S
-G
$f>x>0
O

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

이 문제를 해결하는 데 오랜 시간이 걸렸습니다. Add ++에서는 불가능하기 때문에 최종 답변을 반올림하지 않습니다. 이것은 프로그램이 입력 -3과 작동하는 방식 이며 -4( ACC누적 기 값입니다)

D,        Define a function
  f,      called f
  @@,     that takes 2 arguments (e.g. -3, -4)
     |    absolute value;   STACK = [-3, 4]
     @    reverse stack;    STACK = [4, -3]
     |    absolute value;   STACK = [4, 3]
     +    sum;              STACK = [7]
          implicitly return the top of the stack

D,        Define a function
  g,      called g
  @@,     that takes 2 arguments (e.g. -3, -4)
     d    duplicate;  STACK = [-3, -4, -4]
     *    multiply;   STACK = [-3, 16]
     @    reverse;    STACK = [16, -3]
     d    duplicate;  STACK = [16, -3, -3]
     *    multiply;   STACK = [16, 9]
     +    sum;        STACK = [25]
          implicitly return the top of the stack

_         store the inputs in the second stack;  ACC = 0;  STACK = [-3, -4]
$f>G>G    apply f with -3 and -4 as arguments;   ACC = 7;  STACK = []
V         store ACC in the stack;                ACC = 7;  STACK = [7]
$g>?>?    apply g with -3 and -4 as arguments;   ACC = 25; STACK = [7]
S         square root the ACC;                   ACC = 5;  STACK = [7]
-G        subtract the stack value from the ACC; ACC = -2; STACK = []
$f>x>0    apply f with ACC and 0 as arguments;   ACC = 2;  STACK = []
O         output ACC as a number


1

Excel VBA, 34 바이트

범위에서 입력을 가져 와서 [A1:B1]유클리드와 Taxicab 거리의 차이를 VBE 즉시 창으로 출력하는 익명 VBE 즉시 창 기능 .

?[ABS(A1)+ABS(B1)-SQRT(A1^2+B1^2)]

1
시트의 셀에 직접 넣는 것이 2 바이트 더 짧습니다.=ABS(A1)+ABS(B1)-SQRT(A1^2+B1^2)
Engineer Toast

@EngineerToast, 나는 이미 Google 스프레드 시트 / 엑셀 솔루션을 작성했다고 생각했습니다. 이것을 지적 해 주셔서 감사합니다.
Taylor Scott





1

루비 (2.0.0-2.3.0), 57 바이트

x,y=$*.map(&:to_i);puts x.abs+y.abs-Math.sqrt(x**2+y**2)

이것은 ARGV로부터 입력을받는 것으로 가정합니다.

ruby -e 'x,y=$*.map(&:to_i);puts x.abs+y.abs-Math.sqrt(x**2+y**2)' -- -3 4

Ruby에는 abs 및 sqrt 함수가있는 수학 라이브러리가 있기 때문에 속임수처럼 느껴집니다 (자신의 abs 및 sqrt 함수를 작성한 사람과 달리, 그러한 함수의 사용을 금지하는 것은 보지 못했습니다).

첫 번째 트릭은 바이트를 절약하는 .map대신 .each사용하고 &:symbol표기법을 사용하여 우리가 실행하는 proc을 전달하는 것입니다.to_i 하여 배열의 각 항목에서 하고 여러 할당을 사용하여 x와 y에 값을 할당하는 것입니다.

더 긴 버전은 다음과 같습니다.

(x, y) = ARGV.map{ |string| string.to_i }

(지도가 배열을 반환하기 때문에 여러 할당이 그것을 수행하는 방법 일 수 있습니다. 이는 추가 매개 변수를 버리지 만 어쨌든 두 개의 입력 만 가정합니다)

그런 다음 방금 방정식의 모든 공백을 제거했습니다.

더 긴 버전 인 84 바이트

$*.map!(&:to_i);puts$*.inject(0){|x,y|x+y.abs}-Math.sqrt($*.inject(0){|x,y|x+y**2})

목표는 여기에 예를 작성하지, 나 자신을 반복하지이었다 x또는 abs두 번 내 두 번 제곱x**2 + y**2

그것은 작동하지 않았다.

그러나 흥미로운 것은 풋에 공간이 필요 없다는 것입니다. 렉서가 특별한 문자를 볼 수있을만큼 똑똑하고 특별한 var인지 알 수 있습니다.

injectreduce동의어이며, 분사는의 서명이

inject(initial) {| memo, obj | block }

이 경우 초기 값을 0으로 설정해야합니다. 그러면 누산기 (예 : memo = 0)와 각 반복의 객체가 있습니다.

이 방법의 단점은 두 개 이상의 입력이 필요하며 배열의 모든 값을 합산 또는 제곱 한 다음 더하기 sqrt한다는 것입니다.

내가 생각하는 내가 가진 시험에 루비 2.4.0이없는 --though - 72 바이트에서 온이뿐만 아니라 작동합니다 :

$*.map!(&:to_i);puts$*.sub{|x,y|x+y.abs}-Math.sqrt($*.sum{|x,y|x+y**2})

합계는 0으로 기본 설정되어 있으며 주입 / 축소와 동일하게 작동합니다.


그가 내장을 사용하지 않은 유일한 이유는 그 언어에 사용할 수있는 언어가 없었기 때문입니다. 좋은 답변, PPCG에 오신 것을 환영합니다! :)
코너 오브라이언

PPCG에 오신 것을 환영합니다! TIO Portal에는 작동하는 Ruby 2.4.0이 있으며 온라인에서 사용해 볼 수 있습니다. 여기에서 시도
Value Ink

유연한 I / O 요구 사항을 활용하면 파싱 및 풋을 피하고 35 바이트 람다 까지 골프를 피할 수 있습니다.
benj2240

1

Google 스프레드 시트, 31 바이트

범위에서 입력을 가져와 [A1:B1]유클리드 거리와 택시 거리 사이의 차이를 출력하는 워크 시트 기능

=ABS(A1)+ABS(B1)-SQRT(A1^2+B1^2

Excel, 32 바이트

위와 동일하지만 MS Excel 형식

=ABS(A1)+ABS(B1)-SQRT(A1^2+B1^2)


0

, 15 바이트

ABa+ABb-RT$+g*g

명령 줄 인수에서 입력을받습니다. 온라인으로 사용해보십시오!

설명

의사 코드에서 이것은입니다 abs(a) + abs(b) - sqrt(fold+(g*g)). a그리고 b처음 두 cmdline args g이며 cmdline args (즉 argv)의 목록입니다. *운영자는 너무 많은 핍 사업자처럼, 벡터화 $+g*g와 같은 것입니다 a*a + b*b. 나머지는 매우 간단합니다.

불행히도 $+ABgfold를 가진 연산자의 우선 순위가 아직 작동하지 않기 때문에 바이트를 저장할 수 없습니다 . $+바이너리보다 우선 순위가 약간 높아야 -하지만 현재는로 구문 분석되어 $+(ABg-RT$+g*g)잘못된 답변을 제공합니다. 그렇게하면 ($+ABg)-RT$+g*g위조되지 않은 버전 위에 바이트가 저장되지 않습니다.

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