একটি বোর্ড ঘোরানো অনুকরণ


14

ভূমিকা

মহাকর্ষের কারণে আপনি একটি ম্যাচিং গেম খেলছেন, যাতে মুদ্রা শীর্ষে sertedোকানো হয় এবং নীচে (শীর্ষ মুদ্রায়) পড়ে যায়।

তাই এটা

O <- inserting this coin

OO O
OOOOO

এটি হয়ে যাবে

O
OO O
OOOOO

এখন কল্পনা করুন যে কেউ বোর্ডকে ঘড়ির কাঁটার দিকে ঘোরান। নিম্নলিখিত ঘটবে:

1. বোর্ডটি ঘোরানো হয়

OOO
OO
O
OO
O

2. মহাকর্ষের কারণে কয়েনগুলি নিচে পড়ে

O
O
OO
OO
OOO

তোমার কাজ

আপনার কাজ হ'ল একটি প্রোগ্রাম বা কোনও ফাংশন লিখে বোর্ডের আবর্তন অনুকরণ করা। সরলতার জন্য আমরা কেবল এক ধরণের মুদ্রা নিয়ে কাজ করছি (এটি খুব উত্তেজনাপূর্ণ ম্যাচের খেলা নয়, এটি কি…)। আপনি ধরে নিতে পারেন যে আবর্তন সম্পূর্ণ হওয়ার পরেই মাধ্যাকর্ষণ প্রয়োগ করা হবে। বোর্ডটি ঘড়ির কাঁটার দিকে ঘোরানো হয়।

ইনপুট

ইনপুটটি একটি স্ট্রিং হতে চলেছে, এতে 3 ধরণের অক্ষর রয়েছে:

  • ও (মূলধন ও) বা 0 (শূন্য) - একটি মুদ্রা (আপনি সিদ্ধান্ত নিন যে আপনার সমাধানটি কোনটিকে সমর্থন করে)
  • (স্পেস) - একটি খালি ক্ষেত্র
  • । n (নতুন লাইন) - সারির শেষ

ইনপুট বোর্ডের অবস্থা প্রতিনিধিত্ব করে। আপনি ধরে নিতে পারেন, ইনপুটটি ভালভাবে গঠিত এবং এতে বোর্ডের একটি বৈধ রাষ্ট্র রয়েছে (কোনও মুদ্রা ভাসমান নয়)। ইনপুটটি একটি ফাংশন প্যারামিটার হতে পারে, বা স্ট্যান্ডার্ড ইনপুট থেকে বা কোনও ফাইল থেকে পড়া যায়।

আউটপুট

আউটপুটটি আবর্তনের পরে বোর্ডের নতুন রাজ্য। আউটপুট ইনপুট হিসাবে একই 3 ধরণের অক্ষর রয়েছে। আউটপুট আপনার ফাংশন থেকে ফিরে আসতে পারে বা মান আউটপুট বা একটি ফাইলে লেখা যেতে পারে।

নমুনা

Input1:

O
OO O
OOOOO

Output1:

O
O
OO
OO
OOO

Input2:

O O
O O

Output2:

OO
OO

আপনি যে কোনও ভাষা এবং নির্বাচিত ভাষার স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করতে পারেন। বাইটস মধ্যে সংক্ষিপ্ততম প্রোগ্রাম।


সংক্ষিপ্ত রেখাগুলি কি পিছনের স্থানগুলির সাথে প্যাড করা আছে?
ভেন্টোরো

আপনার যদি প্রয়োজন হয় তবে হ্যাঁ
ডেভিড ফ্র্যাঙ্ক

বোর্ড আকারের জন্য প্রয়োজনীয়তা কি? আমি কি যুক্তিসঙ্গত সর্বাধিক আকার চয়ন করতে পারি, বা অ্যাপ্লিকেশন / ফাংশনটিতে সমস্ত সম্ভাব্য মাপের জন্য কাজ করা দরকার?
ফোরস

