থিয়েটার আসন


12

কার্য

একটি থিয়েটার 10 সারি, লেবেল করা হয়েছে Aথেকে Jফিরে সামনে থেকে, এবং প্রতিটি সারিতে 15 আসন, 15 1 নম্বর বাঁ দিক থেকে ডানদিকে।

প্রোগ্রামটি সেরা আসনগুলি বেছে নেওয়ার জন্য নিম্নলিখিত বিধিগুলি ব্যবহার করে।

  • বিধি 1: একটি বুকিংয়ের সমস্ত আসন একে অপরের পাশে একই সারিতে থাকতে হবে।
  • বিধি 2: আসনগুলি অবশ্যই যথাসম্ভব সামনের কাছাকাছি হতে হবে, তারপরে যতটা সম্ভব বামের কাছাকাছি হওয়া উচিত (সর্বনিম্ন চিঠি, তারপরে সর্বনিম্ন সংখ্যা)

একটি ফাংশন লিখুন যা পূর্ণসংখ্যার ইনপুট ( n) হিসাবে চেয়েছিল টিকিটের সংখ্যা নেয় এবং দৈর্ঘ্যের তালিকায় সেরা আসনগুলিকে আউটপুট দেয় n

আপনার প্রোগ্রামটি করা উচিত:

  • -11> ইনপুট বা ইনপুট> 15 * আউটপুট
  • -1আসনগুলি উপলভ্য না হলে আউটপুট *
  • B(n)ব্যবহারকারী একটি পছন্দসই সংখ্যক আসন ইনপুট করতে ব্যবহার করতে পারেন এমন একটি ফাংশন রয়েছে ।

* তালিকা -1 এটি সহজ করে যদি আপনি আউটপুট করতে পারেন

উদাহরণ

ইনপুট / আউটপুট

কল করা হচ্ছে B(5)একটি নতুন অ্যারে ফিরে উচিত [A1, A2, A3, A4, A5]
কলিং B(2)পর যে তারপর ফিরে যাওয়া উচিত [A6, A7]
কলিং B(10)পর যে তারপর ফিরে যাওয়া উচিত [B1, B2, ... B9, B10]
কলিং B(-1)সবসময় ফেরত পাঠাবেন-1

আন-গল্ফড সলিউশন পাইথন

Theatre = [ [False] * 16 ] * 11

def B(n):
    if 0 <= n <= 15:         
        for i in range(10):
            for j in range(15-n+1):
                try:
                    if not Theatre[i][j]:
                        if not Theatre[i][j + n]:
                            row = i
                            start = j
                            List = []
                            for q in range(n):
                                List.append(chr(row + 65) + str(start + q + 1))
                                Theatre[row][start + q] = True
                            return List
                except:
                    break
    return -1

1
"হার্ডকোডটি কি দ্বি মাত্রিক অ্যারেতে আসনগুলির তালিকা রয়েছে" প্রয়োজনীয়? এটি ছাড়া এটি করার অসংখ্য উপায় রয়েছে; প্রয়োজনীয়তা সমাধানগুলি সীমাবদ্ধ করে।
জাস্টিন

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

6
এমনকি "দ্বি মাত্রিক অ্যারেতে আসনের তালিকা" কেন উল্লেখ করবেন? এটি বাস্তবায়নের বিশদ মত শোনাচ্ছে এবং যদি কেউ এমন একটি প্রোগ্রাম তৈরি করে যা কোনও অ্যারে ব্যবহার না করে প্রয়োজনীয় আউটপুটটি সন্তুষ্ট করে, তাতে কোনও সমস্যা হবে না।
গ্রেগ হিউগিল

2
ইনপুট 0 হলে কী হবে?
edc65

1
@ এডসি 65 আমি সর্বদা আমার অস্তিত্বহীন সিনেমা থিয়েটার পৃষ্ঠপোষকদের থিয়েটারের সেরা স্পটে বসে থাকার প্রয়োজনে অন্য পৃষ্ঠপোষকের কোলে বসিয়ে রাখি। তারা কখনই লক্ষ্য করে না।
অ্যাডাম ডেভিস

উত্তর:


4

জাভাস্ক্রিপ্ট - 172

ফাংশন নিজেই 172:

//build persistent seats
m=[];
for(i=10;i--;){m[i]={r:String.fromCharCode(i+65),s:[]};for(j=0;j<15;j++)m[i].s.push(j+1);}

