पहले से ही लघु गणितीय अभिव्यक्ति को छोटा करें


15

एक बार के लिए, मैं कुछ वास्तविक काम कर रहा था, पुराने कोड को अपडेट कर रहा था, और एक अभिव्यक्ति में टकरा गया था जो कि पुराने पुराने गणित में writtenx + e x के रूप में लिखा जाएगा । मैंने सोचा था कि इसे (APL) के साथ काम करने वाली भाषा में लिखे जाने की तुलना में इसे छोटा लिखा जा सकेगा, और इसलिए इसे बहुत सरल शब्दों में प्रस्तुत करता हूँ:

एक फ़ंक्शन या प्रोग्राम लिखें (जो किसी भी तरह से) शून्य या अधिक संख्याओं को स्वीकार करता है, और रिटर्न (किसी भी तरह से) x के लिए उपरोक्त अभिव्यक्ति का परिणाम = दिए गए प्रत्येक संख्या के प्रत्येक परिणाम के लिए कम से कम 3 महत्वपूर्ण अंकों के साथ।

अपनी भाषा नहीं है, तो π और / या , मूल्यों 3.142 और 2.718 का उपयोग करें।

स्कोरिंग बाइट्स की संख्या है, इसलिए अपना उत्तर प्रस्तुत करें # LanguageName, 00 bytes

मानक लूप-होल की अनुमति नहीं है।


संपादित करें: अब मैं जिस समाधान के साथ आया हूं ○+*, वह मिल गया है । मूल कोड था (○x)+*x


5
इनपुट किस डोमेन से लिए गए हैं? इंटेगर, रियल, जटिल संख्या?
मार्टिन एंडर

1
@ मार्टिनबटनर आपको जो भी पसंद है, जब तक आउटपुट पूर्णांक तक सीमित नहीं है।
एडम डे

जवाबों:


21

डायलाग एपीएल, 3 अक्षर

एक मौन वाक्यांश के रूप में।

○+*

Monadic with के साथ अपने तर्क को गुणा करता है, monadic *घातीय कार्य है exp○+*एक ऐसी ट्रेन है जो (○+*)ωइसके बराबर है (○ω)+(*ω)। चूंकि यह एपीएल है, वाक्यांश मनमाना आकार, ई के तर्क के लिए काम करता है। जी। आप मनमानी लंबाई का एक वेक्टर पास कर सकते हैं।

एक ही समाधान के रूप में जम्मू में संभव है o.+^के साथ o.किया जा रहा है और ^किया जा रहा है *


:-) देखें "संपादित करें:" ओपी में।
आदम

इसलिए, मैंने आपको गलती से वोट दिया और केवल एहसास हुआ। कुछ मामूली संपादन करने का मन बना रहा हूँ ताकि मैं इसे बदल सकूँ?
आख-मोपर्क

@ dohaqatar7 इस तरह?
फ़ूजएक्सएक्सएल

30

Emotinomicon, 48 बाइट्स / 13 अक्षर

मैं इसे करता हूं, इसलिए नहीं कि यह छोटा है, बल्कि इसलिए कि यह मजेदार है। इसे यहाँ आज़माएँ। आपको इसे टेक्स्ट बॉक्स में कॉपी + पेस्ट करना होगा।

😼⏪🆙😦✖😎😿➕😨😼🆙😄⏩

स्पष्टीकरण:

😼  ⏪   🆙  😦  ✖   😎  😿  ➕   😼  🆙  😄  ⏩   explanation
😼                                              take numeric input
    ⏪                                           open loop
        🆙                                      duplicate top of stack
            😦                                  push pi
                ✖                               multiply top two elements on stack
                    😎                          reverse stack
                        😿                      pop N, push e^N
                            ➕                   add top two elements on stack
                                😼              take numeric input
                                    🆙          duplicate top of stack
                                        😄      pop N, push N+1
                                            ⏩   close loop

यहाँ कार्यक्रम अपने मूल वातावरण में, मोबाइल फोन है: छवि


1
निश्चित रूप से सबसे मनोरंजक अभिव्यक्ति।
एडमंड

7
लोल, के लिए एक बिल्ली cat?
जियोकॉवेल

3
मुझे यह भाषा चाहिए।
फ़राज़ मसरूर