2
মাধ্যাকর্ষণ যদি ঘোরার পরে প্রয়োগ করা হয় তবে ইনপুট 2 আউটপুট 2 কীভাবে হয়? আমি ভাবতাম এটি শীর্ষ টাকার কয়েনগুলি নামিয়ে দেবে তবে অনুভূমিকভাবে নয়?
ম্যাট

2
@ ম্যাট দ্রষ্টব্য, যে ইনপুট 2 এ বা আউটপুট 2 (এসই সারিগুলির মধ্যে মার্জিন প্রদর্শন করে) খালি সারি নেই।
ডেভিড ফ্র্যাঙ্ক

উত্তর:


16

গল্ফস্ক্রিপ্ট, 14 12 টি অক্ষর

' '-n%zip$n*

এসটিডিআইএন-এ অবশ্যই ইনপুট দেওয়া উচিত, কয়েনগুলির জন্য চরিত্রটি কোনও অ-হোয়াইটস্পেস অক্ষর হতে পারে। এখানে চেষ্টা করুন । দুটি চরিত্র হ্রাস নির্দেশ করার জন্য পিটারকে ধন্যবাদ।


ওহ, আমি transposeরুবিকে এমন কী উপহার দেব না যা বিভিন্ন দৈর্ঘ্যের সাথে অ্যারে পরিচালনা করতে পারে ...
ভেন্টোরো

@Ventero বেশির ভাগ সময়ই আমি এই হল hacky সংস্করণ ব্যবহার করুন: ([nil]*a.map(&:size).max).zip(*a)। যদিও গল্ফিংয়ের জন্য ভাল নয়।
হাওয়ার্ড

আপনি 2 টি অক্ষর সংরক্ষণ করতে পারেন: যেহেতু দীর্ঘতম লাইন সর্বদা নীচে শেষ হয়, আপনি এটির -1%সাথে প্রতিস্থাপন করতে পারেন $
পিটার টেলর

@ পিটারটেলর আপনি ঠিক বলেছেন - আমরা অক্ষরে সংরক্ষণ করতে পারি। ধন্যবাদ.
হাওয়ার্ড

1
@ পিটারটেলর ওয়েল, আমি এর জন্য একটি-চরিত্রের উপন্যাসটি অন্তর্ভুক্ত করেছি " "
অডিটসু ছাড়ুন কারণ এসই ইভিল

6

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

প্রথমে চেষ্টা করুন, কেবল ম্যাট্রিক্স অপারেশন। ইনপুট স্ট্রিংয়ের প্রতিটি সারি প্যাড করা দরকার।
বেশ শব্দযুক্ত।

R=t=>(x=t.split('\n').reverse().map(x=>[...x].sort()),x.map((c,i)=>x.map(r=>r[i]).join('')).join('\n'))

সুডোকোড

  1. স্ট্রিং -> সারিগুলির অ্যারে
  2. উপরে / ডাউন বিপরীত অ্যারে
  3. প্রতিটি সারি -> চর অ্যারে
  4. প্রতিটি সারি বাছাই করুন (কয়েনগুলি 'পতন' থেকে ডানদিকে)
  5. TRANSPOSE
  6. একটি সারিতে প্রতিটি চর অ্যারে -> একটি স্ট্রিং
  7. অ্যারে যোগ দিন -> একক স্ট্রিং

ওহ বাহ, বাছাই করা স্মার্ট (+1)! মনে মনে যদি আমি চুরি করি?
seequ

সিনট্যাক্স এর [...x]আগে কখনও দেখিনি । এটাকে কি বলে?
কমফ্রিচ


2
@ edc65 আপনি বন্ধনীর সাহায্যে আপনার নিজের লিঙ্কটি ভেঙে দিয়েছেন। এখানে সঠিক লিঙ্কটি দেওয়া হয়েছে
ক্রিস সাইরেফাইস

6

রুবি 2.0, 59 টি অক্ষর

puts$<.map(&:chars).reverse.transpose.sort[1,50].map &:join

