এএসসিআইআই এর গ্রেট পিরামিড


25

ভূমিকা

এটি খ্রিস্টপূর্ব 2600 এবং লোকেরা এখন পিরামিড তৈরি করছে। তারা ইতিমধ্যে পিরামিডের ভিত্তি তৈরি করেছে তবে কীভাবে চালিয়ে যেতে হয় তা জানে না। সুতরাং, তারা আপনাকে সাহায্যের জন্য ডেকেছে।

পিরামিড তৈরির নিয়মগুলি বেশ সহজ। পূর্ববর্তী স্তরের উপরের স্তরের জন্য, আপনাকে যা করতে হবে তা হ'ল ধাপে ধাপে এই গাইড গাইডটি অনুসরণ করুন:

  1. পূর্ববর্তী স্তরটি থেকে প্রান্তগুলি কেটে দিন।

  2. /চরিত্রের উপরে , অবশ্যই একটি \চরিত্র এবং বিপরীতে থাকতে হবে । এটি প্রান্তগুলি বাদে প্রতিটি চরিত্রের জন্য প্রযোজ্য ।

  3. বামতম অক্ষর সর্বদা একটি /এবং ডানদিকের অক্ষর সর্বদা হয় \

আসুন পিরামিডের ভিত্তির উদাহরণ নিই:

//\/\/\\

আমরা প্রান্তগুলি কেটে রেখেছি:

 /\/\/\

আমরা পিছনে স্ল্যাশ এবং তদ্বিপরীত সঙ্গে ফরোয়ার্ড স্ল্যাশ পরিবর্তন:

 \/\/\/

বাম দিকের চরিত্রটি সর্বদা একটি /এবং ডানদিকের চরিত্রটি সর্বদা একটি হয় \, তাই আমরা এটি পরিবর্তন করি:

 //\/\\

আমরা এই স্তরটি পূর্ববর্তী স্তরে রাখি:

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

শীর্ষে পৌঁছানো পর্যন্ত আমরা অবিরত থাকি (যা দেখতে ভাল লাগে /\)। সুতরাং, শেষ পর্যন্ত আমরা পেয়েছি:

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

এটি আপনার আউটপুট প্রয়োজন।

কাজটি

পিরামিডের ভিত্তিতে দেওয়া (3 এর চেয়ে বেশি দৈর্ঘ্যের), পূর্ণ পিরামিড আউটপুট করুন। আপনি নিরাপদে ধরে নিতে পারেন যে বামতম চরিত্রটি /এবং ডানদিকের চরিত্রটি একটি \। এছাড়াও আপনি অনুমান করতে পারেন ভিত্তিতে দৈর্ঘ্য সর্বদা এমনকিপিছনের জায়গাগুলির ব্যবহার অনুমোদিত। নেতৃস্থানীয় স্পেস ব্যবহারের অনুমতি রয়েছে, যতক্ষণ পিরামিড স্থানে থাকে। 1 টি পিছনে এবং 1 টি শীর্ষস্থানীয় নতুন লাইনের ব্যবহার অনুমোদিত allowed

পরীক্ষার মামলা

Input: /\\\
Output:
 /\
/\\\

Input: //\\///\/\
Output:
    /\
   /\\\
  /\///\
 ///\\\/\
//\\///\/\

Input: /////////////\
Output:
      /\
     /\\\
    /////\
   /\\\\\\\
  /////////\
 /\\\\\\\\\\\ 
/////////////\

এটি , তাই সর্বনিম্ন পরিমাণ বাইটের সাথে জমাটি জয়!


আমাকে প্রাথমিক সেলুলার অটোমেটনের স্মরণ করিয়ে দেয় । সম্ভবত এটি একটি আকর্ষণীয় ভবিষ্যতের চ্যালেঞ্জ করতে পারে?
ডক্টরহেকল

উত্তর:


9

জেলি ,28 26 2524 বাইট

QṚ,QyḊḊṖṖj@QµÐĿµJ’⁶ẋ⁸żYṚ

