প্রোগ্রামিং ধাঁধা এবং টাকো ট্রাক


23

প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ একটি ট্যাকো ট্রাক খুলেছে ! শব্দটি আউট হয়েছে এবং এখন স্ট্যাক এক্সচেঞ্জ নেটওয়ার্ক জুড়ে ব্যবহারকারীরা আমাদের সুস্বাদু, খাঁটি এএসসিআইআই টাকো চেষ্টা করতে আসছেন । সময় মতো প্রতিটি যাতে তাদের অর্ডার পায় তা নিশ্চিত করতে আমাদের আপনার সহায়তা দরকার। খাদ্য ট্রাকের ভিতরে পুরো জায়গা নেই, তাই আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত হওয়ার দরকার।

চাকরির কিছু প্রশিক্ষণের জন্য এখন।

আপনার কাজ

একটি সম্পূর্ণ প্রোগ্রাম লিখুন যা এসটিডিআইএন থেকে একটি আদেশ পড়বে বা এমন কোনও ফাংশন যা ইনপুট হিসাবে একক স্ট্রিং অর্ডার পায়। অর্ডার দেওয়ার জন্য টাকোগুলি STDOUT এ মুদ্রিত হয়।

আদেশ গ্রহণ

গ্রাহকরা আপনাকে তাদের আদেশগুলি STDIN বা ফাংশন আর্গুমেন্টের মাধ্যমে দেবেন। অর্ডারগুলি পছন্দসই টপিংগুলির কমা-বিস্মৃত তালিকা আকারে থাকবে। টপিংগুলি যে ক্রমটিতে দেওয়া হয় সেটিকে প্রথমে নীচে শীর্ষে শীর্ষে এবং শীর্ষে শীর্ষে শীর্ষে টাকোতে প্রদর্শিত হওয়া আদেশকে নির্দেশ করে। আমরা যা রাখি তা এখানে:

  • মটরশুটি
  • ধান
  • শাকসবজি
  • লেটুস
  • guacamole
  • টক ক্রিম
  • সালসা

গ্রাহকরা 1 টিপিংয়ের কম হিসাবে অর্ডার করতে পারেন তবে 5 টিপিংয়ের বেশি নয়। শীর্ষস্থানগুলি পৃথক হওয়ার দরকার নেই।

আপনি ধরে নিতে পারেন যে গ্রাহকরা অর্ডার দেওয়ার আগে মেনুটির সাথে পরিচিত এবং সুতরাং সমস্ত আদেশগুলিতে কেবল আমাদের স্টক থাকা উপাদান থাকবে। অর্থাৎ ইনপুটটি সর্বদা বৈধ থাকবে।

টাকো পরিবেশন করা

গ্রাহকরা দাবি করেন যে তাদের টাকোগুলি STDOUT এ মুদ্রিত করা উচিত। তারা তাদের খাবারের কিছু শীর্ষস্থানীয় বা পিছনের সাদা অংশে ভাল আছেন।

বাজার গবেষণা দেখায় যে প্রত্যেকে শব্দ হিসাবে টাকো খেতে চায় এবং সমস্ত ক্যাপের শব্দগুলি আরও স্বাদযুক্ত। এইভাবে আমরা সমস্ত ক্যাপগুলিতে শূন্যস্থান ছাড়াই শীর্ষস্থানীয় তালিকাবদ্ধ করব।

আর্টসির উপস্থাপনার স্বার্থে, আমরা কেবল টর্টিলায় স্টপ লাগাতে পারি না এবং এটিকে ভাল বলতে পারি না, আমাদের আস্তে আস্তে টপিংগুলি বাম থেকে ডানে রাখতে হবে, প্রয়োজন মতো মোড়ানো এবং পুনরাবৃত্তি করতে হবে। প্রতিটি শীর্ষস্থানীয় নূন্যতম 2 টি লাইন নিজের কাছে পায়। আমরা নমুনা প্ল্যাটারটি পরীক্ষা করে নিলে এগুলি আরও পরিষ্কার হয়ে যাবে।

নমুনা থালা

আসুন কিছু নমুনা আদেশ দেখুন।

গ্রাহক আদেশ: Beans,Veggies,Rice,Lettuce,Sour Cream

আমরা সরবরাহ করি:

   SOUR
  CREAMS
T LETTUC L
O ELETTU I
R RICERI T
T CERICE R
I VEGGIE O
L SVEGGI T
L BEANSB A
 A EANS L
  TORTIL