স্টিডিনের মাধ্যমে ইনপুট, ধরে নেওয়া লাইনগুলির দৈর্ঘ্য একই হবে। এটি সম্ভবত প্রয়োজনের চেয়ে অনেক বেশি দীর্ঘ। তবে কমপক্ষে এটি পঠনযোগ্য ...


আমি মনে করি আপনি $<.mapপরিবর্তে ব্যবহার করতে পারেন ।
হাওয়ার্ড

এই টুইটটি আমি সর্বদা ভুলে যাই। ধন্যবাদ!
ভেন্টোরো

1
[1,50] সেখানে কি করছে?
চার্লস

1
@ চার্লস এটি প্রথম সারিতে এড়িয়ে যায়, এতে ইনপুট থেকে সমস্ত নতুন লাইন রয়েছে। ডেভিড একটি মন্তব্যে উল্লেখ করেছেন যে 50x50 সর্বাধিক সম্ভাব্য আকার, সুতরাং প্রথম সারিতে ( 1..-1) বাদে সমস্ত নির্বাচন করার পরিবর্তে আমি কেবল দ্বিতীয় ( 1,50) দিয়ে শুরু করে 50 টি সারি নির্বাচন করি ।
ভেন্টোরো

@ ভেন্তোরো এটি পেয়েছে শীতল। ধন্যবাদ!
চার্লস

3

জে - 49 31 24 বাইট

আমি মনে করি সেখানে অপ্রয়োজনীয় ঘূর্ণন হতে পারে, তবে অন্যথায় এটি দুর্দান্ত কাজ করে। এটি এমন একটি ফাংশন যা নির্দিষ্ট হিসাবে মুদ্রা হিসাবে ইনপুট নেয়O । ইনপুটটিতে কোনও পেছনের শ্বেত স্পেসের প্রয়োজন নেই।

নতুন সংস্করণ, এডসি 65 এর জাভাস্ক্রিপ্ট উত্তরে অনুপ্রাণিত :

