एक सीढ़ी और स्लाइड बनाएं


24

आपका कार्य एक प्रोग्राम या फ़ंक्शन बनाना है जो इनपुट के रूप में लेता है, n1 और 25 के बीच एक प्राकृतिक संख्या ( ) (समावेशी) और एक स्लाइड के सममितीय प्रतिनिधित्व को प्रिंट करता है और nसंख्याओं के साथ सीढ़ी ।

सीढ़ी और स्लाइड विनिर्देशों

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

Slide              Blank space count
    /----/\        1234/----/\ 
   /----/  \       123/----/12\ 
  /----/    \      12/----/1234\ 
 /----/ \    \     1/----/1\1234\ 
/----/   \    \    /----/123\1234\

उदाहरण

>>1
/----/\

>>3
  /----/\ 
 /----/  \ 
/----/    \ 

>>4
   /----/\ 
  /----/  \ 
 /----/    \ 
/----/ \    \ 

>>10
         /----/\ 
        /----/  \ 
       /----/    \ 
      /----/ \    \ 
     /----/   \    \ 
    /----/     \    \ 
   /----/       \    \ 
  /----/         \    \ 
 /----/           \    \ 
/----/             \    \ 

यह कोड-गोल्फ है, इसलिए सबसे कम बाइट गिनती जीत के साथ उत्तर।

नोट: सफेद स्थान को पीछे छोड़ना आउटपुट में स्वीकार्य है, जब तक कि यह लाइन की लंबाई से अधिक न हो।


14
आप उस स्लाइड के अंत में अपने पैर तोड़ देंगे!
१२:०२ पर

13
@ जानिए कि क्या होगा ... घातक।
वेन

7
यदि आप नीचे एक पूल खींचते हैं तो @ आपके लिए बोनस अंक निर्धारित करें;)
एटलसोलॉजिस्ट

8
@atlasologist खून का एक पूल?
नील

माफी अगर यह एक गूंगा सवाल है, लेकिन नीचे दिए गए जवाबों में से कुछ (पायथन, जावास्क्रिप्ट) एक फ़ंक्शन को परिभाषित करता है जो इसे प्रिंट करने के बजाय एक स्ट्रिंग देता है। क्या वह कोषेर है?
जॉर्डन

जवाबों:


17

रेटिना , 81 72 52 बाइट्स

बाइट गिनती आईएसओ 8859-1 एन्कोडिंग मानती है।

.+
$* /\    \
^.

+` /(.+)$
$&¶$%`/  $1
/.{5}
/----/

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

व्याख्या

कार्यक्रम में चार चरण होते हैं, जिनमें से सभी regex प्रतिस्थापन हैं (रेटिना-विशिष्ट विशेषताओं के एक जोड़े के साथ)। मैं 5स्पष्टीकरण के लिए एक उदाहरण के रूप में इनपुट का उपयोग करूंगा ।

चरण 1

.+
$* /\    \

यह इनपुट nको nरिक्त स्थान में बदल देता है /\ \जिसके बाद सीढ़ी / स्लाइड के ऊपर बनेगा:

     /\    \

अभी के लिए, हम केवल स्लाइड को पूर्ण रूप से दिखाएंगे और सीढ़ी को केवल उसके बाएं हाथ से दर्शाएंगे /

चरण 2

^.

दुर्भाग्य से, nरिक्त स्थान हमारी ज़रूरत से ज़्यादा हैं, इसलिए हम पहले वर्ण को फिर से हटाते हैं। अब हम मिल गए हैं:

    /\    \

स्टेज 3

+` /(.+)$
$&¶$%`/  $1

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

+रेटिना बताता है एक पाश में इस स्तर को दोहराने के लिए जब तक उत्पादन बदल रहा बंद हो जाता है (इस मामले में, क्योंकि रेगुलर एक्सप्रेशन मिलान का बंद हो जाता है)। रेगेक्स के लिए ही, हम केवल /अंतिम पंक्ति और उसके बाद की सभी चीजों से मेल खाते हैं और हम इसके सामने एक स्थान से भी मेल खाते हैं, जिसका अर्थ यह है कि यह अब /पहले कॉलम तक पहुंचने के बाद मेल नहीं खा सकता है ।

यहाँ हम इसके साथ प्रतिस्थापित करते हैं:

 $&    The match itself. We don't want to remove the line we already have.
 ¶     A linefeed, because we want to append a new line.
 $%`   This is a very recent addition to Retina: it's like the normal $` but
      is bounded by linefeeds. That means this inserts everything in front
      of the match which is on the same line. In particular this one space
      less than the indentation of the matched line, hence we are shifting
      the / one column left.
 /     A literal /, representing the left edge of the ladder.
