त्रिकोणीय संकेत उत्पन्न करें


9

कार्य:

नमूने के सूचकांक, एक्स को देखते हुए, त्रिकोणीय तरंग की नमूना मूल्य एफ (एक्स) की गणना करें, 4 नमूनों की अवधि और आयाम 1. ऑफसेट नकारात्मक हो सकता है और नमूना मूल्य या तो {0, 1, -1} हो सकता है।

परीक्षण के मामलों:

   -5 -> -1
   -4 -> 0
   -3 -> 1
   -2 -> 0
   -1 -> -1
    0 -> 0
    1 -> 1
    2 -> 0
    3 -> -1
    4 -> 0
    5 -> 1

व्यक्तिगत रूप से मैं सी में दो दृष्टिकोण जानता हूं - पहला लुकअप टेबल का उपयोग कर रहा है, दूसरा सशर्त निर्देशों का उपयोग कर रहा है। ब्राउनी बिंदुओं के लिए, क्या आप मुझे शुद्ध "गणित" दृष्टिकोण के साथ प्रभावित कर सकते हैं? (मेरा मतलब शुद्ध कार्यात्मक दृष्टिकोण है, उदाहरण के लिए सशर्त निर्देशों का उपयोग नहीं करना या LUT के लिए मेमोरी का उपयोग करना।) लेकिन यह कोई प्रतिबंध नहीं है। यदि आप नहीं कर सकते हैं, या आपकी भाषा इसका समर्थन नहीं करती है - बस कोई समाधान पोस्ट करें


3
"ऑफसेट नकारात्मक हो सकता है" से आपका क्या मतलब है? इसके अलावा, यह मूल रूप से सिर्फ एक त्रिकोणमितीय फ़ंक्शन है, इसलिए मुझे आश्चर्य होगा कि अगर यह किसी चीज़ की नकल नहीं करता है।
FryAmTheEggman

@JungHwanMin इसमें बहुत अधिक आरामदायक नियम हैं, इसलिए यह वास्तव में एक डुबकी नहीं है (हालांकि यह एक ही चीज़ के लिए पूछता है)।
मेगो

@ ठीक है। मेरा वोट वापस लेना।
जंगहवान मिन


क्या लहर उदाहरण के सापेक्ष चरण से बाहर हो सकती है?
मारिया

जवाबों:


12

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

