ब्लैक बॉक्स त्रिकोणमिति


29

एक प्रोग्राम या समारोह है कि निम्नलिखित 12 त्रिकोणमितीय कार्यों भेद कर सकते हैं लिखें: sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh

आपके कार्यक्रम को ब्लैक बॉक्स के रूप में उपरोक्त कार्यों में से एक दिया गया है और फ़ंक्शन का नाम या तो ऊपर दिए गए तरीके से आउटपुट करना चाहिए या जिस तरह से इसे आपकी भाषा में नाम दिया गया है।

यह , इसलिए प्रत्येक भाषा में सबसे कम उत्तर जीतता है। आपको दिखाना चाहिए कि आपका कोड सभी 12 संभावित इनपुट के साथ परीक्षण मामलों को शामिल करके सही तरीके से काम करता है। यदि आपकी पसंद की भाषा में उपरोक्त सभी कार्यों के लिए बिल्ड-इन शामिल नहीं है, तो आपको लापता लोगों की अपनी समझदार कार्यान्वयन प्रदान करना होगा।

आगे के स्पष्टीकरण

  • ब्लैक बॉक्स को क्वेरी करने के लिए जटिल संख्याओं का उपयोग करने की अनुमति है यदि अंतर्निहित बिल्ड-इन उन्हें संभाल सकता है।
  • के रूप में जब केवल वास्तविक संख्या का उपयोग कर, ब्लैक बॉक्स कार्य करने के लिए प्रश्नों डोमेन त्रुटियों दे सकते हैं। इस मामले में आपको यह मान लेना चाहिए कि ब्लैक बॉक्स केवल एक त्रुटि के अस्तित्व का संचार करता है, लेकिन ऐसा नहीं है कि यह किस कार्य से उत्पन्न होता है।dom acoshdom atanh=
  • यदि एक त्रुटि के बजाय कुछ अन्य मूल्य, जैसे NaNया null, लौटा दिए जाते हैं, तो आपका सबमिशन उन्हें संभालने में सक्षम होना चाहिए।

मदद करने के लिए धन्यवाद sandbox प्रतिक्रिया !


1
Mathematica प्रतीकात्मक आदानों को संभाल सकता है ताकि फ़ंक्शन आउटपुट का आंशिक रूप से मूल्यांकन किया जा सके, यदि सभी में। इससे फर्क पड़ता है कि मैं गणना के बजाय कुछ पैटर्न-मिलान का उपयोग कर सकता था।
जुंगह्वान मिन

1
@JungHwanMin यदि इसका मतलब है कि आप प्रतीकात्मक आउटपुट से फ़ंक्शन नामों तक पहुंच सकते हैं, तो मुझे डर है कि इसकी अनुमति नहीं है।
लकोनी

जवाबों:


22

लिनक्स पर पायथन 3.6.4, 99 बाइट्स

एक मूर्खतापूर्ण उत्तर के बिट, लेकिन:

lambda f:"asinh acos cos cosh atan atanh tan sin asin tanh sinh acosh".split()[hash(f(.029))%19%12]

त्रिकोणमितीय फ़ंक्शन को cmathजटिल / आउटपुट के लिए अंतर्निहित मॉड्यूल से एक होना चाहिए ।


2
@JungHwanMin मुझे विश्वास है कि आप भ्रमित हैं। मैं निश्चित रूप से एक वास्तविक कार्य करता हूं। ध्यान दें कि इनपुट के लिए मेरा एकमात्र संदर्भ fहै f(.029)- फ़ंक्शन को मान के साथ कॉल करना।
orlp

1
क्या आपने इस पर अमल किया?
mbomb007

4
@ mbomb007 यदि पाशविक बल से आपका तात्पर्य है एक लूप जो आंख की झपकी में कुछ सौ पुनरावृत्तियों को करता है, तो हाँ।
orlp

3
यह अद्भुत और मूर्खतापूर्ण दोनों है।
लीख


6

पर्ल 6 , 75 बाइट्स

->&f {([X~] ("","a"),<sin cos tan>,("","h")).min({abs(f(2i)-&::($_)(2i))})}

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