function b(z){for(i=0;i<m.length;i++)for(j=0,u=m[i].s.length;o=[],j<u;j++)if(u>=z&z>0){for(m[i].s=m[i].s.slice(z),p=m[i].s[0]||16;o[--z]=m[i].r+--p,z;);return o;}return-1;}

ইনপুট:

console.log(b(-1));
console.log(b(0));
console.log(b(4));
console.log(b(15));
console.log(b(1));
console.log(b(20));

আউটপুট:

-1
-1
[ 'A1', 'A2', 'A3', 'A4' ]
[ 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'B12', 'B13', 'B14', 'B15' ]
[ 'A5' ]
-1

4

জাভাস্ক্রিপ্ট ( ES6 ) - 130 127 107 101 98

B=n=>(a=>{for(;n>0&a<9;)if((b=~~B[++a]+n)<16)for(B[a]=b;n--;)c[n]='ABCDEFGHIJ'[a]+b--})(c=[-1])||c

ডেমো এখানে: http://jsfiddle.net/tBu5G/

@ Edc65 থেকে নেওয়া কিছু ধারণা


c [B [a] = b] c এর পরিবর্তে, B [a] = b চতুর, তবে এন =
0- এ

পছন্দ করেছেন আমি এখন মামলাটি পরিচালনা করতে এটি সামঞ্জস্য করেছিn=0
nderscore

অসাধারণ. 'প্রত্যাবর্তন' এড়াতে এটি মনে রাখার মতো কিছু - ভাগ করে নেওয়ার জন্য ধন্যবাদ (+1)
এডসি 65

@ এডসি 65 ধন্যবাদ! আমি এটি আকর্ষণীয় ছিল। এমটি0 এর দু'জনেই যদিও আমাদের মারছে! : পি
nderscore

3

হাস্কেল, 129

t=[[a:show s|s<-[1..15]]|a<-['A'..'J']]
b n=(n%).span((<n).length)
_%(h,[])=([],h)
n%(j,(r:s))=let(t,u)=splitAt n r in(t,j++u:s)

এটি হাস্কেলের একটি ক্রিয়াকলাপ করতে কিছু সমন্বয় করতে হয়েছিল: bএকটি জুটি ফেরত দেয়: টিকিট (সম্ভব হলে) এবং থিয়েটারের নতুন রাষ্ট্র। tসমস্ত প্রকার টিকিট বিক্রি না করেই প্রাথমিক থিয়েটার রাজ্য। এছাড়াও, প্রত্যাবর্তন -1হাস্কেলের কাছে অস্বাভাবিক ছিল, সুতরাং কোনও অনুরোধের জন্য যদি কোনও টিকিট জারি করা না যায়, তবে খালি তালিকাটি টিকিটের জন্য ফিরে আসে।

λ: let (k1,t1) = b 5 t
λ: k1
["A1","A2","A3","A4","A5"]

λ: let (k2,t2) = b 2 t1
λ: k2
["A6","A7"]

λ: let (k3,t3) = b 10 t2
λ: k3
["B1","B2","B3","B4","B5","B6","B7","B8","B9","B10"]

λ: let (k4,t4) = b (-1) t3
λ: k4
[]

λ: let (k5,t5) = b 2 t4
λ: k5
["A8","A9"]

3

এপিএল (75)

T←10 15⍴0⋄B←{(⍵∊⍳15)∧∨/Z←,T⍷⍨⍵/0:+T[P]←{⎕A[⍺],⍕⍵}/¨P←(⊃Z/,⍳⍴T)∘+¨1-⍨⍳1⍵⋄¯1}

টেস্ট:

      B 5
  A1    A2    A3    A4    A5  
      B 2
  A6    A7  
      B 10
  B1    B2    B3    B4    B5    B6    B7    B8    B9    B10  
      B ¯1
¯1
      B 3
  A8    A9    A10  