Im[I^#]&

व्याख्या

Im[I^#]&
   I^#    (* Raise the imaginary unit to the input power *)
Im[   ]   (* Take the imaginary part *)

3
ओह, सुंदर दृष्टिकोण। मैंने यह कैसे नहीं देखा? : डी
हाइपरएनुट्रिनो

खिचड़ी भाषा एगो कैसे काल्पनिक यूनिट को सी में उत्पन्न करने के लिए देखें .. = (im कोडांतरक आदमी ^ ^ विदेशी भाषाओं में बिलियन का उपयोग करना मेरे पक्ष में नहीं है) हालांकि एक उत्तर है ..

7

टीआई-बेसिक, 7 5 4 बाइट्स

sin(90Ans

(डिग्री मोड) मेरे पुराने उत्तर से @immibis से -1 बाइट।


पुराना उत्तर

imag(i^Ans

एक कैलकुलेटर पर शुद्ध-गणित दृष्टिकोण। :)

बस मज़े के लिए, यहां 9 बाइट्स (रेडियन मोड में) या 8 बाइट्स (डिग्री मोड) के लिए एक और शुद्ध-गणित (ईश) समाधान है

2/πsin-1sin(πAns/2 # Radians
90-1sin-1sin(90Ans # Degrees

हाँ, लेकिन आप सिर्फ एक कल्पना () कार्यान्वयन को भूल जाते हैं .. लेकिन दूसरों के कोड ठीक है, हालांकि .. अच्छा जवाब :)

2
@ xakepp35 मुझे समझ नहीं आया। imag()TI-BASIC पर एक वैध कार्य है।
जंगहवान मिन

इसमें गलत क्या है sin(90Ans? आपको अतिरिक्त की आवश्यकता क्यों है 90-1sin-1?
user253751

@immibis 90 ^ -1s ^ -1 यह सभी मानों के लिए एक त्रिकोण तरंग बनाता है, लेकिन पाप (90Ans इस बात के लिए काम करता है कि प्रश्न क्या पूछता है।
pizzapants184

6

अजगर 2 , 20 बाइट्स

lambda n:n%2-n%4/3*2

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

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


2
जानवर बल अभिव्यक्ति खोज? अच्छा!
ग्रेविटन

5

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

!n=(2-n&3)%2

मुझे यह दृष्टिकोण पसंद है क्योंकि यह किसी अन्य भाषा में सबसे छोटा होने की संभावना नहीं है।

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

यह काम किस प्रकार करता है

जूलिया की ऑपरेटर पूर्वता थोड़ी असामान्य है: अधिकांश अन्य भाषाओं के विपरीत, बिटवाइज़ ऑपरेटरों की उनके अंकगणितीय समकक्षों की तरह ही पूर्वता होती है, इसलिए & (बिटवाइज़ गुणा) की भी वही पूर्वता है *

सबसे पहले, n&3इनपुट मोडुलो लेता है 4 को सकारात्मक संकेत के साथ ।

परिणाम - 0 , 1 , 2 , या 3 - तब 2 से घटाया जाता है , 2 , 1 , 0 , या -1 , उपज

अंत में, हम 2 , 0 , 1 , 0 , या -1 वापस करके विभाजन के हस्ताक्षरित शेष भाग को लेते हैं ।



4

डीसी, १३

सुनिश्चित नहीं है कि आप %"शुद्ध गणित" के रूप में modulo ऑपरेटर की गणना करते हैं :

?1+d*v4%1-2%p

इसे ऑनलाइन आज़माएं । ध्यान दें कि नकारात्मक संख्याओं को इंगित करने के बजाय इसका dcउपयोग करता है ।_-

व्याख्या

?              # read input
 1+            # add 1
   d*v         # duplicate, multiply, square root (poor-mans abs())
      4%       # mod 4
        1-     # subtract 1
          2%   # mod 2
            p  # print

ध्यान दें कि dc's %आधुनिक ऑपरेटर मानक "सीपीयू" संस्करण है कि नकारात्मक मूल्यों के ऋणात्मक मानों नक्शे है।


क्या आप abs((x+1)%4)-1इसके बजाय बस कर सकते हैं ?
मैजिक ऑक्टोपस Urn

2

ब्रेनफक , 136 बाइट्स

>,>++++<[>->+<[>]>[<+>-]<<[<]>-]>>>>-[>+<-----]>--[-<+>>>+>>>+>>>+<<<<<<<<]<->>>>>>->--[>+<++++++]>++<<<<<<<<<<[[->>>+<<<]>>>-]>[.[-]]>.

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

संभवतः एक अधिक तुच्छ उत्तर है, लेकिन यह अनिवार्य रूप से मूल्यों की तालिका का उपयोग करता है। हालांकि ब्रेनफक 0 से 127 तक सकारात्मक मानों के साथ ASCII वर्णों के रूप में इनपुट लेता है, यह अभी भी काम करता है जैसे कि यह नकारात्मक मानों को स्वीकार करने में सक्षम था (परीक्षण करने के लिए, राशि के ,साथ बदलेंn- वर्णों की )।

यह काम किस प्रकार करता है

>,                                   take input (X)
>++++<                               take second input for modulo (4)
[>->+<[>]>[<+>-]<<[<]>-]             calculate X mod 4
>>>>-[>+<-----]>--                   create initial '1' character
[-<+>>>+>>>+>>>+<<<<<<<<]            duplicate '1' four times as 1,1,1,1
<->>>>>>->--[>+<++++++]>++<<<<<<<<<< change 1,1,1,1 to 0,1,0,-1 
[[->>>+<<<]>>>-]>[.[-]]>.            move to the right X%4 * 3 times, then print the following two characters ( 0, 1, 0,-1)

1

पायथन, 26 24 21 बाइट्स

lambda x:(1j**x).imag

-2 बाइट्स वैल्यू इनक के लिए धन्यवाद कि यह समझने के लिए कि गणितीय पद्धति वास्तव में तुच्छ दृष्टिकोण से अधिक लंबी है: पी
-3 बाइट्स डेनिस के लिए धन्यवाद इंगित करने के लिए कि मुझे इसकी आवश्यकता नहीं है int(...), इस प्रकार इस छोटे बनाने :)


lambda x:[0,1,0,-1][x%4]वास्तव में आपके पूर्व-ज़बरदस्त उत्तर lol से कम है
मूल्य इंक

@ValueInk ओह ... उम यह बहुत शर्मनाक है
हाइपरयूट्रीनो

2
आप int()पहली जगह में क्यों इस्तेमाल करेंगे ?
डेनिस

@ डेनिस क्योंकि .imagएक फ्लोटिंग-पॉइंट वैल्यू देता है और मुझे यकीन नहीं है कि अगर ऐनक इसकी अनुमति देता है। यह अब कोई बात नहीं है :)
HyperNeutrino

यदि फ़्लोट्स की अनुमति नहीं है, तो जावास्क्रिप्ट प्रतिस्पर्धा करने में सक्षम नहीं होगा।
डेनिस


1

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

#~JacobiSymbol~46&

5
यह काफी काम नहीं करता है: इनपुट 9 और 11 दोनों आउटपुट के रूप में 1 देते हैं, उदाहरण के लिए। इस समारोह की अवधि 184 है, न कि 4.
ग्रेग मार्टिन

1
हालांकि, JacobiSymbol[-4,#]&काम करता है, और बस एक और बाइट खर्च होती है। अछा सुझाव!
ग्रेग मार्टिन

फिर से खिचड़ी भाषा का एक पंचांग देखें (सिर्फ अन्य लोगों द्वारा लिखा गया और संक्षिप्त कोड के जोड़े .. आह, हमेशा की तरह सभी। ठीक जवाब हालांकि



1

हास्केल , 19 बाइट्स

पोर्ट ऑफ डेनिस जूलिया समाधान, सिर्फ इसलिए कि उन्होंने कहा कि यह किसी भी अन्य भाषा में कम से कम नहीं होगा। (कोई मुझे अभी भी गलत साबित कर सकता है कि यह हास्केल में सबसे छोटा है।)

f n=rem(2-n`mod`4)2

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

हास्केल के दो अलग-अलग कार्य हैं, एक ( rem) जूलिया एक की तरह काम करता है, जबकि दूसरा ( mod) पहला तर्क नकारात्मक होने पर भी सकारात्मक परिणाम देता है, और इसलिए अनुवाद के लिए उपयुक्त है &3। (हास्केल के वास्तविक & , कहे जाने वाले .&., अलास की आवश्यकता है import Data.Bits।)


जहां तक ​​मैं बता सकता हूं, डेनिस के जूलिया समाधान का एक बंदरगाह जावास्क्रिप्ट के लिए भी इष्टतम है (14 बाइट्स)। दिखाता है कि डेनिस भी पतनशील है!
नील



0

C99, 27 बाइट्स

यह मानते हुए कि आप चाहते हैं कि तरंग मूल पर केंद्रित हो:

f(n){return cpow(1i,n)/1i;}

अन्यथा f(n){return cpow(1i,n);}करेंगे। मैं मूल रूप cimagसे वहाँ था, लेकिन जाहिरा तौर पर intएक _Complex intपैदावार से वास्तविक हिस्से को वापस करने की कोशिश कर रहा था, इसलिए मैंने इसका इस्तेमाल किया। यह समझ में आता है, लेकिन यह सुखद है कि मैंने भविष्यवाणी की होगी। व्यवहार में gccऔर एक ही हैclang


cpow अपरिभाषित xD है

कुछ #includes छोड़ा गया है, संकलन नहीं करता है)))))

लेकिन +1 सिर्फ C के लिए

1
@ xakepp35 यह वास्तव में शामिल की गलती नहीं है, यह एक लिंकर समस्या है। के साथ संकलित करें -std=c99 -lmऔर यह काम करना चाहिए। यह मेरे लिए दोनों के साथ ठीक काम करता है gccऔर clangबिना किसी को शामिल करता है। ठीक है, ठीक है, मेरा मतलब है कि कोई त्रुटि नहीं है, लेकिन बड़ी संख्या में चेतावनी।
अल्जीमर

0

05AB1E , 5 बाइट्स

4%<Ä<

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


आउटपुट उलटा है, लेकिन जो मुझे समझ में आया है, इसकी अनुमति है:

+1 बाइट को -1 के आउटपुट से गुणा करने के लिए (

   -5 -> 1
   -4 -> 0
   -3 -> -1
   -2 -> 0
   -1 -> 1
    0 -> 0
    1 -> -1
    2 -> 0
    3 -> 1
    4 -> 0
    5 -> -1

4%    # Amplitude of 4...
  <   # Period of 1...
   Ä  # Absolute value...
    < # Period of 1 centered at 0...

मैंने जो समझा वह अनुमति है

परीक्षण के मामले पारित नहीं कर रहे हैं ;-)

लेकिन +1 अच्छा प्रयास

0

पायथ - 7 बाइट्स (संभवतः 6)

ta2%tQ4

कोशिश करो

यदि लहर का चरण महत्वपूर्ण नहीं है, तो 6 बाइट्स:

ta2%Q4

कोशिश करो

स्पष्टीकरण:

ta2%tQ4
     Q    # The input
    t     # Subtract 1 to get the phase right (might not be necessary)
   %  4   # Take mod 4
 a2       # Absolute value of the result - 2
t         # Subtract 1 so the result is in [-1,0,1]


0

जावास्क्रिप्ट ईएस 6, 18 17 बाइट्स

n=>n&1&&(++n&2)-1

सबसे पहले, जांचें कि इनपुट सम या विषम है और सभी मानों के लिए 0 लौटा दें। 0b10किसी भी बिट्स को हटाने के लिए सभी अजीब इनपुट्स, इंक्रीमेंट और बिटवाइज़ के लिए, जो हमें रुचि नहीं देते हैं, फिर एक ऑफसेट के साथ उत्तर दें।

const f = n=>n&1&&(++n&2)-1;

for (let i = -5; i < 6; i++) {
  document.body.appendChild(document.createElement('pre')).innerHTML = `f(${i}) => ${f(i)}`;
}


1
की जगह एक बाइट सहेजें ? :0के साथ&&
स्टीव बेनेट

@SteveBennett धन्यवाद, महान विचार!
लीख

0

जावास्क्रिप्ट, 15 बाइट्स

n=>n&3&&2-(n&3)

जावास्क्रिप्ट के ऋणात्मक संख्याओं के विचित्र नियम के बिना बिटवाइज़ और 3 मोडुलो 4 के बराबर है। मैंने पहले चार बिंदुओं पर बहुपद प्रतिगमन किया, लेकिन तब मुझे एहसास हुआ कि मैं गूंगा था क्योंकि (1, 1), (2, 0), और (3, -1) सिर्फ 2-n है।

a=n=>n&1&&2-(n&3);
console.log([a(-5), a(-4), a(-3), a(-2), a(-1), a(0), a(1), a(2), a(3), a(4), a(5)])


बहुत अच्छा! उत्तर के लिए +1

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