দেখতে বেশ সুস্বাদু লাগছে, তাই না? টপিংসগুলি একটি নতুন লাইনে 6 টি অক্ষরের পরে মোড়ক এবং 12 টি অক্ষরে ছিন্ন হয়ে প্রতিটি 2 টি লাইন পূরণ করার জন্য পুনরাবৃত্তি করা হয়। প্রথম উপাদানটি তার শীর্ষ লাইনে characters টি অক্ষর পায় তবে এর দ্বিতীয় লাইনে কেবল ৪ টি অক্ষর পাওয়া যায়। এটি নিশ্চিত করে যে এটি টরটিলার ভাঁজগুলিতে ফিট করে। একইভাবে, সর্বশেষ উপাদানটি সর্বদা তার শীর্ষ লাইনে 4 টি এবং এর দ্বিতীয়টিতে 6 টি অক্ষর পায়।

যদি কোনও গ্রাহক একইভাবে দু'একজনকে পরপর অর্পণ করার আদেশ দেয় তবে কী হবে? সেই উপাদানটির ক্রমাগত সমস্ত লাইনের জন্য সেই উপাদানটি মোড়ানো রাখুন।

গ্রাহক আদেশ: Lettuce,Lettuce,Lettuce,Salsa

আমরা সরবরাহ করি:

T  SALS  L
O ASALSA I
R LETTUC T
T ELETTU R
I CELETT O
L UCELET T
L TUCELE A
 A TTUC L
  TORTIL

গ্রাহক আদেশ: Guacamole

T        L
O        I
R        T
T        R
I        O
L  GUAC  T
L AMOLEG A
 A UACA L
  TORTIL

একটি মাত্র উপাদান? শীর্ষে 4 টি অতিরিক্ত অক্ষরের মূল্য দিন।

মাসের কর্মচারী


শুভ রান্না!

উত্তর:


3

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

x=>eval('x=x.split`,`;p=o="";for(i=10;i--;){t=x[1]?x[i/2|0]:x[i>2|0];t!=p?r=(n=0,t?t.replace(s=" ",""):s).toUpperCase().repeat(99):0;m=r.slice(n,n+=p&&i?6:4);p&&i?0:m=s+m+s;p=t;o+=(i>7?t?s+s+m:"":i?"TORTILL"[7-i]+s+m+s+"LITROTA"[7-i]:` A${m}L`)+`\n`}')+"  TORTIL"

ব্যাখ্যা