-4 বাইটস ডেনিসকে ধন্যবাদ

ম্যারাডোনা:

QṚ,QyḊḊṖṖj@QµÐĿµJ’⁶ẋ⁸żYṚ - one argument: input()
Q  Q       Q             - set of Left=input(): "/\"
 Ṛ                       - reverse Left: "\/"
  ,                      - Left-pair-Right: ["\/","/\"]
     ḊḊṖṖ                - dequeue Left twice, then pop twice: input()[2:-2]
    y                    - translate Right with mapping in Left: swaps internal slashes
         j@              - join Right with separator Left (@ swaps operands)
            µ  µ         - chain separators to form a 1,1,1 chain of chains
             ÐĿ          - loop while results are unique and collect them
                J        - yield [1,...,len(Left=input())]
                 ’       - decrement: [0,....len(input())-1]
                  ⁶      - " "
                   ẋ     - repeat Left Right times: ["", " ", ...]
                    ⁸ż   - zip Right and Left (⁸ is the link's Left argument):
                                ...pads the loop results
                      Y  - joins Left with line-feeds
                       Ṛ - reverse Left

(লেবু জল দিয়ে পরিবেশন করুন, সেই পিরামিডগুলি তৃষ্ণার্ত শ্রমিকদের জন্য তৈরি করে)

ট্রাইআইটঅনলাইনে আপনার নিজের স্ল্যাশ পিরামিড রান্না করুন , বা সমস্ত প্রস্তাবিত পরামর্শদাতা টেস্টার ব্যবহার করে দেখুন



11

পাইথ - 27 26 বাইট

এটি পুনরাবৃত্তি না হওয়া পর্যন্ত ওপি-তে দেওয়া অপারেশন দ্বারা হ্রাস হয়, যা ফাঁকা লাইনের ক্ষেত্রে।

j_.e+*kdb.ujXtPtPNK"\/")_K

টেস্ট স্যুট


8

পাইথন 2, 78 বাইট

f=lambda s,p='\n':(s[2:]and f('/%s\\'%s.translate('/\\'*128)[2:-2],p+' '))+p+s

একটি পুনরাবৃত্ত ফাংশন যা একটি স্ট্রিং আউটপুট দেয়। পিরামিডের প্রতিটি স্তর উপরে স্তর সহ পুনরাবৃত্ত কলগুলিতে সংযুক্ত করা হয়। উপসর্গটি p, যা একটি নতুন লাইনের চরিত্র হিসাবে শুরু হয় ত্রিভুজটি তৈরি করতে আরও একটি জায়গা অর্জন করে। পরবর্তী স্তরটি স্ল্যাশ অদলবদল করে, প্রথম এবং শেষ দুটি প্রতীক কেটে ফেলা এবং বাম এবং ডান স্ল্যাশের অভ্যন্তরে স্যান্ডউইচ করে উত্পাদিত হয়।

পাইথন 3 করে একটি বাইট সংরক্ষণ করতে পারবেন *99মধ্যে translate, যেমন দৈর্ঘ্য-256 প্রয়োজন বাদ দেয়া হয়।


অনুবাদ ব্যবহার করে চালাক, তবে আমাদের কি প্রিন্ট করতে হবে না?
জোনাথন অ্যালান

@ জোনাথান অ্যালান ডিফল্টরূপে নয় , চ্যালেঞ্জটি যেমন বলেছে ঠিক তেমনভাবে আপনাকে আউটপুট দিতে হবে।
xnor

6

হাস্কেল, 98 94 90 85 বাইট

q=init.tail
s '/'='\\'
s _='/'
t#""=t++"\\\n"
t#l=(' ':t)#(s<$>q l)++t++l#""
("/"#).q

ব্যবহারের উদাহরণ (দ্রষ্টব্য: আক্ষরিক স্ট্রিংয়ের মধ্যে হাস্কেল ব্যাকস্ল্যাশগুলিতে পালাতে হবে \\):

*Main> putStr $ (("/"#).q) "//\\\\///\\/\\"
    /\
   /\\\
  /\///\
 ///\\\/\
//\\///\/\

সাধারণ পুনরাবৃত্তি পদ্ধতির: #ম্যাপিংয়ের মাধ্যমে কাজটি করা হয় sযা অভ্যন্তরীণ উপাদানগুলিতে ফ্লিপ করে /এবং \। অতিরিক্ত প্যারামিটারটি tইনডেনশন লেভেলের উপর নজর রাখে এবং প্রতিটি পুনরাবৃত্তির কলটিতে একটি স্পেস দ্বারা প্রসারিত করা হয়।

নোট: দ্বিতীয় recursive কল #(-> l#"") সরাসরি বেস ক্ষেত্রে জাম্প এবং যোগ করার জন্য অল্প উপায় l, \এবং একটি newline, IE তা পরিবর্ত ++l++"\\\n"

সম্পাদনা: @ xnor 5 বাইট সংরক্ষণ করেছে ধন্যবাদ!


l++"\\\n"মত দেখাচ্ছে l#""
xnor

1
একটি স্ট্রিং দুটি অক্ষর অদলবদল করার একটি উত্সাহব্যঞ্জক উপায় sহল [c|x<-s,c<-"ab",c/=x]
xnor

@ এক্সনর: আমি দ্বিতীয়টি থেকে মুক্তি পেতে অনেক চেষ্টা করেছি ++"\\\n", কিন্তু এটিকে মিস করেছি। ধন্যবাদ!
নিমি

6

পাইথন 3, 108 104 101 94 91 89 88 বাইট

b,f='\/';p=lambda t,n='\n':(t[2:]and p(f+''.join(map({f:b,b:f}.get,t[2:-2]))+b,n+' '))+n+t

-7 বাইট (আমাকে জানতে তাই আমরা ছাপি হবে না!) Xnor ধন্যবাদ
-3 xnor ধন্যবাদ বাইট (ফাংশন ঘোষণা ঘোষণা বাহিরে [d'উহু] গ্রহণ)
-1 ডেনিস করার বাইট ধন্যবাদ (প্রতিস্থাপন f,b='/\\'সঙ্গে b,f='\/')

এটি আদর্শের উপর পরীক্ষা করুন । দ্রষ্টব্য: ইনপুট ডাবল ব্যাকস্ল্যাশের জন্য সামঞ্জস্য করা হয়েছে (এমনকি কাঁচা স্ট্রিংগুলি কাজ করতে পারবেন না যদি তারা একটি বিজোড় সংখ্যায় ব্যাকস্ল্যাশ শেষ করে)।


আপনি f,b='/\\'ফাংশনের বাইরে যৌথভাবে ঘোষণা করতে পারেন ।
xnor

@ এক্সনোর ধন্যবাদ, আমি গণনা করতে পারি না ^^
জোনাথন অ্যালান

5

জাভাস্ক্রিপ্ট (ES6), 91 86 বাইট

f=
(s,t=`
`)=>s[2]?f(`/${s.slice(2,-2).replace(/./g,c=>c>`/`?`/`:`\\`)}\\`,t+` `)+t+s:t+s
;
<input placeholder=Basis oninput=o.textContent=f(this.value)><pre id=o>

আউটপুট একটি শীর্ষস্থানীয় নিউলাইন অক্ষর অন্তর্ভুক্ত।


3

রুবি, 80 বাইট

f=->s{s[-3]>?!&&f[" "+s.gsub(/^( *\/).|.(.$)?/){$1||$2||($&>?/??/:?\\)}]
puts s}

Ungolfed

f = ->s{
  s[-3] > ?! &&
    f[" " + s.gsub(/^( *\/).|.(.$)?/) {
      $1 || $2 || ($& > ?/ ? ?/ : ?\\)
    }]
  puts s
}

এটি আদর্শের উপর দেখুন: http://ideone.com/HN0l0Y


আমার খারাপ, fএটি শরীরে
দেখেনি

3

ব্যাচ, 137 বাইট

@echo off
if %1==/\ goto g
set s=%1
set s=\%s:~2,-2%/
set s=%s:/=-%
set s=%s:\=/%
set s=%s:-=\%
call %0 %s% "%~2 "
:g
echo %~2%1

সুবিধামতভাবে আমার ব্যবহার %~2এবং এর %1অর্থ হল যে আমি বাইটগুলি ব্যয় করতে এড়াচ্ছি setlocal। ব্যাখ্যা: যেহেতু ব্যাচ খালি স্ট্রিংয়ের প্রতিস্থাপনগুলি সম্পাদন করবে না, তাই আমাদের পরবর্তী স্তরটি "ভুল" প্রান্তের সাথে সেটআপ করতে হবে, যা স্ট্রিং প্রতিস্থাপনের অংশ হিসাবে সংশোধন করা হবে।


2

BASH (সেড + সাজানো) 71 66 বাইট

sed -rne':l;p;y|\\|1|;y|/|\\|;y|1|/|;th;:h;s|\\.(.*)./| /\1\\|;tl'|sort   
sed -rne':l;p;y|\\/|1\\|;y|1|/|;th;:h;s|\\.(.*)./| /\1\\|;tl'|sort

স্ট্যান্ডিন থেকে ইনপুট আসে।
উদাহরণ:

echo '//\\' |sed -rne':l;p;y|\\|1|;y|/|\\|;y|1|/|;th;:h;s|\\.(.*)./| /\1\\|;tl'|sort

 /\
/\\\

ব্যাখ্যা:
-n- দমন স্বয়ংক্রিয় মুদ্রণ
:l- এবং tlশাখা ফিরে শুরুতে যদি এই লাইন চেয়ে কিছু অন্যান্য ছিল /\
p - এই লাইন প্রিন্ট
y|\\/|1\\|;y|1|/|প্রতিস্থাপন - \সঙ্গে 1, /সঙ্গে \, এবং তারপর 1সঙ্গে /
th;:h- পরীক্ষা ও একই স্থানে ঝাঁপ, যাতে শুধুমাত্র পরবর্তী প্রতিকল্পন পরীক্ষিত পরার পরে
s|\\.(.*)./| /\1\\|- প্রতিটি পাশের বাইরের দুটি স্ল্যাশ প্রতিস্থাপন করুন {space}/এবং \
sort- এর spaceআগে আসে /যাতে এটি সবকিছুকে সঠিক ক্রমে রাখে


2

05AB1E, 42 38 36 বাইট

Dg;<FÐgÍ©£R®ÍN-£„/\‡'/ðN>׫«R'\«}r»

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

# Read the input to the stack, loop for 0 .. len(input) / 2 - 1
Dg;<F
# Save the layer by pushing a copy on the stack, then push
# len(layer) - 2 to both the top of the stack and register_c
     ÐgÍ©
# a = pop(); b = pop(); push(b[0:a].reverse())
# This removes the last 2 characters and reverses
         £R
# push(register_c - 2 - N)
           ®ÍN-
# a = pop(); b = pop(); push(b[0:a])
# This removes the leading spaces and the first two slashes
               £
# Push "/\" and "\/" to the stack.
                 „/\Â
# Transliterate the slashes
                     ‡
# Add N+1 spaces and a / to the end of the (reversed) current layer
                      '/ðN>׫«
# Reverse the layer and add a \ to the end.
                              R'\«
# End the loop
                                  }
# Reverse the stack and join it with newlines. It is implicitly printed.
                                   r»

(তা উল্লেখ করার জন্য এমিগানাকে ধন্যবাদ DD -> Ðএবং DR -> Â)


Dg;GDðK¦¦¨¨„/\‡'\«R'/«ðN׫R}r»7 বাইট সংরক্ষণ
এমিগানা

এটি আমার কাছে যথেষ্ট আলাদা দেখাচ্ছে যে আমি মনে করি আপনার নিজের উত্তর যুক্ত করা উচিত :)।
অগস্ট

1

যান, 300 276 বাইট

package main
import(."regexp";."os")
func p(b string)string{
s:=MustCompile(`((\s*.)(\S*)(\S))`).FindStringSubmatch(b)
if s[3]!=""{r:=""
for _,c:=range s[3][1:len(s[3])-1]{r+=`\/`[c/64:c/46]}
return p(" "+s[2]+r+`\`)+s[1]+"\n"}
return s[1]+"\n"}
func main(){print(p(Args[1]))}

দীর্ঘ সংস্করণ:

package main

import (
    "regexp"
    "os"
)

func pyramid(base string) string {
    m := regexp.MustCompile(`^((\s*\S)(\S*)(\S))\s*`).FindStringSubmatch(base)
    if len(m[3]) > 0 {
        reversed := ""
        for _, c := range m[3][1:len(m[3]) - 1] {
            if c == '/' {
                reversed += `\`
            } else {
                reversed += `/`
            }
        }
        return pyramid(" " + m[2] + reversed + m[4]) + m[1] + "\n"
    }
    return m[1] + "\n"
}

func main() {
    print(pyramid(os.Args[1]))
}

import(."regexp";."os")2 বাইট সংরক্ষণ করুন
সেফা

@ শেফা ধন্যবাদ, আমি এর থেকে আরও 22 টি বাইট ছিটিয়েছি।
রোল্যান্ড ইলিগ

1

পার্ল, 53 52 বাইট

এর জন্য +1 অন্তর্ভুক্ত -p

STDIN এ ইনপুট দিয়ে চালান, যেমন

./pyramid.pl <<< '//\\///\/\'

pyramid.pl:

#!/usr/bin/perl -p
s%^( *)/.(.*)..%"$1 \\$2/
"=~y|\\/|/\\|r.$&%e&&redo

1

05 এ বি 1 ই , 31 বাইট

Dg;GDðK¦¦¨¨„/\‡'\«R'/«ðN׫R}r»

ব্যাখ্যা

Dg;G                        }    # for N in [1..len(input)/2-1]
    D                            # make a copy of previous layer
     ðK                          # remove all spaces
       ¦¦¨¨                      # remove first 2 and last 2 chars
           „/\‡                 # replace '/' with '\' and vice versa
                '\«              # add a backslash at the end
                   R             # reverse
                    '/«          # ad a slash at the end
                       ðN׫      # add N spaces
                           R     # reverse back
                             r»  # reverse stack and join on newline
                                 # implicitly print

এটি অনলাইনে চেষ্টা করুন


1

> <> , 186 179 175 171 বাইট

0&v &+1&<
  >i:0)?^~&2,:&v
v'/'~v?:-1<  }0<
o    >84*o^-$;?=@:&:&}:~<
\&::&{:@+$}1+[{l1-$-2*:&1+{
>}1-:?!v$:l2%?!vo
^o'/'v?~e  (*5a<
^o'\'< &   >~]a'\'oo{1+:^
  {$1- >:?!^

ওহ মানুষ এটি অবশ্যই আমার বৃহত্তম> <> উত্তর এখনও।

এখনও কিছু গল্ফিং করা বাকি আছে (নীচের অঞ্চলটি বেশ অপ্রয়োজনীয়)

এটি অনলাইনে চেষ্টা করুন



0

সি #, 250 বাইট

s=>{int j=s.Length/2,i=0;var l=new string[j];l[j-1]=s;while(++i<j){var n=l[j-i].Trim().Substring(1,l[j-i].Trim().Length-2);l[j-i-1]=new string(' ',i)+"/"+n.Replace("/","#").Replace(@"\","/").Replace("#",@"\").Substring(1,n.Length-2)+@"\";}return l;};

স্পষ্টতই আরও গল্ফ করা যেতে পারে তবে আমার মস্তিষ্ক মরে গেছে তাই আমি মুহুর্তের মতোই এটি ছেড়ে দেওয়ার সিদ্ধান্ত নিয়েছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.