ব্ল্যাক বক্স ত্রিকোণমিতি


29

একটি প্রোগ্রাম বা ফাংশন যা নিম্নলিখিত 12 ত্রিকোণমিতিক ফাংশন আলাদা করতে পারেন লিখুন: sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh

আপনার প্রোগ্রামটিকে উপরের ফাংশনগুলির একটিতে ব্ল্যাক বক্স হিসাবে দেওয়া হয় এবং ফাংশনের নামটি উপরে বর্ণিত হিসাবে বা এটি আপনার ভাষায় নামকরণ করা হয় output

এটি , তাই প্রতিটি ভাষার সংক্ষিপ্ত উত্তর জিততে পারে। আপনার কোডটি সমস্ত 12 সম্ভাব্য ইনপুটগুলির সাথে পরীক্ষার কেসগুলি অন্তর্ভুক্ত করে সঠিকভাবে কাজ করে তা দেখানো উচিত। যদি আপনার পছন্দের ভাষাটিতে উপরের সমস্ত ফাংশনগুলির জন্য বিল্ড-ইনগুলি অন্তর্ভুক্ত না করা হয় তবে আপনাকে অনুপস্থিতগুলির নিজস্ব বুদ্ধিমান বাস্তবায়ন সরবরাহ করতে হবে।

আরও স্পষ্টতা

  • অন্তর্নিহিত বিল্ট-ইনগুলি তাদের পরিচালনা করতে পারে যদি কালো বাক্সটি জিজ্ঞাসা করার জন্য জটিল নম্বরগুলি ব্যবহারের অনুমতি দেওয়া হয়।
  • যেমন শুধুমাত্র আসল সংখ্যাগুলি ব্যবহার করার সময়, ব্ল্যাক বক্স ফাংশনে অনুসন্ধানগুলি ডোমেন ত্রুটি দিতে পারে। এই ক্ষেত্রে আপনার ধরে নেওয়া উচিত যে ব্ল্যাক বক্সটি কেবল একটি ত্রুটির অস্তিত্বের কথা বলে, তবে এটি কোন ফাংশন থেকে উত্পন্ন তা নয়।dom acoshdom atanh=
  • যদি ত্রুটির পরিবর্তে কিছু অন্য মান যেমন, NaNবা null, ফেরত দেওয়া হয়, তবে আপনার জমাটি সেগুলি হ্যান্ডেল করতে সক্ষম হবে।

সহায়ক স্যান্ডবক্স প্রতিক্রিয়ার জন্য ধন্যবাদ !


1
গাণিতিক প্রতীকী ইনপুটগুলি পরিচালনা করতে পারে যাতে ফাংশন আউটপুটটি কেবলমাত্র আংশিকভাবে মূল্যায়ন করা হয়, যদি তা হয় না। এটির পার্থক্যটি হ'ল আমি গণনার পরিবর্তে কিছু প্যাটার্ন-ম্যাচিং ব্যবহার করতে পারি।
জংহওয়ান মিন

1
@ জংহওয়ানমিন এর অর্থ যদি আপনি প্রতীকী আউটপুট থেকে ফাংশনটির নামগুলি অ্যাক্সেস করতে পারেন তবে আমি আশঙ্কা করছি এটির অনুমতি দেওয়া হয়নি।
লাইকনি

উত্তর:


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
@ জংহওয়ানমিন আমি বিশ্বাস করি আপনি বিভ্রান্ত আমি অবশ্যই একটি বাস্তব ফাংশন গ্রহণ করি। নোট করুন যে ইনপুট সম্পর্কে আমার একমাত্র রেফারেন্স 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 মধ্যে সুইচ নিছক পরীক্ষার জন্যে। আপনি যদি স্ট্যান্ডার্ড ট্রিগ ফাংশনের একটি নিখুঁত বাস্তবায়ন লিখতে পারেন তবে সঠিক উত্তরটি পাবেন।

ব্যাখ্যা