>  <   Two spaces, so that we can shift the slide one column right.
 $1    Capturing group 1 which contains the slide and its separation from
      the ladder.

इसलिए प्रत्येक पुनरावृत्ति में, यह स्ट्रिंग में एक पंक्ति जोड़ता है, जब तक कि हम इसके साथ समाप्त नहीं होते हैं:

    /\    \
   /  \    \
  /    \    \
 /      \    \
/        \    \

स्टेज 4

/.{5}
/----/

जो कुछ बचा है वह सीढ़ी सही हो रहा है। यह वास्तव में सरल है, हम सिर्फ /और अगले 5 अक्षरों से मेल खाते हैं और सही सीढ़ी प्रतिनिधित्व सम्मिलित करते हैं, जिससे स्लाइड या रिक्त स्थान को ओवरराइड किया जा सकता है:

    /----/\
   /----/  \
  /----/    \
 /----/ \    \
/----/   \    \

9

वी , 38, 37, 36, 34, 33, 32, 31, 30 29 बाइट्स

Àé r\2é/4é-òhYpX$2P^ò3GEòjlr\

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

मैं ओसबी के साथ पकड़ सकता हूं। ओसबी की तुलना में एक बाइट कम है। \o/2sable के साथ बंधे! एक बाइट छोटी!

अन्य खबरों में, यह निश्चित रूप से अब तक का सबसे लंबा स्ट्राइकथ्रू हैडर है।

स्पष्टीकरण:

Àé              "Insert 'arg1' spaces
   r\           "Turn the last one into a '\'
     2é/        "Insert 2 '/'
        4é-     "Insert 4 '-'

ò        ò      "Recursivly:
 h              "  Move one to the left
  Yp            "  Duplicate this line
    X           "  Delete one space from the left
     $2P        "  Paste two spaces at the end of this line
        ^       "  Move back to the beginning of this line.

यह तब तक चलेगा जब तक कि कोई त्रुटि नहीं होती है, जो "लेफ्ट लेफ्ट" कमांड ('h') के लिए धन्यवाद, 'arg1' बार होगा।

अब हमें केवल आंतरिक पैर जोड़ने की जरूरत है

3GE             "Move to the second slash of line 3
   ò    ò       "Recursively: (The second 'ò' is implicit)
    jl          "  Move down and to the right
      r\        "  And replace the character under the cursor with a '\'

गैर-प्रतिस्पर्धी संस्करण (28 बाइट्स)


8

पायथ, 39 35 बाइट्स

VQ++*dt-QN"/----/">+*+ddN"\    \\"5

स्पष्टीकरण:

VQ                                  # Interate over 0 -> Q-1 (Q is the input)
  +                                 # Concatenate the 2 halfs of the slide
   +                                # Concatenate the whitespace block and the ladder
    *d                              # Multiply d (whitespace) by this number \/
      t-QN                          # Calculate the amount of spaces before : input - step of the iterarion -1
          "/----/"                  # Ladder
                  >               5 # Remove the first 5 chars  from the string generated in the following lines 
                   +                # Concatenate the whitespace block and the slide
                    *+ddN           # Multiply "+dd" (2 whitespace) by the step of the iterarion to generate the space between the ladder and the slide
                         "\    \\"  # Slide

यहाँ परीक्षण करें


8

2sable , 40 36 32 30 बाइट्स

हम्म्, वी भयानक रूप से करीब आ रहा है ...

F¹N-<ð×…/--«ðð«N×…\  ««5F¦}¶

CP-1252 एन्कोडिंग का उपयोग करता है । एक 05AB1E संगत संस्करण का प्रयास करें!


: और लड़ाई प्रबल होती जा codegolf.stackexchange.com/a/85985/31716 :P
DJMcMayhem

@DrGreenEggsandIronMan हम्म्म !!?!?
अदनान

घर पहुंचने पर एक बार और बंद हो जाता है। इसके अलावा, मैं भाषाओं पर स्विच नहीं कर रहा हूं । : पी
DJMcMayhem

7

PowerShell v2 +, 99 90 82 बाइट्स

