2, 3 और 4 से एन विभाज्य के बाद सबसे छोटा पूर्णांक


22

जिसका श्रेय है उसे श्रेय दो

उद्देश्य एक पूर्णांक को देखते हुए N > 0, बाहर छोटी से छोटी पूर्णांक A, B, और Cइतना है कि:

  1. सब के सब A, Bऔर Cसे सख्ती से अधिक से अधिक कर रहे हैं N;
  2. 2बांटता है A;
  3. 3बांटता है B;
  4. और 4विभाजित करता है C

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

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

N => A, B, C
1 => 2, 3, 4
4 => 6, 6, 8
43 => 44, 45, 44
123 => 124, 126, 124
420 => 422, 423, 424
31415 => 31416, 31416, 31416
1081177 => 1081178, 1081179, 1081180

यदि हम C B Aउत्तर में स्पष्ट रूप से निर्दिष्ट हैं, तो क्या हम (लगातार) एक अलग क्रम में परिणाम (जैसे) आउटपुट कर सकते हैं ?
मार्टिन एंडर

@ मार्टिनबटनर जो स्वीकार्य है
कॉनर ओ'ब्रायन

जवाबों:


17

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

~%2r4¤+‘

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

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

~%2r4¤+‘  Main link. Argument: n (integer)

~         Bitwise NOT; yield ~n = -(n + 1).
     ¤    Combine the three links to the left into a niladic chain:
  2         Yield 2.
   r4       Yield the range from 2 to 4, i.e., [2, 3, 4].
 %        Yield the remainder of the division of ~n by 2, 3 and 4.
          In Python/Jelly, -(n + 1) % k = k - (n + 1) % k if n, k > 0.
       ‘  Yield n + 1.
      +   Add each modulus to n + 1.

26

पायथन 2, 32 बाइट्स

lambda n:[n+2&-2,n/3*3+3,n+4&-4]

2 और 4 के लिए बिट अंकगणितीय, 3 के लिए मॉड्यूलर अंकगणित।

मुझे kऊपर के अगले कई के लिए चार 7-बाइट के भाव मिले nलेकिन कोई भी छोटा नहीं था:

n-n%k+k
~n%k-~n
n/k*k+k
~n/k*-k

कोई भी 34 बाइट्स देता है जब प्रतियों के लिए k=2,3,4, और यदि संयुक्त 33 बाइट्स:

[n/2*2+2,n/3*3+3,n/4*4+4]
[n/k*k+k for k in 2,3,4]

लेकिन, 2 और 4 2 की शक्तियां हैं जो पिछले 1 या 2 बाइट को शून्य करने के लिए बिट ट्रिक्स की अनुमति देती हैं।

n+2&-2
n+4&-4

यह अगले कई को प्राप्त करने के लिए 6 बाइट्स (7 के बजाय) देता है, कुल मिलाकर 32 बाइट्स के लिए, धड़कता है for k in 2,3,4

दुर्भाग्य से, होनहार-दिखने वाला n|1+1और n|3+1इसके अलावा पहले किया गया है, इसलिए उत्पादन में वृद्धि कोष्ठक लेता है।


1
संभावित वेरिएंट में से मेरी प्राथमिकता है n+k-n%k
नील

है n&3+1पहले भी इसके करते हैं?
टिम

@ समय युप, सभी बूलियन ऑपरेशन के साथ एक ही।
xnor


12

MATL, 15 10 9 बाइट्स

2:4+t5M\-

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

स्पष्टीकरण:

2:4          #The array [2, 3, 4]
   +         #Add the input to each element, giving us [12, 13, 14]
    t        #Duplicate this array
     5M      #[2, 3, 4] again
       \     #Modulus on each element, giving us [0, 1, 2]
        -    #Subtract each element, giving us [12, 12, 12]

3
अच्छा जवाब! आप 5Mदूसरे के बजाय (फ़ंक्शन इनपुट के स्वचालित क्लिपबोर्ड) का उपयोग करके एक बाइट को बचा सकते हैं 2:4
डेविड

@ डेविड टिप के लिए धन्यवाद!
DJMcMayhem

12

MATL, 8 बाइट्स

Qt_2:4\+

डेनिस जैली एल्गोरिथ्म का उपयोग करता है, मुझे आश्चर्य है कि यह समान लंबाई है!

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

