अनुक्रमिक गुणन


12

आपका उद्देश्य एक प्रोग्राम लिखना है जो एक इनपुट लेता है, और, जब एक साथ Nबार जंजीर होता है, "अनुक्रमिक गुणन" करता है। अनुक्रमिक गुणन क्या है, आप पूछ सकते हैं? यह aइस प्रकार परिभाषित बीज के साथ एक अनुक्रम है :

f(0) = a
f(n+1) = f(n)*(f(n)-1)

तो, चलो a = 5। इस प्रकार, f(0) = 5, f(1) = f(0)*(f(0)-1) = 5*4 = 20, और f(2) = f(1)*(f(1)-1) = 20*19 = 380

यदि आपका प्रोग्राम था ABC, तो ABCइनपुट aऔर आउटपुट लेना चाहिए f(1)। प्रोग्राम ABCABCको आउटपुट देना चाहिए f(2), आदि आपकी प्रोग्राम श्रृंखला को केवल एक बार इनपुट लेना चाहिए और केवल एक बार आउटपुट चाहिए।

यह एक कोड-गोल्फ है इसलिए बाइट्स जीत में सबसे छोटा कार्यक्रम है। मानक खामियों पर रोक लगाई जाती है।

जवाबों:


13

जेली, 3 बाइट्स

×’$

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

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

×’$    Main link (or part thereof). Argument (initially input): n

 ’     Compute n - 1.
×      Multiply n by (n - 1).
  $    Combine the previous two atoms into a monadic quicklink.

टुकड़ा दोहरा n बार यह निष्पादित करेंगे n बार, वांछित उत्पादन में जिसके परिणामस्वरूप।


4

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

,;D*

स्पष्टीकरण:

,;D*
,     push input (NOP once input is exhausted)
 ;D   dupe and push n-1
   *  multiply
      (implicit output at EOF)

डेनिस के जेली उत्तर की तरह , इस कार्यक्रम को nबार-बार दोहराने से परिणाम भी चलेंगे n। यह अनिवार्य स्टैक-आधारित भाषाओं के कई लाभों में से एक है।

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


4

MATL, 3 बाइट्स

tq*

आप इसे ऑनलाइन आज़मा सकते हैं ! मूल रूप से सीरियसली और जेली के जवाबों के समान। सबसे पहले, यह स्टैक के शीर्ष को दोहराता है (स्टैक खाली होने पर पहली बार इनपुट प्राप्त करें)। स्टैक के शीर्ष को घटाता है और अगले इनपुट, या परिणाम देने के लिए दो तत्वों को गुणा करता है।


4

पायथन 3, 56 बाइट्स

+1if 0else 0
try:n
except:n=int(input())
n*=n-1
print(n)

बस आउटपुट-ओवरराइटिंग प्रवंचना के बिना एक समाधान चाहता था। एक अनुगामी न्यूलाइन की कमी महत्वपूर्ण है।


क्या वह पहली पंक्ति सभी 1 संख्या है?
साद्रुस

@Seadrus नहीं, वाक्यविन्यास हाइलाइटर पायथन पार्सर से मेल नहीं खा रहा है, जो हिट होने पर संख्याओं को पार्स करना बंद कर देता है ifऔर else
xnor


@ mbomb007 यह काफी काम नहीं करेगा, प्रिंट को उचित तरीके से नियंत्रित नहीं किया जाता है और जब आप कम से कम एक बार बदलते हैं तो आपको अतिरिक्त आउटपुट मिलता है।
FryAmTheEggman

आह, तो यह है कि अतिरिक्त उत्पादन क्या था।
mbomb007

3

CJam, 5 बाइट्स

