गुरुत्वाकर्षण प्रकार करें


29

चुनौती

पूर्णांक की एक सूची को देखते हुए, यह दिखाएं कि गुरुत्वाकर्षण कैसे किया जाएगा।

गुरुत्वाकर्षण क्रमबद्ध करें

गुरुत्वाकर्षण प्रकार में, संख्याओं की पंक्तियों के रूप में कल्पना करें। फिर, सब कुछ गिर जाता है, और नई पंक्तियों को स्पष्ट रूप से हल किया जाएगा। आइए एक उदाहरण देखें:

[2, 7, 4, 6]:

**
*******
****
******
-------
**
****
*******
******
-------
**      | 2
****    | 4
******  | 6
******* | 7

ध्यान दें कि यह बहुत अधिक है बस बबल सॉर्ट किया गया है।

सटीक चश्मा

प्रत्येक पुनरावृत्ति पर, शीर्ष पंक्ति से शुरू होकर, प्रत्येक तार को उस पंक्ति से लेते हैं, जिसके नीचे एक तारांकन नहीं है, और इसे पंक्ति से नीचे ले जाएं। जब तक सूची को क्रमबद्ध नहीं किया जाता है, तब तक करते रहें।

इनपुट

इनपुट सख्ती से सकारात्मक पूर्णांक की एक सूची होगी।

उत्पादन

आउटपुट के लिए, आपको प्रत्येक चरण को आउटपुट करना होगा। आप किसी भी दो गैर-व्हाट्सएप प्रिंट करने योग्य ASCII वर्ण चुन सकते हैं, एक "तारांकन" हो सकता है, और एक अलग "डैश" होगा। तारांकन की पंक्तियों को किसी प्रकार (जैसे \nया \r\f) के मानक न्यूलाइन के साथ अलग किया जाना चाहिए । डैश की पंक्ति कम से कम चौड़ी पंक्ति की चौड़ाई होनी चाहिए (अन्यथा आपके तारांकन बहुत नीचे गिरने वाले हैं!)। बहुत नीचे डैश की एक पंक्ति वैकल्पिक है। अंत में एक अनुगामी न्यूलाइन की अनुमति है। प्रत्येक पंक्ति पर अनुगामी रिक्त स्थान की अनुमति है।

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

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

[4, 3, 2, 1]
****
***
**
*
----
***
** *
* *
**
----
**
* *
** *
***
----
*
**
***
****

[6, 4, 2, 5, 3, 1]
******
****
**
*****
***
*
------
****
**  **
****
***
*  **
***
------
**
****
*** **
*  *
***
*****
------
**
***
*  *
*** **
****
*****
------
**
*
***
****
******
*****
------
*
**
***
****
*****
******

[8, 4, 2, 1]
********
****
**
*
--------
****
**  ****
* **
**
--------
**
* **
**  ****
****
--------
*
**
****
********

कृपया अपने परीक्षण के मामलों को सही करने के लिए स्वतंत्र महसूस करें यदि वे गलत हैं, तो मैंने उन्हें हाथ से बनाया :)

नोट: अंत में क्रमबद्ध सूची का उत्पादन न करें। :)

स्कोरिंग

आपके सभी कार्यक्रम एक दूसरे के ऊपर लिखे जाएंगे। आप नहीं चाहेंगे कि आपके कार्यक्रम के टुकड़े नीचे गिरें, इसलिए सुनिश्चित करें कि आपके पास सबसे छोटा कोड है!


1
क्या हम मुद्रण डैश से बच सकते हैं? और मुद्रण तारांकन के बजाय हम 0 और 1s के मैट्रिक्स को प्रिंट कर सकते हैं? मुझे लगता है कि मुद्रण का प्रारूप चुनौती के लिए कुछ नहीं जोड़ता है।
rahnema1

@ rahnema1 1. आप कुछ अन्य गैर-
व्हाट्सएप

मेरा मानना ​​है कि आप अपने आखिरी परीक्षण मामले के 2 पुनरावृत्ति पर एक तारांकन चिह्न को याद कर रहे हैं
MildlyMilquetoast

1
अगर हम नहीं चाहते कि कार्यक्रम के टुकड़े नीचे गिरें, तो क्या इसका मतलब यह है कि हमारे पास कोड की छोटी लाइनों के ऊपर कोड की लंबी लाइनें नहीं हो सकती हैं? : ओ
वैल्यू इंक

1
अरे यही तो मैं अपनी किताबें छाँटता हूँ!
रॉबर्ट फ्रेजर