param($n)1..$n|%{" "*($n-$_)+"/----/"+-join(" "*($_+$i++)+"\    \")[6..(6+$_+$i)]}

इनपुट लेता है $n, से एक पाश शुरू होता है 1करने के लिए $nके साथ |%{...}। प्रत्येक पुनरावृत्ति, हम एक स्ट्रिंग का निर्माण कर रहे हैं। हम रिक्त स्थान " "*($n-$_)और सीढ़ी की उचित संख्या के साथ शुरू करते हैं "/----/"

इसके लिए, हम एक और स्ट्रिंग जोड़ते हैं जो कटा हुआ है [...]और -joinएक साथ वापस एड करता है। दूसरी स्ट्रिंग स्लाइड है, और हम मानते हैं कि पूरी स्लाइड हमेशा दिखाई देती है। यह स्लाइड शुरू होने से पहले रिक्त स्थान की संख्या है " "*($_+$i++), इसके बाद स्लाइड ही होगी "\ \"। यह "रिक्त स्थान प्लस स्लाइड" के भाग के रूप में गणना की गई सीमा द्वारा कटा हुआ है जो सीढ़ी द्वारा आंशिक रूप से छिपा हुआ है।

उदाहरण

PS C:\Tools\Scripts\golfing> .\draw-a-ladder-and-slide.ps1 7
      /----/\
     /----/  \
    /----/    \
   /----/ \    \
  /----/   \    \
 /----/     \    \
/----/       \    \

PS C:\Tools\Scripts\golfing> .\draw-a-ladder-and-slide.ps1 15
              /----/\
             /----/  \
            /----/    \
           /----/ \    \
          /----/   \    \
         /----/     \    \
        /----/       \    \
       /----/         \    \
      /----/           \    \
     /----/             \    \
    /----/               \    \
   /----/                 \    \
  /----/                   \    \
 /----/                     \    \
/----/                       \    \

7
+1 क्योंकि आपकी निर्देशिका में स्लैश परीक्षण आउटपुट में स्लैश के साथ ऊपर है। :D
DJMcMayhem

तुंहारे \golfing फोल्डर बहुत व्यवस्थित होना चाहिए._.
कॉनर ओ'ब्रायन

6

पायथन 2 - 79 76 75 बाइट्स

x=input()
for i in range(x):print(x-i)*' '+'/----/'+(i*'  '+'\\    \\')[5:]

धन्यवाद "मुझे अयोग्य घोषित करने के लिए" ग्रुस्सकोविआक के लिए धन्यवाद क्योंकि मेरा प्रोग्राम प्रिंट वास्तव में 3 बाइट्स बचा था! 1 और बाइट बचाने के लिए E by ᴏʟғᴇʀ Gᴏʟғᴇʀ के लिए भी धन्यवाद!


अच्छा! वैसे, लंबोदर ठीक था, मुझे लगता है, कड़ाई से बोलने के बाद यह एक प्रकार का कार्य है। लैम्ब्डा का उपयोग करके आप एक नई रेखा और एक स्थान बचा सकते हैं :-)
ह्यूबर्ट ग्रौस्सकोविआक

रुको, मैंने वास्तव में इसे लैम्ब्डा के साथ आजमाया और इसे काम नहीं कर पाया। यह प्रिंट का bc है, मुझे लगता है?
ह्यूबर्ट ग्रेज्सकोविआक

@HubertGrzeskowiak अच्छी तरह से यह चुनौती विनिर्देशों पर निर्भर करता है। यदि प्रश्न किसी ऐसे कार्यक्रम / समारोह के लिए पूछा जाता है जो किसी स्लाइड का एक स्ट्रिंग प्रतिनिधित्व लौटाता है, तो मेरे दोनों उत्तर मान्य होंगे। चूंकि यह "प्रिंट" निर्दिष्ट करता है, जैसा कि आपने बताया है, मुझे या तो लैम्ब्डा फ़ंक्शन को नाम देने और उस पर कॉल प्रिंट करने की आवश्यकता होगी, या मैंने जो ऊपर किया था वह कम था।
काउबुनघोल

ऐनक यह नहीं बताती है कि फ़ंक्शन को नाम दिया जाना है, या बुलाया जाना चाहिए; ;-)
ह्यूबर्ट ग्रौस्सकोविआक

इसे एक पूर्ण कार्यक्रम में बदलें: दूसरी पंक्ति पर इंडेंटेशन को हटाएं और उसके def f(x):साथ बदलें x=input()। यह आपको 1 बाइट बचाता है।
को आउटगोल्फ जूल

6

विम, 71 कीस्ट्रोक

