द क्रो बनाम द टेक्सीकैब


36

एक बिंदु के लिए यात्रा झूठ बोल कल्पना कीजिए एक मील दूर क्षैतिज और बी अपनी मौजूदा स्थिति से मील दूर खड़ी। या दूसरे शब्दों में, (0, 0)बिंदु से यात्रा (a, b)। यात्रा समाप्त करने के लिए आपको कितनी दूर की आवश्यकता होगी? यह एक सीधा सवाल लगता है, लेकिन इसका जवाब इस बात पर निर्भर करता है कि आप किससे पूछते हैं। यदि आप एक कौवा हैं, और आप कौवा मक्खियों के रूप में यात्रा कर सकते हैं , तो यात्रा की गई दूरी सिर्फ यूक्लिडियन दूरी है (a, b)। ये है

sqrt(a^2 + b^2)

लेकिन अगर आप सिर्फ एक उबाऊ इंसान हैं, तो आप वास्तव में उस रास्ते पर नहीं चलना चाहते हैं, इसलिए आपको एक टैक्सी लेनी होगी। अधिकांश टैक्सी आपके गंतव्य की ओर एक सीधी रेखा में नहीं चलती हैं क्योंकि वे आमतौर पर सड़कों पर रहने की कोशिश करती हैं। तो आपके द्वारा यात्रा की जाने वाली वास्तविक दूरी ऊर्ध्वाधर दूरी और क्षैतिज दूरी का योग है। या सूत्र है:

abs(a) + abs(b)

इसे टेक्सीकैब डिस्टेंस कहा जाता है । यह तस्वीर अच्छी तरह से दोनों के बीच के अंतर को प्रदर्शित करती है:

यहाँ छवि विवरण दर्ज करें

यात्रा करने के लिए (6, 6), एक कौवा हरे रंग की लाइन पर उड़ सकता है, और यह 6 * sqrt(2)लगभग 8.49 की दूरी तय करता है । एक टैक्सीवाला लाल, नीले या पीले रंग के रास्ते ले सकता है, लेकिन वे सभी 12 ले लेंगे।

यह असली सवाल है जो मैं पूछ रहा हूं। यदि एक कौवा और एक टैक्सीवाला दोनों बिंदु से चले जाते हैं (0, 0), और बिंदु की यात्रा करते हैं (a, b), तो टैक्सीकैब का रास्ता कितना लंबा है? या, अधिक गणित शब्दजाल में,

एक दो आयामी वेक्टर को देखते हुए, वेक्टर के मानदंड 2 और वेक्टर के मानदंड 1 के बीच का अंतर निर्धारित करें।

इस प्रश्न का उत्तर देने के लिए आपको सबसे कम संभव प्रोग्राम या फ़ंक्शन लिखना होगा। आप 'ए' और 'बी' को दो अलग-अलग इनपुट के रूप में, या दो आइटम टपल के रूप में ले सकते हैं। आप किसी भी उचित प्रारूप में इनपुट और आउटपुट ले सकते हैं। यदि अंतर एक गैर पूर्णांक है, तो आपको कम से कम दो दशमलव स्थानों पर सटीक होना चाहिए।

आप हमेशा मान सकते हैं कि 'ए' और 'बी' पूर्णांक होंगे, और वे दोनों 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
क्या हम जटिल संख्या के रूप में इनपुट ले सकते हैं?
एरियल

मुझे लगता है कि इसके लिए टेस्टकेस 10,10को 5.86 होना चाहिए, क्योंकि यह बाहर आता है 5.85786...और आपने इसके नीचे एक चक्कर लगाया ।
नंबरमान जूल

4
मैंने पहली बार द गाय बनाम द
टेक्सीकैब

क्या हम नकारात्मक परिणाम दे सकते हैं?
अदम

@ एडम नंबर (धारणात्मक के बाद, आप एक दूरी, जो हमेशा सकारात्मक है लौट रहे हैं)
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.

इसे ऑनलाइन आज़माएं!

इंजीनियर टोस्ट , एक बहुत अधिक अनुभवी टैक्सी गोल्फर, ने कुछ समय लेने का फैसला किया (शायद मैं जितना करता था उससे बहुत कम) और मूल रूप से इसे फिर से लिखकर अपने टैक्सी कार्यक्रम को नीचे गोल्फ में। आप संपादित इतिहास में मेरे पुराने उत्तर निकाय और मेरे पुराने TIOs के लिंक पा सकते हैं।

इंजीनियर टोस्ट का अनगॉल्फ्ड स्क्वायर रूट एल्गोरिथम: इसे ऑनलाइन आज़माएं!