जवाबों:



4

पर्ल 5 , 118 बाइट्स

कोड + -plaझंडे के 115 बाइट्स ।

\@X[$_]for@F;s%\d+ ?%Y x$&.$"x($#X-$&).$/%ge;while(/Y.{$#X} /s){print$_,_ x$#X;1while s/Y(.{$#X}) /X$1b/s;y/bX/Y /}

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

यह बहुत लंबा लगता है। लेकिन फिर से, रेगेक्स के साथ मल्टीलाइन स्ट्रिंग्स से निपटना आमतौर पर आसान नहीं होता है।

मैं उपयोग कर रहा हूँ Yके बजाय *और _के बजाय -


3

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

b=(1:max(L=input("")))<=L;do;disp(" *-"([b;max(b)+1]+1))until b==(b=imerode(b,k=[1;1])|imdilate(b,k)~=b)

* छवि पैकेज की आवश्यकता है।

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

स्पष्टीकरण:

input = [8 ;4 ;2 ;1]

L = input('');                    %input list
b=(1:max(L))<=L;                  % generate matrix of 0s and 1s as indexes of asterisks 

b =

  1  1  1  1  1  1  1  1
  1  1  1  1  0  0  0  0
  1  1  0  0  0  0  0  0
  1  0  0  0  0  0  0  0
do;
    disp(' *-'([b;max(b)+1]+1))  %display asterisks and dashes

    E = imerode(b,k=[1;1]);      %morphological erosion
    E =

      1  1  1  1  0  0  0  0
      1  1  0  0  0  0  0  0
      1  0  0  0  0  0  0  0
      1  0  0  0  0  0  0  0

    D = imdilate(b,k);           %morphological dilation
    D =

      1  1  1  1  1  1  1  1
      1  1  1  1  1  1  1  1
      1  1  1  1  0  0  0  0
      1  1  0  0  0  0  0  0

    b_temp = E | (D~=b)          %intermediate result
    b_temp =

      1  1  1  1  0  0  0  0
      1  1  0  0  1  1  1  1
      1  0  1  1  0  0  0  0
      1  1  0  0  0  0  0  0

until b==(b=b_temp)              %loop until no change

दुख की बात है कि, शायद फ्रेम-दर-फ्रेम एनीमेशन के लिए कोई बोनस अंक नहीं है: |
quetzalcoatl

अब है - मेरी माफी, टिप्पणी वापस ले ली
TessellatingHeckler

3

पायथन, 203 199 बाइट्स

def k(x):
 m,j=max(x),''.join;d=[*map(lambda i:('*'*i).ljust(m),x)];f=sorted(d);print(*d,sep='\n')
 while d!=f:d=[*map(j,zip(*[x.replace('* ',' *')for x in map(j,zip(*d))]))];print('-'*m,*d,sep='\n')

1
डैश कहाँ हैं?
लीक नन

@LeakyNun तय
ऊरीएल

अपने वर्तमान पायथन 3 के बजाय पायथन 2 का उपयोग करने पर विचार करें, जहां mapतुरंत एक सरणी देता है ताकि आपको इसे अलग करने की आवश्यकता न हो। हालाँकि, '\n'.joinआप इसकी कमी को पूरा करने में मदद करने के लिए एक वैरिएबल असाइन करना चाहते हैं sep='\n', लेकिन यह शायद अभी भी उस तरह से छोटा है।
मूल्य स्याही

@ValueInk आप ज़िप के बारे में कैसे जायेंगे? अनपैकिंग की कमी से कई बाइट्स खर्च हो सकते हैं
उरेल

अजगर 2 आपको एक फंक्शन में अनपैक करने की सुविधा देता है; मैंने केवल सुना है कि एक सरणी में अनपैकिंग कभी-कभी समस्या होती है। केवल मेरे सुझाए गए बदलावों के साथ अजगर 2 कोड 194 बाइट्स है, इसे ऑनलाइन आज़माएं
वैल्यू इंक

2

जाप , 69 62 बाइट्स

-7 बाइट्स @ शुग्गी को धन्यवाद


®ç'x +SpZnUrwÃpQpUrw¹·
V
l o ®V=z d" x""x " z3ÃuW
X¯XbXgJ)Ä ·

जाप सीखना और एक और अधिक जटिल चुनौती का प्रयास करना चाहता था। तारांकन और डैश के बजाय xएस और "एस के साथ आउटपुट ; संख्याओं की एक सरणी के रूप में इनपुट लेता है। मान लें कि छँटाई input.lengthचरणों के भीतर पूरी हो जाएगी ; मुझे ठीक करो अगर ऐसा कभी न हो।

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