2
मुझे लगता है कि आप कह सकते हैं कि वह उप- अभिव्यक्तियों का उपयोग करें । (• _ •) (• _ •)> ■ ■ - ■ (■ ■ _ ■)
Addison Crump

9

आर, 25 24 बाइट्स

cat(exp(x<-scan())+pi*x)    

यही है क्या? यह उपयोगकर्ता से इनपुट प्राप्त करता है, इसे असाइन करता है x, इसके घातांक की गणना करता है piऔर फिर cat()परिणाम को प्रिंट करता है।

संपादित करें: 1 बाइट्स ने एलेक्स ए के लिए धन्यवाद बचाया


1
मुझे सही लगता है।
एडम डे

2
24 बाइट्स:cat(exp(x<-scan())+pi*x)
एलेक्स ए।

इस मामले में आपको उपयोग करना होगा <-जैसा कि मैंने अपने सुझाव में किया था, =क्योंकि अन्यथा यह xतर्क निर्धारित कर रहा है, expलेकिन चर को असाइन नहीं कर रहा है x। एक ताजा सत्र में वर्तमान कोड विफल हो जाएगा।
एलेक्स ए।

7

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

सहेजे गए 5 बाइट्स @ edc65 की बदौलत

a=>a.map(x=>x*Math.PI+Math.exp(x))

संख्याओं की एक सरणी के रूप में इनपुट लेता है, और एक ही प्रारूप में आउटपुट करता है।

कमी के लिए धन्यवाद, अब तीन समतुल्य 45-बाइट कार्यक्रम हैं, सभी ES5- अनुपालन:

for(;x=prompt();)alert(x*Math.PI+Math.exp(x))
for(M=Math;x=prompt();)alert(x*M.PI+M.exp(x))
with(Math)for(;x=prompt();)alert(x*PI+exp(x))

इनपुट को एक बार में दर्ज किया जाना चाहिए। छोड़ने के लिए कुछ भी दर्ज किए बिना ओके दबाएं।

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

x=[];with(x)for(i=0;i<5;i++)push(length);

pushऔर lengthउसके बाद के गुणों के रूप में उपयोग किया जाता है x, जिसके साथ परिणाम होगा xजा रहा है [0,1,2,3,4]

यह किसी भी ऑब्जेक्ट पर काम करता है , यहां तक ​​कि गैर-चर भी, इसलिए उदाहरण के लिए, आप ऐसा कर सकते हैं:

with("0123456789ABCDEF")for(i=0;i<length;i++)alert("0x"+charAt(i)-0);

charAtऔर lengthस्ट्रिंग के गुणों के रूप में कहा जाता है। एक हेक्स मान से एक संख्या में "0x"+x-0धर्मान्तरित x, इसलिए यह alertसंख्या 0 से 15 तक होती है।


1
M.pow(M.E,x)है M.exp(x)द्वारा परिभाषा
edc65

@ edc65 मुझे सीखना चाहिए Math;) धन्यवाद!
ETHproductions

मुझे नहीं पता withथा कि पदावनत कर दिया गया।
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ मेरा बुरा; यह पदावनत नहीं है, लेकिन इसे टालना अत्यधिक सुझाव दिया गया है
ETHproductions 1

यही मुझे पढ़ना याद है। ^ _ ^ मैं इसे <canvas>प्रदान करने में और वैसे भी (बेशक) गोल्फ का उपयोग करता हूं ।
कॉनर ओ'ब्रायन

6

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

N@Pi#+E^#&

1 बाइट के साथ LegionMammal978 को धन्यवाद दिया।


वर्तमान में यह काम नहीं करता है। हालाँकि, 10 बाइट्स के लिए:1.Pi#+E^#&
LegionMammal978

एक अंतरिक्ष के बीच लापता हुई थी #और Pi। के Pi#स्थान पर उपयोग करके इसे हल किया जाता है #Pi। इसके अलावा, Nकेवल लागू करने की आवश्यकता है Pi#, न कि पूरी अभिव्यक्ति।
डेविड डिक

6

अजगर, ११ १३

VQ+*N.n0^.n1N

अब xएक सूची के रूप में लेता है , उदाहरण के लिए[1.25, 2.38, 25]

पिछला (11 बाइट्स): +*Q.n0^.n1Q

