कुछ नंबरों को अनज़िप करें


21

आपका कार्य एक प्रोग्राम या फ़ंक्शन बनाना है जो 10 लाइनों की लंबाई के साथ एक ज़िप बनाता है। जिपर की प्रत्येक पंक्ति को दो डैश द्वारा दर्शाया गया है --:

--
--
--
--
--
--
--
--
--
--

प्रोग्राम / फ़ंक्शन इनपुट के रूप में एक प्रतिशत (10 से विभाज्य) लेगा, और आउटपुट प्रतिशत से शीर्ष से "अनज़िप्ड" (डैश अलग) होगा, 1-अनुक्रमित, न्यूनतम स्तर को दोहराते हुए, 2 बार दोहराया गया, सभी पूर्व स्तरों 4, 6, 8, ... आदि को दोहराया। कई बार जिपर के निचले भाग को केंद्रित रखते हुए।

उदाहरण

>>10%
-11-
 --
 --
 --
 --
 --
 --
 --
 --
 --

>>50%
-1111111111-
 -22222222-
  -333333-
   -4444-
    -55-
     --
     --
     --
     --
     --

>>100%
-11111111111111111111-
 -222222222222222222-
  -3333333333333333-
   -44444444444444-
    -555555555555-
     -6666666666-
      -77777777-
       -888888-
        -9999-
         -10-

इनपुट (प्रतिशत) को फॉर्मेट किया जा सकता है, लेकिन आपको पसंद है (50%, .5, 50, 5 [शून्य निहित], आदि), और यह हमेशा 0 से 100 की श्रेणी में होगा और 10. से विभाज्य होगा। उदाहरण आपके आउटपुट में संरक्षित होने चाहिए।


क्या इनपुट कभी हो सकता है 0%? क्या हमें 10 से विभाजित इनपुट लेने की अनुमति है? इसके बजाय 50%, प्राप्त करें 5?
DJMcMayhem

1
इनपुट (प्रतिशत) को फॉर्मेट किया जा सकता है लेकिन आपको (50%, .5, 50) पसंद है, क्या यह सिर्फ हो सकता है 5?
लुइस मेन्डो

@DrGreenEggsandIronMan इनपुट 0% हो सकता है, और आप इनपुट को सबसे सुविधाजनक प्रारूप में ले सकते हैं।
एटलसोलॉजिस्ट

@LuisMendo, हाँ, मैं उस प्रश्न को संपादित करूँगा, धन्यवाद।
एटलसोलॉजिस्ट

एक अनुगामी के बजाय एक अग्रणी लाइन ब्रेक स्वीकार किया गया है? क्या पूर्ण पैडिंग स्वीकार की जाती है?
टाइटस

जवाबों:


10

अजगर 2 - 184 151 146 बाइट्स

def r(n):
  n/=10
  for i in range(1,11):
    if n<0:print"%s--"%p
    elif i>9:print" %s-10-"%p
    else:p=" "*~-i;print"%s-%s-"%(p,`i`*2*n);n-=1

अंतिम संख्या थोड़े मेरे साथ गड़बड़ कर दी। अगर मैं बाद में इसे देखूं तो मैं दूसरा बयान निकाल सकता हूं।

संपादित करें: 3 बाइट्स हटाने के लिए Thx से mbomb007। बहुत सारे और बहुत सारे बाइट्स को हटाने में मदद करने के लिए प्रारूपण युक्तियों के लिए धन्यवाद! :-D अभी तक एक और दो बाइट्स के साथ मदद करने के लिए TheBikingViking के लिए धन्यवाद!


1
के i>9बजाय का उपयोग करें i==10और में अंतरिक्ष को हटा दें range(1, 11)
mbomb007

1
अजगर में गोल्फ के लिए छोटी सी टिप: आप अपने बयानों को एक पंक्ति में संपीड़ित करके व्हॉट्सएप से बहुत सारे बाइट्स में कटौती करते हैं। उदाहरण के लिए अंतिम 3 लाइनें बन सकती हैं p=" "*(i-1);print"%s-%s-"%(p,str(i)*2*n);n-=1
१०:१५ पर

धन्यवाद ! यह इस एक के साथ बहुत मदद करता है और मैं निश्चित रूप से भविष्य में गोल्फिंग में ध्यान में रखूंगा
जेरेमी

1
आप (i-1)अंतिम पंक्ति में बदलकर 2 बाइट्स से दाढ़ी बना सकते हैं ~-i। यह ऑपरेटर की पूर्ववर्तीता का लाभ उठाता है और यह तथ्य कि नकार के बाद थोड़ा सा फ्लिप एक घटाना के समान है 1
बाइकिंग बाइकिंग जुएल