व्याख्या

                              // implicit: U = input array
 ®   ç'x +SpZnUrwà pQpUrw¹ ·  // implicit: V = this line
UmZ{Zç'x +SpZnUrw} pQpUrw) qR // ungolfed
UmZ{             }            // U mapped by the function:
    Zç'x                      //   "x" times this item
         +SpZnUrw             //   plus " " times the max of the input array (Urw) minus this value (Z)
                   pQpUrw)    // push " (Q) times the max
                           qR // join with newlines

V                             // implicit: W = this line

 l o ®   V=z d" x""x " z3Ã uW // implicit: X = this line
Ul o mZ{ZV=z d" x""x " z3} uW // ungolfed
Ul o                          // the array of the range [0, U.length)
     mZ{Z                }    // mapped by the no-arg function:
         V=z                  //   set V to itself rotated 90deg
             d" x""x "        //   replace all " x" with "x " to "fall"
                       z3     // rotate back to normal
                           uW // add  W(the original) to the start

X¯XbXgJ)Ä ·                   // implicit: return this line
Xs0,XbXgJ)+1 qR               // ungolfed
Xs0,                          // get the substring of X from 0 to...
    XbXgJ)+1                  // the first index of the last item, plus one
             qR               // join with newlines

1
आपके लिए कुछ त्वरित बचत । मुझे यकीन है कि और भी हैं लेकिन मैं काफी थका हुआ हूं।
झबरा

@ शागी बहुत बहुत धन्यवाद! यह कथन जिस लाइन पर है, उसके अनुसार चर सेट करने का एक बहुत अच्छा उदाहरण है। अगर वह Japt tips पोस्ट पर नहीं है, तो यह होना चाहिए।
जस्टिन मेरिनर

हो गया । यदि आपको सुधार के लिए कोई कमरा दिखाई देता है तो एक टिप्पणी छोड़ दें।
झबरा

@ शैगी अच्छा लग रहा है, और आपके सोने के बैज पर बधाई!
जस्टिन मेरिनर

2

आर , 210 205 बाइट्स

l=scan();w=max(l);h=sum(l|1);a=1:h;p=h+1;m=matrix(' ',w,p);m[,p]='+';for(x in a)m[l[x]:1,x]='*';f=function()write(m,'',w,sep='');f();while(any(i<-m[,a]>m[,a+1])){s=which(i);m[,a][s]=' ';m[,a][s+w]='*';f()}

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

स्टड से सूची में पढ़ता है; के +बजाय पात्रों द्वारा अलग किया गया -। यह बहुत लंबा है जितना मैंने सोचा होगा कि यह होगा। इस तथ्य का लाभ उठाता है कि तुलना का '*'>'+'मूल्यांकन होता है , FALSEलेकिन कम से कम टीआईओ पर (मेरी मशीन पर मैंने जो इस्तेमाल किया वह थोड़ा बेहतर था)।'*'>' 'TRUE'='

मूल उत्तर लिखने के बाद से मैंने जो भी तकनीकें सीखी हैं, उनमें से 5 बाइट्स को प्रबंधित करने के लिए प्रबंधित।

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



1

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

a=>(r="",m=Math.max(...a),b=a.map(n=>Array(m).fill(0).map((_,i)=>i<n)),(k=_=>(b.map(c=>r+=c.map(v=>v?"*":" ").join``.trim()+`
`),r+="-".repeat(m)+`
`,n=0,b.map((r,i)=>(s=b[i+1])&&r.map((c,j)=>s[j]||(n|=s[j]=-(c>0),c>0&&(r[j]=0)))),b=b.map(c=>c.map(n=>n<0?1:n)),n&&k()))(),r)

उदाहरण कोड स्निपेट:

f =

a=>(r="",m=Math.max(...a),b=a.map(n=>Array(m).fill(0).map((_,i)=>i<n)),(k=_=>(b.map(c=>r+=c.map(v=>v?"*":" ").join``.trim()+`
`),r+="-".repeat(m)+`
`,n=0,b.map((r,i)=>(s=b[i+1])&&r.map((c,j)=>s[j]||(n|=s[j]=-(c>0),c>0&&(r[j]=0)))),b=b.map(c=>c.map(n=>n<0?1:n)),n&&k()))(),r)

o.innerText = f([6,4,2,5,3,1])
<pre id=o>

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