उलटा Collatz अनुमान


13

मुझे लगता है कि Collatz अनुमान पहले से ही प्रसिद्ध है। लेकिन क्या होगा अगर हम नियमों को उलट दें?

पूर्णांक n> = 1 से प्रारंभ करें।

निम्नलिखित चरणों को दोहराएं:

यदि n सम है , तो इसे 3 से गुणा करें और 1 जोड़ें।

यदि n विषम है , तो 1 घटाएं और इसे 2 से विभाजित करें।

0 पर पहुंचने पर रुकें

Iterated नंबरों को प्रिंट करें।

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

 1        => 1, 0
 2        => 2, 7, 3, 1, 0
 3        => 3, 1, 0
10        => 10, 31, 15, 7, 3...
14        => 14, 43, 21, 10, ...

नियम:

  • यह क्रम बहुत अधिक संख्या में काम नहीं करता है क्योंकि यह एक अनंत लूप में प्रवेश करता है। आपको उन मामलों को संभालने की आवश्यकता नहीं है। केवल ऊपर दिए गए परीक्षण मामलों की छपाई ही पर्याप्त है।

  • मैंने जारी रखने के लिए एक वैध पूर्णांक देने के लिए 1 को घटाने और दो से विभाजित करने का सुझाव दिया, लेकिन इस तरह से गणना करने की आवश्यकता नहीं है। आप 2 से भाग कर सकते हैं और पूर्णांक या अन्य तरीकों से डाल सकते हैं जो अपेक्षित आउटपुट देंगे।

  • आपको प्रारंभिक इनपुट भी प्रिंट करना होगा।

  • आउटपुट को परीक्षण मामलों के रूप में स्वरूपित करने की आवश्यकता नहीं है। यह सिर्फ एक सुझाव था। हालांकि, पुनरावृत्त आदेश का सम्मान किया जाना चाहिए।

  • सबसे छोटा कोड जीतता है।


9
चूंकि यह आपका तीसरा प्रश्न है, क्योंकि मैं आपको सलाह दूंगा कि आप सैंडबॉक्स की जांच करें , जिस स्थान पर हम आमतौर पर फीडबैक के लिए प्रश्न ड्राफ्ट पोस्ट करते हैं, और यह सुनिश्चित करने के लिए कि वे डुप्लिकेट नहीं हैं।
caird coinheringaahing

शुक्रिया @cairdcoinheringaahing मुझे इस पृष्ठ के बारे में पता नहीं था।
एडुआर्डो हॉफेल

क्या हमें अंत में प्रिंट करना है 0?
दोष नं।

2
आप अंतिम दो परीक्षण मामलों का विस्तार करना चाह सकते हैं, क्योंकि वे लंबे समय तक नहीं हैं
जो किंग

3
@JoKing मैंने इसे संकुचित कर दिया क्योंकि यह दूसरी लाइनों से आउटपुट दोहराता है। जिस बिंदु पर आप 3 तक पहुंचते हैं , उसका उत्पादन उसी समय होता है जब आप उससे शुरू करते हैं। 10 या किसी अन्य संख्या के लिए भी यही लागू होता है।
एडुआर्डो होफेल

जवाबों:


5

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

{$_,{$_%2??$_+>1!!$_*3+1}...0}

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

अनाम कोड ब्लॉक जो एक अनुक्रम लौटाता है।

स्पष्टीकरण:

{$_,{$_%2??$_+>1!!$_*3+1}...0}
{                            }   # Anonymous code block
   ,                     ...     # Define a sequence
 $_                              # That starts with the given value
    {                   }        # With each element being
     $_%2??     !!               # Is the previous element odd?
           $_+>1                 # Return the previous element bitshifted right by 1
                  $_*3+1         # Else the previous element multiplied by 3 plus 1
                            0    # Until the element is 0




2

पायथन 2, 54 52 44 बाइट्स

n=input()
while n:print n;n=(n*3+1,n/2)[n%2]

-2 बाइट्स मिस्टर एक्सकोडर की बदौलत

निश्चित रूप से एक तेज़ तरीका होना चाहिए। अजीब तरह से, जब मैंने एक मेमने की कोशिश की तो यह एक ही बायटेकाउंट था। मैं शायद मतिभ्रम कर रहा हूँ।

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