ব্যাখ্যা:

  • T←10 15⍴0: Tএকটি 15-বাই-10 ম্যাট্রিক্স যা থিয়েটারের রাজ্য ধরে রাখে (0 = মুক্ত)
  • B←{... }: ফাংশন
    • (⍵∊⍳15): যদি 1 থেকে 15 এর পূর্ণসংখ্যার সেটটির সদস্য হন,
    • ∨/Z←,T⍷⍨⍵/0: এবং একটি সারিতে শূন্য Tরয়েছে (সম্ভাব্য প্রারম্ভিক পয়েন্টগুলি সঞ্চয় করা Z),
    • :: তাহলে:
      • (⊃Z/,⍳⍴T): সম্ভাব্য সূচনা স্থানাঙ্কগুলি নির্বাচন করুন এবং প্রথমটি গ্রহণ করুন,
      • ∘+¨1-⍨⍳1⍵: ⍵-1সূচনা সমন্বয়ের ডানদিকে আরও পজিশন যুক্ত করুন
      • P←: স্থানাঙ্কগুলি সংরক্ষণ করুন P
      • {⎕A[⍺],⍕⍵}/¨: স্থানাঙ্কগুলি বিন্যাস করুন
      • T[P]←: ফর্ম্যাট করা স্থানাঙ্কগুলি তাদের জায়গায় সংরক্ষণ করুন T। (টি-তে কোনও ননজারো মানগুলি করবে)
      • +: ফলাফলটি ফিরিয়ে দিন, এটি ফর্ম্যাট করা স্থানাঙ্ক (কোনও কার্যনির্বাহার ফলাফলটি ডিফল্টরূপে সারণী হয়)
    • ⋄¯1: অন্যথায়, ফিরে ¯1

3

জাভাস্ক্রিপ্ট (E6) 99 103 113 121

সত্যিই আপনার প্রতিটি সারির জন্য একটি সংখ্যা সঞ্চয় করতে হবে

B=n=>{for(r=i=[-1];n>0&i++<9;)if((a=~~B[i]+n)<16)for(B[i]=a;n--;)r[n]='ABCDEFGHIJ'[i]+a--;return r}

পরীক্ষা

'5:'+B(5)+'\n2:'+B(2)+'\n10:'+B(10)+'\n0:'+B(0)+'\n1:'+B(-1))+'\n3:'+B(3)

Ungolfed

B = n => {
  for (r = i = [-1]; n > 0 & i++ < 9;)
    if ((a = ~~B[i] + n) < 16)
      for (B[i] = a; n--; ) r[n] = 'ABCDEFGHIJ'[i] + a--;
  return r;
}

3

জাভাস্ক্রিপ্ট (ECMAScript 6 খসড়া) - 96 95 91 অক্ষর

একটি পুনরাবৃত্ত সমাধান:

সংস্করণ 1

B=(n,r=0)=>n>0&&(k=~~B[r])+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+(B[r]=++k)):r<9?B(n,r+1):-1

সংস্করণ 2:

B=(n,r=0)=>n<1|r>9?-1:(k=B[r]|0)+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+(B[r]=++k)):B(n,r+1)

( 1 অক্ষর সংরক্ষণের অনুপ্রেরণার জন্য nderscore ধন্যবাদ )

সংস্করণ 3:

B=(n,r=0)=>n<1|r>9?-1:(B[r]^=0)+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+ ++B[r]):B(n,r+1)

( এনডারস্কোরকে ধন্যবাদ )

ব্যাখ্যা:

B = function(n,r=0)          // Create a function B with arguments:
                             // - n is the number of seats to book
                             // - r is the row number (defaults to 0)
{
  var k = ~~B[r];            // get the number of seats already booked in row r
  if (  n > 0                // ensure that n is a valid booking
     && k+n<16 )             // check that there are enough seats remaining in row r
  {
    var P = new Array(n);    // Create an array with length n with no elements initialised
    var Q = [...P];          // Use P to create an array with every element
                             // initialised to undefined
    var R = 'ABCDEFGHIJ'[r]; // get the row ID.
    B[r] = k + n;            // Increment the number of seats booked in row r by n.
    var S = Q.map(
      function(){
        return R + (++k);    // Map each value of Q to the row ID concatenated with
                             // the seat number.
      }
    );
    return S;                // Return the array of seats.
  }
  else if ( r < 9 )          // If there are more rows to check
  {
    return B(n,r+1);         // Check the next row.
  }
  else                       // Else (if n is invalid or we've run out of rows)
  {
    return -1;               // Return -1.
  }
}

সুন্দর সমাধান। আমিও তেমন কিছু নিয়ে কাজ করছিলাম। এখানে -1 বাইট:B=(n,r=0)=>n>0&r<9?(k=B[r]|0)+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+(B[r]=++k)):B(n,r+1):-1
nderscore

ধন্যবাদ, দুর্ভাগ্যক্রমে যে কাজটি সারণি জে বুক করতে না পারায় এটি যথেষ্ট কাজ করে না তবে প্রথম চেক দেওয়ার B=(n,r=0)=>n<1|r>9?-1:(k=B[r]|0)+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+(B[r]=++k)):B(n,r+1)বিষয়টি অগ্রাহ্য করে কাজ করা উচিত।
এমটি0

আহ, ভাল ক্যাচ
nderscore