VQ            +       * N .n0            ^ .n1 N
For each      Add     List Item * Pi     e ^ List Item
input item

जब मैं ऑनलाइन दुभाषिया के साथ यह कोशिश करता हूं, तो यह केवल एक ही संख्या के लिए काम करता है। या इनपुट प्रारूप क्या है? विनिर्देश कहता है कि इनपुट "शून्य या अधिक संख्या" है, और अभिव्यक्ति को "दिए गए प्रत्येक संख्याओं में से प्रत्येक के लिए" मूल्यांकन किया जाना है।
रेटो कोराडी

@RetoKoradi "स्विच टू टेस्ट सूट" बॉक्स को चेक करके आप इसे कई नंबरों (अलग-अलग लाइनों पर) के साथ चला सकते हैं। मुझे यकीन नहीं है कि अगर अभी अनुमति है कि आप इसका उल्लेख करें।
मूस

5

गंभीरता से, 10 बाइट्स

,`;e(╦*+`M

हेक्स डंप:

2c603b6528cb2a2b604d

यह ऑनलाइन की कोशिश करो

सूची के रूप में इनपुट लेता है (उदाहरण के लिए लिंक देखें)।

स्पष्टीकरण:

,                               Get input list
 `      `M                      Map this function over it
  ;                             Copy the input value.
   e                            exponentiate
    (                           dig up the other copy
     ╦*                         multiply by pi
       +                        add


5

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

πAns+e^(Ans

TI-बेसिक, ASCII बाइट्स का उपयोग नहीं करता तो इनमें से प्रत्येक कैलकुलेटर में एक बाइट के रूप में संग्रहीत किया जाता है: π, Ans, +, e^(, और Ans। यह मानता है कि पिछली अभिव्यक्ति इनपुट (जैसे {1,2,3}) है।


5

पायथन 2, 38 बाइट्स ( 52 49 बाइट्स डब्ल्यू। गणित)

lambda l:[3.142*x+2.718**x for x in l]

अगर मुझे गणित मॉड्यूल का उपयोग करना है:

from math import*
lambda l:[pi*x+e**x for x in l]

इनपुट संख्या की एक सूची होनी चाहिए

f([1,2,3,4,5])

> [5.8599999999999994, 13.671524, 29.505290232, 67.143510850576007, 164.04623849186558]

2
If your language does not have π and/or e, use the values 3.142 and 2.718.... अजगर है piऔर eमें mathमॉड्यूल।
ज़च गेट्स

@ZachGates ने गणित मॉड्यूल के साथ एक संस्करण जोड़ा।
ताइफेल डिक

आप mathउपयोग करके समाधान पर 3 बाइट्स बचा सकते हैंfrom math import*
wnnmaw

@wnnmaw धन्यवाद!
21

आप for x in l:lambda l:pi*x+e**xदोनों जवाबों में समझ के बजाय का उपयोग करके एक और दाढ़ी बना सकते हैं
wnnmaw

4

MATL , 9 बाइट्स

यह उत्तर भाषा के वर्तमान संस्करण ( 3.1.0 ) का उपयोग करता है , जो चुनौती से पहले है।

itYP*wZe+

इनपुट एक वेक्टर है जिसमें सभी संख्याएँ होती हैं (वर्गाकार कोष्ठकों द्वारा संलग्न सूची और रिक्त स्थान, अर्धविराम के अल्पविराम से अलग), जैसे [5.3 -7 3+2j] । जटिल मूल्यों की अनुमति है। आउटपुट में 15 महत्वपूर्ण अंक हैं।

उदाहरण

>> matl itYP*wZe+
> [1 2 3]
5.859874482048839 13.67224140611024 29.51031488395705

व्याख्या

सीधा संचालन:

i       % input  
t       % duplicate 
YP      % pi   
*       % multiplication
w       % swap elements in stack                           
Ze      % exponential                                      
+       % addition 

4

MATLAB: 70 बाइट्स

@(x)num2str(arrayfun(@(x)(round(pi*x+exp(x),2-floor(log10(pi*x+exp(x))))),x))

परीक्षा:

ans(1:10)
5.86            13.7            29.5            67.2             164             422            1120            3010            8130           22100

स्पष्टीकरण: संख्या स्वरूपण के साथ कई समस्याएं थीं।

सबसे पहले, प्रश्न में 3 सिग-अंजीर की आवश्यकता होती है। Matlab में सिग-फ़िग्स (केवल दशमलव स्थानों) द्वारा गोलाई के लिए कोई अंतर्निहित फ़ंक्शन नहीं है, इसलिए निम्नलिखित वर्कअराउंड निम्न थे:

floor(log10(pi*x+exp(x)))) सबसे बड़े महत्वपूर्ण अंक की गणना करता है।

@(x)(round(pi*x+exp(x),2-floor(log10(pi*x+exp(x))))),x))इनपुट xऔर राउंड को 3 महत्वपूर्ण अंकों तक ले जाता है।