जैसा कि होता है, सभी बारह कार्यों में भेदभाव किया जाता है और सभी में जटिल तर्क होते हैं।

[X~] ("", "a"), <sin cos tan>, ("", "h")क्रॉस-उत्पाद-संगति के साथ तीन इनपुट सूचियों को कम करके सभी बारह फ़ंक्शन नाम उत्पन्न करता है। उन लोगों को देखते हुए, .min(...)वह जो इनपुट फ़ंक्शन से सबसे छोटा अंतर पाता है 2i


59 बाइट्स X का इस्तेमाल कई शब्दों के लिए किया जा सकता है, और गोल्फ बाइट्स के लिए कुछ अन्य ट्रिक्स
जो किंग

6

सी (जीसीसी) , 178 172 बाइट्स

double d;_;f(double(*x)(double)){d=x(0.9247);_=*(int*)&d%12;puts((char*[]){"acosh","sinh","asinh","atanh","tan","cosh","asin","sin","cos","atan","tanh","acos"}[_<0?-_:_]);}

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

पुराना लेकिन शांत: सी (जीसीसी) , 194 बाइट्स

double d;_;f(double(*x)(double)){char n[]="asinhacoshatanh";d=x(0.9247);_=*(int*)&d%12;_=(_<0?-_:_);n[(int[]){10,5,5,0,14,10,4,4,9,14,0,9}[_]]=0;puts(n+(int[]){5,1,0,10,11,6,0,1,6,10,11,5}[_]);}

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

-lmTIO में स्विच केवल परीक्षण के लिए है। अगर आप एक सही लिख सकते हैं मानक ट्रिगर कार्यों का कार्यान्वयन सही उत्तर मिलेगा।

व्याख्या

विचार कुछ इनपुट मूल्य को खोजने का था, जैसे कि जब मैं प्रत्येक ट्रिगर फ़ंक्शन के आउटपुट की व्याख्या करता है तो पूर्णांकों के रूप में उनके पास अलग-अलग अवशेष मॉडुलो 12. होते हैं। यह उन्हें सरणी सूचकांकों के रूप में उपयोग करने की अनुमति देगा।

इस तरह के इनपुट मूल्य को खोजने के लिए मैंने निम्नलिखित स्निपेट लिखा:

#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

// Names of trig functions
char *names[12] = {"sin","cos","tan","asin","acos","atan","sinh","cosh","tanh","asinh","acosh","atanh"};

// Pre-computed values of trig functions
double data[12] = {0};

#define ABS(X) ((X) > 0 ? (X) : -(X))

// Performs the "interpret as abs int and modulo by" operation on x and i
int tmod(double x, int i) {
    return ABS((*(int*)&x)%i);
}

// Tests whether m produces unique divisors of each trig function
// If it does, it returns m, otherwise it returns -1
int test(int m) {
    int i,j;
    int h[12] = {0}; // stores the modulos

    // Load the values
    for (i = 0; i < 12; ++i)
        h[i] = tmod(data[i],m);

    // Check for duplicates
    for (i = 0; i < 12; ++i)
        for (j = 0; j < i; ++j)
            if (h[i] == h[j])
                return -1;

    return m;
}

// Prints a nicely formatted table of results
#define TEST(val,i) printf("Value: %9f\n\tsin      \tcos      \ttan      \n  \t%9f\t%9f\t%9f\na \t%9f\t%9f\t%9f\n h\t%9f\t%9f\t%9f\nah\t%9f\t%9f\t%9f\n\n\tsin      \tcos      \ttan      \n  \t%9d\t%9d\t%9d\na \t%9d\t%9d\t%9d\n h\t%9d\t%9d\t%9d\nah\t%9d\t%9d\t%9d\n\n",\
        val,\
        sin(val), cos(val), tan(val), \
        asin(val), acos(val), atan(val),\
        sinh(val), cosh(val), tanh(val),\
        asinh(val), acosh(val), atanh(val),\
        tmod(sin(val),i), tmod(cos(val),i), tmod(tan(val),i), \
        tmod(asin(val),i), tmod(acos(val),i), tmod(atan(val),i),\
        tmod(sinh(val),i), tmod(cosh(val),i), tmod(tanh(val),i),\
        tmod(asinh(val),i), tmod(acosh(val),i), tmod(atanh(val),i))