@ Mr.Xcoder आह, धन्यवाद।
क्विंटेक


हालाँकि 0अब यह वैकल्पिक है, इसलिए print
राजा

वास्तव में, अब आप इसे 44
श्री Xcoder

2

हास्केल , 76 69 61 56 बाइट्स

मुझे लगता है कि यह बहुत लंबा रास्ता है। यहाँ lउलटा-कोलेज़ैट अनुक्रम की एक अनंत सूची का उत्पादन होता है, और पहली पंक्ति में अनाम फ़ंक्शन इसे सही स्थान पर काट देता है।

-5 बाइट्स के लिए धन्यवाद @ JrjanJohansen!

fst.span(>0).l
l r=r:[last$3*k+1:[div k 2|odd k]|k<-l r]

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


कोई नकारात्मक संख्या नहीं है, इसलिए (>0)पर्याप्त होना चाहिए। इसके अलावा एक oddसमारोह है।
अर्जन जोहान्सन

@ !RjanJohansen बहुत बहुत धन्यवाद!
दोष नं।


2

05AB1E , 15 14 बाइट्स

[Ð=_#Èi3*>ë<2÷

-1 बाइट धन्यवाद @MagicOctopusUrn

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

स्पष्टीकरण:

[             # Start an infinite loop
 Ð            #  Duplicate the top value on the stack three times
              #  (Which will be the (implicit) input in the first iteration)
  =           #  Output it with trailing newline (without popping the value)
   _#         #  If it's exactly 0: stop the infinite loop
     Èi       #  If it's even:
       3*     #   Multiply by 3
         >    #   And add 1
      ë       #  Else:
       <      #   Subtract 1
        2÷    #   And integer-divide by 2

[Ð=_#Èi3*>ë<2÷के =बजाय के साथ D,
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn आह, यह भूल करने के लिए बहुत बुरा था .. धन्यवाद! :)
केविन क्रूज़सेन

2

JAEL , 18 बाइट्स

![ؼw>î?èÛ|õÀ

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


1
आपका पर्मलिंक काम नहीं कर रहा है। कार्यक्रम सिर्फ इनपुट प्रिंट करता है और रुका करता है।
डेनिस

हाँ तुम सही हो। मैं नवीनतम संस्करण को खींचने के लिए "उनसे"
पूछूंगा

मैंने JAEL को गोल्फ भाषाओं की सूची में शामिल किया है । कृपया मुझे बताएं कि क्या मुझे कोई जानकारी गलत मिली है :-)
ETHproductions

@ETHproductions आपका बहुत-बहुत धन्यवाद: DI मुझे लगता है कि मैं कह सकता हूं कि विशेषता यूटिलिटी पैकेज है जो प्रोग्रामर को कोड को संपीड़ित करने में मदद करता है, लेकिन यह सिर्फ मुझे इसे बनाने की कोशिश कर रहा है।
एडुआर्डो हॉफेल



1

वोल्फ्राम लैंग्वेज (मैथेमेटिका) , 35 बाइट्स

0<Echo@#&&#0[3#+1-(5#+3)/2#~Mod~2]&

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

0<Echo@# && ...&शॉर्ट-सर्किट मूल्यांकन है: यह इनपुट को प्रिंट #करता है, जांचता है कि क्या यह सकारात्मक है, और यदि ऐसा है, तो मूल्यांकन करता है ...। इस मामले में, ...है #0[3#+1-(5#+3)/2#~Mod~2]; के बाद से #0(zeroth स्लॉट) समारोह ही है, इस पर एक पुनरावर्ती कॉल है 3#+1-(5#+3)/2#~Mod~2, जो करने के लिए सरल 3#+1जब #भी है, और (#-1)/2जब #अजीब है।




1

इमोजीकोड 0.5 , 141 बाइट्स

🐖🎅🏿🍇🍮a🐕😀🔡a 10🔁▶️a 0🍇🍊😛🚮a 2 1🍇🍮a➗a 2🍉🍓🍇🍮a➕✖️a 3 1🍉😀🔡a 10🍉🍉

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

🐖🎅🏿🍇
🍮a🐕      👴 input integer variable 'a'
😀🔡a 10      👴 print input int
🔁▶️a 0🍇      👴 loop while number isn’t 0
🍊😛🚮a 2 1🍇     👴 if number is odd
🍮a➗a 2       👴 divide number by 2
🍉
🍓🍇      👴 else
🍮a➕✖️a 3 1   👴 multiply by 3 and add 1
🍉
😀🔡a 10     👴 print iteration
🍉🍉


1

मठगोल्फ , 12 बाइट्स

{o_¥¿½É3*)}∟

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

व्याख्या

{             Start block of arbitrary length
 o            Output the number
  _           Duplicate
   ¥          Modulo 2
    ¿         If-else with the next two blocks. Implicit blocks consist of 1 operator
     ½        Halve the number to integer (effectively subtracting 1 before)
      É       Start block of 3 bytes
       3*)    Multiply by 3 and add 1
          }∟  End block and make it do-while-true