उपयोग करने की बात क्या है range(1,11)और फिर (i-1)?
लीक नन

10

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

n=input()
x=0
exec"print' '*x+'-'+`x+1`*(n-x<<1-x/9)+'-';x=min(x+1,n);"*10

execडेनिस की बदौलत दो बाइट्स एक लूप बचाकर ले गई ।

संपादित करें: मैंने थोड़ा अलग तरीका अपनाया और दो और बाइट्स बचाए।


1
आप लूप '-'+`x+1`*(n-x<<1-x/9)+'-'में बदलकर स्ट्रिंग फॉर्मेटिंग का उपयोग करके 2 बाइट्स बचा सकते हैं । exec'-%s-'%`x+1`*(n-x<<1-x/9)
आर। कप

नहीं, मुझे चारों ओर परेंस की आवश्यकता होगी `x+1`*(n-x<<1-x/9)
लिन

4

PowerShell v2 +, 130 120 116 110 बाइट्स

param($n)$i=0;10..1|%{" "*$i+(("-"+("$($i+1)"*([math]::Max($n-10+$_,0))*2)),"-10")[$n-$_-eq9]+"-";$i+=$i-ne$n}

1 संपादित करें - $xचर को समाप्त करने और स्ट्रिंग तैयार करने के तरीके को थोड़ा-थोड़ा बदलकर 10 बाइट्स को गोल करना।
एडिट 2 - इनपुट 4 होता है और $iप्रत्येक लूप की गणना कैसे की जाती है, को रिड्यूस करके एक और 4 बाइट्स को गॉकेट किया जाता है।
3 संपादित करें - ओपी द्वारा सहेजे गए 6 बाइट्स इनपुट की अनुमति देते हैं 0..10, इसलिए 10 से विभाजित करने की आवश्यकता नहीं है।

हैरानी की बात है!

के रूप में इनपुट लेता है 1, 5आदि, में संग्रहीत $n। सहायक $iचर सेट करता है (बहुत दुर्लभ समय में से एक जिसे चर को 0PowerShell में आरंभीकृत करने की आवश्यकता होती है ), और उसके बाद एक पाश शुरू होता 10है 1

प्रत्येक पुनरावृत्ति, हम एक स्ट्रिंग के साथ कई स्ट्रिंग के साथ अपना स्ट्रिंग सेट करते हैं $i, उसके बाद छद्म-त्रिशंकु होता है (... , ...)[]। छद्म-त्रिक के अंदर, हम या तो -कई अंकों के साथ एक स्ट्रिंग का चयन करते हैं (उच्चतर $n-10+$_या 0, 2 से गुणा), या स्ट्रिंग -10- चयन इस पर आधारित है कि क्या हम 10 वीं पुनरावृत्ति पर हैं और हमारा इनपुट था 100। हम इसे अंतिम रूप देते हैं -। उस परिणामी स्ट्रिंग को पाइप लाइन पर रखा जाता है।

अंत में, हम वृद्धि करते हैं $i, और यह वास्तव में मुश्किल था। हम बाइनरी-कास्ट-टू-इंट ट्रिक का उपयोग करके घाव को केवल $iतब तक बढ़ाते हैं जब तक कि यह नहीं पहुंचता है $n, और फिर उसके बाद उसी मूल्य पर रखता है। यह सुनिश्चित करता है कि हम उचित स्तर पर जिपर इंडेंटेशन के "अंत" पर पहुंच गए हैं।

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

उदाहरण

PS C:\Tools\Scripts\golfing> .\unzip-some-numbers.ps1 70
-11111111111111-
 -222222222222-
  -3333333333-
   -44444444-
    -555555-
     -6666-
      -77-
       --
       --
       --

PS C:\Tools\Scripts\golfing> .\unzip-some-numbers.ps1 100
-11111111111111111111-
 -222222222222222222-
  -3333333333333333-
   -44444444444444-
    -555555555555-
     -6666666666-
      -77777777-
       -888888-
        -9999-
         -10-


3

अजगर, 95 84 बाइट्स

मुझे पता नहीं था कि लंबदा कानूनी थे, धन्यवाद @ डीआर ग्रीन एग्स और आयरन मैन

lambda p:'\n'.join(' '*min(p,l)+'-'+(2-(l==9))*(p-l)*str(l+1)+'-'for l in range(10))

1
अरे, पहले महान जवाब! आप इसे 2 बाइट्स को बचाने के लिए सूची बोध से बाहर joinले जा सकते हैं , सीधे जनरेटर ले सकते हैं।
मॉर्गन थ्रैप

2
आप प्रिंटिंग के बजाय लंबोदर कर सकते हैं। मोर्गन के सुझाव के साथ lambda p:'\n'.join(' '*min(p,l)+'-'+(2-(l==9))*(p-l)*str(l+1)+'-'for l in range(10))(84 बाइट्स)
DJMcMayhem