यह ऐसा करने का एक बेवकूफ तरीका है, लेकिन यह थोड़ा मजेदार है। इनपुट एक पाठ फ़ाइल के रूप में एक पूर्णांक युक्त एक पंक्ति के साथ दिया जाता है। यह संभवत: काफी गोल्फ है, लेकिन यह अभी के लिए करेंगे ( संपादित करें: अनुरोध पर नियंत्रण वर्णों की स्विच्ड शैली )

A@qyyPgg<c-v><c-v>GkI <c-v><esc>G$i  <c-v><esc><esc>
Tq"qDI/----/\^[lD@"ddh<c-v>god:%s/     \\/\\    \\<cr>

<c-v>, <esc>और <cr>सभी व्यक्तिगत कीस्ट्रोक्स हैं; ctrl + v, बचना, और गाड़ी क्रमशः लौटना (दर्ज करना)। सही शाब्दिक के साथ सरल संस्करण को पचाने के लिए, यहाँ फ़ाइल ladder.keysरन है xxd:

00000000: 4140 7179 7950 6767 1616 476b 4920 161b  A@qyyPgg..GkI ..
00000010: 4724 6920 2016 1b1b 5471 2271 4449 2f2d  G$i  ...Tq"qDI/-
00000020: 2d2d 2d2f 5c1b 6c44 4022 6464 6816 676f  ---/\.lD@"ddh.go
00000030: 643a 2573 2f20 2020 2020 5c5c 2f5c 5c20  d:%s/     \\/\\
00000040: 2020 205c 5c0d 0d0a                         \\...

इसे आज़माने के लिए (उपयुक्त उपकरणों के साथ एक निक्स को मानते हुए) ऊपर ले जाएं, इसे माध्यम से चलाएं xxd -rऔर फ़ाइल में डालें ladder.keysladder.txtइसमें पूर्णांक के साथ एक फ़ाइल बनाएँ । फिर करो:

vim -s ladder.keys -u NONE ladder.txt

हम आम तौर पर लिखने ^Vके रूप में <c-v>यहाँ।
लीक नन

@ जोर्डन वे प्रत्येक कीस्ट्रोके हैं, एक कीस्ट्रोक के रूप में संशोधित कुंजी (शिफ्ट, सीटीएल या किसी अन्य कुंजी के साथ ऊंचाई) की गिनती करते हैं। कीस्ट्रोक्स Ctrl + v हैं, बचकर प्रवेश करें।
अल्गमीर जुएल

@algmyr मेरी गलती। मैंने पहले आपके जवाब को गलत बताया।
जॉर्डन

6

बैश, 61

for((;i<$1;)){ printf "%$[$1+i]s\    \^M%$[$1-++i]s/----/\n";}

जहां ^Mएक शाब्दिक गाड़ी वापसी है

$ ./ladder 1
/----/\
$ ./ladder 4
   /----/\
  /----/  \
 /----/    \
/----/ \    \
$ ./ladder 10
         /----/\
        /----/  \
       /----/    \
      /----/ \    \
     /----/   \    \
    /----/     \    \
   /----/       \    \
  /----/         \    \
 /----/           \    \
/----/             \    \