ধারণাটি এমন কিছু ইনপুট মান সন্ধান করা ছিল যে আমি যখন ট্রিগার ফাংশনগুলির প্রতিটি ফলাফলের পূর্ণসংখ্যা হিসাবে ব্যাখ্যা করি তখন তাদের পৃথক অনুসারীগুলি মডিউল ১২ থাকে This এটি তাদের অ্যারে সূচক হিসাবে ব্যবহার করার অনুমতি দেবে।

এই জাতীয় ইনপুট মানটি খুঁজতে আমি নিম্নলিখিত স্নিপেট লিখেছিলাম:

#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 থেকে): আকোশ, সিনাহ, আসিনহ, আতানহ, তন, কোশ, আসিন, পাপ, কোস, আতান, তানহ, একোস।

এখন আমি কেবল একটি স্ট্রিংয়ের অ্যারেতে সূচি রাখতে পারি, তবে নামগুলি খুব দীর্ঘ এবং খুব অনুরূপ, সুতরাং পরিবর্তে আমি সেগুলি স্ট্রিংয়ের টুকরো থেকে বের করে আনতে পারি।

এটি করার জন্য আমি "asinhacoshatanh" এবং দুটি অ্যারে স্ট্রিং তৈরি করি। প্রথম অ্যারেটি শূন্যের কোন অক্ষরকে নাল টার্মিনেটরে সেট করতে হবে তা বোঝায়, যখন দ্বিতীয়টি সূচিত করে যে স্ট্রিংয়ের অক্ষরটি প্রথম হওয়া উচিত। এই অ্যারেগুলিতে রয়েছে: 10,5,5,0,14,10,4,4,9,14,0,9 এবং 5,1,0,10,11,6,0,1,6,10,11, যথাক্রমে 5।

পরিশেষে এটি সি তে পুনরায় ব্যাখ্যা ব্যাখ্যার অ্যালগরিদম দক্ষতার সাথে প্রয়োগ করার বিষয় ছিল দুঃখজনকভাবে আমাকে ডাবল টাইপটি ব্যবহার করতে হয়েছিল এবং ঠিক doubleতিনটি ব্যবহারের সাথে কেবল মাত্র তিনটি #define D double\nDDD অক্ষর দ্বারা তিনবার ব্যবহার করা তত দ্রুত ছিল । ফলাফল উপরে, একটি বিবরণ নীচে:

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?-_:_))
কার্টিস Bechtel

আপনি আপনার কোডে -DD=doubleসমস্ত doubleএস এর সাথে সংকলন করে এবং প্রতিস্থাপন করে 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 টি খুঁজে পাই! এটি মূলত "পাপ", "কোস", এবং "ট্যান" এর জন্য একাধিক বার স্ট্রিং লিটারেলগুলি এড়াতে বাइटস সংরক্ষণ করে পরিবর্তে একবারে উত্তরটির এক অংশ তৈরি করে।

প্রথম ম্যাজিক নম্বরটি এটি "আরক" ত্রিকোণোমিত্রিক ফাংশনগুলির মধ্যে একটি কিনা তা অনুসারে ব্যবহৃত হয়, সেই অনুসারে একটি "ক" প্রিপেন্ড করে, দ্বিতীয়টি "পাপ", "কোস", বা "ট্যান" ভিত্তিক ফাংশনগুলির মধ্যে একটি নির্বাচন করে বাছাই করে উপযুক্ত স্ট্রিং এবং তৃতীয়টি হ'ল হাইপারবোলিক ফাংশনগুলির মধ্যে একটি কিনা সে অনুযায়ী একটি "এইচ" যুক্ত করা যায়।

Orlp এর উত্তরের মতো এটি পাইথনের অন্তর্নির্মিত cmathমডিউলটি ইনপুট হিসাবে ব্যবহার করে।

মাঝের স্ট্রিংয়ে স্লাইস ইনডেক্সিং ব্যবহার করে 5 বাইট সংরক্ষণ করা হয়েছে

যাদু নম্বরগুলি সন্ধান করা

