छोटी चट्टानों में बड़ी चट्टानें बनाएं


22

चक्की में आपका स्वागत है।

अपने काम के लिए बड़ी चट्टानों को पीसकर छोटी चट्टानों में बनाना है।

आकार की एक बड़ी चट्टान का इनपुट लें n > 3 और इसे पीस लें।

जब तक सभी चट्टानों का आकार नहीं हो जाता है, तब तक उन्हें चक्की में डालकर चट्टानों को पीसना जारी रखें 2

चट्टानों को हमेशा बराबर हिस्सों में पीसकर रखा जाता है। यदि एक पीसने का परिणाम विषम है तो परिणाम लें - 1।

जैसे ही आप आगे बढ़ते हैं, प्रत्येक पीस का आउटपुट प्रिंट करें।

उदाहरण

इनपुट: 5

उत्पादन: 22

परिणाम आकार 2 की दो चट्टानें हैं

इनपुट: 50

उत्पादन:

2424 //two rocks of size 24
12121212 //four rocks of size 12
66666666 //8 rocks of size 6
2222222222222222

परिणाम आकार 2 की 16 चट्टानें हैं

इनपुट: 30

उत्पादन:

1414
6666
22222222

परिणाम 2 आकार की 8 चट्टानें हैं

यह इसलिए सबसे छोटा कोड जीतता है! मज़ा करो और अच्छी किस्मत पाओ!


आप इसे 3 से ऊपर होने की उम्मीद कर सकते हैं
जैक्सनसेक

क्या हमें आपके प्रारूप (सभी संख्याओं को मिलाकर) का उपयोग करना होगा या क्या हम सूची जैसी चीजों का उपयोग कर सकते हैं? कुछ जवाब इसके बजाय ऐसा करने लगते हैं।
घातक

जब तक आउटपुट प्रत्येक पुनरावृति प्रदर्शित करता है तब तक प्रारूप को ऊपर की तरह होने की आवश्यकता नहीं है।
जैक्सनसेक 14

1
मैं कहूँगा कि एक 2d सरणी करता है और एक 1d नहीं करता है, लेकिन यह आपके लिए ठीक है।
योनातन एलन

1
जब तक मेटा सर्वसम्मति के अनुसार चुनौती में निर्दिष्ट नहीं किया जाता है तब तक @ user902383 या तो ठीक है । इनपुट और आउटपुट के लिए, फिर से दोनों ठीक हैं - इस पोस्ट को देखें ।
योनातन एलन

जवाबों:



8

गाय, 297 291 बाइट्स

MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmoOMoOmoOmoOoommOoMoOMOOmoOMMMmoOMMMmoOOOOMoOmOoMOOMOomoOmoO
MOOMOomOoMOomoOmoomOoMMMOOOMoOmoOMMMmOomOomoomoOmoOMOOMOomOomOomOoMOomoOmoOmoOmoomOomOomOo
mOomOoMMMmoOMMMMOOMOomoOOOMmOomOoMoOmoOmoomOomOoMoomoOmoOmoOMOOMOoMOomoOMoOmOomoomoOMMMOOO
mOoMMMMMMmOoMMMMOomoo

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

कोड प्रत्येक संख्या को अपनी लाइन पर प्रिंट करता है, और पुनरावृत्तियों को एक अतिरिक्त न्यूलाइन के साथ अलग करता है। यह अपने आप में पहले पुनरावृत्ति को भी छापता है, उसके बाद एक नई पंक्ति को। तो 5 का इनपुट एक आउटपुट देगा जो 5 2 2रिक्त स्थान के बजाय newlines के साथ जैसा दिखता है । के लिए नमूना उत्पादन 50नीचे दिया गया है।

स्पष्टीकरण पेड़:

MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmoOMoOmoOmoOoom ;Store 10 in [0], 1 in [1], and integer input in [3]
mOoMoO                                        ;Store 1 in [2]
MOO                                           ;Loop while [2] is non-zero
   moOMMMmoOMMMmoOOOOMoOmOo                   ;   Copy [3] to [4], clear contents of [5], and store 1 in [5]
   MOO                                        ;   Loop while [4] is non-zero
      MOomoOmoO                               ;      Decrement 4 and move to 6
      MOO                                     ;      Loop while [6] is non-zero
         MOomOoMOomoO                         ;         Decrement [5] and [6]
      moo                                     ;      End loop once [6] is empty
      mOoMMMOOOMoOmoOMMMmOomOo                ;      Copy [5] to [6], and reset [5] to 1, then move back to [4]
   moo                                        ;   End loop now that [4] is empty.  [6] now contains the parity of [3]
   moOmoO                                     ;   Navigate to [6]
   MOO                                        ;   Loop while [6] is non-empty
      MOomOomOomOoMOomoOmoOmoO                ;      Decrememnt [3] and [6]
   moo                                        ;   End loop now that [6] is empty.  [3] now contains the largest even number less than the previous iteration.
   mOomOomOomOomOoMMMmoOMMM                   ;   Copy [1] to [2]
   MOO                                        ;   Loop while [2] is non-empty
      MOomoOOOMmOomOoMoOmoO                   ;      Decrement [2], increment [1], and print the number in [3].
   moo                                        ;   End loop now that [2] is empty
   mOomOoMoo                                  ;   Print a new line
   moOmoOmoO                                  ;   Navigate to [3]
   MOO                                        ;   Loop while [3] is non-empty
      MOoMOomoOMoOmOo                         ;      Decrement [3] twice and increment [4] once
   moo                                        ;   [4] now contains half of [3]
   moOMMMOOOmOoMMM                            ;   Copy [4] to [3] and clear [4]
   MMMmOoMMMMOo                               ;   Copy [3] to [2] and decrement once
moo                                           ;End loop now that [2] is empty

इनपुट 50 के लिए नमूना आउटपुट:

50

24
24

12
12
12
12

6
6
6
6
6
6
6
6

2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2

2
मेरे पास कोई शब्द नहीं है
जैक्सनसेक

मेरे पास अभी भी कोई शब्द नहीं है
jacksonecac

मेरे पास कोई शब्द नहीं है
एडेकी ओकोह

मैं प्यार करता हूँ कि कैसे ढाई साल बाद, यह अभी भी लोगों को भयभीत करता है।
गैब्रियल बेनामी

7

05AB1E , 12 11 बाइट्स

¸[4÷·€D=¬<#

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

व्याख्या

¸             # wrap input in a list
 [            # start infinite loop
  4÷          # elementwise integer divison by 4
    ·         # elementwise multiplication by 2
     €D       # duplicate each element in the list
       =      # print it
        ¬     # get the first element of the list
         <    # decrease it by 1
          #   # if true: exit loop

6

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

n=input()
while n[0]>2:n=len(n)*2*[n[0]/4<<1];print n

विशेष विभाजन प्राप्त करने के लिए 4 से विभाजित करें और 1 से बाएं शिफ्ट करें


4

हास्केल, 75 71 60 50 47 बाइट्स

f 0=[]
f n|x<-f$2*div n 4=show n:zipWith(++)x x

इसे ऑनलाइन आज़माएं! संपादित करें: जैसा कि आउटपुट में अब इनपुट सहित एक सूची होने की अनुमति है, 10 13 बाइट्स बचाए जा सकते हैं।

उपयोग:

Prelude> f 50
["50","2424","12121212","66666666","2222222222222222"]

मूल 60 बाइट संस्करण:

2%x=""
n%x|z<-2*div n 4=([1..x]>>show z)++"\n"++z%(x*2)
(%2)

इसे ऑनलाइन आज़माएं! छोटे फॉर्मूले को इंगित करने के लिए क्रिश्चियन सिवर्स का धन्यवाद।

उपयोग:

Prelude> (%2)50
"2424\n12121212\n66666666\n2222222222222222\n"

आप बस कर सकते हैं z<-2*div n 4
क्रिश्चियन सेवर्स

3

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

f=s=>{for(n=1;s>2;)console.log(`${s=s/4<<1}`.repeat(n*=2))}

console.log(f.toString().length); 
f(5);
f(50);
f(30);                                  


अगर मैं अपना कोड mothereff.in/byte-counter में डालूं तो मुझे 59 बाइट्स मिलेंगे?
शाचलाका

@Tsllllacka मुझे लगता है कि f=लेकिन डेमो के लिए ही है
लार्स डब्ल्यू

आह ठीक है। इससे यह स्पष्ट हो जाता है :-) फिर भी मैना से 2 बाइट्स मिलेंगे
Tschallacka


3

जावा, 85 बाइट्स

n->{String s="";for(int q=2,i;n>2;q*=2,s+="\n")for(i=q,n=n/4*2;i-->0;)s+=n;return s;}

परीक्षण और अपुष्ट

import java.util.function.*;

class Ideone {
  public static void main(String[] args) throws java.lang.Exception {
    Function<Integer, String> f = number -> {
      String result = "";
      for (int quantity = 2, i; number > 2; quantity *= 2) {
        number = number / 4 * 2; // Make sure that the next is half or half - 1 if odd
        for (i = quantity; i > 0; i--) { // copy "quantity" times.
          result += number;
        }
        result += "\n"; // append new line
      }
      return result;
    };
    System.out.println(f.apply(50));
  }
}

नोट: मैं नहीं जानता कि क्यों, Ideone आंतरिक त्रुटि देता रहता है, इसलिए इस पर परीक्षण एक समस्या है। परीक्षण करने के लिए, बस अपने मानक जावा आईडीई में कॉपी / पेस्ट करें और चलाएं। (यह वहाँ काम करता है, मैंने इसे सुनिश्चित किया है;))