r~_(*

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

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

r     e# Read a whitespace-separated token from STDIN.
      e# This pushes the input (when called for the first time) or an empty string.
 ~    e# Evaluate.
      e# This turns the input into an integer or discards an empty string.
  _   e# Copy the top of the stack.
   (  e# Decrement.
    * e# Multiply.

3

पी एल, 5 बाइट्स

_▼•=_

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

4 बाइट्स होंगे यदि मैं आलसी नहीं था और "असाइन टू _" को लागू नहीं किया था ...

व्याख्या

_▼•=_

_       push _ (input var)
 ▼      decrement last used var (_)
  •     multiply, since it is off by one it auto-adds _ to the arg list
   =_   assign result to _


2

GolfScript, 5 बाइट्स

~.(*`

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

डी-गोल्फ और टिप्पणी:

~    # Eval the input to turn it from a string into a number.
.    # Duplicate the number.
(    # Decrement one of the copies by one.
*    # Multiply the copies together.
`    # Un-eval the number, turning it back into a string.

GolfScript दुभाषिया स्वचालित रूप से इनपुट को पढ़ता है और इसे स्टैक पर रखता है, लेकिन एक स्ट्रिंग के रूप में, एक संख्या के रूप में नहीं। इस प्रकार, हमें इनपुट को एक संख्या में बदलना होगा ~, और बाद में इसे फिर से सख्त करना होगा `। अंत में, दुभाषिया स्वचालित रूप से स्टैक पर कड़े हुए नंबर को प्रिंट करेगा।

(अब, अगर चुनौती पुनरावृति करने के लिए किया गया था f(n+1) = f(n)*(-f(n)-1), मेरे द्वारा की गई सकता है कि साथ में 4 बाइट ~.~*। इसके बारे में पता कैसे और क्यों कि काम करता है एक व्यायाम के रूप में छोड़ दिया है। :)


2

जावास्क्रिप्ट REPL, 25 20 बाइट्स

a=prompt();
a*=a-1//

एक REPL को खत्म करने पर काम करेगा


यह उत्पादन कैसे करता है?
डेनिस

कंसोल में। मुझे इसे ठीक करने की आवश्यकता है।
कॉनर ओ'ब्रायन

कोई सांत्वना ठीक नहीं है, मुझे लगता है कि js के लिए मान्य आउटपुट
2

ओह! बहुत खुबस!!
कोनोर ओ'ब्रायन

2
@ सामान्य रूप से मेटा सर्वसम्मति के अनुसार (जो मुझे महसूस नहीं हुआ था), REPL- आधारित वातावरण ठीक हैं, जब तक कि यह निर्दिष्ट है कि यह एक REPL है।
एलेक्स ए।

2

लुआ, 35 18 बाइट्स

यह कुछ ऐसा है जो लुआ एक बार के लिए बहुत आसानी से कर सकता है!

संपादित करें: मैंने लुआ में बहुत सारी चीजों की खोज की है क्योंकि मैंने ऐसा किया है, इसलिए मैं इसे अपडेट कर रहा हूं :)

print(...*(...-1))

...इसमें कमांड-लाइन तर्क को अनपैक किया गया है, इनलाइनिंग का उपयोग इस मामले में पहले मूल्य के रूप में किया जाएगा क्योंकि इसे खर्च करने की अनुमति नहीं होगी, जिसके परिणामस्वरूप सिर्फ मुद्रण होगा n*(n-1)


1

वाई , 7 बाइट्स

jzC:t*!

यहाँ यह कोशिश करो!

यह इस प्रकार काम करता है: jसंख्यात्मक इनपुट लेता है। zअंतर्निहित मुद्रण को सक्रिय करता है। Cएक नई कड़ी शुरू करता है। :स्टैक पर मूल्य को डुप्लिकेट करता है, और tइसे घटाता है, हमें छोड़कर [a a-1]। फिर, हम प्राप्त करते [a*a-a]हैं*!अगले आदेश को छोड़ देता है; EOF पर, यह कुछ नहीं करता है। जब एक साथ जंजीर, यह इनपुट कमांड को छोड़ देता है, और प्रक्रिया फिर से शुरू होती है।



1

S, 5 चार्ट / 7 बाइट्स

ïׇï;

Try it here (Firefox only).

क्या मुझे सही मायने में इसकी व्याख्या करनी चाहिए? ओह ठीक है, यहाँ जाता है ...

व्याख्या

यह मूल रूप से input*=--input;JS में मूल्यांकन करता है।


1

पर्ल, 23 ​​बाइट्स

l;$_|=<>;$_*=~-$_;print

वैकल्पिक संस्करण, 10 बाइट्स

$_*=~-$_;

इसके लिए -pस्विच की आवश्यकता होती है । मुझे यकीन नहीं है कि यह प्रश्न में उचित खेल है ।


1

हास्केल, 14 11 बाइट्स

(*)=<<pred$

उदाहरण का उपयोग करें

Prelude> (*)=<<pred$5
20
Prelude> (*)=<<pred$(*)=<<pred$5
380
Prelude> (*)=<<pred$(*)=<<pred$(*)=<<pred$5
144020

शायद यह एक उचित कार्य नहीं है। यदि आप नाइटपैकिंग कर रहे हैं, तो आप (*)=<<pred$id14 बाइट्स के लिए (<-थेरे के अंत में एक स्थान) के साथ जा सकते हैं ।

संपादित करें: @Zgarb ने फंक्शन मोनड का उपयोग करके फ़ंक्शन को फिर से लिखा और 3 बाइट्स को बचाया। धन्यवाद!


(*)=<<pred$3 बाइट्स बचाता है। इसके अलावा, यह ध्यान दिया जाना चाहिए कि यह वास्तव में एक फ़ंक्शन को परिभाषित नहीं करता है, और इनपुट मूल्य को इसके बाद सीधे रखा जाना चाहिए।
जर्बद

@Zbb: धन्यवाद! idइसे जोड़ना एक उचित कार्य करता है। मैंने अपने उत्तर में एक नोट डाला है।
nimi


1

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

टीआई -83 / 84 कैलकुलेटर पर चलता है

:Ans²-Ans

यह कार्यक्रम इस तथ्य के कारण काम करता है कि एक कार्यक्रम की अंतिम पंक्ति पर एक अभिव्यक्ति नियमित Doneपाठ के बजाय मुद्रित होती है ।


1
5 बाइट्स::Ans²-Ans
lirtosiast

1

मथकड, 39 "बाइट्स"

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

उपयोगकर्ता के दृष्टिकोण से, मथकड प्रभावी रूप से एक 2 डी व्हाइटबोर्ड है, जिसमें बाएं से दाएं, ऊपर से नीचे तक के भावों का मूल्यांकन किया गया है। मथकड एक पारंपरिक "टेक्स्ट" इनपुट का समर्थन नहीं करता है, बल्कि एक अभिव्यक्ति, पाठ, कथानक या घटक को सम्मिलित करने के लिए पाठ और विशेष कुंजी / टूलबार / मेनू आइटम के संयोजन का उपयोग करता है। उदाहरण के लिए, परिभाषा ऑपरेटर दर्ज करने के लिए ":" टाइप करें (स्क्रीन पर ": =" के रूप में दिखाया गया है), "[" एक ऐरे इंडेक्स, या "ctl-]" दर्ज करने के लिए एक लूप ऑपरेटर (प्लेसहोल्डर्स के लिए समावेशी) दर्ज करें नियंत्रण स्थिति और एक शरीर की अभिव्यक्ति)। आप ऊपर की छवि में जो देखते हैं वह ठीक वैसा ही है जैसा कि यूजर इंटरफेस और "टाइप" में दिखाई देता है।

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

एक बात मैं और भी कम निश्चित हूं (एक "बाइट" समतुल्यता बिंदु से) एक नया क्षेत्र बनाने की गणना कैसे की जाती है (जैसे: a: = 5 या k: = 0..n-1)। मैंने एक नए क्षेत्र के लिए एक नए क्षेत्र के बराबर प्रत्येक चाल को बराबर किया है, और इसलिए 1 बाइट (व्यवहार में, मैं माउस का उपयोग करने के लिए क्लिक करता हूं जहां मुझे क्षेत्र चाहिए)।

मैंने केवल सक्रिय कथनों को शामिल किया है और टिप्पणियों को नहीं, और मैंने a और n आदानों के लिए प्रत्येक में 2 बाइट्स शामिल किए हैं, लेकिन स्वयं मानों को नहीं (उदाहरण में 5 और 7)।


0

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

यह चुनौती हास्केल के अनुकूल नहीं है। हालांकि, इनपुट में एकतरफा होने पर निम्नलिखित कार्य करता है और GHCI में कोड निष्पादित होता है:

(\x->if odd x then let y=until((>x).(10^))(+1)0 in y*(y-1)else x*(x-1))$

स्पष्टीकरण:

Unary हमेशा विषम होती है, इसलिए पहला एप्लिकेशन दशमलव में बदल जाएगा। x*(x-1)यह हमेशा होता है, इसलिए अन्यथा यह वापस लौटता है x*(x-1), जहां xइनपुट है। क्योंकि हास्केल दृढ़ता से टाइप किया गया है और 'विशेष' प्रतीकों की तरह नहीं बुलाया जा सकता है &1, मेरा मानना ​​है कि यह हास्केल में इसे पूरा करने का एकमात्र तरीका है, जब तक कि कोई वैश्विक चर या एक औडर इनपुट फॉर्म का उपयोग नहीं करता है।


0

सी ++ (जीसीसी) , 173/176 बाइट्स

दोनों संस्करणों के अंत में एक महत्वपूर्ण न्यूलाइन है।

मैक्रो संस्करण, 173 बाइट्स

#ifndef M
#define M(a,b)a##b
#define W(z,x)M(z,x)
#define B int W(m,__LINE__)=x++
#include<iostream>
int x,n;int main(){for(std::cin>>n;x--;)n*=n-1;std::cout<<n;}
#endif
B;

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

टेम्पलेट संस्करण, 176 बाइट्स

कुछ और C ++ ish:

#ifndef B
#define B template
#include<iostream>
int x,n;B<int N>struct A{static int i;};int main(){for(std::cin>>n;x--;)n*=n-1;std::cout<<n;}
#endif
B<>int A<__LINE__>::i=x++;

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


0

बर्लेस्क - 5 बाइट्स

J?d?*

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