x=>
  eval('                                          // use eval to save writin return and {}
    x=x.split`,`;                                 // convert ingredients to an array
    p=                                            // p = previous ingredient
      o="";                                       // o = output text
    for(i=10;i--;){                               // loop from top to bottom of taco
      t=x[1]?x[i/2|0]                             // t = ingredient text
        :x[i>2|0];                                // start a line early if 1 ingredient
      t!=p?r=                                     // r = repeated ingredient text
        (n=0,                                     // n = current index in repeated text
        t?t.replace(s=" ",""):s)                  // get the ingredient (or space)
        .toUpperCase().repeat(99):0;              // upper-case and repeat the ingredient
      m=r.slice(n,n+=p&&i?6:4);p&&i?0:m=s+m+s;    // m = text in the middle of the taco
      p=t;                                        // set p to current ingredient

      // Add the appropriate output
      o+=(i>7?t?s+s+m:"":i?"TORTILL"[7-i]+s+m+s+"LITROTA"[7-i]:` A${m}L`)+`\n`

    }                                             // implicit: eval returns o
  ')+"  TORTIL"                                   // return the output text

পরীক্ষা


অনুগ্রহকালীন সময়ের শেষে সংক্ষিপ্ত উত্তর হিসাবে, আপনি +50 এর অনুগ্রহ পান! প্রশ্ন পোস্ট হওয়ার এক সপ্তাহ পরে দু'জনের উত্তর পোস্ট করা উত্তরগুলির মধ্যে সংক্ষিপ্ততম হিসাবে, আপনি লোভিত চেক চিহ্নটি জিতেছেন। চমৎকার কাজ এবং অংশগ্রহণের জন্য ধন্যবাদ! :)
অ্যালেক্স এ।

6

পাইথন 3, 475 বাইট

n=range
s=input().upper().replace(" ","").split(",")[::-1]
s=sum(zip(s,s),tuple())
t=""
p=0
l=len(s)
if l==2:q=s[0];s=[q,q,q];l=3
r=[]
e=" "
f=e*4
d=[f," AL ","L  A","L  T","I  O","T  R","R  T","O  I","T  L",f,f]
for i in n(l):
 h=s[i]
 c=6
 a=""
 if i==0 or i==l-1:c=4
 if t!=h:
  p=0
  t=h
 for x in n(0,c):
  a+=h[p]
  p+=1
  if p==len(h):
   p=0
 if c==4:a=e+a+e
 r+=[a]
r=["TORTIL"]+r[::-1]
for i in n(0,11):
 y=10-i
 x=d[y]
 m=e*6
 if y<=l:m=r[y]
 print(x[:2]+m+x[2:])

এটি সম্ভবত দীর্ঘ দীর্ঘ, তবে আমি পাশাপাশি কিছু পোস্ট করতে পারি!


আমার মনে হয় আপনি প্রতিস্থাপন করতে পারেন r=(r+["TORTIL"])[::-1]সঙ্গে r=["TORTIL"]+r[::-1]range(0,l)হতে পারে range(l)
lirtosiast

1. স্ট্যাক এক্সচেঞ্জ চারটি স্পেসের সাথে ট্যাবগুলিকে প্রতিস্থাপন করে, তাই আপনার স্কোর যেমন হয় তা যাচাই করা শক্ত। এগুলি পুনরায় প্রতিস্থাপনের পরে, আমি 482 গণনা করি 2.. আপনি if l==2:q=s[0];s=[q,q,q];l=3কোনও এক লাইনে উদাহরণস্বরূপ, হোয়াইটস্পেসে সঞ্চয় করতে পারেন । 3. n(l)হিসাবে একই করে n(0,l)
ডেনিস

@ ডেনিস কি এমন কিছু আছে যা আমি # 1 সম্পর্কে করতে পারি?
vpzomtrrfrt

1
আপনি কেবলমাত্র একটি ট্যাব পরিবর্তে একটি একক স্থান ব্যবহার করতে পারেন। পাইথন 3 কোনওভাবে এগুলিকে মিশ্রিত করতে দেয় না।
ডেনিস

ঠিক আছে, আমি আপনার পরামর্শ নিয়েছি এবং এটিকে কিছুটা খাটো করে রেখেছি।
vpzomtrrfrt

4

রুবি, 376 375 368 363 362 বাইট

->a{p='ALLITROT'.chars
s='LATORTIL'.chars
t=['  TORTIL']
c=[*a.split(?,).chunk(&:upcase)]
c.map.with_index{|x,i|n=x[1].size*2
w=x[0].tr(' ','')*9*n
[n+=i==0?1:0,w.sub!(/..../,' \0 ')]if i==c.size-1
w.chars.each_slice(6).take(n).reverse.map{|l|t=["#{p.shift||' '} #{l*''} #{s.shift||' '}"]+t}}
p.map{|x|t=[x+' '*8+s.shift]+t}
t[-2].sub! /(.{6})../,' \1'
t.join$/}

এখনো কাজ চলছে.

(বোনাস: আপনি যে পরিমাণে টপিংস চান তার সাথে কাজ করে, কেবল ৫ নয়) বেশিরভাগ কারণ আমি এই নিয়মটি প্রথমে দেখিনি> _ <)

অবরুদ্ধ সংস্করণ:

#!/usr/bin/env ruby

def make_taco ingredients
    # These three variables make up the tortilla.
    prefixes = 'ALLITROT'.chars
    suffixes = 'LATORTIL'.chars
    taco = ['  TORTIL']
    # .chunk is a Ruby builtin that's *incredibly* useful for this challenge.
    chunks = ingredients.split(',').chunk{|x| x}.to_a
    # Loop through every chunk of equal ingredients.
    chunks.each_with_index do |ingredient, idx|
        # Get the number of lines the group of ingredients should take up.
        count = ingredient[1].length * 2
        # *9 because that's guaranteed to be enough ingredient.
        wrapped = ingredient[0].upcase.sub(' ','') * 9 * count
        # If this is the last element...
        if idx == chunks.length - 1
            # Add spaces strategically to position the top "layer."
            wrapped.sub! /..../, ' \0 '
            # If this is also the first element...
            if idx == 0
                # We need to make one more row.
                count += 1
            end
        end
        # Arrange the ingredient like so, and then for each "layer"...
        wrapped.chars.each_slice(6).take(count).reverse.each do |line|
            # Add it to the taco, along with prefixes/suffixes if they exist.
            taco.push "#{prefixes.shift || ' '} #{line * ''} " +
                "#{suffixes.shift || ' '}"
        end
    end
    # Fill in the rest of the prefixes and suffixes we didn't use.
    prefixes.each do |prefix|
        taco.push prefix + ' ' * 8 + suffixes.shift
    end
    # Fix the "offset" on the second-to-last line.
    taco[1].sub! /(.{6})../, ' \1'
    # Since we've been building the taco bottom-up, reverse, join, and return.
    taco.reverse.join("\n")
end

puts make_taco 'Beans,Veggies,Rice,Lettuce,Sour Cream'
puts
puts make_taco 'Lettuce,Lettuce,Lettuce,Salsa'
puts
puts make_taco 'Guacamole'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.