ideone आपके कोड के साथ ठीक काम करता है। जब वे रखरखाव कर रहे हैं (मुझे लगता है) यह एक आंतरिक त्रुटि दे रही है। मेरे पास पहले भी है जब मैंने अपने पुराने उत्तरों को देखा। +1 btw, मुझे कुछ भी दिखाई नहीं देता है जो अधिक गोल्फ हो सकता है। ओह, और मुझे आपकी n=n/4*2चाल पसंद है । :)
केविन क्रूज़सेन

3

सी #, 88 86 83 बाइट्स

स्कर्म के लिए 3 बाइट्स सहेजे गए

एक अन्य बाइट whileको एक forलूप में बदलकर सहेजा गया है जिसमें चर घोषणाएं शामिल हैं

योडल के लिए धन्यवाद 1 बाइट्स बचाया

n=>{var r="";for(int i,c=2;n>2;c*=2,r+="\n")for(i=0,n=n/4*2;i++<c;)r+=n;return r;};

बेनामी फ़ंक्शन जो प्रत्येक पीस के परिणाम से बना एक स्ट्रिंग लौटाता है।

[संपादित करने से पहले [असंगत विधि और परीक्षण मामलों के साथ पूरा कार्यक्रम!]:

using System;

public class Program
{
    public static void Main()
    {
        Func<int, string> f =
        n =>
        {
            var r = "";
            for (int i, c = 1; n > 2; )  // iterator and counter variable
            {
                    n = n/4 * 2;    // make sure the result if even
                    c *= 2;         // keep track of the number of rocks
                    for (i = 0; i++ < c; )  // store the current line made of [c] rocks of size [n]
                        r += n;
                    r += "\n";      // add a trailing newline to the string resulted from this step
            }
            return r;       // return the entire history
        };

        //test cases:
        Console.WriteLine(f(5));
        Console.WriteLine(f(50));
        Console.WriteLine(f(30));
    }
}

2
सोचिए कि आप लूप के लिए 1 बाइट बचा सकते हैंfor(i=0;i++<c;)
योडल

आप अभी भी 1 बाइट बचा सकते हैं, जैसा कि योडल ने उल्लेख किया है कि आप अपने दूसरे के लिएfor (i = 0; i++ < c;)
एमएक्स डी

पोस्ट को अपडेट करना न भूले। अब अपडेट किया गया :)
adrianmp

1
आप 1 बाइट को बचाने के लिए 2 और * = 2 पर शुरू करने के लिए अपने काउंटर को अपडेट कर सकते हैं और नई लाइन एपेंड को स्थानांतरित कर सकते हैं। फिर आप n = n / 4 * 2 को दूसरे लूप में ले जा सकते हैं और ब्रेसिज़ को हटाकर 2 और बचा सकते हैं। n=>{var r="";for(int i,c=2;n>2;c*=2,r+="\n")for(i=0,n=n/4*2;i++<c;)r+=n;return r;}
स्कर्म

2

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

l~]{{2/-2&_}%_n_2-}g;

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

व्याख्या

l~]      e# Read input, evaluate and wrap it in a singleton list.
{        e# Do while...
  {      e#   Map this block over the list of rocks.
    2/   e#   Halve the rock.
    -2&  e#   Bitwise AND with -2, clearing the least-significant bit and
         e#   rounding down to an even integer.
    _    e#   Duplicate.
  }%
  _n     e# Print a copy of the current list of rocks.
  _2-    e# Continue if the current list of rocks contains values that aren't 2.
}g
;        e# Discard the final result to prevent printing it again.

2

पायथ, 18 16 13 बाइट्स

WhQ=Q*2my/d4\n

* \nएक नई पंक्ति
स्पष्टीकरण है:

W              # While
 hQ            # first element of Q - 0 is falsy
   =Q          # assign to Q
     *2        # the double of the (list) that is returned
       m       # form this \/ map
         /d4   # divide every element by 4
        y      # and double
            \n # print Q

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


2

MATL , 13 बाइट्स

`K/kEthttH>]x

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

`       % Do...while
  K/k   %   Divide by 4 and round down. Takes input implicitly in the first iteration
  E     %   Multiply by 2
  th    %   Attach a copy of itself (creates a longer array)
  t     %   Duplicate. This copy will be used for further grinding, keeping the original
  tH>   %   Duplicate. True if the values exceed 2. Used as loop condition
]       % End. The loop exits if the latest array contains 2
x       % Delete last copy. Implicitly display the entire stack

2

PHP, 72 67 64 बाइट्स

for($n=$argv[$k=1];$n>2;)echo str_repeat($n=$n/2&~1,$k*=2),"\n";

कमांड लाइन से तर्क लेता है। साथ चलाना -r


2

जेली , 13 12 11 बाइट्स

:4Ḥx2µȦпṖY

TryItOnline!

नोट: ओपी ने कहा कि इनपुट आउटपुट में भी हो सकता है।

कैसे?

:4Ḥx2µȦпṖY - Main link: rockSize
     µ      - monadic separation
       п   - loop collect intermediate results while
      Ȧ     - any
:4          -     integer division (vectorises) by 4
  Ḥ         -     double (vectorises)
   x2       -     repeat the elements 2 times
         Ṗ  - pop (remove the trailing list of zeros)
          Y - join with line feeds

12 बाइट्स के लिए प्रदर्शित इनपुट के बिना संस्करण: :4Ḥḟ0x2µÐĿḊG


2

पर्ल, ४० 35 30 + 1 = 31 बाइट्स

के साथ भागो -nझंडे के

-4 बाइट्स @ दादा को धन्यवाद

say$_ x($.*=2)while$_=$_>>1&~1

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

पर्ल स्वचालित रूप से सेट $_होने पर इनपुट को चर में पढ़ता -nहै। दुभाषिया द्वारा कार्यक्रम की शुरुआत में $.एक विशेष चर सेट है 1, इसलिए मैं इसे दोहरीकरण के लिए एक आधार के रूप में उपयोग कर सकता हूं। whileलूप के प्रत्येक पुनरावृत्ति , यह बिट-शिफ्ट $_करता है और एक बिट को रद्द करने के लिए एक तार्किक और स्वयं के ऋणात्मक ऋण के खिलाफ प्रदर्शन करता है।


आप इसे 31 बाइट तक नीचे कर सकते हैं: perl -nE 'say$_ x($.*=2)while$_=$_>>1&~1'(हो सकता है कि इसे और भी आगे बढ़ाया जा सके, मैंने इस पर बहुत समय नहीं लगाया)।
दादा

2

पावरशेल 3+, 58 54 बाइट्स

for($s=$input;$s;$s=($s-shr2)*2){"$s"*(2-shl($i++)-1)}

धन्यवाद मुझे 4 बाइट बचाने के लिए TimmyD !

थोड़ा Ungolfed (स्वरूपण)

for ( $s = $input ; $s ; $s = ( $s -shr 2 ) * 2 ) {
    "$s" * (2 -shl ($i++)-1)
}

व्याख्या

मैं अन्य उत्तर के रूप में बहुत से 2 चाल से 4 गुणा उसी चाल का उपयोग कर रहा हूं, लेकिन मैं एक समस्या में भाग गया। यदि विभाजन के दौरान ज़रूरत हो तो PowerShell संख्या को फ़्लोटिंग पॉइंट में परिवर्तित कर देता है, और गोल्फिंग के लिए यह कष्टप्रद होता है क्योंकि $v/4*2कुछ ऐसा ही हो जाता है [int]($v/4)*2। मैं उस विभाजन के लिए बिटशिफ्टिंग का उपयोग करते हुए चारों ओर हो गया-shr

गणना करने के लिए कि कितनी बार एक पुनरावृत्ति प्रिंट करने के लिए मैं सिर्फ (2^$i)-1जो अच्छी तरह से काम करता है और इनपुट मूल्य को छोड़ने का अतिरिक्त प्रभाव पड़ता है। केवल 2 से गुणा करने की कोशिश करना समस्याजनक था क्योंकि 0 से शुरू होने से सिर्फ मान बढ़ाने में मुश्किल होती है$i*=2 होती है और 1 से शुरू होने पर नंबर को सही करने के लिए बहुत अधिक सुधार की आवश्यकता होती है।