एक और आवश्यकता कई आदानों को संभालने की थी। उपरोक्त कोड केवल सिंगल नंबर के साथ काम कर सकता है। इसे कम करने के लिए, हम arrayfunप्रत्येक वेक्टर तत्व के फ़ंक्शन का मूल्यांकन करने के लिए उपयोग करते हैं।

आखिरी समस्या, मटलब अपने स्वयं के गोलाई के साथ अरफुन के परिणाम को प्रदर्शित करता है 1.0e+04 * 0.0006जो आउटपुट की ओर जाता है जैसे कि 3 सिग-अंजीर आवश्यकता का उल्लंघन करता है। इसलिए, num2strसरणी को charप्रारूप में बदलने के लिए उपयोग किया गया था ।

माटलैब संख्यात्मक विश्लेषण के लिए अच्छा है, लेकिन, स्पष्ट रूप से, यह ठीक संख्या स्वरूपण की बात है

UPD: ठीक है, यह शर्मनाक है कि मैं उलझन में हूं

कम से कम 3 महत्वपूर्ण अंकों के साथ

साथ में

3 महत्वपूर्ण अंकों के साथ

वैसे भी, मैं अपना जवाब इस रूप में छोड़ दूंगा क्योंकि 15 बाइट्स का माटलब समाधान पहले से ही @ कॉस्टरॉम द्वारा दिया गया है


2
क्या?! आपको वह सब क्यों करना है?
आदम

4
क्या यह कोड-बॉलिंग है?
स्टीवी ग्रिफिन

मैं जवाब के लिए स्पष्टीकरण जोड़ देंगे
brainkz

1
यह केवल 3 सिग अंजीर की एक न्यूनतम कहता है , बिल्कुल 3. नहीं। यदि आप निर्दिष्ट करते हैं कि format longgकोड चलाने से पहले आवश्यक था, तो आप यहां 3/4 लंबाई छोड़
देंगे

@ कॉस्ट्रोम हां, आप सही कह रहे हैं, और मैं
मानता

4

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

x->π*x+e.^x

यह एक अनाम फ़ंक्शन है जो किसी सरणी को स्वीकार करता है और फ़्लोट्स की एक सरणी देता है। इसे कॉल करने के लिए, इसे एक नाम दें, जैसे f=x->...

जूलिया में अंतर्निर्मित स्थिरांक हैं πऔर इसके eलिए आपने क्रमशः अनुमान लगाया है- in और e, क्रमशः। .^ऑपरेटर घातांक vectorized है।


3

जाप, 12 बाइट्स

N®*M.P+M.EpZ

अंतरिक्ष-पृथक संख्याओं के रूप में इनपुट लेता है। इसे ऑनलाइन आज़माएं!

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