f=:[:|."1@|:[:/:~"1,;._2

ব্যাখ্যা:

f=:[:|."1@|:[:/:~"1,;._2
                   ,;._2 Split the string at every fret, which is the last character in the string (newline).
              /:~"1      Sort every row separately.
     |."1@|:             Rotate the array clockwise.

পুরাতন রুপ:

f=:[:|:((#~=&' '),=&'O'#])"1@|:@(|."1@|:)@(,;._2)

ব্যাখ্যা:

f=:[:|:((#~=&' '),=&'O'#])"1@|:@(|."1@|:)@(,;._2)
                                          (,;._2) Split the string at every fret, which is the last character in the string (newline).
                                (|."1@|:)@        Rotate the array clockwise.
                             |:@                  Reverse the axes (columns become rows and vice-versa).
       ((#~=&' '),=&'O'#])"1                      Function that applies the "gravity"
                          "1                       Apply to every row separately:
                  =&'O'#]                           Get the O's in the row.
       (#~=&' ')                                    Get the spaces in the row.
                ,                                   Join them, spaces come first.
  [:|:                                            Reverse axes again.

উদাহরণ (নোট করুন যে মাল্টলাইন স্ট্রিংগুলি 0 : 0বন্ধনী দিয়ে শুরু হয় এবং শেষ হয়):

   f 0 : 0
O
OO O
OOOOO
) NB. output starts now
O  
O  
OO 
OO 
OOO
   f 0 : 0
O O
O O
) NB. Output starts now.

OO
OO

যদি আপনি পারেন তবে ঘোরানোর আগে বাছাই করুন
edc65

@ edc65 আপনি একজন স্মার্ট মানুষ।
seequ

2

হাস্কেল - 86

কেবল শিখছি, সুতরাং আমি নিশ্চিত যে এটি আরও উন্নত হতে পারে।

import Data.List
c=putStr.unlines.filter(/="").sort.map(filter(/=' ')).transpose.lines

নমুনা ইনপুট:

let a = "O    \nOO O \nOOOOO"
let b = " O O \n O O "
c a
c b

নমুনা আউটপুট:

O
O
OO
OO
OOO

OO
OO

2

পাইথন 2 (69) (79)

for c in sorted(zip(*raw_input().split("\\n"))):print''.join(c[::-1])

স্পেসগুলির সাথে প্যাডযুক্ত ইনপুট নেয় যাতে সমস্ত লাইনের সমান দৈর্ঘ্য থাকে। splitপ্রতিটি লাইনে একজন arrat সৃষ্টি করে। zipকার্যকরভাবে অ্যারের transposes। তারপরে, sortedডিক্সোগ্রাফিক ক্রমে বিভিন্ন ধরণের হয়ে যায়, যার ফলে সমস্ত কয়েন নীচে পড়ে যায়। অবশেষে, আমরা প্রতিটি লাইন মুদ্রণ করি, এটিকে আবার স্ট্রিংয়ে পরিণত করি, যদিও আমাদের অবশ্যই এটি প্রথমে বিপরীত করতে হবে। এরকম print'O'*c.count('O')সমতূল্য এবং একই সংখ্যক অক্ষর ব্যবহার করে।

উদাহরণ রান:

>> O    \nOO O \nOOOOO
O
O
OO
OO
OOO

1

সি, 167 119 বাইট

এই সংক্ষিপ্ত সংস্করণটি (দুর্ভাগ্যবশত?) মূলটির থেকেও অনেক পরিষ্কার।

m;j;b[99];r;main(){while(j=getchar()+1)j-11?m+=j-33&&++b[r]>m:++r;for(j=r;m+1;putchar(j--?m<b[j]?79:32:(j=r,m--,10)));}

0

র‌্যাকেট: 130

(let l((a'()))(let((b(sort(string->list(read-line))char<?)))(if
(null? b)(apply map(λ x(map display x)(newline))a)(l(cons b a)))))

এটির জন্য আপনার স্পেসগুলি সহ প্যাড প্রয়োজন যাতে লাইনগুলি সমান দৈর্ঘ্য হয়।


0

সি # - 209 174 বাইট

ঠিক আছে, আমাকে এই কোড গল্ফটি চেষ্টা করতে হবে যে কোনও সময় আমি গণনা করি। বোর্ডটি ঘোরানো এবং এটি মুদ্রণ করে এমন একটি ফাংশন তৈরি করেছে (আর)। আমার ধারণা আমি যখন আমার চর অ্যারে প্রিন্ট করছি তখন আমি কিছুটা প্রতারণা করছি, তবে কেন আপনি পাগল হবেন না তা যদি আপনি বুঝতে না পারেন :)

টিপসটির জন্য প্রোগ্রামফক্সকে ধন্যবাদ :)

void r(string s){int x=s.IndexOf('\n'),j,i=-1,k,z=x+1;var y=new char[x*x+x];for(;++i<x;y[z*(i+1)-1]='\n')for(k=j=x;j>0;)if(s[i*z+--j]=='0')y[k--*z-i-2]='0';Console.Write(y);}

ঠকাই

new char[x*x+x]অ্যারে পূরণ করে '\0'এবং না' '


1
নতুন লাইন সরানো হলে মধ্যে স্থান সরানোর char[]এবং y192 অক্ষরে আপনার অক্ষর সংখ্যা কমে যাবে। এছাড়াও, staticএখানে উত্তর পোস্ট করার সময় কীওয়ার্ডটি সরবরাহ করা সত্যিই প্রয়োজন হয় না । এটি অপসারণ করা আপনার চরিত্রের সংখ্যা 185 টি অক্ষরে কমাবে।
প্রোগ্রামফক্স

আমি সেখানে 'রেফ' অপসারণ করতে সক্ষম হয়েছি যা আগের চেষ্টা থেকে ভুলে গিয়েছিল।
ওয়াজেজেসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.