1

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

गर्भित शून्य प्रारूप सवाल में निर्दिष्ट का उपयोग करता है, इसलिए 40%है f[4]अगर गुमनाम समारोह को सौंपा गया है f। यदि पूर्ण प्रतिशत की आवश्यकता है, तो +6 बाइट्स के लिएn/=10;

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

->n{10.times{|i|puts' '*[i,n].min+"-#{i>8?10:(i+1).to_s*2*(n-i)if i<n}-"}}

1

पायथन 3, 98, 90, 87 , 85 बाइट्स।

पहले से विभाजित संख्या 10 से लेती है। मैं शायद कुछ परनों को हटा सकता हूं, लेकिन यह पूरी तरह से गोल्फ के लिए बंद है।

lambda n:'\n'.join(' '*min(i,n)+'-%s-'%(str(i+1)*(n>i>8or(n-i)*2))for i in range(10))

1

हास्केल, 83 बाइट्स

f n=unlines[[[1..y]>>" ",take(2*(n-y))$cycle$show$y+1]>>=(++"-")|y<-min n<$>[0..9]]

क्या है ++"-"?
someonewithpc

1

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

A=>[...Array(10)].map((a,i)=>' '.repeat((d=A<i)?A:i)+('-'+(i+1+'').repeat(d?0:i<9?2*(A-i):1)+'-')).join`
`

के साथ बुलाना

f=A=>[...Array(10)].map((a,i)=>' '.repeat((d=A<i)?A:i)+('-'+(i+1+'').repeat(d?0:i<9?2*(A-i):1)+'-')).join`
`


f(10)
f(5)
f(0)

The program/function ...- स्निपेट नहीं
टाइटस

1
यदि आप \nएक वास्तविक न्यूलाइन के साथ प्रतिस्थापित करते हैं , तो आप एक बाइट बचा सकते हैं।
मामा फन रोल

1
@ टिट्स आप किस बारे में बात कर रहे हैं? यह "स्निपेट" एक फ़ंक्शन है।
NiCk Newman

1
ठीक है। ES7, मैं भूल गया था।
टाइटस

@MamaFunRoll मेरे पास था, लेकिन "" में लपेट नहीं सका और कर सकता था। इसलिए मैं 100% आश्वस्त नहीं था कि मैं स्पष्ट था - मैं इसे :) में जोड़ दूँगा
चार्ली व्यान

1

पायथन 2.7, 113 108 77 बाइट्स

n = इनपुट ()
रेंज में x के लिए (0,10):
v = str (x + 1) * (nx) 2
यदि x
n> 89: v = '10 '
प्रिंट' * * मिनट (x, n) + '-' + v + '-'

पहली बार गोल्फ खेल रहा था। चला जा रहा है, इसे पाने के लिए प्रयास करें <100।
माना जाता है कि इनपुट 1-10 है।

संपादित करें: @LeakyNun के उत्तर (धन्यवाद) से कुछ तरकीबें इस्तेमाल कीं, फिर इसे थोड़ा आगे बढ़ाया और मिला ... मूल रूप से एक ही उत्तर: / 'int` स्ट्रिंग रूपांतरण और 2 - बुलियन के बारे में नहीं जानते थे अगर मैं बयान से छुटकारा पा लूं, जो मुझे पूरे वी चर से छुटकारा दिलाता है। बहुत ही शांत।

मेरा संस्करण:

n=input()
for x in range(10):print' '*min(x,n)+'-'+`x+1`*(n-x)*(2-(x>8))+'-'

अच्छा जवाब, और साइट पर आपका स्वागत है! आप 1 जगह के लिए खरोज स्तर बदलकर 9 बाइट्स से दूर ले सकता है 4. के बजाय,
DJMcMayhem

: असल में, आप इस इस के साथ भी कम कर सकता हैn=input(); for x in range(0,10):print' '*min(x,n)+'-'+('10'if x*n>89 else str(x+1)*(n-x)*2)+'-'
DJMcMayhem


0

पायथन 2.7, 110 99 95 91 बाइट्स:

G=input();i=1;exec"print' '*[~-i,G][i>G]+'-%s-'%[`i`*(2*-~G-i*2),'10'][(i>9)*G>9];i+=1;"*10

एक पूर्ण कार्यक्रम जो समावेशी रेंज में एक पूर्णांक द्वारा इनपुट लेता है [1,10], जहां 10साधन 100%और 1साधन हैं10% । शायद थोड़ा और नीचे गोल्फ हो सकता है।

यह ऑनलाइन की कोशिश करो! (Ideone)