// Initializes the data array to the trig functions evaluated at val
void initdata(double val) {
    data[0] = sin(val);
    data[1] = cos(val);
    data[2] = tan(val);
    data[3] = asin(val);
    data[4] = acos(val);
    data[5] = atan(val);
    data[6] = sinh(val);
    data[7] = cosh(val);
    data[8] = tanh(val);
    data[9] = asinh(val);
    data[10] = acosh(val);
    data[11] = atanh(val);
}

int main(int argc, char *argv[]) {
    srand(time(0));

    // Loop until we only get 0->11
    for (;;) {
        // Generate a random double near 1.0 but less than it
        // (experimentally this produced good results)
        double val = 1.0 - ((double)(((rand()%1000)+1)))/10000.0;
        initdata(val);
        int i = 0;
        int m;

        // Find the smallest m that works
        do {
            m = test(++i);
        } while (m < 0 && i < 15);

        // We got there!
        if (m == 12) {
            TEST(val,m);
            break;
        }
    }

    return 0;
}

यदि आप इसे चलाते हैं (जिसे -lm के साथ संकलित करने की आवश्यकता है) तो यह थूक देगा कि 0.9247 के मान के साथ आप अनूठे मान रखते हैं।

इसके बाद मैंने पूर्णांक के रूप में पुनर्व्याख्या की, 12 से मॉडुलो लागू किया, और निरपेक्ष मान लिया। इसने प्रत्येक कार्य को एक सूचकांक दिया। वे थे (0 -> 11 से): अकोश, सिन्ह, असिन्ह, अतनह, तान, कोश, असिन, सिन, कॉस, अतन, तन, एको।

अब मैं सिर्फ तार की एक सूची में अनुक्रमण कर सकता था, लेकिन नाम बहुत लंबे और बहुत समान हैं, इसलिए इसके बजाय मैं उन्हें एक स्ट्रिंग के स्लाइस से बाहर निकालता हूं।

ऐसा करने के लिए, मैं स्ट्रिंग "एसिनहोसचटन" और दो सरणियों का निर्माण करता हूं। पहला सरणी इंगित करता है कि स्ट्रिंग में कौन सा वर्ण शून्य टर्मिनेटर पर सेट है, जबकि दूसरा इंगित करता है कि स्ट्रिंग में कौन सा वर्ण पहले वाला होना चाहिए। इन सरणियों में शामिल हैं: 10,5,5,0,14,10,4,4,9,14,0,9 और 5,1,0,10,11,6,0,1,6,10,11, क्रमशः ५।

अंत में यह केवल सी में कुशलता से पुनर्व्याख्या एल्गोरिथ्म को लागू करने का मामला था। अफसोस की बात है कि मुझे दोहरे प्रकार का उपयोग करना था, और ठीक 3 उपयोगों के साथ, यह सिर्फ doubleतीन बार उपयोग करने के लिए तेज था फिर #define D double\nDDD सिर्फ 2 वर्णों द्वारा उपयोग करने के लिए । परिणाम ऊपर है, एक विवरण नीचे है:

double d;_;                                 // declare d as a double and _ as an int
f(double(*x)(double)){                      // f takes a function from double to double
    char n[]="asinhacoshatanh";             // n is the string we will manipulate
    int a[]={10,5,5,0,14,10,4,4,9,14,0,9};  // a is the truncation index
    int b[]={5,1,0,10,11,6,0,1,6,10,11,5};  // b is the start index
    d=x(0.9247);                            // d is the value of x at 0.9247
    _=*(int*)&d%12;                         // _ is the remainder of reinterpreting d as an int and dividing by 12
    _=(_<0?-_:_);                           // make _ non-negative
    n[a[_]]=0;                              // truncate the string
    puts(n+b[_]);}                          // print the string starting from the correct location

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


