अनुक्रम प्रिंट करें


24

21, 21, 23, 20, 5, 25, 31, 24,?

इस पहेली से प्रेरित होकर , एक पूर्णांक दिया गया, निम्नलिखित अनुक्रम को तब तक प्रिंट करें जब तक आप एक गैर-पूर्णांक तक नहीं पहुँचते (खराब हो जाते हैं, यदि आप इस पहेली को पहले स्वयं हल करना चाहते हैं)n>0

a0=n
a4k+1=a4k(4k+1) एक 4 k + 2 = एक 4 k + 1 +(4कश्मीर+2) एक 4 k + 3 = एक 4 k + 2 -(4k+3) a 4 k + 4 = a 4 k + 3 / ( 4 k + 4 )
a4k+2=a4k+1+(4k+2)
a4k+3=a4k+2(4k+3)
a4k+4=a4k+3/(4k+4)
या अधिक सहज ज्ञान युक्त: * 1, +2, -3, / 4, * 5, +6, + -7, / 8, ...

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

1: 1, 1, 3, 0, 0, 6, -1
2: 2, 2, 4, 1
3: 3, 3, 5, 2
4: 4, 4, 6, 3
5: 5, 5 , 7, 4, 1, 5, 11, 4
6: 6, 6, 8, 5
9: 9, 9, 9, 11, 8, 2, 10, 16, 9
21: 21, 21, 23, 20, 5 25, 31, 24, 3, 27, 37, 26

इनपुट और आउटपुट किसी भी उचित प्रारूप में लिया जा सकता है, मानक कमियां हमेशा की तरह निषिद्ध हैं।

की भावना में , बाइट जीत में सबसे छोटा जवाब!

सैंडबॉक्स: https://codegolf.meta.stackexchange.com/a/18142/59642


क्या हम इसके बजाय अनुक्रम की एक अनंत सूची वापस कर सकते हैं? इसके अलावा, 1 सही के लिए उत्पादन है? मैं 6 के बाद कुछ अलग था
कोल

3
@ जब से अनुक्रम समाप्त होता है मुझे नहीं लगता कि आप एक अनंत सूची का उत्पादन कर सकते हैं।
गेहूं जादूगर

1
क्या हम 1 अनुक्रमित उत्पादन कर सकते हैं, अर्थात पहला तत्व छोड़ सकते हैं?
जो राजा

1
नहीं, पूरा क्रम मुद्रित होना चाहिए।
अनंत 20

1
हां आप @KevinCruijssen
अनंत

जवाबों:


6

05AB1E (विरासत) , 18 17 बाइट्स