मुझे लगता है कि आपके पास /चौथी पंक्ति में और `\ 'के बीच एक एकल स्थान होना चाहिए , और स्लाइड किनारों के बीच 1 कम स्थान होना चाहिए ।
लेब्रुग जूल

यह 4 डैश होना चाहिए, न कि 5.
अल्ग्मेयर

@algmyr आपको धन्यवाद कि 2 बाइट्स बचाता है
izabera

5

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

f=
n=>" ".repeat(n).replace(/./g,"$'/$`$`\\    \\\n").replace(/\/...../g,"/----/")
;
<input type=number min=0 oninput=o.textContent=f(this.value)><pre id=o>

nरिक्त स्थान की एक स्ट्रिंग लेकर काम करता है , फिर एक समर्थन के साथ स्लाइड प्राप्त करने के लिए कुछ विदेशी प्रतिस्थापन कर रहा है, फिर समर्थन को सीढ़ी के साथ बदल रहा है।


4

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

->n{n.times{|i|puts"%*s\\    \\\r%*s----/"% [n+i,"",n-i,?/]}}

Ungolfed

->(num_rows) {
  num_rows.times {|row_idx|
    puts "%*s\\    \\\r%*s----/" % [ num_rows + row_idx, "", num_rows - row_idx, "/" ]
  }
}

मैं प्रारूप स्ट्रिंग के लिए '%*s\ \^M%*s----/'(जहां ^Mशाब्दिक गाड़ी वापसी है) का उपयोग करके दो बाइट्स बचा सकता था , लेकिन फिर रूबी चेतावनी " warning: encountered \r in middle of line, treated as a mere space" प्रिंट करती है । ¯ \ _ (ツ) _ / ¯

पिछला समाधान (64 बाइट्स)

->n{n.times{|i|puts" "*(n+i)+"\\    \\\r"+" "*(n-i-1)+"/----/"}}

3

बैच, 194 बाइट्स

@echo off
for /l %%i in (1,1,%1)do call:l %1 %%i
exit/b
:l
set s=\    \
for /l %%j in (1,1,%2)do call set s=  %%s%%
set s=/----/%s:~7%
for /l %%j in (%2,1,%1)do call set s= %%s%%
echo%s%

उचित रूप से सीधा होने के लिए निकला: स्लाइड को इंडेंट करें, पहले 7 अक्षरों को हटा दें, सीढ़ी को इंडेंट करें, अग्रणी स्थान को हटा दें। इस अंतिम बिट में हालांकि थोड़ी सी चालाकी शामिल है!


2

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

c->{for(int i=0;i<c;i++)System.out.format("%"+(5+c-i)+"s%"+(i<3?i*2+1:2*(i-2))+"s%5s\n","/----/","\\",i<3?"":"\\");};

दुर्भाग्य से, आप जावा में डुप्लिकेट तार को [आसानी से] नहीं कर सकते हैं, इसलिए मैं प्रारूप फ़ंक्शन का दुरुपयोग करता हूं।


2

स्काला, 95 बाइट्स

def l(n:Int)=for(i<- 0 to n-1){println(" "*(n-i-1)+"/----/"+("  "*i+"\\    \\").substring(5))}

2

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

a n=[1..n]>>" "
f n=[1..n]>>=(\i->a(n-i)++"/----/"++drop 7(a(2*i)++"\\    \\\n"))

do i<-[1..n];a(n-i)++"/----/"++drop 7(a(2*i)++"\\ \\\n")दो बाइट बचाता है।
लिन

0

ईगल , नॉनकंपेटिंग , 386 बाइट्स

init .
define @ curry push .
define ~ curry exec .--func
alias $ strap
alias ' string
set n set m cast number arg number 0
set s empty string
label l
@ get n
set n ~ dec
@ space
@ get n
$ ~ repeat
$ ' /----/
@ space
@ get m
@ get n
@ ~ sub
@ ~ dec
@ number 2
@ ~ mul
$ ~ repeat
$ ' \
$ newline
@ get n
@ number 0
if ~ more
goto l
@ $
@ regex gm '   ( {4})(?=.$)
@ '  \$1
print ~ replace

मैंने आधिकारिक तौर पर सबसे अधिक मौखिक भाषा को संभव बनाया है।मैंने टिप्पणी जेस्ट में और कटाक्ष में की। कृपया शांत हो जाएं। शीर्षलेख में लिंक किए गए गितुब रेपो में चलाने के तरीके पर निर्देश।

Ungolfed

init .
set n set m cast number arg number 0
set s empty string
label loop
    push . get n
    set n exec .--func dec
    push . space
    push . get n
    strap exec .--func repeat
    strap string /----/
    push . space
    push . get m
    push . get n
    push . exec .--func sub
    push . exec .--func dec
    push . number 2
    push . exec .--func mul
    strap exec .--func repeat
    strap string \
    strap newline
    push . get n
    push . number 0
    if exec .--func more
        goto loop

push . strap
push . regex gm string   ( {4})(?=.$)
push . string  \$1
print exec .--func replace

1
" मैंने आधिकारिक तौर पर सबसे अधिक वर्बोज़ भाषा को संभव बनाया है। " क्षमा करें, क्या आपने AppleScript के बारे में सुना है?
Addison Crump

@VTCAKAVSMoACE ठीक है, चलो एक सौदा करते हैं। आप इस प्रश्न का उत्तर अप्प्लीस्क्रिप्ट में दें। फिर मैं आपको बताऊंगा कि यह अधिक क्रिया है।
कॉनर ओ'ब्रायन

4
यदि आप इसे ungolf कर सकते हैं तो यह पर्याप्त नहीं है।
नील

@ वीटीसी, टिम्मीड और नील: गीज़। अब आप खुश हैं?
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ हम स्पष्ट रूप से मजाक कर रहे हैं, योग्य
एडिसन क्रम्प
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.