N®   *M.P+M.EpZ
NmZ{Z*M.P+M.EpZ

        // Implicit: N = array of inputs, M = Math object
NmZ{    // Map each item Z in N to:
Z*M.P+  //  Z times PI, plus
M.EpZ   //  E to the power of Z.
        // Implicit: output last expression

जब आप ५,५५४ प्रतिनिधि पर हो तो मुझे आपसे नफरत थी।
कॉनर ओ'ब्रायन

3

जे, 4 बाइट्स

o.+^

एपीएल के समान ○+*, लेकिन जे के pi timesफ़ंक्शन को कहा जाता है o., जो एक बाइट लंबा है।



2

बराबर , 8 बाइट्स

✶[″℗↔π*+

इनपुट के रूप में स्वीकार करता है (1 2 3)

व्याख्या

               ## [implicit: read line]
✶              ## Parse input as array of numbers
[              ## Map
 ″             ## Duplicate
 ℗             ## e to the power
 ↔             ## Swap
 π*            ## Multiply by π
 +             ## Add

2

रैकेट , 27 बाइट्स

map(λ(x)(+(* pi x)(exp x)))

जब एक अभिव्यक्ति के समारोह की स्थिति में डाल दिया:

(map(λ(x)(+(* pi x)(exp x))) '(1 2 3 4))

> '(5.859874482048838 13.672241406110237 29.510314883957047 67.16452064750341)

2

सीजेएम, 13 बाइट्स

q~{_P*\me+}%p

रिक्त स्थान (उदाहरण [1 2 3]) द्वारा अलग किए गए सरणी के रूप में इनपुट लेता है । इसे ऑनलाइन आज़माएं।

व्याख्या

q~    e# Read the input and evaluate it as an array
{     e# Do this for each number x in the array...
  _P* e# Multiply x by pi
  \me e# Take the exponential of x (same as e^x)
  +   e# Add the two results together
}%
p     e# Pretty print the final array with spaces

@NBZ किया, स्पष्ट करने के लिए धन्यवाद।
निन्जाबियरमॉन्की

1

रेंग v.3.3, 53 बाइट्स

नॉनकंपेटिंग क्योंकि यह चुनौती को स्थगित करता है, लेकिन हे, संक्षिप्तता के लिए कोई पुरस्कार नहीं जीतता। : पी यहाँ कोशिश करो!

2²5³*:"G"(%3+i#II*ZA*9+(%2+#E1II0e1+ø
1-)E*(:0eø
$+n~

पंक्ति ०

यहाँ 0 में स्टैक का एक दृश्य है:

Sequence read | Stack
2²            | 4
5³            | 4 125
*             | 500
:             | 500 500
"G"           | 500 500 71
(             | 500 71 500
%             | 500 0.142
3+            | 500 3.142
i             | 500 3.142 <i>
#I            | 500 3.142     ; I <- i
I             | 500 3.142 <i>
*             | 500 3.142*<i>
ZA            | 500 3.142*<i> 35 10
*             | 500 3.142*<i> 350
9+            | 500 3.142*<i> 359
(             | 3.142*<i> 359 500
%             | 3.142*<i> 0.718
2+            | 3.142*<i> 2.718
#E            | 3.142*<i>     ; E <- 2.718
1II0          | 3.142*<i> 1 <i> <i> 0
e             | 3.142*<i> 1 <i> <i>==0
1+            | 3.142*<i> 1 <i> (<i>==0)+1

øफिर अगली Nth लाइन पर जाता है। जब 0इनपुट होता है, तो यह सीधे लाइन 2 पर जाता है। अन्यथा, हम लाइन 1 पर जाते हैं।

पंक्ति 1

1-)E*(:0eø

यह E iगुणा गुणा करता है, जो है e^i। हम काउंटर (शुरू में I) को घटाते हैं, STOS (हमारी रनिंग eपावर) को E से गुणा करते हैं, काउंटर पर वापस जाते हैं, और ऐसा करते हैं ( i'वर्तमान काउंटर है):

Sequence read | Stack (partial)
              | i'
:             | i' i'
0             | i' i' 0
e             | i' i'==0

øफिर एक दो काम करता है। यदि काउंटर 0 नहीं है, तो हम "अगली" 0 वीं पंक्ति पर जाते हैं, अर्थात, वर्तमान लाइन की शुरुआत। यदि यह शून्य है, तो0e 1 उपज देता है, और अगली पंक्ति में जाता है।

लाइन 2

$+n~

$ काउंटर बूँदें (फर्श पर!)। +शीर्ष दो परिणाम जोड़ता है, nउस संख्या को आउटपुट करता है, और ~प्रोग्राम को क्विट करता है।

केस 1: इनपुट 0. 0. टीओएस 1 ("ई ^ 0") है और एसटीओएस 0 (पीआई * 0) है। उन्हें जोड़ने से सही परिणाम मिलता है।

केस 2: इनपुट 0. नहीं है। परिणाम जैसा कि आप उम्मीद कर सकते हैं।

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