[N"/*+-"Nè.VÐïÊ#=

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

[                # Start an infinite loop:
 N               #  Push the 0-based loop-index
  "/*+-"         #  Push string "/*+-"
        Nè       #  Index into this string with the loop-index
          .V     #  And use a 05AB1E-eval to calculate the next number
 Ð               #  Triplicate this number
  ï              #  Cast it to an integer
   Ê             #  And if it's NOT equal to the number we triplicated:
    #            #   Stop the infinite loop
  =              #  Print the number without popping

मैं यहां 05AB1E की विरासत संस्करण का उपयोग कर रहा हूं, और इसे प्रिंट करने से पहले अगले नंबर की गणना भी कर सकता हूं, क्योंकि लूप 0-आधारित है और यह /0बहुत पहले पुनरावृत्ति में करेगा। इसने पिछले की तुलना में एक बाइट को बचाया N>और "*+-/"। यह केवल काम करता है, क्योंकि विरासत संस्करण में 0 से विभाजित होने वाली संख्या एक समान रहती है; जबकि नए संस्करण में यह 0 हो जाएगा; और वास्तविक गणित में यह शून्य त्रुटि द्वारा एक विभाजन देगा।


11

स्क्रैच 3.0 39 ब्लॉक / 323 बाइट्स

ओह eval, आई मिस यू

लाइन खरोंच पर यह कोशिश करो !

वैकल्पिक रूप से, एसबी सिंटैक्स के रूप में:

when gf clicked
delete[all v]of[o v
ask()and wait
set[. v]to(answer
set[n v]to(1
repeat until<(n)contains[.
if<((n)mod(4))=(0
set[. v]to((. )*(n
else
if<((n)mod(4))=(1
change[. v]by(n
else
if<((n)mod(4))=(2
change[. v]by((0)-(n
else
set[. v]to((. )/(n
end
end
end
add(n)to[o v
change[n v]by(1
end
delete(length of(o))of[o v

तुम लोगों को देखो, अपने फैंसी evalबयानों के साथ मज़ा आ रहा है ! खैर, मैं नहीं! नहीं ... स्क्रैच में इम्प्लांट नहीं हैं, इसलिए मुझे चीजों को कठिन तरीके से करना पड़ा ... अगर बयान।

कम से कम यह नहीं है goto...


2
आप को देखो, अगर बयान और फ्लोट डिवीजन के साथ मज़ा आ रहा है! खैर, मैं नहीं! नहीं ... व्हॉट्सएप के पास evals, if-statement, या float-Division नहीं है, इसलिए मुझे चीजों को कठिन तरीके से करना था ... gotos और एक घटाव लूप यह सत्यापित करने के लिए कि क्या हम विभाजित कर सकते हैं, स्टैक-आधारित भाषा में । ; पी (सभी गंभीरता में, अच्छा जवाब, +1 मेरी ओर से! मैं अभी- अभी आपके समाप्त किए गए
व्हाट्सएप

8

व्हॉट्सएप , 251 227 202 बाइट्स

[S S S N
_Push_0][S N
S _Duplicate_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_integer][T   T   T   _Retrieve_input][N
S S N
_Create_Label_LOOP][S N
S _Duplicate_top][T N
S T _Print_as_integer][S S S T  S T S N
_Push_10_newline][T N
S S _Print_as_character][S N
T   _Swap_top_two][S S S T  N
_Push_1][T  S S S _Add][S T S S T   N
_Copy_2nd_item][S T S S T   N
_Copy_2nd_item][S N
S _Duplicate_top][S S S T   S S N
_Push_4][T  S T T   _Modulo][S N
S _Duplicate_top][N
T   S S N
_If_0_Jump_to_Label_DIVIDE][S S S T N
_Push_1][T  S S T   _Subtract][S N
S _Duplicate_top][N
T   S T N
_If_0_Jump_to_Label_MULTIPLY][S S S T   N
_Push_1][T  S S T   _Subtract][N
T   S S S N
_If_0_Jump_to_Label_ADD][S N
T   _Swap_top_two][S T  S S T   N
_Copy_2nd_item][T   S S T   _Subtract][N
S N
N
_Jump_to_LOOP][N
S S S N
_Create_Label_DIVIDE][S N
N
_Discard_top][T S T S _Divide][S T  S S T   S N
_Copy_3nd_item][S T S S T   S N
_Copy_3nd_item][T   S T T   _Modulo][N
T   S N
_If_0_Jump_to_Label_LOOP][N
N
N
_Exit_Program][N
S S T   N
_Create_Label_MULTIPLY][S N
N
_Discard_top][T S S N
_Multiply][N
S N
N
_Jump_to_Label_LOOP][N
S S S S N
_Create_Label_ADD][T    S S S _Add][N
S N
N
_Jump_to_Label_LOOP]

पत्र S(स्थान), T(टैब), और N(नई-पंक्ति) केवल हाइलाइटिंग के रूप में जोड़े गए।
[..._some_action]केवल स्पष्टीकरण के रूप में जोड़ा गया।

इसे ऑनलाइन आज़माएं (कच्चे स्थान, टैब और नई-लाइनों के साथ ही)।

@JoKing के सुझाव के बाद -24 बाइट्स n%i > 0। हालांकि केवल if(x < 0)और if(x == 0)व्हाट्सएप में उपलब्ध हैं, बस जाँच if(x*-1 < 0)मूल रूप से के रूप में ही है if(x > 0)@JoKing
के लिए एक अतिरिक्त -25 बाइट्स धन्यवाद ।

स्पष्टीकरण:

स्क्रैच उत्तर से उद्धरण :

कम से कम यह नहीं है goto...

किसी ने कहा goto? व्हाट्सएप के पास gotoलूप और इफ-स्टेटमेंट दोनों बनाने के अलावा और कुछ नहीं है । xD इसके अलावा यह एक स्टैक-आधारित भाषा है, इसलिए मुझे बहुत बार स्वैप / त्याग / कॉपी करना पड़ता है। और चीजों को बंद करने के लिए: व्हॉट्सएप में फ्लोटिंग पॉइंट्स और केवल पूर्णांक-विभाजन भी नहीं है, इसलिए मैंने n % i * -1 < 0प्रोग्राम से बाहर निकलने के लिए उपयोग किया है यदि पूर्णांक वर्तमान संख्या को विभाजित नहीं कर सकता है।

छद्म कोड:

Integer n = STDIN as input
Integer i = 0
Label LOOP:
  Print n as number
  i = i + 1
  Integer t = i % 4
  If(t == 0):
    Jump to Label DIVIDE
  t = t - 1
  If(t == 0):
    Jump to Label MULTIPLY
  t = t - 1
  If(t == 0):
    Jump to Label ADD
  n = n - i
  Jump to Label LOOP
Label DIVIDE:
  n = n / i
  Integer m = n % i
  If(m == 0):
    Jump to Label LOOP
  Exit program
Label MULTIPLY:
  n = n * i
  Jump to Label LOOP
Label ADD:
  n = n + i
  Jump to Label LOOP

आप पूर्ण प्रतिभाशाली हैं। मेरा उत्थान है!
जोनो 2906

@JoKing व्हाट्सएप केवल if(n == 0)या if(n < 0)उपलब्ध है। दुर्भाग्य से नहीं if(n > 0)या if(n != 0)। लेकिन मुझे यकीन है कि कुछ पहलुओं को सरल बनाया जा सकता है। यह वर्तमान समाधान डीबगिंग का एक ट्रायल-एंड-एरर था, लेकिन शायद मुझे बस एक कदम वापस लेना चाहिए और एक छोटे दृष्टिकोण पर पुनर्विचार करना चाहिए। जब मेरे पास फिर से समय है। और छद्म कोड तय किया, आप वास्तव में सही थे मैंने स्विच किया i/ nअधिकांश स्थानों पर ..
केविन क्रूज़सेन

1
मुझे यकीन नहीं है कि यह कितना व्यवहार्य है, लेकिन शायद आप कर सकते हैं m = n%i; n = n/i; if (m == 0) jump to LOOP; exit program?
जो राजा

1
क्या आप swap top two, copy second itemइसे प्रत्येक अनुभाग में कॉपी करने के बजाय समग्र लूप में ले जा सकते हैं ?
जो किंग

1
@JoKing धन्यवाद, उन दोनों सुझावों ने बाइट्स को बचाया। पहला सुझाव -7, और दूसरा -18 है। :)
केविन क्रूज़सेन

8

हास्केल , 75 74 73 बाइट्स

-1 बाइट को विल नेस के लिए धन्यवाद -1 बाइट थैंक्स टू निम्मी

(#1)
n#i|i`mod`4<1,n`mod`i>0=[n]|y<-i+1=n:(x!!i)n i#y
x=div:(*):(+):(-):x

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

बाइट्स को बचाने के लिए भिन्नात्मक चींटियों के उपयोग से बचा जाता है




7

जावास्क्रिप्ट (V8) , 52 बाइट्स

4 पदों के समूह। जीबी के रूबी जवाब से प्रेरित है ।

n=>{for(k=0;n%1==0;n/=k+=3)print(n,n*=++k,n-~k,--n)}

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


जावास्क्रिप्ट (V8) , 54 बाइट्स

अनुक्रम की शर्तों को प्रिंट करता है।

n=>{for(k=0;n%1==0;n=eval(n+'*+-/'[k++&3]+k))print(n)}

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


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

एक सरणी देता है।

f=(n,k)=>k&&(n=eval(n+'/*+-'[k&3]+k))%1?[]:[n,...f(n,-~k)]

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


5

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

{$_,{($_,<* + - />[$++%4]~++$).EVAL}...^*%1}

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

अनाम कोड ब्लॉक जो एक नंबर लेता है और एक अनुक्रम देता है। यदि हम पहले तत्व को छोड़ सकते हैं (जो कि वैसे भी दूसरे तत्व के समान है), तो हम 3 बाइट्स को हटाकर बचा सकते हैं$_,



5

पीट , 297 190 144 कोडेल (432 बाइट्स)

नई पीट कोड

pointerआउटपुट कोड को एकजुट करने के लिए स्विच (k mod 4) के रूप में एक कमांड का उपयोग करते हुए एक नया दृष्टिकोण की कोशिश की , जिसके परिणामस्वरूप 10x19 कोड चित्र। फिर मैंने उस पंक्ति को 1 पंक्ति और 2 कॉलम 8x18 तक नीचे कर दिया।

यहाँ एक ट्रेस है, यह देखने के लिए कि यह कैसे काम करता है:

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

पहली पंक्ति स्टैक पर 0 को स्टार्टिंग इंडेक्स के रूप में धकेलती है (चूंकि हम केवल pushप्राकृतिक संख्याएं हैं, हम 2 लोगों को धक्का देते हैं और फिर प्रतिस्थापन करते हैं), फिर इनपुट को संख्या के रूप में पढ़ता है।

सबसे बाएं कॉलम में नंबर को डुप्लिकेट करने और आउटपुट में एक को पॉप करने का साझा कोड होता है, फिर इंडेक्स को स्टैक के शीर्ष पर ले जाते हैं, इसे बढ़ाते हैं और फिर इसे तीन बार डुप्लिकेट करते हैं। फिर हम एक pointerकमांड के लिए डार्क सियान कोडेल के माध्यम से पेस्टल रेड आर-आकार के ब्लॉक में प्रवेश करते हैं जो हमें हमारे इंडेक्स 4 के शेष भाग के लिए अलग-अलग रास्ते देता है।

मॉड 1, हम शीर्ष से गुणा करने के लिए बाहर निकलते हैं। हम पहले अपने इंडेक्स की एक प्रति बाद के लिए नीचे फेरबदल करते हैं, फिर गुणा करते हैं। एक सफ़ेद रंग के माध्यम से गुजरने के बाद, हम cc समता को ठीक करने के लिए ऊपर के कॉलम में प्रवेश करते हैं (लूप को स्थिर रखने के लिए इसे कई बार फ़्लिप करने की आवश्यकता होती है), इसके बाद pointer (1)मैजेंटा बार में प्रवेश किया जाता है : यह एक के रूप में कार्य करता है हमारे चार रास्तों को पकड़ें और हमें वापस लूप में भेजें।

मॉड 2, हम योग करने के लिए पीछे की ओर निकलते हैं। पेस्टल कोड ब्लॉक के आकार का अर्थ है कि हम ऊपर की एक पंक्ति से बाहर निकलते हैं जहाँ से हम प्रवेश करते हैं, और हम उस 3 का उपयोग करते हैं जिसे हम pointer (3)ऊपर की ओर लाल कोडेल से बाहर निकल कर स्टैक पर धक्का देते हैं । इस कॉलम में अंकगणित से पहले सफेद स्थान होता है और सीसी को पुश करने और स्विच करने का थोड़ा अलग क्रम होता है, क्योंकि अन्यथा हमारे पास पड़ोसी कॉलम में पूर्णांक-मूल्यवान कोडल्स के साथ रंग ओवरलैप होगा।

मॉड 3 हमें घटाव के लिए नीचे की ओर भेजें। गुणा के रूप में एक ही सौदा, सिवाय ऊपर के रास्ते पर विभाजन पथ को पार करते हुए (जैसा कि पेस्टल हरे रंग की पट्टी में प्रवेश करते समय सीसी में भिन्नता होती है, दोनों निष्पादन अलग-अलग छोर पर उस पट्टी से बाहर निकल जाते हैं)। ऐसा करते समय, हम एक अवांछित duplicateकमांड उठाते हैं , इसलिए हम popcc करेक्शन और कलेक्शन बार में प्रवेश करने से पहले गहरे हरे रंग के कोडेल के साथ वापस आ जाते हैं।

मॉड 4, हम विभाजित करने के लिए सीधे आगे बढ़ते हैं। यहां, हमें सबसे पहले स्टैक को फिर से फेरबदल करना होगा ताकि दो जोड़े n और एक पर ऑपरेशन कर सकें, क्योंकि अगर यह पूर्णांक है तो हमें परीक्षण करना होगा। हम ऐसा करते हैं कि मेरी modजोड़ी पहली जोड़ी पर, फिर notपरिणाम पर, उसके बाद उस का उपयोग करें pointer- यदि यह विभाज्य नहीं है, तो हम सीधे चलते रहते हैं, जो हमें दो pointerकमांड के साथ विपरीत कोने में प्रवेश योग्य ब्लॉक में भेजता है और इस प्रकार प्रोग्राम समाप्त करता है। अन्यथा, हम सही मोड़ लेते हैं और divideमजेंटा बार में प्रवेश करने से एक कमांड प्राप्त करते हैं।

पुराना संस्करण

Piet कोड

बहुत सीधा कोड: स्टैक पर 1 और इनपुट को पुश करता है, फिर चार ऑपरेशन के माध्यम से लूप करता है: स्टैक के शीर्ष पर सूचकांक को फेरबदल करते हुए, इसे 1 से बढ़ाते हुए, इसे दोहराते हुए, एक कॉपी को नीचे की ओर फेरते हुए, अंकगणितीय ऑपरेशन का प्रदर्शन करते हुए, संख्या को डुप्लिकेट करना और आउटपुट में एक पॉपिंग करना।

विभाजन के लिए, जो एकमात्र ऐसा स्थान है जहां अनुक्रम समाप्त हो सकता है, यह पहली जाँच करने के लिए एक अधिक जटिल स्टैक बनाता है यदि n मॉड इंडेक्स == 0, अन्यथा यह अपरिहार्य कोडेल में प्रवेश करता है और समाप्त होता है। अन्यथा, यह विभाजन करने के लिए i और n की अपनी दूसरी प्रति का उपयोग करता है।


क्या दूसरी और तीसरी पंक्ति को एक साथ करना संभव होगा? Ie, (0,1) - (1,2) पर गुलाबी सेल को पिवट करें, 3 सेल्स को बीच में शिफ्ट करें, और राइट कॉलम को 1x2 पर सिकोड़ें?
विस्कह

आसानी से नहीं। मुझे सही मोड़ पर अमल करने के लिए 2 कोशिकाओं की आवश्यकता है, या तो push (1) pointerएक रंगीन एक के ऊपर एक काली कोशिका के लिए।
एलियनएटसिस्टम

4

सी # (विज़ुअल सी # इंटरएक्टिव कंपाइलर) , 72 , 70 , 69 बाइट्स

n=>{for(int i=1;n%1==0;n=new[]{n/i,n*i,n+i,n-i}[i++%4])Write(n+" ");}

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


1
59 बाइट्स पोर्टिंग द्वारा Arnauld के पहले जावास्क्रिप्ट समारोह है, जिनमें से एक बंदरगाह है रूबी जवाब । और हां, इस आउटपुट की अनुमति है, बस चुनौती की टिप्पणियों में ओपी से पुष्टि मिली।
केविन क्रूज़सेन

@KevinCruijssen अच्छा, मैं उस के साथ नहीं आया होगा!
Innat3

4

रूबी , 56 54 52 बाइट्स

f=->n,z=1{n%1>0?[]:[n,n*=z,n-~z,n-=1]+f[n/=z+3,z+4]}

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

के साथ कुछ (असफल) प्रयास के बाद eval, मुझे पता चला कि सबसे खुश समाधान 4 तत्वों के साथ एक बार सरणी बना रहा है, कम से कम रूबी में।

अरनौल को -2 बाइट्स के लिए धन्यवाद।


53 बाइट्स ने मेरे अंतिम उत्तर को वापस भेज दिया, जो आपके द्वारा प्रेरित था।
Arnauld

3
52 बाइट्स में एक सुधार का उपयोग करके Shaggy द्वारा सुझाए गए जो जेएस में लंबे समय के रूप में निकला, लेकिन रूबी में एक बाइट बचाता है।
Arnauld

4

आर , 90 बाइट्स , 87 बाइट्स 85 बाइट्स 80 बाइट्स 74 73 बाइट्स

नियमों का एक सादा कार्यान्वयन:

a=scan();while(T<13)a=c(a,d<-a[T]*T,d+T+1,e<-d-1,e/((T<-T+4)-1));a[!a%%1]

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

T<13पहेली के गहन विश्लेषण से निम्नलिखित के साथ । वास्तव में केवल तीन प्रकार के अनुक्रम हैं: लंबाई 4 की, जब a not 1 modulo 8 के अनुरूप नहीं है; 12 की लंबाई जब a of 21 modulo 32 के अनुरूप है; और शेष मामलों के लिए लंबाई 8 है।

लूप्स से बचने वाला एक वैकल्पिक कोड 87 बाइट्स के साथ समाप्त होता है:

`~`=rep;b=(scan()-1)*c(32~4,8,40~3,1,9~3)/32+c(1,1,3,0~3,6,-c(8,1,9,-71,17)/8);b[!b%%1]

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


1
आप {}-2 बाइट्स के लिए निकाल सकते हैं ।
रोबिन राइडर


3

हास्केल , 104 86 85 बाइट्स

n#i=n:(cycle[(/),(*),(+),(-)]!!floor i)n i#(i+1)
takeWhile((==).ceiling<*>floor).(#1)

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

h=छोड़ा जा सकता है, क्योंकि यह केवल परीक्षण के लिए प्रयोग किया जाता है।

आह, कोड गोल्फ, जहां समय की जटिलता में एक द्विघात वृद्धि एक चरित्र की कमी के लिए इसके लायक है।

104 बाइट्स

f=flip
g x=scanl(f($))x.zipWith(f($))[1..].cycle$f<$>[(*),(+),(-),(/)]
takeWhile((==).ceiling<*>floor).g

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

मुझे यह उत्तर बेहतर लगा, लेकिन अफसोस कि यह लंबा है।


3

जाप , 25 24 बाइट्स

जीबी के रूबी समाधान का एक और अनुकूलन ।

%1ª[UU*=°VU´ÒVU]cßU/=V±3

कोशिश करो

यहां मुख्य चाल cसरणियों के लिए विधि के अधिभार में है । इसे एक तर्क के रूप में एक और सरणी पास करें और यह इसे मूल सरणी तक पहुंचाता है। इसे एक तर्क के रूप में एक संख्या पास करें, जैसा कि पिछले पुनरावर्ती कॉल पर होता है, और यह मूल सरणी को उस स्तर तक समतल करता है - 1इस मामले में, राउंडिंग के बाद। लेकिन, जैसा कि सरणी केवल एक स्तर गहरा है, समतल इसे कोई प्रभाव नहीं है।

%1ª[UU*=°VU´ÒVU]cßU/=V±3     :Implicit input of integer U
%1                           :U modulo 1
  ª                          :Logical OR with
   [                         :Construct and array containing
    U                        :  U
     U*=                     :  U multiplied by
        °V                   :    V (initially 0) prefix incremented
          U´                 :  The new value of U, postfix decremented
            ÒV               :    Subtract the bitwise negation of V
              U              :  The now-decrmented U
               ]             :End array
                c            :Concatenate, or flatten by
                 ß           :  Recursive call to the programme with argument
                  U/=        :    U divided by
                     V±3     :      V incremented by 3

2

जावा 8, 84 बाइट्स

n->{for(int i=1;n%1==0;n=new float[]{n/i,n*i,n+i,n-i}[i++%4])System.out.println(n);}

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

सभी चार मानों के साथ एक सरणी बनाना @ जीबी के रूबी उत्तर से प्रेरित है , हालांकि अब मैं नोटिस करता हूं कि यदि एक बयान में बाइट का उपयोग किया जाता है, तो बाइट्स की समान मात्रा होती है:

n->{for(int i=0;n%1==0;n=++i%4<1?n/i:i%4<2?n*i:i%4<3?n+i:n-i)System.out.println(n);}

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





2

रटर , 310 बाइट्स

n=e=$Input;
a=0;
w=While[{m=Modulo[$e];Not[m[1]];}];
w=w[{f=For[4];f=f[@x];f=f[{Print[$e];q=Equal[$x];i=If[{q[1];}];i=i[{k=Times[$e];}];Do[$i];i=If[{q[2];}];i=i[{k=Add[$e];}];Do[$i];i=If[{q[3];}];i=i[{k=Subtract[$e];}];Do[$i];i=If[{q[4];}];i=i[{k=Divide[$e];}];Do[$i];e=k[a=Increment[$a]];}];Do[$f];}];
Do[$w];

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

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

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

रटर कैसे काम करता है

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

left = Times[5];
Print[left[6]];

30 का प्रिंट आउट लेंगे: इसे ऑनलाइन आज़माएं! । हालांकि आम तौर पर यह सामान्य विकल्प से अधिक लंबा होता है, यह कई बार बाइट्स को बचा सकता है, अगर किसी फ़ंक्शन को एक बार एक निरंतर तर्क के साथ बार-बार कहा जाता है, और एक बदलते तर्क, उदाहरण के लिए जब बार टेबल को प्रिंट करते हैं।

यह एक तर्क नियम उन सभी पर लागू होता है जो एक निरंतर या एक चर नहीं है, जिसमें लूप और सशर्त शामिल हैं। हालांकि, लूप और सशर्त, ( For, Each, While, DoWhile, Ifऔर IfElse) कर रहे हैं साध्य जिसका अर्थ है कि आदेश वास्तव में उन्हें चलाने के लिए, Doसमारोह बुलाया जाना चाहिए (उत्तर में अंतिम पंक्ति देखें)। फिर से, यह बाइट्स को बार-बार एक ही लूप को चलाने से बचा सकता है, या आपको लूप की परिभाषा और रनिंग के बीच मनमाना कोड चलाने की अनुमति देता है।

अंत में, चर का जिक्र करने के तीन तरीके हैं, जो सभी इस कार्यक्रम में उपयोग किए जाते हैं। पहला प्रत्यक्ष संदर्भित है , जहां चर नाम एक $प्रतीक के साथ उपसर्ग है । यह सीधे चर के मूल्य तक पहुँचता है और इसे वापस करता है। दूसरा कार्यात्मक संदर्भित है , जिसमें एक उपसर्ग वर्ण नहीं है। यह कोड को चर (संभावित आंशिक) कार्यों के बीच अंतर करने की अनुमति देता है, चर और वास्तविक चर विशिष्ट मूल्य वाले होते हैं। अंत में, अप्रत्यक्ष संदर्भ , एक @प्रतीक के साथ उपसर्ग , एक चर बनाता है (यदि यह पहले से मौजूद नहीं है) और किसी दिए गए दायरे के भीतर चर वस्तु को वापस करता है। यह आपको एक लूप वेरिएबल (जैसे ) iमें बनाने की अनुमति देता है for i in range(...)

वास्तविक समाधान कैसे काम करता है

यहाँ अ-कोडित कोड है:

n = elem = $Input;
var = 0;
while = While[{
	mod = Modulo[$elem];
	Not[mod[1]];
}];
while = while[{
for = For[4];
for = for[@index];
for = for[{
	Print[$elem];
	equal = Equal[$index];

	if = If[{ equal[1]; }];
	if = if[{ func = Times[$elem]; }];
	Do[$if];

	if = If[{ equal[2];}];
	if = if[{ func = Add[$elem];}];
	Do[$if];

	if = If[{ equal[3];}];
	if = if[{ func = Subtract[$elem];}];
	Do[$if];

	if=If[{ equal[4];}];
	if=if[{ func = Divide[$elem];}];
	Do[$if];

	elem = func[var = Increment[$var]];
	}];
	Do[$for];
}];
Do[$while];

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

जैसा कि आप देख सकते हैं, यह तीन चर को निर्दिष्ट करके शुरू होता है n, eऔर a, जो क्रमशः इनपुट, अनुक्रम में बदलते तत्व और प्रत्येक नए तत्व के लिए संशोधन संख्या का प्रतिनिधित्व करता है। हम फिर थोड़ी देर का लूप बनाते हैं:

w=While[{m=Modulo[$e];Not[m[1]];}];

{}me % m1001n0,n0

इसके बाद हम लूप के शरीर से मिलकर पूरी तरह से संकीर्णता में आ जाते हैं:

w=w[{f=For[4];f=f[@x];f=f[{Print[$e];q=Equal[$x];i=If[{q[1];}];i=i[{k=Times[$e];}];Do[$i];i=If[{q[2];}];i=i[{k=Add[$e];}];Do[$i];i=If[{q[3];}];i=i[{k=Subtract[$e];}];Do[$i];i=If[{q[4];}];i=i[{k=Divide[$e];}];Do[$i];e=k[a=Increment[$a]];}];Do[$f];}];

4x

Print[$e];
q=Equal[$x];
i=If[{q[1];}];i=i[{k=Times[$e]    ;}];Do[$i];
i=If[{q[2];}];i=i[{k=Add[$e]      ;}];Do[$i];
i=If[{q[3];}];i=i[{k=Subtract[$e] ;}];Do[$i];
i=If[{q[4];}];i=i[{k=Divide[$e]   ;}];Do[$i];
e=k[a=Increment[$a]];

पहला कथन अनुक्रम के प्रत्येक पुनरावृत्ति को संशोधित करने से पहले प्रिंट करता है। फिर हम लूप वेरिएबल के साथ समानता की जांच करने के लिए एक आंशिक फ़ंक्शन बनाते हैं x, और यदि कथन में चार का सामना करते हैं। प्रत्येक कथन की जाँच करता है कि क्याx है क्रमशः 1, 2, 3 या 4 के बराबर है, और फिर प्रदान करती है kमें प्रत्येक कार्य करने के लिए *, +, -और /, तो यह एक आंशिक समारोह में बनाता है के साथ eअपने तर्क के रूप में। अंत में, हम इसके दूसरे तर्क और वेतन वृद्धि के रूप में चलाने के eलिए असाइन करते हैं ।kaa


2

रूबी , 52 बाइट्स

->n{i=0.0;n=[p(n)/i+=1,n*i,n+i,n-i][i%4]until 0<n%1}

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


2 बाइट्स सहेजें: i=0और फ़ंक्शन के तर्क के रूप में फ्लोट का उपयोग करें।
जीबी

@ जीबी नाइस, धन्यवाद। क्या हमें इनपुट फ़्लोट होने की आवश्यकता है?
मोनिका iamnotmaynard



2

TI83 / 84 बुनियादी, 69 बाइट्स

1→A
DelVar L1Prompt N
Repeat fPart(N
N→L1(A
NA-1→O
augment(L1,{NA,Ans+A+2,Ans→L1
O/(A+3→N
A+4→A
End
Disp L1

हम ए और स्पष्ट एल 1 में एक काउंटर स्थापित करते हैं ताकि हम अनुक्रम को ट्रैक करने के लिए इसका उपयोग कर सकें। हम तब तक दोहराते हैं जब तक कि विभाजन कदम एक अंश का कारण नहीं बनता है। लूप के अंदर हम पहले एन को सूची में संग्रहीत करते हैं। एक सूची के अंत में एक तत्व को संग्रहीत करना या एक खाली सूची उस तत्व को बनाता है, इसलिए यह एक स्टोर दोनों विभाजन का परिणाम जोड़ता है जब यह एक अंश का कारण नहीं बनता है, और पहले पास के दौरान सूची को इनिशियलाइज़ करता है। फिर हम अनुक्रम के अगले 3 शब्दों को जोड़ने के लिए वृद्धि का उपयोग करते हैं। गणित चर O में 3k + 3 शब्द की गणना करके कुछ बाइट्स को छोटा करता है और फिर A4k + 2 और A4k 4 को O से निकालता है। फिर हम पुनरावृत्ति जांच के लिए N को रीसेट करने के लिए अलग से विभाजन करते हैं और 4 को A में जोड़ते हैं।

मैंने अंत में एक डिस्प एल 1 डाला लेकिन मुझे यकीन नहीं है कि यह कितना आदर्श है क्योंकि स्क्रीन पर सभी शब्दों को फिट करने का कोई अच्छा तरीका नहीं है। परिणामों के माध्यम से स्क्रॉल करने के लिए प्रोग्राम चलने के बाद वास्तविक रूप से उपयोगकर्ता L1 निष्पादित करेगा।


1

चारकोल , 29 बाइट्स

NθW¬﹪θ¹«Iθ⸿≔§⟦∕θⅉ×θⅉ⁺θⅉ⁻θⅉ⟧ⅉθ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

Nθ

प्रारंभिक मूल्य इनपुट करें।

W¬﹪θ¹«

तब तक दोहराएं जब तक मान पूर्णांक न हो जाए।

Iθ⸿

मूल्य को अपनी लाइन पर प्रिंट करें।

≔§⟦∕θⅉ×θⅉ⁺θⅉ⁻θⅉ⟧ⅉθ

चार उपलब्ध अंकगणितीय परिचालनों की गणना करें और वर्तमान आउटपुट लाइन संख्या के आधार पर सही का चयन करें।


1

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

f=lambda n:n[-1]%1and n[:-1]or f(n+[eval(f"n[-1]{'/*+-'[len(n)%4]}len(n)")])

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

इनपुट को 1 आइटम की सूची के रूप में लेता है और गैर-पूर्णांक होने तक अनुक्रम के अगले आइटम को पुन: लागू करता है।

इस मामले में कि एक सूची के रूप में इनपुट लेने की अनुमति नहीं है, यहां एक बहुत जल्दी पैच संस्करण है जो एक इंट के रूप में इनपुट लेता है।

एक पूर्णांक के रूप में इनपुट, 102 बाइट्स

f=lambda n:type(n)==int and f([n])or n[-1]%1and n[:-1]or f(n+[eval(f"n[-1]{'/*+-'[len(n)%4]}len(n)")])

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

+2 बाइट्स मेरे लिए रिकर्सिव फंक्शन को नाम देना भूल गए ...
-4 बाइट्स जित्स की बदौलत


1
अच्छा तरीका! चूंकि आपका कार्य पुनरावर्ती है, इसलिए यह अनाम नहीं रह सकता है। आपको f=अपने मुख्य कोड में शामिल होना चाहिए । हालाँकि, आप 4 बाइट्स भी बचा सकते हैं n[-1]और len(n)जरूरत है ब्रेसिज़ में नहीं। इसे ऑनलाइन आज़माएं!
6

एक पूर्णांक के बजाय एक सूची लेने के बारे में निश्चित नहीं है (मैं ओपी से पूछने की सिफारिश n[:-(n[-1]%1>0)]or f...करूंगा ), लेकिन एक बाइट बचाऊंगा
जोनाथन एलन

1

टहनी , 164 बाइट्स

ठीक है, यह वास्तव में लिखने के लिए बहुत भयानक था।

सीमाएं:

  • नहीं returns! आप आउटपुट या आउटपुट नहीं करते हैं
  • कोई whileछोरियां नहीं । आपको पुनरावृत्ति या कुछ भी उपयोग नहीं करना चाहिए
  • आउटपुट का कोई आसान तरीका नहीं! आपको हर बार आउटपुट दोहराना होगा
  • आप setटैग का उपयोग किए बिना वेरिएबल्स को एक मूल्य नहीं दे सकते
  • लूप से बाहर निकलने का कोई आसान तरीका नहीं। कोई breakभी continue, gotoया समान नहीं है। यह एक लूप का उपयोग करना असंभव बनाता है।
  • केवल 1 लूप है: for ... in ....और यह एक सरणी में सभी तत्वों को बंद कर देता है, जिसके पास कोई रास्ता नहीं है।

उन सभी ने कोड को बड़े पैमाने पर बनाया!
अरे, मैंने इसे जावा उत्तर से भी लंबा बना दिया है!
यह @ अरनॉल्ड्स जावास्क्रिप्ट उत्तर के रूप में लंबे समय के रूप में है ! ... सभी 3 विकल्पों के साथ संयुक्त।

यहाँ कोड है:

{%macro a(b,n=1)%}{{n<2?b}}{%set b=b*n%},{{b}}{%set b=b+n+1%},{{b}}{%set b=b-(n+2)%},{{b}}{%set b=b/(n+3)%}{%if(b//1)==b%},{{b~_self.a(b,n+4)}}{%endif%}{%endmacro%}

आप इसे https://twigfiddle.com/zw5zls पर आज़मा सकते हैं


कैसे इस्तेमाल करे:

बस फ़ाइल आयात करें और पहले मैक्रो को कॉल करें।

{% import 'file.twig' as a %}

{{ a.a(21) }} {# 21,21,23,20,5,25,31,24,3,27,37,26 #}

एक प्रयोग करने योग्य सरणी के लिए, आप कर सकते हैं a.a(21)|split(',')


Ungolfed:

{% macro calc(number, index = 1) %}
    {% if index < 2 %}
        {{ number }}
    {% endif %}

    {% set number = number * index %},{{ number }}
    {% set number = number + index + 1 %},{{ number }}
    {% set number = number - (index + 2) %},{{ number }}
    {% set number = number / (index + 3) %}

    {#
        verifies if it is an integer.
        this is done with an integer division with 1 and compare with itself
        if both values are the same, the number is an integer
        otherwise, it is a floating-point number
    #}
    {% if (number // 1) == number %}
        ,{{ number ~ _self.calc(number, index + 4) }}
    {% endif %}
{% endmacro %}

पढ़ने में आसान होना चाहिए।
यह अपुष्ट उत्तर सही आउटपुट नहीं देगा, क्योंकि यह यादृच्छिक व्हाट्सएप को फेंक देगा।
यह केवल मानवीय रूप से पठनीय है।

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