সম্পূর্ণতার জন্য, আমি এই যাদু নম্বরগুলি সন্ধান করতে ব্যবহৃত স্ক্রিপ্টটি এখানে (কম-বেশি) দিয়েছি। আমি বেশিরভাগই কেবল একটি অজগর টার্মিনালে সরাসরি কাজ করেছি, সুতরাং কোডটি অগোছালো, তবে এটি কাজটি করে gets

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]

এটি অনলাইনে চেষ্টা করুন

-14 বাইট জোনাথন অ্যালেন
-4 বাইট রড দ্বারা


জন্য কোন প্রয়োজন নেই re: শুধু সেটি slicing সঙ্গে প্রয়োজন পেতে lambda f,d=dir(cmath):[s for s in d[4:12]+d[22:]if eval("cmath."+s)(.2)==f(.2)][0](Tio কাজ করার পুনর্লিখিত যেমন আমদানি আগে ঘটতে হবে 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, 374 346 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 বাইট অপসারণ করতে পরিচালিত। টিআইওতে আপনি বিশদটি পেতে পারেন। এটি অনলাইন চেষ্টা করুন!
গিয়াকোমো গারাবেলো

আমার কাছ থেকে +1, তবে আমি একটি ভিন্ন কৌশল ব্যবহার করে একটি উপ 200 সমাধান
পেয়েছি

3

জাভাস্ক্রিপ্ট, 76 67 66 বাইট

সুন্দর নয় তবে আমি এটি পোস্ট না করার জন্য কয়েক বিয়ারের সাথে খরগোশের গর্ত থেকে অনেকদূর গিয়েছিলাম । নিটের সমাধান থেকে স্বাধীনভাবে উত্পন্ন।

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

এটি অনলাইনে চেষ্টা করুন


b=>Object.getOwnPropertyNames(M=Math).find(x=>M[x](.8)+M==b(.8)+M)? (যদিও আমি
স্ট্রিংকে

কেন আমি তা ভেবে দেখিনি জানিনা। ধন্যবাদ, @ l4m2।
শেগি

@ l4m2 এর সাথে আমাদের NaNসমান তুলনা করতে হবে NaN, তাই এটি হয় হয় বা হয় Object.is
নীল



2

জাভাস্ক্রিপ্ট, 108 70 বাইট

আমি যুগে যুগে খাঁটি জাভাস্ক্রিপ্টে গল্ফ করার চেষ্টা করিনি, তাই আমি নিশ্চিত যে এখানে উন্নতি করার জন্য কিছু আছে।

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

বেশ সোজা, Mathপ্রোটোটাইপের প্রতিটি ফাংশন একটি স্বেচ্ছাসেবী মানের (0.9, অন্যান্য অনেক মান সম্ভবত কাজ করে) বিরুদ্ধে পরীক্ষা করে এবং ব্ল্যাক বক্স ফাংশনের ফলাফলের সাথে তুলনা করে।
গুগল ক্রোমে পরীক্ষিত, যদি ইনপুট ব্ল্যাক বক্স ফাংশনটি ট্রিজগুলির মধ্যে একটি না হয় তবে ভেঙে যাবে।

শেগি এবং নীলকে ধন্যবাদ জানিয়ে এক টন বাইট কেটে ফেলুন।

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
নীল

@ নিল, এটি ,0 প্রয়োজনের মতো মনে হচ্ছে না: tio.run/##Lc6xDoMgEMbxvU/RMEFq2TvgG1jdjYknomLkzghp7dPTqEz/…
শেগি

@ শেগি আমার ধারণা এটি বাস্তবায়ন নির্ভর; ফায়ারফক্সে, অ্যারেতে atan2পূর্ববর্তীগুলি acoshফিরে এসেছিল Object.getOwnPropertyNames
নীল

যদি কেউ ভাবছিলেন, এই সমাধানটি কাজ করে কারণ এর প্রথম অ-কার্যকারিতা getOwnPropertyNamesহ'ল ম্যাথ E ই and
ম্যাথএইচ

2

আর , 75 বাইট

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

এটি অনলাইন চেষ্টা করুন!

মুহুর্তের জন্য (আর ভি 3.5) এটি কাজ করে।
যদি ভবিষ্যতে আর সংস্করণে এটি এই রেজেক্সের সাথে মিলে একটি ফাংশন যুক্ত করা হবে তবে কে জানে: পি

  • -২ বাইটস @ জিউসেপ্পকে ধন্যবাদ
  • -9 বাইটস @ জাইসি কে ধন্যবাদ
  • এর Findপরিবর্তে -2 বাইট ব্যবহার করুনfor

কি দারুন. খুব সুন্দর! আমি মনে করি 1iপাশাপাশি -1i-2 বাইট জন্য কাজ করে ।
জিউসেপে

@ জিউসেপ: আমি নিশ্চিত ছিলাম যে আমি এটি পরীক্ষা করেছি এবং এটি কাজ করছে না ... তবে সম্ভবত এটি আমার কল্পনা ছিল: ডি
ডিইজএইম

খুব সুন্দর! : Tio কাজ করে, সম্ভবত সাধারণ ক্ষেত্রে আপনার কনফিগ উপর নির্ভর করে Tio
JayCe

@ জায়েসি: পজিশনের মাধ্যমে পরিবেশ পাওয়া ঝুঁকিপূর্ণ ... উদাহরণস্বরূপ এটি আরস্টুডিওতে কাজ করে না ... ভাগ্যক্রমে আমি একই জায়গাগুলির সাহায্যে সর্বত্র বস্তুগুলির সন্ধান করার জন্য একটি অন্য ফাংশন পেয়েছি :)
ডিগএমএল

শেষ পর্যন্ত ... জিইটি আরও ছোট (77)
জয়সি

1

এইচপি 49 জি আরপিএল, 10 বাইট প্রোগ্রামের শিরোনাম বাদ দিয়ে 88.0 বাইট

জটিল সংখ্যা ব্যবহার করে আরেকটি সমাধান! এটিকে কমপ্লেক্স, অ্যাপ্রোক্স মোডে প্রবেশ করুন এবং চালনা করুন। স্ট্যাকের উপর ফাংশন নেয়।

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

(নতুন লাইনে কিছু যায় আসে না)

ধ্রুবক 2.0 এর জন্য, সমস্ত বারো ট্রিগ ফাংশন জটিল প্লেনে সংজ্ঞায়িত করা হয়, সুতরাং আমরা কেবল সমস্ত বারোটি মূল্যায়ন করি এবং দেখি কোনটি মিলছে। এবার, পুনরাবৃত্তি সমাধানটি দীর্ঘতর (111.5 বাইট) কারণ এটি পাওয়ার জন্য স্ট্যাকের বদল প্রয়োজন। আরপিএল, যতদূর আমি জানি, আপনাকে তাড়াতাড়ি লুপ থেকে বেরিয়ে আসতে দেয় না।


যদি তারা উচ্চ-কেস হিসাবে ফিরে আসে তবে আমি চ্যালেঞ্জটি সম্পাদনা করার সাথে সাথে এটি এখন ঠিক আছে।
লাইকনি

পুনঃটুইট করুন ধরার জন্য ধন্যবাদ! এটি ->STR DUP SIZE 3 - " " " " IFTE XOR34.5 বাইট সহ লোয়ার-কেসে পরিবর্তন করা যেতে পারে । (সেগুলি যথাক্রমে 4 এবং 3 স্পেস হওয়ার কথা)
জেসন

1

পার্ল 6 , 39 বাইট

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

এটি অনলাইন চেষ্টা করুন!

জিনিসগুলির চেহারা অনুসারে, অন্তর্ভুক্তিটি ব্যবহার করার কয়েকটি of iএখানে একটি জটিল সংখ্যা, যার মান প্রতিটি ট্রিগ ফাংশনের জন্য স্বতন্ত্র, তাই সমস্ত পদ্ধতির মাধ্যমে পুনরাবৃত্তি করে আমরা মিলন পদ্ধতিটি খুঁজে পেতে পারি এবং স্পষ্টতই এর নামটি স্পিট করতে পারি। tryযেমন কিছু (অবাঞ্ছিত) পদ্ধতি একটি ভিন্ন স্বাক্ষর আছে প্রয়োজন হয়।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.