आप की जगह 20 बाइट बचा सकता है puts(...)के साथprintf("%.5s","acoshsinh asinhatanhtan cosh asin sin cos atan tanh acos "+5*(_<0?-_:_))
कर्टिस बेकटेल

आप अपने कोड में -DD=doubleसभी doubles के साथ संकलन करके उसकी जगह 5 बाइट्स बचा सकते हैं D। ध्यान दें कि ध्वज को कुल बाइट्स के लिए गिना जाना चाहिए।

एक अतिरिक्त तीन बाइट्स के char*[]साथ int*[]बदलकर और टर्नरी ऑपरेटर को बदलकर बहाया जा सकता है (:)! :) abs(_)

6

लिनक्स पर पायथन 3.6.5, 90 85 बाइट्स

h=hash;lambda f:h(f(.0869))%3%2*"a"+"tscaionns"[h(f(.14864))%3::3]+h(f(.511))%5%2*"h"

यह orlp के उत्तर का निर्माण करता है ; लेकिन 1 जादू की संख्या खोजने के बजाय, हम 3 पाते हैं! यह मूल रूप से केवल "पाप", "कॉस" और "टैन" के लिए स्ट्रिंग शाब्दिक शब्दों को एक बार में डालने से बचने के बजाय बाइट्स को बचाता है, इसके बजाय एक बार में एक भाग का निर्माण करें।

पहले मैजिक नंबर का उपयोग यह निर्धारित करने के लिए किया जाता है कि क्या यह "चाप" त्रिकोणमितीय कार्यों में से एक है, "तदनुसार" एक "पाप", "कॉस", या "टैन" आधारित कार्यों में से एक का चयन करते हुए, "ए" के अनुसार। उपयुक्त स्ट्रिंग, और तीसरे के लिए कि क्या यह हाइपरबोलिक कार्यों में से एक है, तदनुसार एक "एच" जोड़ रहा है।

ऑरलपी के जवाब की तरह, यह पायथन के अंतर्निहित cmathमॉड्यूल से इनपुट के रूप में कार्यों का उपयोग करता है ।

बीच के तार में टुकड़ा अनुक्रमण का उपयोग करके 5 बाइट्स सहेजे गए

जादू नंबर ढूँढना

पूर्णता के लिए, यहां (कम या ज्यादा) स्क्रिप्ट मैं इन मैजिक नंबरों को खोजने के लिए उपयोग की गई थी। मैंने ज्यादातर सिर्फ एक अजगर टर्मिनल में सीधे काम किया, इसलिए कोड गड़बड़ है, लेकिन यह काम पूरा कर लेता है।

import cmath
fns = [(fn, getattr(cmath, fn)) for fn in ["sin","cos","tan","asin","acos","atan","sinh","cosh","tanh","asinh","acosh","atanh"]]

count_length = lambda num, modulus, base_modulus : len(str(num).rstrip('0').lstrip('0')) + (1 + len(str(modulus)) if modulus != base_modulus else 0)

min_length = float("inf")
min_choice = None
for modulus in range(2,10):
   for i in range(1,100000):
      num = i/100000.
      is_valid = True
      for fn in fns:
         val = hash(fn[1](num))%modulus%2
         if (val == 0 and fn[0][0]=="a") or (val == 1 and fn[0][0]!="a"):
            is_valid = False
      if is_valid:
         length = count_length(num, modulus, 2)
         if length < min_length:
            min_length = length
            min_choice = (modulus,num)
print(min_choice)

min_length = float("inf")
min_choice = None
for modulus in range(3,10):
   for i in range(100000):
      num = i/100000.
      mapping = {}
      is_valid = True
      for fn in fns:
         fn_type = "sin" if "sin" in fn[0] else "cos" if "cos" in fn[0] else "tan"
         val = hash(fn[1](num))%modulus%3
         if val in mapping and mapping[val] != fn_type:
            is_valid = False
            break
         mapping[val] = fn_type
      if is_valid:
         length = count_length(num, modulus, 3)
         if length < min_length:
            min_length = length
            min_choice = (modulus, num, mapping)