এবং এটি কম যেতে চলে ... (91)B=(n,r=0)=>n<1|r>9?-1:(B[r]^=0)+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+ ++B[r]):B(n,r+1)
nderscore

2

গল্ফস্ক্রিপ্ট, 103 82 বাইট

226,1>15/[0]*:T{:&0>{T[{),&~)>:|T\/,2=}?]{T|-:T;|{(.[15/65+]\15%)`+}%}-1if}-1if}:B

উদাহরণ

$ cat theatre.gs
226,1>15/[0]*:T
{:&0>{T[{),&~)>:|T\/,2=}?]{T|-:T;|{(.[15/65+]\15%)`+}%}-1if}-1if}:B

5  B p  # Execute B(5), stringify and print.
2  B p
15 B p
17 B p
0  B p

{}:puts # Disable automatic output.
$
$ golfscript theatre.gs
["A1" "A2" "A3" "A4" "A5"]
["A6" "A7"]
["B1" "B2" "B3" "B4" "B5" "B6" "B7" "B8" "B9" "B10" "B11" "B12" "B13" "B14" "B15"]
-1
-1

কিভাবে এটা কাজ করে

226,1>           # Push the array [ 1 … 225 ].
15/[0]*          # Split in chunks of 15 elements and join separating by zeros.
:T               # Save result in T.
{                #
  :&0>           # Save the function's argument in & and check if it's positive.
  {              # If it is:
    T[{          # For each seat S in T:
      ),         # Push [ 0 … S ].
      &~)>       # Reduce two [ S-(&-1) … S ].
      :|         # Save the result in |.
      T\/        # Split T around |.
      ,2=        # If there are two chunks, the seats are available.
    }?]          # Find the first S that satisfies the above condition.
    {            # If there was a match:
      T|-:T;     # Remove the seats in | from T.
      |{         # For each seat S in |:
        (.       # Push S+1 S+1.
        [15/65+] # Compute (S+1)/15+65; the ASCII character corresponding to the row.
        \15%)`+  # Compute (S+1)%15+1, stringify and concatenate. 
      }%         #
    }            #
    -1if         # If there was no match, push -1 instead.
  }              #
  -1if           # If the argument was non-positive, push -1 instead.
}

1

কফিস্ক্রিপ্ট - 171 150 149

আমার সন্দেহ হয় রুবি বা পার্ল এটিকে অনেক আগেই পরাজিত করবে।

c=0;l=64;k=1
f=(n)->
 if n<0 or n>15 or 150-c<n
  return-1
 a=[]
 for i in[1..n]
  if c%15==0
   ++l;k=1
  ++c;a.push String.fromCharCode(l)+k;++k
 a

সমতুল্য জাভাস্ক্রিপ্ট / ব্যাখ্যা :

কফিস্ক্রিপ্টের সাথে অপরিচিতদের জন্য।

var seats  = 0; //Occupied seats.
var letter = 64; //ASCII code for row letter.
var index  = 1;  //Index of seat in row.

function seats( count )
{
    if( count < 0 || count > 15 || ( 150 - seats ) < count )
        return -1;

    var assignedSeats = [];

    for( var i = 1; i <= count; ++i )
    {
        if( ( seats % 15 ) === 0 )
        {
            ++letter;
            index = 1;
        }

        ++seats; //Occupy a seat.
        assignedSeats.push( String.fromCharCode( letter ) + index );
        ++index;
    }

    return assignedSeats;
}

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


1
এই সমাধানটি নিয়ম পূরণ করে নাAll seats in one booking must be in the same row, next to each other.
nderscore

0

কোবরা - 309

এটি করা উচিত , তবে আমি আসলে কয়েক ঘন্টার জন্য একটি সংকলক যেতে পারি না, তাই প্রয়োজনে পরে এটি আপডেট করব।

class P
    var s=List<of List<of String>>()
    def main
        for l in 'ABCDEFGHIJ'
            t=[]
            for n in 1:16,t.insert(0,l.toString+n.toString)
            .s.add(t)
    def b(n) as List<of String>
        t=[]
        for r in .s.count,if .s[r].count>=n
            for i in n,t.add(.s[r].pop)
            break
        return if(n>0 and t<>[],t,['-1'])

0

সি # - 289

কোড গল্ফিং এ প্রথম প্রচেষ্টা।

int[]s=new int[10];string[]B(int n){string[]x=new string[]{"-1"};if(n<1||n>15)return x;int m=(int)Math.Pow(2, n)-1;for(int i=0;i<10;++i){for(int j=0;j<15-n;++j){if((s[i] &m)==0){s[i]|=m;string[]r=new string[n];for(int k=0;k<n;++k)r[k]=(""+(char)(i+65)+(j+k+1));return r;}m<<=1;}}return x;}

আন golfed

int[] s = new int[10];
string[] B(int n)
{
    string[] x = new string[] { "-1" };
    if (n < 1 || n > 15) return x;
    int m = (int)Math.Pow(2, n) - 1;
    for (int i = 0; i < 10; ++i)
    {
        for (int j = 0; j < 15 - n; ++j)
        {
            if ((s[i] & m) == 0)
            {
                s[i] |= m;
                string[] r = new string[n];
                for (int k = 0; k < n; ++k)
                    r[k] = ("" + (char)(i + 65) + (j+k+1));
                return r;
            }
            m <<= 1;
        }
    }
    return x;
}

0

কে, 140

d:10#,15#0b
B:{if[(x<0)|x>15;:-1];$[^r:*&&/'~:^a:{(*&&/'{x(!1+(#x)-y)+\:!y}[d x;y])+!y}[;x]'!#d;-1;[.[`d;(r;a r);~:];(10#.Q.A)[r],/:$1+a r]]}

নিঃসন্দেহে এখানে অনেক উন্নতি করতে হবে


0

সি ++ - 257

গল্ফ করার প্রথম প্রচেষ্টা।

static vector< int > t (10, 0);

vector<string> b(int n){
    vector<string> o;
    int i=0,j;
    for(;i<10&&16>n&&n>0;i++){
        if(15-t[i]<n) continue;
        char l='A'+i;
        for(j=t[i];j<n+t[i];j++){
           o.push_back(l + toS(j + 1));
        }
        t[i]+=n;
        n=0;
    }
    if(o.empty()) o.push_back("-1");
    return o;
}

যেহেতু To_string আমার সংকলকটির সাথে কাজ করছে না, টসকে হিসাবে সংজ্ঞায়িত করা হয়েছে

string toS(int i){
    return static_cast<ostringstream*>( &(ostringstream() << i) )->str();
}

এবং একটি সামান্য ইন্টারফেস হিসাবে

int main(){
int input = 0;
bool done = false;
while (!done){
    cout << "how many seats would you like? (0 to exit)\n";
    cin >> input;
    vector<string> selection = b(input);
    for (auto s : selection){
        cout << s << ' ';
    }
    cout << endl;
    if (input == 0) break;
}
return 0;
}

1
অপ্রয়োজনীয় সাদা স্থান সরিয়ে ফেললে এটি 243 টি অক্ষরে নেমে আসে।
23:30 '

236 তে আরও গল্ফিং:vector<int> t(10,0);vector<string> b(int n){vector<string> o;for(int i=0,j;i<10&&16>n&&n>0;i++){if(15-t[i]<n)continue;char l='A'+i;for(j=0;j<n;j++)o.push_back(l+to_string(j+t[i]+1));t[i]+=n;n=0;}if(o.empty())o.push_back("-1");return o;}
23:34

0

সি # - 268 বাইট

গল্ফ কোড:

int[]s=new int[10];string[]B(int n){string[]x={"-1"};if(n<1||n>15)return x;int m=(int)Math.Pow(2,n)-1;for(int i=0;++i<10;){for(int j=0;++j<15-n;){if((s[i]&m)==0){s[i]|=m;var r=new string[n];for(int k=0;++k<n;)r[k]=(""+(char)(i+65)+(j+k+1));return r;}m<<=1;}}return x;}

অবরুদ্ধ কোড:

    int[] s = new int[10];
    string[] B(int n)
    {
        string[] x = { "-1" };
        if (n < 1 || n > 15) return x;
        int m = (int)Math.Pow(2, n) - 1;
        for (int i = 0; ++i < 10;)
        {
            for (int j = 0; ++j < 15 - n;)
            {
                if ((s[i] & m) == 0)
                {
                    s[i] |= m;
                    var r = new string[n];
                    for (int k = 0; ++k < n;)
                        r[k] = ("" + (char)(i + 65) + (j + k + 1));
                    return r;
                }
                m <<= 1;
            }
        }
        return x;
    }

আমি নিজের তৈরি করার পরিবর্তে গোল্ডেনড্রাগনের সমাধান সম্পর্কে একটি মন্তব্য করে কিছু টীকাগুলি লিখতে চাইতাম, তবে আমার খ্যাতি এটি অনুমতি দেয় না।

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