चूंकि PowerShell के पास इसके लिए कोई ऑपरेटर नहीं है, और मैं इससे बचना चाहता था [Math]::Pow(), इसलिए मैंने 2 की मेरी शक्तियों के लिए फिर से बिटशिफ्टिंग पर भरोसा किया।


@TimmyD संस्करण और अच्छे टिप का उल्लेख करना भूल गया है; धन्यवाद!
रिश्वतखोर

1

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

चूंकि ओपी ने कहा कि 1 डी सरणी जिसमें इनपुट शामिल था, ठीक था मैं इस पुनरावर्ती फ़ंक्शन के साथ आया हूं, जो दुर्भाग्य से केवल वर्तमान पायथन विजेता के साथ संबंध रखता है।

f=lambda s,n=1:[s]*n+(f(s/4*2,n*2)if s>3else[])

f=lambda r,n=1:[r]*n+(r>3and f(r/4*2,n*2)or[]) 46 के लिए
जोनाथन एलन

1

पर्ल, 47 बाइट्स

$a=<>>>1;say 2*(($a>>=1)||die)x(1<<$_)for 1..$a

कोई कमांड-लाइन विकल्प नहीं, इस बार (असामान्य रूप से पर्ल के लिए)। मूल विचार यह है कि किसी भी चरण पर सभी चट्टानें समान आकार की हैं, हम पूरी सूची को रिकॉर्ड करने के बजाय केवल आकार (में $a) और संख्या (में $_) रिकॉर्ड करते हैं। मैं (या +) के बाद अंतरिक्ष से छुटकारा पाने का कोई रास्ता नहीं ढूंढ सका say; आप इसे स्थानांतरित कर सकते हैं, 2*लेकिन यह सही ढंग से पार्स नहीं करेगा अगर यह एक प्रारंभिक कोष्ठक द्वारा पीछा किया जाता है।

मैं मदद नहीं कर सकता लेकिन इस भावना को हिला सकता हूं कि यह कामचलाऊ है, लेकिन मैं यह नहीं देख सकता कि कैसे।


अगर मैं इसे ज्यादा करने की कोशिश करता हूं, तो मैं हर बार गैब्रियल बेनामी के जवाब के साथ समाप्त होता हूं। बस कुछ कदम दिखाने के लिए: dieस्पष्ट रूप से उप-इष्टतम लगता है। लेकिन हम अभी भी अगर हम बंद कर दें या नहीं की जरूरत है की जांच करने के लिए एक तरह से की जरूरत है -> एक समाधान के बजाय एक समय का उपयोग है for: while$a>1। लेकिन हमें इसके लिए एक प्रतिस्थापन खोजने की आवश्यकता है $_: कोई भी इकाई परिवर्तनशील चर यह कर सकता है: 1<<$_द्वारा प्रतिस्थापित 1<<++$x। तो अब $_इस्तेमाल किया जा करने के लिए स्वतंत्र है, हम तो -nहर $aएक के साथ उपयोग और बदल सकते हैं $_, और पहला निर्देश बन जाता है $_>>=1। हम है के बाद से -n, $.सेट कर दिया जाता है, तो हम जगह ले सकता है 1<<++$lके साथ $.*=2
दादा

उन सभी संशोधनों को करने से perl -nE '$_>>=1;say 2*($_>>=1)x($.*=2)while$_>1'(39 बाइट्स) का उत्पादन होगा । फिर ध्यान दें कि $_>>=1दो बार किया जाता है, इसलिए हम एक (पहले एक) से छुटकारा पाने की कोशिश कर सकते हैं। इससे छुटकारा पाने की कोशिश करते हुए, मैं say$_ x($.*=2)while($_>>=1)/2>1(दोनों को whileशर्त के अंदर डाल दिया )। लेकिन परिणाम गलत है ( $_विषम हो सकता है), और यह सुनिश्चित करने की कोशिश कर रहा है कि यह भी है, मैं समाप्त करता हूं while$_=$_>>1&~1। तो अब कोड है say$_ x($.*=2)while($_=$_>>1&~1)
दादा