print(min_choice)

min_length = float("inf")
min_choice = None
for modulus in range(2,10):
   for i in range(1,100000):
      num = i/100000.
      is_valid = True
      for fn in fns:
         val = hash(fn[1](num))%modulus%2
         if (val == 0 and fn[0][-1]=="a") or (val == 1 and fn[0][-1]!="a"):
            is_valid = False
      if is_valid:
         length = count_length(num, modulus, 2)
         if length < min_length:
            min_length = length
            min_choice = (modulus,num)
print(min_choice)

1
शानदार दूसरा जवाब! क्या आप उस प्रोग्राम को साझा करने का मन बनाएंगे जिसका उपयोग आपने जादू की संख्याओं को खोजने के लिए किया था?
mbomb007

धन्यवाद! मैंने मैजिक नंबरों को उत्तर में खोजने के लिए सिर्फ कोड जोड़ा, हालांकि यह बहुत सुंदर नहीं है।
नाथिस्ट

4

अजगर , 108 94 90 बाइट्स

मूल्य के लिए सभी फ़ंक्शन के परिणामों के लिए इनपुट फ़ंक्शन के परिणाम की तुलना करता है .2

from cmath import*
lambda f:[w for w in globals()if w[-1]in'shn'and eval(w)(.2)==f(.2)][0]

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

रॉड द्वारा जोनाथन एलन -4 बाइट्स -14 बाइट्स


इसके लिए कोई ज़रूरत नहीं है re, बस स्लाइसिंग के साथ जरूरी सामान प्राप्त करें: lambda f,d=dir(cmath):[s for s in d[4:12]+d[22:]if eval("cmath."+s)(.2)==f(.2)][0](टीआईओ पर काम करने के लिए फिर से लिखा जाए क्योंकि आयात पहले होना चाहिए d=dir(cmath)फिर F=भी हेडर में गिना जाना चाहिए)।
जोनाथन एलन


बहुत अच्छा! धन्यवाद
mbomb007

4

दिल्लोग एपीएल , 25 21 19 बाइट्स

(8-(2○⍨8-⍳15)⍳⎕2)∘○

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

-3 H.PWiz
-2 के लिए धन्यवाद ngn करने के लिए

सभी आवश्यक ट्रिगर कार्यों को गर्त में ले जाता है (जो कि एपीएल में हैं 1 2 3 5 6 7 ¯1 ¯2 ¯3 ¯5 ¯6 ¯7○2) इसके अलावा कुछ और चीजें (यह गर्त जाती है -7..7), जो एक से मेल खाता है input○2, और आउटपुट जो "के साथ" , के रूप में आउटपुट करता हैnum∘○


3

सी (जीसीसी) साथ -lm, ३ 34४ ३४६ 324 बाइट्स

सुझाव के लिए जियाको गारबेलो को धन्यवाद।

मैं अपने मूल मैक्रो के अलावा एक सहायक मैक्रो टोकेन-पेस्टिंग करके थोड़ा अधिक स्थान बचाने में सक्षम था जो स्ट्रिंग करता है।

परीक्षणों में, मैंने परिणामों की वैधता की पुष्टि करने के लिए गैर-पुस्तकालय ट्रिगर कार्यों के एक जोड़े का उपयोग किया। पुस्तकालय और गैर-पुस्तकालय कार्यों के बीच परिणाम नहीं थे वास्तव में एक ही फ़्लोटिंग-पॉइंट मान , मैंने समानता का उपयोग करने के बजाय छोटे मूल्य के विरुद्ध परिणामों के अंतर की तुलना की।

#include <math.h>
#define q(f)f,#f,
#define _(f,g)q(f##sin##g)q(f##cos##g)q(f##tan##g)
#define p for(i=0;i<24;i+=2)
typedef double(*z)(double);*y[]={_(,)_(a,)_(,h)_(a,h)};i,x;*f(z g){int j[24]={0};char*c;double w;for(x=0;x++<9;)p!j[i]&isnan(w=((z)y[i])(x))-isnan(g(x))|fabs(w-g(x))>1E-9?j[i]=1:0;p!j[i]?c=y[i+1]:0;return c;}

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