मैंने MathGolf को गोल्फ लैंग्स की सूची में जोड़ा है
ETHproductions

इसे जोड़ने के लिए धन्यवाद! सब कुछ मुझे सही लगता है।
अधिकतम

1

x86 मशीन कोड, 39 बाइट्स

00000000: 9150 6800 0000 00e8 fcff ffff 5958 a901  .Ph.........YX..
00000010: 0000 0074 04d1 e8eb 066a 035a f7e2 4009  ...t.....j.Z..@.
00000020: c075 dec3 2564 20                        .u..%d 

विधानसभा (NASM सिंटैक्स):

section .text
	global func
	extern printf
func:					;the function uses fastcall conventions
	xchg eax, ecx			;load function arg into eax
	loop:
		push eax
		push fmt
		call printf	;print eax
		pop ecx
		pop eax
		test eax, 1	;if even zf=1
		jz even		;if eax is even jmp to even
		odd:		;eax=eax/2
			shr eax, 1
			jmp skip
		even:		;eax=eax*3+1
			push 3
			pop edx
			mul edx
			inc eax
		skip:
		or eax, eax
		jne loop	;if eax!=0, keep looping
	ret			;return eax
section .data
	fmt db '%d '

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


1

आर , 66 61 बाइट्स

-5 बाइट्स रॉबर्ट एस के लिए धन्यवाद ifelse को मजबूत करने ifऔर कोष्ठक को हटाने में, और x! = 0 से x> 0

print(x<-scan());while(x>0)print(x<-`if`(x%%2,(x-1)/2,x*3+1))

के बजाय

print(x<-scan());while(x!=0){print(x<-ifelse(x%%2,(x-1)/2,x*3+1))}

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



0

perl -Minteger -nlE, 39 बाइट्स

{say;$_=$_%2?$_/2:3*$_+1 and redo}say 0

0

++ , 38 35 33 बाइट्स जोड़ें

D,f,@:,d3*1+$2/iA2%D
+?
O
Wx,$f>x

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

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

f(x)x

f(x)={xis even,3x+1xis odd,x2

f(x)S=[x]

dS=[x,x]3x+13*1+x2S=[3x+1,x2]

xSxx%2a%babS=[3x+1,x2,(x%2)]D(x%2)03x+1x2

f(x)xx

+?x+?xxxx0$f>xf(x)xx


बस समझने के लिए: क्या कोड का ब्रेक लाइन हिस्सा है? या यह सिर्फ बेहतर स्पष्टीकरण के लिए है? मैं वास्तव में इस भाषा को नहीं जानता।
एडुआर्डो हॉफेल

@EduardoHoefel ब्रेक लाइन?
caird coinheringaahing

@cairdcoinheringaahing नई पंक्ति वर्ण, संभवतः।
लिन

0

रेटिना 0.8.2 , 46 बाइट्स

.+
$*
{*M`1
^(..)+$
$&$&$&$&$&$&111
1(.*)\1
$1

इसे ऑनलाइन आज़माएं! स्पष्टीकरण:

.+
$*

यूनीरी में बदलें।

{

तब तक दोहराएं जब तक मान बदलना बंद न हो जाए।

*M`1

दशमलव में मान प्रिंट करें।

^(..)+$
$&$&$&$&$&$&111

यदि यह समान है, तो 6 से गुणा करें और 3 जोड़ें।

1(.*)\1
$1

1 घटाएं और 2 से भाग दें।

अनुवर्ती न्यूलाइन को ;पहले जोड़कर दबाया जा सकता है {






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