मुझे याद आया कि पहले से ही एक पर्ल जवाब था। मुझे लगता है कि अगर यह नीचे गोल्फ को एक डुप्लिकेट में बदल देता है, तो इसे संपादित करने में कोई मतलब नहीं है। दूसरी ओर, यह वास्तव में गलत नहीं है, इसलिए इसे हटाने का कोई मतलब नहीं है। हम शायद अपने अवर पर्ल गोल्फिंग शक्तियों के लिए एक वसीयतनामा के रूप में छोड़ने के लिए सबसे अच्छा कर रहे हैं।

मैं सहमत हूं, यह अन्य पर्ल समाधान से काफी अलग है, और मेरी पिछली टिप्पणियों के साथ, मैंने यह दिखाने की कोशिश की कि जिस तरह से मैं इसे गोल्फ कर सकता हूं वह इसे दूसरे समाधान में बदल देगा। इसलिए इसे छोड़ देना क्योंकि यह सही समाधान की तरह महसूस होता है।
दादा

1

विम 61 54 बाइट्स

qqYpPJ0yw:s;\d*;="/2
;g
:let @t=(">7)+1
@tkjjG@qq@q

TryItOnline!

Unprintables:

qqYpPJ0yw:s;\d*;^R=^R"/2
;g
:let @t=(^R">7)+1
@tkjjG@qq@q

सौभाग्य से विम स्वचालित रूप से x / 2 पर छोटा हो जाता है।


1

जावास्क्रिप्ट, 71 63 59 58 बाइट्स

खैर, मैं इस जावास्क्रिप्ट समाधान के साथ आया था। पूरी तरह से गोल्फ में नया है, लेकिन मैंने इसे एक मजेदार चुनौती दी

एक लूप के लिए टाइटस के सुझाव के लिए 4 बाइट्स का धन्यवाद दिया।

अधूरा आधार:

for(o = i = 30; i > 1; i= i/4<<1) {
   console.log(`${i}`.repeat(o / i));
}

गोल्फ संस्करण

for(o=i=30;i>1;i=i/4<<1){console.log(`${i}`.repeat(o/i));}

मैं सुझाव के लिए खुला हूं कि इसे कैसे सुधारें / गोल्फ सीखें

इनपुट परीक्षक


1
आप एक forलूप के साथ दो बाइट्स बचा सकते हैं for(o=i=30;i>2;console.log(...)){...}:। और एक को दो पीसने के संयोजन के साथ, आप ब्रेस निकाल सकते हैं: i=i/4<<1;(-5)। यकीन नहीं तो i=i/4*2;वही करेंगे।
टाइटस

1
मुझे यकीन है कि आपने इसका परीक्षण नहीं किया है।
टाइटस

अभी तक नहीं, मेरे बच्चों को पकड़ने के लिए पीसी से भागना पड़ा
Tschallacka


1

स्विफ्ट, 84 बाइट्स

func g(n:Int){var n=n,i=2;while n>2{n=n/4*2;print(Array(repeating:n,count:i));i*=2}}

Ungolfed

func grind(rockSize: Int) {
    var rockSize = rockSize
    var rockCount = 1

    while rockSize > 2 {
        rockSize = rockSize / 4 * 2
        rockCount *= 2

        let output = Array(repeating: rockSize, count: rockCount)
        print(output)
    }
}

1

Befunge, 45 बाइट्स

&1vg0_\:.\v
:\<  ^!:-1<p00:*2\.:*2/4,+55_@#`2

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

व्याख्या

&           read the rock size
1           initialise the count
<           start of main loop going right to left

  \         swap the size to the top of the stack
  :2`#@_    if size is not > 2 then exit
  55+,      output a line break
  4/2*      size = size/4*2, i.e. split into even halves
  :.        output the size
  \         swap the count to the top of the stack
  2*        count = count*2
  :00p      save count for later

  <         start of inner loop
    1-      decrement the count
    :!^_    break out of the loop if the count is zero
    \       swap the size to the top of the stack
    :.      output the size
    \       swap the count to the top of the stack
    v       back to the start of the inner loop    

  0g        restore the saved count
  v         back to the start of the main loop

1

जावास्क्रिप्ट, 106 बाइट्स

पहला कोड गोल्फ, सोचा था कि मुझे जाना होगा। (यह बहुत अच्छा नहीं है)।

for(;i[i.length-1]>3;){for(var x=0;x<i.length;x++)i[x]/=2,i[x]%2===1&&i[x]--;i=i.concat(i),console.log(i)}

unminified:

while (input[input.length - 1] > 3) {
    for (var x = 0; x < input.length; x++) {
        input[x] /= 2;
        if (input[x] % 2 === 1) input[x]--;
    }
    input = input.concat(input);
    console.log(input);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.