मैं 14 बाइट निकालने में कामयाब रहा। TIO में आप विवरण पा सकते हैं। इसे ऑनलाइन आज़माएं!
जियाको गारबेलो

मेरे से +1, लेकिन मुझे एक अलग रणनीति का उपयोग करके एक उप 200 समाधान मिला :)
लैंबडाटा

3

जावास्क्रिप्ट, 76 67 66 बाइट्स

बहुत सुंदर नहीं है, लेकिन मैं खरगोशों के छेद से बहुत दूर चला गया, जिसमें कुछ बियर नहीं थी पोस्ट। निट के समाधान से स्वतंत्र रूप से व्युत्पन्न।

b=>Object.getOwnPropertyNames(M=Math).find(x=>M[x](.8)+M==b(.8)+M)

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

  • सहेजे गए 6 बाइट्स के लिए धन्यवाद नील बचाए
  • L4m2 के लिए 1 बाय धन्यवाद दिया गया

b=>Object.getOwnPropertyNames(M=Math).find(x=>M[x](.8)+M==b(.8)+M)? (हालांकि मैं यह नहीं जानता कि क्यों स्ट्रिंग की तुलना करने के लिए परिवर्तित करें)
l4m2

पता नहीं क्यों मैंने ऐसा नहीं सोचा था। धन्यवाद, @ l4m2
झबरा

@ l4m2 हमें NaNबराबर की तुलना करने की आवश्यकता है NaN, इसलिए यह या तो वह है या Object.is
नील



2

जावास्क्रिप्ट, १० JavaScript 70 बाइट्स

मैंने उम्र में शुद्ध जावास्क्रिप्ट में गोल्फिंग की कोशिश नहीं की है, इसलिए मुझे यकीन है कि यहां सुधार करने के लिए सामान है।

t=>Object.getOwnPropertyNames(m=Math).find(f=>m[f](.9,0)+''==t(.9)+'')

बहुत सीधा, पर हर समारोह की जाँच करता है Math एक मनमाने मूल्य के खिलाफ प्रोटोटाइप (0.9, कई अन्य मान शायद काम करते हैं) और ब्लैक बॉक्स फ़ंक्शन के परिणाम के साथ तुलना करता है।
Google Chrome में परीक्षण किया गया, तो टूट जाएगा यदि इनपुट ब्लैक बॉक्स फ़ंक्शन ट्रिग्स में से एक नहीं है।

शैगी और नील की बदौलत एक टन बाइट काट लें।

const answer = t=>Object.getOwnPropertyNames(m=Math).find(f=>m[f](.9,0)+''==t(.9)+'');
const tests = [Math.sin, Math.cos, Math.tan, Math.asin, Math.acos, Math.atan, Math.sinh, Math.cosh, Math.tanh, Math.asinh, Math.acosh, Math.atanh];

tests.forEach(test => console.log(test + ' yields ' + answer(test)));


1
समाधान के समान ही मैं कुछ बियर पर काम कर रहा था, लेकिन यह पता नहीं लगा सका। 2 त्वरित बचत मैं हाजिर कर सकता हूं: 0.3 -> .3और भीतर असाइन Mathकरना । m getOwnPropertyNames()
झबरा

1
मैं इसे 71 बाइट्स तक ले जाने में कामयाब रहा t=>Object.getOwnPropertyNames(m=Math).find(f=>m[f](.9,0)+''==t(.9)+'');:। मैंने देखा @ शगुन का भी इस्तेमाल findकिया। +''एक स्ट्रिंग की तुलना, जिसका अर्थ है कि हम केवल एक ही बिंदु की जांच करने के है। ,0हमें छोड़ करता है Math.atan2
नील

@Neil, ऐसा नहीं लगता है कि ,0 यह आवश्यक है: tio.run/##Lc6xDoMgEMbxvU/RMEFq2TvgG1jdjYknomLkzghp7gPTqEz/…
झबरा