असंबद्ध, स्पष्टीकरण के साथ:

[ 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
यह पागल है ...
Gryphon -

2
@ पागल बात यह है कि मैं 100% यकीन है कि मैं दो हज़ार बाइट्स को हटा सकता हूं जैसे ही मैं अपने तर्क को दोहराता हूं जब मैं आधा सो नहीं रहा हूं
स्टीफन

4
4 घंटे अपने आप में +1 के योग्य हैं!
झबरा

4
मुझे यकीन है कि जो गोल्फर पूरी व्याख्या पढ़ेंगे, उनकी संख्या आपकी बाइट्स से छोटी होगी: डी
ग्रेज्डेनु एलेक्स।

1
+1 के लिए-1 is waiting at Starchild Numerology.
कीउ गण

10

जावास्क्रिप्ट (ईएस 6), 36 बाइट्स

-1 बाइट थैंक्यू @dtkaias

(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 नहीं है **
नील

2
एक सच ES6 संस्करण शायद 41 बाइट्स होगा (x,y,s=Math.sqrt)=>s(x*=x)+s(y*=y)-s(x+y):।
नील

@DanEsparza यह स्पष्ट रूप से इस्तेमाल किया। यह कैसा संशोधन इतिहास है ...
नील

क्यों नहीं a=>b=>a+b-Math.hypot(a,b)?
dtkaias 1:11 पर

1
ठीक है, कैसे के बारे में (x,y,s=Math.hypot)=>s(x)+s(y)-s(x,y), 36 बाइट्स के लिए, ES6 संगत भी
dtkaias

8

जूलिया, 20 बाइट्स

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

ले जाता है aऔर bएक सूची के रूप में।

जूलिया का normदूसरा तर्क 2 को डिफॉल्ट करता है - इसलिए यह इसके बराबर होगा norm(x, 1) - norm(x, 2)


मैंने जूलिया का उपयोग करने के बारे में भी सोचा!
enedil

MATLAB उत्तर के समान ही मैं पोस्ट करने वाला था।
TheIncredibleZ1

6

जावा 8, 47 बाइट्स

golfed:

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

यह लगभग उतना ही बुनियादी है जितना कि यह मिलता है: अंतर को खोजने के लिए दो गणना मूल्यों को घटाएं। यह Math.abs()प्रत्येक घटना को एक बाइट को बचाने के बजाय टर्नरी लॉजिक का उपयोग करता है । दुर्भाग्य से, ऑपरेटर पूर्वता के कारण कोष्ठक की आवश्यकता होती है।

आउटपुट जो कुछ भी है जावा doubleको पकड़ सकता है, जो दो से अधिक दशमलव स्थानों के लिए सटीक है और प्रश्न की सटीकता आवश्यकता को संतुष्ट करता है।

Ungolfed:

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->
जैकब

4

गणितज्ञ, 32 बाइट्स

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

या

मैथेमेटिका, 31 बाइट्स

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

या @ कोई पेड़ का सुझाव नहीं

गणितज्ञ, 26 बाइट्स

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

या @ alephalpha का सुझाव

मैथेमेटिका, 19 बाइट्स

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

अच्छा काम! आप यूक्लिडियन भाग के लिए जटिल संख्याओं का उपयोग करके कुछ बाइट्स बचा सकते हैं:N[Tr@Abs@{##}-Abs[#+I#2]]&
पेड़ नहीं

2
N[#~Norm~1-Norm@#]&
एलेफल्फा

2
@alephalpha #~Norm~1-N@Norm@#&शायद?
मार्टिन एंडर


4

आर , 30 बाइट्स

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

v1-कॉलम मैट्रिक्स के रूप में लेता है । normएक मैट्रिक्स के एक विशेष मानदंड की गणना करता है, जिसमें डिफ़ॉल्ट रूप से L1 मानदंड (टेक्सीकैब), और fL2 मानदंड ( 'f'फ्रोबेनियस / यूक्लिडियन के लिए) है।

इसे ऑनलाइन आज़माएं!


वाह, आर दोनों में निर्मित, अच्छा है!
BLT

3

पायथन 2 , 40 38 बाइट्स

-2 बाइट्स तिजोरी के लिए धन्यवाद।

मजेदार तथ्य, इस कोड के 11 बाइट्स केवल प्रश्न और नकल से कॉपी किए गए थे।

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

इसे ऑनलाइन आज़माएं!



@ Mr.Xcoder मैं इसके बारे में बहुत चिंतित नहीं होगा, मैं शायद बाहर गोल्फ हो जाएगा। : पी
बिलकुल अमानवीय

@vaultah ओह, अच्छी बात है। धन्यवाद!
बिलकुल अमानवीय

5
abs(a+b*1j)इसके बजाय काम करना चाहिए(a*a+b*b)**.5
स्टीमRoot

3

जाप , 11 9 बाइट्स

-2 बाइट्स @ETHproductions की बदौलत

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 +Vaकरने के लिए Nxa(आदानों का योग चल रहा है, aप्रत्येक पर)
ETHproductions

@ETHproductions ओह ठीक है, भूल गए कि योग में वैकल्पिक मानचित्र पैरामीटर था। धन्यवाद!
जस्टिन मेरिनर

तो वहाँ * "के लिए एक प्रयोग Mhहै!: D Japt में अधिकांश तरीके क्या ले सकते हैं @ETHproductions एक तर्क के रूप में एक" ऑटो-फ़ंक्शन "कहते हैं। उनके लिए यह टिप देखें । और मैं कल एक टिप लिखूंगा। कुछ दिलचस्प परिणाम प्राप्त करने के लिए सरणी में कमी के साथ ऑटो-फ़ंक्शंस का उपयोग करना (जैसे, rwएक सरणी में सबसे बड़ा पूर्णांक लौटाएगा)।
झबरा

@ शुग्गी धन्यवाद, मुझे "ऑटो-फ़ंक्शंस" का मूल विचार था लेकिन यह एहसास नहीं था कि जाप युक्तियों के लिए एक पोस्ट है। गोना निश्चित रूप से उस पोस्ट के माध्यम से देखो।
जस्टिन मेरिनर

हमारे पास अभी भी उस प्रश्न पर काम करने के लिए एक अच्छा सा काम है, इसलिए यदि आपके पास ऐसा कुछ है जो आपको लगता है कि जोड़ा जा सकता है, तो कृपया करें। या यदि आपके पास कोई क्वेरी है जो आपको लगता है कि वहां फिट होगी, तो हमें टिप्पणियों में बताएं या हमसे चैट रूम में जुड़ें ।
झबरा

3

स्कीम - 58 बाइट्स।

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

3
PPCG में आपका स्वागत है!
मार्टिन एंडर

के बीच एक - आप दो रिक्त स्थान को हटा सकते हैं defineऔर (, और के बीच एक )और (
१२:०६ पर १२

Error: sqrt: too many arguments (at most: 1 got: 2) [f, sqrt]
हारून

(lambda(a b)(...))इसे किसी नाम से बांधने के बजाय पर्याप्त होना चाहिए। इसके अलावा, (sqrt(* a a b b))एक युगल बाइट्स बचा सकता है।
डैनियल शेपलर


3

APL (Dyalog) , 14 बाइट्स

फार्म में तर्क देता है xJy, जैसे3J4

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

इसे ऑनलाइन आज़माएं!

|डॉक्टर  की विशालता

| तर्क की परिमाण

- ऋण

2+/ जोड़ी-वार राशि

 का

| के परिमाण

9 11.○⊢ तर्क के वास्तविक और काल्पनिक भागों। डॉक्टर

गोल्फिंग के लिए विशेष चाल जोड़ीदार कटौती ( 2+/) का उपयोग +/नो-ऑप लेफ्ट तर्क के साथ आपूर्ति करने के लिए किया गया था, जिससे कोष्ठक से बचा जा सके:||-(+/∘|9 11○⊢)


3

जे, 13 बाइट्स

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

यह एक फ़ंक्शन है जो निर्देशांक को एक सरणी के रूप में लेता है, जैसे:

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

स्पष्टीकरण:

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

का अच्छा उपयोग &.:- मैं :अंडर के बारे में पता नहीं था ।
योना


2

टीआई-बेसिक (TI-84 Plus CE), 10 बाइट्स

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

प्रोग्राम जो कि दो पूर्णांकों की सूची के रूप में इनपुट करता है Ans, जैसे कॉल के साथ {3,4}:prgmCROW( 3,4इनपुट के 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

यह मेरे लिए 24-26 बाइट्स जैसा दिखता है, कैसे और $ Ans ^ 2 $ पर निर्भर करता है । 10 कीस्ट्रोक्स , शायद, लेकिन यह एक ही बात नहीं है।
रे

@ रे-टीआई-बेसिक एक टोकन लैंग्वेज है
pizzapants184

मैं ज्यादातर TI-89 बेसिक से परिचित हूं, जहां ऐसा नहीं है। आपत्ति वापस ली गई।
रे



2

जीएनयू एपीएल 1.2, 24 बाइट्स

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

∇f P एक समारोह घोषित करता है fएक वेक्टर जो एक वेक्टर Pको एक तर्क के रूप में दूर ले जाता है (जैसे [3, 4])

APL वैक्टर पर काम करता है, इसलिए +/|Pलागू होता है|abs वेक्टर में प्रत्येक तत्व ऑपरेटर ( फ़ंक्शन) को और फिर +प्रत्येक तत्व पर मूल्यांकन करता है (इसलिए सभी तत्वों को जोड़ें)। इससे टैक्सी को दूरी मिलती है।

P*2 एक सदिश पैदावार करता है जो उसी के समान है P लेकिन प्रत्येक तत्व के साथ चुकता है। +/P*2उन लोगों को जोड़ने के लिए और फिर (पूर्वता के लिए कोष्ठक के साथ क्योंकि एपीएल दाएं-से-बाएं है) *.5वर्गमूल प्राप्त करने के लिए। इससे कौवे को दूरी मिलती है।

पूर्वता के लिए टैक्सी की दूरी के लिए कोष्ठक की एक अतिरिक्त जोड़ी जोड़ें और अंतर की गणना करें।

समारोह समाप्त करने के लिए।


1
क्या आप एक अनाम मेमने का उपयोग नहीं कर सकते? {(+/|⍵)-(+/⍵*2)*.5}?
एडम जूल

@ एडम मुझे एपीएल के साथ बहुत अनुभव नहीं है और जीएनयू दुभाषिया (1.7) के नवीनतम संस्करण मैक पर संकलित नहीं होंगे, इसलिए कुछ सीमाएं हो सकती हैं। मैं बाद में देखने की कोशिश करूंगा कि क्या यह काम करता है। पारितोषिक के लिए धन्यवाद।
1367 पर Arc676

जीएनयू एपीएल की लगभग सभी विशेषताएं डिआलॉग एपीएल में भी हैं, जो मैक पर स्वतंत्र रूप से उपलब्ध है । आप इसे ऑनलाइन भी आज़मा सकते हैं ।
Adám

इसके अलावा, अधिक एपीएल सीखने के लिए एपीएल चैट रूम में शामिल होने के लिए स्वतंत्र महसूस करें ।
Adám

2

जे , tes बाइट्स

-1 मेरे सहयोगी मार्शल को धन्यवाद।

+&|-|@j.

इसे ऑनलाइन आज़माएं!

A को बाएं तर्क के रूप में और 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

इसे ऑनलाइन आज़माएं!

मुझे हल करने में उम्र लग गई। यह अंतिम उत्तर को गोल नहीं करता है क्योंकि यह ऐड ++ में संभव नहीं है। यह है कि प्रोग्राम इनपुट के साथ कैसे काम करता है ( -3और संचायक मूल्य है)-4ACC

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

PHP> = 7.1, 54 बाइट्स

[,$x,$y]=$argv;echo abs($x)+abs($y)-sqrt($x**2+$y**2);

PHP सैंडबॉक्स ऑनलाइन

PHP , 55 बाइट्स

<?=abs($x=$argv[1])+abs($y=$argv[2])-sqrt($x**2+$y**2);

इसे ऑनलाइन आज़माएं!

PHP , 60 बाइट्स

एक पूर्ण कार्यक्रम के बजाय एक समारोह के साथ

function f($x,$y){return abs($x)+abs($y)-sqrt($x**2+$y**2);}

इसे ऑनलाइन आज़माएं!


1

एक्सेल VBA, 34 बाइट्स

अनाम VBE तत्काल विंडो फ़ंक्शन जो रेंज से इनपुट लेता है [A1:B1]और यूक्लिडियन और टेक्सीकैब दूरी के बीच अंतर को VV तत्काल विंडो में आउटपुट करता है।

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

1
यह शीट में एक सेल में सीधे डालने के लिए दो बाइट्स छोटा है:=ABS(A1)+ABS(B1)-SQRT(A1^2+B1^2)
इंजीनियर टोस्ट

@EngineerToast, मैंने सोचा कि मैंने पहले ही अपना Google पत्रक / एक्सेल सॉल्यूशन डाल दिया है - इस ओर इशारा करने के लिए धन्यवाद
टेलर स्कॉट





1

रूबी (2.0.0 - 2.3.0), 57bytes

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

यह एक धोखा जैसा लगता है क्योंकि रूबी एक गणित परिवाद के साथ आता है जिसमें एब्स और sqrt फ़ंक्शंस होते हैं (उस व्यक्ति के विपरीत जिसने अपने एब्स और sqrt फ़ंक्शंस को लिखा था, हालांकि मुझे इस तरह के फ़ंक्शंस के उपयोग के लिए विशेष रूप से मना करने पर कुछ भी नहीं देखा गया था)।

पहली चाल का उपयोग कर रहा .mapहै .eachजिसके बजाय एक बाइट बचाता है, फिर &:symbolनोटेशन का उपयोग करके नक्शा एक खरीद हम 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

काम नहीं किया।

लेकिन क्या दिलचस्प है कि पुट को एक स्थान की आवश्यकता नहीं है, मुझे लगता है कि विशेष चार को देखने के लिए लेसर काफी स्मार्ट है और यह जानता है कि यह एक विशेष संस्करण है।

injectऔर reduceपर्यायवाची हैं, इंजेक्शन पर हस्ताक्षर हैं

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

हमारे मामले में हमें 0 से प्रारंभिक सेट करने की आवश्यकता है, फिर हमारे पास हमारे संचायक (यानी: ज्ञापन = 0) और प्रत्येक प्रवाह से वस्तु है।

इस विधि के लिए नीचे की ओर यह है कि यह दो से अधिक इनपुट लेगा और सरणी में सभी मानों को जोड़ देगा या जोड़ देगा, फिर जोड़ देगा।

मुझे लगता है - हालांकि मेरे पास परीक्षण करने के लिए रूबी 2.4.0 नहीं है - कि यह भी काम करेगा, जो 72 बाइट्स में आता है:

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

योग 0 से चूक जाता है और जहां तक ​​मैं बता सकता हूं, इंजेक्शन / कम करने के समान ही काम करता है।


एकमात्र कारण वह बिल्डिंस का उपयोग नहीं करता था क्योंकि वह भाषा उसके पास उपयोग करने के लिए उपलब्ध नहीं थी। अच्छा जवाब, और PPCG में आपका स्वागत है! :)
कॉनर ओ'ब्रायन

PPCG में आपका स्वागत है! TIO पोर्टल में एक कार्यशील रूबी 2.4.0 है जिसका उपयोग आप ऑनलाइन चीजों को आज़माने के लिए कर सकते हैं। इसे यहाँ आज़माएं
वैल्यू इंक

लचीली i / o आवश्यकताओं का लाभ उठाते हुए, आप पार्सिंग और पुट-इन से बच सकते हैं, 35-बाइट नंबा के नीचे गोल्फिंग कर सकते हैं ।
बेंज 2240

1

Google शीट, 31 बाइट्स

वर्कशीट फ़ंक्शन जो रेंज से इनपुट लेता है [A1:B1]और यूक्लिडियन और टेक्सीकैब दूरी के बीच अंतर को आउटपुट करता है

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

एक्सेल, 32 बाइट्स

ऊपर के रूप में ही, लेकिन एमएस एक्सेल के लिए स्वरूपित

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

1

अजगर , 7 बाइट्स

a.aQsa0

इसे यहाँ आज़माएँ


पायथ ,  25  23 बाइट्स

यह प्रारंभिक समाधान है, मेरा पहला नहीं तो तुच्छ पाइथ समाधान और आप देख सकते हैं कि मैं पायथ में गोल्फिंग में कितना बुरा हुआ करता था :)

K.aswJ.asw-+KJ^+^K2^J2 .5

इसे ऑनलाइन आज़माएं!


0

पिप , 15 बाइट्स

ABa+ABb-RT$+g*g

कमांड-लाइन तर्कों से इनपुट लेता है। इसे ऑनलाइन आज़माएं!

व्याख्या

स्यूडोकोड में, यह है abs(a) + abs(b) - sqrt(fold+(g*g))aऔर bपहले दो cmdline args हैं, और gcmdline args (यानी argv) की सूची है। *ऑपरेटर vectorizes, कई पिप ऑपरेटरों की तरह है, तो $+g*gके रूप में एक ही बात है a*a + b*b। बाकी सब बहुत सीधा है।

दुर्भाग्य से, मैं किसी भी बाइट के साथ नहीं बचा सकता $+ABg, क्योंकि गुना के साथ ऑपरेटरों की पूर्वता अभी तक काम नहीं करती है। $+द्विआधारी की तुलना में थोड़ा अधिक पूर्वता होना चाहिए -, लेकिन इस समय यह $+(ABg-RT$+g*g)गलत उत्तर देने के रूप में सामने आता है। ($+ABg)-RT$+g*gऊपर दिए गए कम-मोटे संस्करण पर डूइंग किसी भी बाइट को नहीं बचाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.