Q    % takes implicit input and increments by one
t_   % duplicate, and negate top of stack (so it's -(n+1))
2:4  % push vector [2 3 4]
\    % mod(-(n+1),[2 3 4])
+    % add result to input+1
     % implicit display

अच्छी तरह से यह झकना। मुझे अपने 10 बाइट समाधान पर वास्तव में गर्व था, लेकिन मैं इसे हरा नहीं सकता। इसके अलावा, मज़ा सामान्य ज्ञान: यह वास्तव में मेरा 300 वां वोट है। = डी
DJMcMayhem

आह, लेकिन यह सिर्फ आगावा / डेनिस एल्गोरिथ्म ले रहा था, यह मेरा अपना विचार नहीं है।
डेविड

1
कभी-कभी मैं अपने सिर को खरोंचते समय उन यूनिकोड मंदारिनॉइड प्रारंभिक पात्रों को देखता रहता हूं, तो मैं कहता हूं कि "सब कुछ पठनीय है जो एक चलने योग्य कोड है"? योग्य अच्छी बात है मेरे upvote + मैं matl ट्रेन sooon में शामिल हो जाएगा।
अब्राहम

@ Agawa001 आपको चाहिए! यह देखते हुए कि मतलब के आसपास आपका रास्ता बहुत अच्छी तरह से है, आपको इसे बिल्कुल सीधा समझना चाहिए, बड़ा अंतर यह है कि MATL स्टैक-आधारित है। एक भी नहीं है Matl चैट-रूम भी अगर आप किसी भी मदद की जरूरत है!
डेविड

@David कि पैनकेक की प्रकृति आधारित मैट इसे और अधिक बुरी तरह से डरावना बना देता है, यह जानकर कि कच्चे मैटलैब अपने आप में एक गोल्फ-फ्रेंडली भाषा है, जो उच्च स्तरीय सहभागिता के बारे में है, इसलिए कल्पना करें ....
Abr001am

6

मतलाब, 33 बाइट्स

एक और थोड़ा अलग दृष्टिकोण

@(a)feval(@(x)a+1+mod(-a-1,x),2:4)

6

05AB1E , 8 बाइट्स

कोड:

>D(3L>%+

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


आह, ध्यान नहीं दिया गया कि पहले से ही एक 05AB1E उत्तर था जो कि मेरे जैसा ही था। मैंने इसे हटा दिया है, और इसके बजाय यहाँ -1 गोल्फ के रूप में सुझाव देगा: ±D2xŸ%α(यह 2xŸआपके लिए सिर्फ एक विकल्प है 3L>; और दो अन्य बराबर-बाइट विकल्प हो सकते हैं Ƶ…Sया 4L¦)।
केविन क्रूज़सेन




4

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

Ceiling[#+1,{2,3,4}]&

यह एक अनाम फ़ंक्शन है जो इनपुट के रूप में एकल पूर्णांक लेता है और गुणकों की सूची लौटाता है।

Ceilingसमारोह एक वैकल्पिक दूसरा पैरामीटर जो यह बताता है दी गई संख्या के अगले गुणज तक पूर्णांक बनाना लेता है। शुक्र है, यह स्वतः ही अपने दूसरे तर्क पर भी थ्रेड करता है, ताकि हम इसे मूल्यों की एक सूची दे सकें और बदले में हम उन सभी के लिए कई गुना गोल हो जाएंगे।


4

ऑक्टेव, 20 बाइट्स

@(n)n-mod(n,d=2:4)+d

उदाहरण:

octave:60> f(123)
ans =

   124   126   124

octave:61> f(1081177)
ans =

   1081178   1081179   1081180

octave:62> f(420)
ans =

   422   423   424

ध्यान देने योग्य बात यह है कि हम बिना किसी अतिरिक्त बाइट को जोड़े 9 तक कर सकते हैं:

@(n)n-mod(n,d=2:9)+d

आउटपुट (2520 सभी एकल अंकों की संख्या से सबसे छोटा धनात्मक पूर्णांक समान रूप से विभाज्य है):

octave:83> f(2520)
ans =

   2522   2523   2524   2525   2526   2527   2528   2529


4

भूलभुलैया , 19 बाइट्स

:?
:
#/)
\ #
!"*@
"

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

यह C, B, Aलाइनफ़ीड द्वारा अलग किए गए क्रम में परिणामों को आउटपुट करता है ।

व्याख्या

हमेशा की तरह, एक छोटा भूलभुलैया प्राइमर:

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

दो नो-ऑप्स ( ") के बावजूद जो लेआउट को थोड़ा बेकार लगता है, मैं इस समाधान से काफी खुश हूं, क्योंकि इसका नियंत्रण प्रवाह वास्तव में काफी सूक्ष्म है।

IP :दाहिने तरफ ऊपर बाएं कोने में शुरू होता है । यह तुरंत एक मृत अंत को हिट करेगा ?और चारों ओर मुड़ जाएगा, ताकि प्रोग्राम वास्तव में कोड के इस रैखिक टुकड़े से शुरू हो:

:   Duplicate top of main stack. This will duplicate one of the implicit zeros
    at the bottom. While this may seem like a no-op it actually increases
    the stack depth to 1, because the duplicated zero is *explicit*.
?   Read n and push it onto main.
:   Duplicate.
:   Duplicate.

इसका मतलब है कि अब हमें nमुख्य स्टैक पर तीन प्रतियां मिल गई हैं , लेकिन इसकी गहराई है 4। यह सुविधाजनक है क्योंकि इसका मतलब है कि हम इनपुट की प्रतियों के माध्यम से काम करते समय वर्तमान गुणक को प्राप्त करने के लिए स्टैक डेप्थ कर सकते हैं।

आईपी ​​अब (क्लॉकवाइज) 3x3 लूप में प्रवेश करता है। ध्यान दें #, जो स्टैक की गहराई को धक्का देता है, हमेशा एक सकारात्मक मूल्य को धक्का देगा जैसे कि हम जानते हैं कि आईपी हमेशा इस बिंदु पर पूर्व की ओर जाएगा।

लूप बॉडी यह है:

#   Push the stack depth, i.e. the current multiplier k.
/   Compute n / k (rounding down).
)   Increment.
#   Push the stack depth again (this is still k).
*   Multiply. So we've now computed (n/k+1)*k, which is the number
    we're looking for. Note that this number is always positive so
    we're guaranteed that the IP turns west to continue the loop.
"   No-op.
!   Print result. If we've still got copies of n left, the top of the 
    stack is positive, so the IP turns north and does another round.
    Otherwise, see below...
\   Print a linefeed.
    Then we enter the next loop iteration.

!तीन बार लूप ट्रेस होने (अप ) होने के बाद , सभी प्रतियाँn उपयोग किया जाता है और नीचे का शून्य पता चलता है। "तल पर होने के कारण (जो अन्यथा बहुत बेकार लगता है) यह स्थिति एक जंक्शन है। इसका मतलब है कि स्टैक के शीर्ष पर एक शून्य के साथ, आईपी सीधे (पश्चिम) आगे जाने की कोशिश करता है, लेकिन क्योंकि वहाँ एक दीवार है जो वास्तव में 180 डिग्री मोड़ देती है और पूर्व की ओर वापस जाती है जैसे कि यह एक मृत अंत मारा था।

परिणामस्वरूप, निम्न बिट अब निष्पादित की गई है:

"   No-op.
*   Multiply two zeros on top of the stack, i.e. also a no-op.
    The top of the stack is now still zero, so the IP keeps moving east.
@   Terminate the program.

3

मतलाब, 50 बाइट्स

@(a)arrayfun(@(k)find(~rem(a+1:a+k,k))+a,[2 3 4])

बहुत कम से कम, आप 2:4इसके बजाय उपयोग कर सकते हैं [2 3 4]
स्वेअर


3

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

दिलचस्प बात यह है कि @ केविनलाउ के रूबी जवाब या @ xnor के पाइथन उत्तर को समान लंबाई में पोर्ट करना:

n=>[2,3,4].map(d=>n+d-n%d)
n=>[n+2&-2,n+3-n%3,n+4&-4]

रूबी उत्तर के बंदरगाह के लिए मेरी थोड़ी सी प्राथमिकता है क्योंकि यह 2 तक काम करता है 53 -3 जबकि पायथन उत्तर का बंदरगाह केवल 2 31 -5 तक काम करता है ।


)-> ]जैसा कि मुझे लगता है
Qwertiy

@ क्वर्टी वूप्स, टाइपो के लिए खेद है।
नील

3

सी, 50 46 बाइट्स

i;f(int*a,int n){for(i=1;++i<5;*a++=n+i-n%i);}

4 बाइट बचाने के लिए नील और nwellnhof को धन्यवाद!

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

i;f(int*a,int n){for(i=1;++i<5;*a++=n+i-n%i);}

int main()
{
    int array[3];
    int n=10;
    f(array, n);
    printf("A:%d\tB:%d\tC:%d\n",array[0],array[1],array[2]);
    return 0;
}

मैंने @ xnor की बिट-ट्विडलिंग को देखा, लेकिन आपको इसके लिए लूप को अनियंत्रित करने की आवश्यकता है, जो आपको एक बाइट की लागत को समाप्त करता है।
नील

n + i - n % i++अपरिभाषित व्यवहार का परिणाम नहीं है?
nwellnhof

s/a[i-2]/*a++/दो बाइट्स बचाने के लिए भी ।
nwellnhof

@nwellnhof Bah, मैंने सोचा था कि जब मैंने उनके पाश को अनियंत्रित किया था, लेकिन मेरे साथ ऐसा नहीं हुआ कि वे इसे वैसे भी इस्तेमाल कर सकें।
नील

2
@Neil लेकिन कोड को बड़ा किए बिना अपरिभाषित व्यवहार के आसपास काम किया जा सकता है। यहां K & R फ़ंक्शन घोषणाओं का उपयोग करते हुए एक छोटा संस्करण भी है:f(a,n,i)int*a;{for(i=1;++i<5;)*a++=n+i-n%i;}
nwellnhof

3

रेंग, 40 बाइट्स

i1+#i2341ø>(1+)31j
i(2[¤,  q!^$]æl0eq!~

1: init

i1+#i2341ø

i1+#iइनपुट सेट करता है 1 + input; इसका कारण यह है कि हम इनपुट की तुलना में कड़ाई से संख्याओं पर काम करते हैं।234हमारे पुनरावृत्ति मूल्यों के साथ टेप को इनिशियलाइज़ करता है, और अगली पंक्ति की शुरुआत में कूदता है।

2 ए: लूप

i(2[¤,  q!^$]æl0eq!~

i(एसटीओएस में इनपुट डालता है, और 2[शीर्ष 2 तत्वों के साथ एक नया स्टैक बनाता है। ¤स्टैक डुप्लिकेट ,करता है , और मापांक करता है। यदि कोई शेष है, तो q!^(बी) में जाने के लिए लूप से बाहर निकलता है। अन्यथा, हम प्रिंट करने के लिए ठीक हैं। $अतिरिक्त चीज़ को हटाता है, ]स्टैक को बंद करता है, और æइसे अच्छी तरह से प्रिंट करता है।l0wq!~समाप्त होता है अगर स्टैक में शून्य सदस्य होते हैं।

2 बी: कि अन्य लूप

          >(1+)31j
        q!^

(1+)1 को एसटीओएस में जोड़ता है, और 31jलूप के उस भाग में कूदता है जो स्टैक से सामान नहीं लेता है। और लाभ।


वह अतिरिक्त व्हाट्सएप वास्तव में मुझे परेशान कर रहा है। एक GIF ले लो।

REENNNNNGGG


3

रेटिना, 62 43 26 बाइट्स

17 बाइट्स @ मर्टिन ब्यूटनर को धन्यवाद ।

^
1111:
! एम एंड `(11 +): (\ 1 *)
:

(ट्रेसिंग न्यूलाइन पर ध्यान दें।)

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

इनपुट इन यूनरी 1, आउटपुट इन यूनरी इन द 1न्यूलाइन द्वारा अलग किया गया।

पिछला 43-बाइट संस्करण:

.+
11:$&;111:$&;1111:$&
\b(1+):(\1*)1*
$1$2

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

इनपुट इन यूरी, आउटपुट इन यूरी अलग से सेमी-कोलोन ( ;)।

पिछला 62-बाइट संस्करण:

.+
$&11;$&111;$&1111
((11)+)1*;((111)+)1*;((1111)+)1*
$1;$3;$5

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

इनपुट इन यूरी, आउटपुट इन यूरी अलग से सेमी-कोलोन ( ;)।


26 अगर विपरीत क्रम में आउटपुट की अनुमति है: retina.tryitonline.net/… ... अन्यथा 33, हालांकि मुझे लगता है कि वहाँ एक छोटा रास्ता होना चाहिए जो रिवर्स सॉर्टिंग से बचा जाता है: retina.tryitonline.net/-
मार्टिन

एक अलग उत्तर के रूप में अर्हता प्राप्त करने के लिए पर्याप्त है?
लीक नून

मुझे नहीं पता, यह अभी भी एक ही विचार है, मैंने केवल ओवरलैपिंग मैचों का उपयोग करके मैन्युअल रूप से सूची तैयार करने का स्थान लिया है।
मार्टिन एंडर

कॉनर ने पुष्टि की कि 26-बाइट समाधान वैध है।
मार्टिन एंडर

3

अष्टक, २ 22 २२ 20 बाइट्स

MATLAB और ऑक्टेव:

f=2:4;@(x)f.*ceil((x+1)./f)

बेहतर (समाधान समतुल्य हैं, लेकिन आगे बढ़ने पर एक दूसरे से आगे निकल सकता है), MATLAB और ऑक्टेव:

@(x)x-rem(x,2:4)+(2:4)
f=2:4;@(x)x+f-rem(x,f)

केवल ओक्टेव में:

@(x)x-rem(x,h=2:4)+h

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


मेरे अंतिम जवाब मूल रूप से यह है कि यहां एक :( codegolf.stackexchange.com/a/80028/52795
BERS

3

मिन्कोलांग 0.15 , 17 बाइट्स

n$z3[zi2+$d%-+N].

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

व्याख्या

n$z                  Take number from input and store in register
   3[                Open for loop that repeats 3 times
     z               Push value in register on stack
      i2+            Loop counter plus 2
         $d          Duplicate stack
           %-+       Mod, subtract, add
              N      Output as number
               ].    Close for loop and stop.

+ विभाजन है ??
डाउनगेट

@Downgoat: वूप्स। > _>
एल'एंडिया स्ट्रोमैन


2

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

f@n_:=n-n~Mod~#+#&/@{2,3,4}

f[1]
f[4]
f[43]
f[123]
f[420]
f[31415]
f[1081177]

{२, ३, ४}

{6, 6, 8}

{44, 45, 44}

{124, 126, 124}

{422, 423, 424}

{31416, 31416, 31416}

{1081178, 1081179, 1081180}


सामान्य मामला सामान्य उत्तर देता है:

f[r]

{२ + आर - मॉड [आर, २], ३ + आर - मॉड [आर, ३], ४ + आर - मॉड [आर, ४]}}


2

आर, 30 26 बाइट्स

(4 बाइट्स घटाकर @Neil का धन्यवाद)

N=scan();cat(N+2:4-N%%2:4)

यह (मुझे लगता है कि बाकी उत्तरों के समान) इनपुट में 2: 4 जोड़ता है और उसी संख्याओं पर मोडुलो चलाने के बाद शेष को कम करता है।


1
जैसा कि मैं भाषा नहीं जानता, क्या कोई कारण है जो आप उपयोग नहीं करते हैं N+2:4-N%%2:4?
नील

@ क्योंकि मुझे नहीं लगता कि मैंने ऐसा सोचा था। हालांकि धन्यवाद।
डेविड ऐरनबर्ग

2

यूजीएल , 51 31 25 24 बाइट्स

icu$l_u^^/%_u^*ocO$dddd:

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

पिछला 25-बाइट संस्करण:

iRcu$l_u$r^/%_u*ocO$dddd:

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

पिछला 31-बाइट संस्करण:

iRcuuulu$cuuuuuu%-r^/%_u*oddcO:

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

पिछला 51-बाइट संस्करण:

i$$cuuu/%_ucuuu*@cuuuu/%_ucuuuu*@cuu/%_ucuu*ocOocOo

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


2

जावा 70 57

a->System.out.print(a/2*2+2+" "+(a/3*3+3)+" "+(a/4*4+4))

मैं जावा नहीं जानता, लेकिन शायद आप के आसपास सफेद स्थान को हटा सकते हैं =मेंint a = new Integer(z[0]);
कोनोर ओ ब्रायन


1

दरअसल, 22 बाइट्स

╗52x"╝1`;╛@%Y@╜<*`╓"£M

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

मजेदार तथ्य: इस कार्यक्रम को लिखते समय वास्तव में दुभाषिया में 3 कीड़े पाए गए और तय किए गए।

इतना मजेदार तथ्य नहीं: उन 3 बगों ने इस समाधान को बहुत कम होने से रोका।

स्पष्टीकरण:

╗52x"╝1`;╛@%Y@╜<*`╓"£M
╗                       push input to reg0
 52x                    push range(2,5) ([2,3,4])
    "╝1`;╛@%Y@╜<*`╓"£M  map (for n in [2,3,4]):
     ╝                    push n to reg1
      1`;╛@%Y@╜<*`╓       find the smallest integer k where:
        ;╛@%Y               k is divisible by n and...
             @╜<*           is greater than the input

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