0

PHP 5.3, 92 91 बाइट्स

<?for(;$i<10;$i++)echo'
'.str_pad('-'.str_repeat($i+1,$n>9&&$i>8?:($n-$i)*2).'-',22,' ',2);
  • PHP 5.3 के साथ register_globals=1और short_open_tags=1(और error_reporting=0) के
    साथ cli में कॉल करेंphp-cgi -f <filename> n=<number>
  • 0 से 10 तक की संख्या

  • के साथ वेब ब्राउज़र में कॉल करने के लिए <scriptpath>?n=<number>: prepend<pre>
  • 4.0.1 <पीएचपी <5.3 के लिए: की जगह ?:के साथ ?1:(+1)
  • PHP के लिए = = 5.4: पहले $nको ($n=$_GET[n])(+11) से बदलें

एक फ़ंक्शन के रूप में अनगॉल्फ़्ड (कोई भी PHP> = 4.0.1)

function unzip($n) // $n from 0 to 10
{
    for($i=0;$i<10;$i++)                // $i = line number -1
        $s.='
'.str_pad(                              // pad the result of the following on both sides
            '-'.                            // prepend '-'
            str_repeat($i+1,                // print line number
                ($n>9&&$i>8 ? 1             // in tenth line, if $n is 10: once
                : ($n-$i)*2)                    // else  2*($n-$i) times
            ).'-'                           // append '-'
            , 22,' ', STR_PAD_BOTH);    // pad to 22 width with SPC on both sides
    return $s;
}

परीक्षण सूट

echo'<table border=1><tr>';
for($i=0;$i<11;$i++)echo'<th>',$i*10,'%</th>';
echo'</tr><tr>';
for($i=0;$i<11;$i++)echo'<td><pre>', unzip($i), '</pre></td>';
echo '</table>';

अब यह मेरे लिए नया है: PHP जावास्क्रिप्ट को हरा देती है।
मुझे लगता है कि इस दृष्टिकोण को मिनट के लिए रखा गया है।


STR_PAD_BOTHयह क्या है, K & R C? क्या हम #definePHP में भी चीजें करते हैं? :-)
बिल्ली

@cat: हाँ, PHP में वास्तविक परिभाषित होते हैं। लेकिन केवल स्थिर; सी में पसंद नहीं है
टाइटस


0

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

$k=<>;for(my $i=0;$i++<10;){$s="-"."$i"x($k/10-$i+1);$p=length $s;$l=$l>$p?$l:$p;printf "%${l}s%s\n",$s,scalar reverse $s}

0

आम लिस्प (लिस्पवर्क्स), 314 बाइट्स

(defun f()(let((s(string(read))))(let((n(/(parse-integer(subseq s 0(1-(length s))))10)))(if(> n 0)(progn(dotimes(r n)(progn(dotimes(c r)#1=(format t" "))(format t"-")(if(=(1+ r)10)(format t"10")(dotimes(j(* 2(- n r)))(format t"~S"(1+ r))))(format t"-~%")))(dotimes(d(- 10 n))(dotimes(c n)#1#)(format t"--~%")))))))

ungolded:

    (defun f ()
      (let ((s (string (read))))
        (let ((n (/ (parse-integer (subseq s 0 (1- (length s)))) 10)))
          (if (> n 0)
              (progn
                (dotimes (r n)
                  (progn
                    (dotimes (c r)
                      (format t " "))
                    (format t "-")
                    (if (= (1+ r) 10)
                        (format t "10")
                      (dotimes (j (* 2 (- n r)))
                        (format t "~S" (1+ r))))
                    (format t "-~%")))
                (dotimes (d (- 10 n))
                  (dotimes (c n)
                    (format t " "))
                  (format t "--~%")))))))

उपयोग:

    CL-USER 2515 > (f)
    10%
    -11-
     --
     --
     --
     --
     --
     --
     --
     --
     --
    NIL

    CL-USER 2516 > (f)
    50%
    -1111111111-
     -22222222-
      -333333-
       -4444-
        -55-
         --
         --
         --
         --
         --
    NIL

    CL-USER 2517 > (f)
    100%
    -11111111111111111111-
     -222222222222222222-
      -3333333333333333-
       -44444444444444-
        -555555555555-
         -6666666666-
          -77777777-
           -888888-
            -9999-
             -10-
    NIL

0

एपीएल, 46 बाइट्स

{↑(⍳10){(''↑⍨1-⍺⌊a+1),1⌽'--',⍵⍴⍕⍺}¨10↑2×⌽⍳a←⍵}

तर्क को 10 से विभाजित प्रतिशत के रूप में दिया जाना चाहिए (जो है: एक साधारण पूर्णांक, सीमा में [0,10])।

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