@ शैगी मुझे लगता है कि यह कार्यान्वयन-निर्भर है; फ़ायरफ़ॉक्स में, द्वारा दिए गए सरणी में atan2पूर्ववर्ती । acoshObject.getOwnPropertyNames
नील

अगर किसी को आश्चर्य हो रहा था, तो यह समाधान काम करता है क्योंकि पहले गैर-फ़ंक्शन getOwnPropertyNamesMath.E है, और सभी ट्रिगर फ़ंक्शन इससे पहले गणना करते हैं।
मैथ

2

आर , 75 बाइट्स

function(b)Find(function(x)get(x)(1i)==b(1i),apropos('(sin|cos|tan)(h|$)'))

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

फिलहाल (R v3.5) यह काम करता है।
यदि भविष्य के आर संस्करण में इसे इस रेगेक्स से मेल खाते एक फ़ंक्शन जोड़ा जाएगा, तो कौन जानता है: पी

  • -2 बाइट्स @Giuseppe की बदौलत
  • -9 बाइट्स @JayCe को धन्यवाद
  • के Findबजाय का उपयोग कर -2 बाइट्सfor

वाह। बहुत अच्छा! मुझे लगता है कि -2 बाइट्स के लिए 1iभी काम करता है -1i
Giuseppe

@Giuseppe: मुझे यकीन था कि मैंने इसका परीक्षण किया था और यह काम नहीं कर रहा था ... लेकिन शायद यह केवल मेरी कल्पना थी: D
digEmAll

बहुत अच्छा! TIO पर काम करता है, सामान्य स्थिति में शायद आपके कॉन्फिग पर निर्भर करता है: tio
JayCe

@JayCe: स्थिति के माध्यम से पर्यावरण प्राप्त करना जोखिम भरा है ... उदाहरण के लिए यह RStudio में काम नहीं करता है ... सौभाग्य से मुझे हर जगह समान बाइटकाउंट के साथ वस्तुओं की खोज करने वाला एक और फ़ंक्शन मिला :)
digEmAll

अंत में ... GET कम है (77)
JayCe

1

HP 49G RPL, 10 बाइट प्रोग्राम हैडर को छोड़कर 88.0 बाइट्स

जटिल संख्याओं का उपयोग करके एक और समाधान! COMPLEX, APPROX मोड में दर्ज करें और इसे निष्पादित करें। स्टैक पर फ़ंक्शन लेता है।

2. SWAP EVAL { SIN COS TAN ASIN ACOS ATAN SINH COSH TANH ASINH ACOSH ATANH }
DUP 1. << 2. SWAP EVAL >> DOLIST ROT - ABS 0. POS GET

(newlines कोई फर्क नहीं पड़ता)

निरंतर 2.0 के लिए, सभी बारह ट्रिगर फ़ंक्शन जटिल विमान में परिभाषित किए जाते हैं, इसलिए हम बस सभी बारह का मूल्यांकन करते हैं और देखते हैं कि कौन सा मैच होता है। इस समय, पुनरावृत्ति समाधान लंबा है (111.5 बाइट्स) क्योंकि स्टैक फेरबदल इसे प्राप्त करने के लिए आवश्यक है। आरपीएल, जहां तक ​​मुझे पता है, आपको जल्दी से एक लूप से बाहर निकलने नहीं देता है।


यदि वे ऊपरी मामले के रूप में वापस आ जाते हैं, तो यह ठीक है क्योंकि मैंने चुनौती को संपादित किया है।
लकोनी

@JungHwanMin वे ऊपरी मामले हैं। पकड़ने के लिए धन्यवाद! इसे ->STR DUP SIZE 3 - " " " " IFTE XOR34.5 बाइट्स के साथ निचले-मामले में संशोधित किया जा सकता है । (उन लोगों को क्रमशः 4 और 3 रिक्त स्थान माना जाता है)
जेसन

1

पर्ल 6 , 39 बाइट्स

{i.^methods.first({try $^a.(i)==.(i)})}

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

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


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