একটি আয়তক্ষেত্রের বিপরীত কোণে যাওয়ার সর্বোত্তম সমাধান


13

আপনার কাজ হ'ল একটি প্রোগ্রাম লিখুন যা আয়তক্ষেত্রের নীচে-বাম কোণ থেকে সরাসরি বিপরীতে উপরের-ডান কোণে পেতে যে সর্বাধিক চলমানগুলির সন্ধান করে তা খুঁজে পাওয়া।

আপনার প্রোগ্রামটি অর্ডারযুক্ত জোড় হিসাবে ইনপুট গ্রহণ করবে (width, height)। এগুলি আপনার সাথে কাজ করবে এমন আয়তক্ষেত্রের মাত্রা। আপনার প্রোগ্রামটি সমাধানের একটি ASCII- শিল্প তৈরি করবে ( .ফাঁকা স্কোয়ারের #জন্য এবং সমাধানের অংশের Xজন্য , স্কোয়ার শুরু করার জন্য) ব্যবহার করবে এবং শেষের পয়েন্টে পৌঁছানোর জন্য এটি কতগুলি চালনা করে তা গণনা করবে। তির্যক চলার অনুমতি নেই। যদি একাধিক সমাধান থাকে তবে আউটপুট থেকে একটি বেছে নিন।

বাইটের মধ্যে সংক্ষিপ্ততম প্রোগ্রামটি জিতেছে।

উদাহরণ

ইনপুট: (4, 5)

আউটপুট:

..##
..#.
.##.
.#..
X#..

সরান গণনা: 7


সুতরাং আউটপুটে #"সর্বোত্তম সমাধান" (যা এমন কোনও সমাধান যা কখনও বাম বা নীচে সরায় না) এর সংখ্যাও থাকা উচিত ?
মার্টিন এন্ডার

12
পুনরায় "দুঃখিত, এটি আমার প্রথম কোড-গল্ফ প্রশ্ন তাই আমি এগুলি তৈরি করতে খুব ভাল নই" " আমাকে স্যান্ডবক্সটি সুপারিশ করতে দিন যেখানে আপনি চ্যালেঞ্জ আইডিয়া পোস্ট করতে পারেন এবং সেগুলি মূলত পোস্ট করার আগে প্রতিক্রিয়া পেতে পারেন। এবং পিপিসিজিতে আপনাকে স্বাগতম! :)
মার্টিন এন্ডার

@ মার্টিনবাটনার হ্যাঁ, সরানো গণনাটি মূলত সংখ্যাটি #কারণ এটি বাম বা নীচে যাওয়া অযৌক্তিক।
ericw31415

প্রতিটি চরকে ফাঁকা জায়গা দিয়ে আলাদা করা কি ঠিক হবে?
নীল

1
আমাদের কি মুভ কাউন্ট এবং এসকি আর্ট আউটপুট করতে হবে? আউটপুট ঠিক কেমন দেখতে হবে?
জেমস 19

উত্তর:


0

05 এ বি 1 ই , 27 24 বাইট

কোড:

+Í,¹<'.×'#¶J²<×'X'#¹<×J,

ব্যাখ্যা:

+                         # Add the length and the height.
 Í                        # Decrease by two.
  ,                       # Print this value with a newline.
   ¹<'.×                  # Take the first input, decrease by 1 and multiply with ".".
        '#¶               # Push a "#"-character and a newline character.
           J              # Join the string.
            ²<            # Take the second input and decrease by 1.
              ×           # Multiply the joined string with this value.
               'X         # Push the "X"-character.
                 '#¹<×J   # Multiply the "#"-character with (first input - 1).
                       ,  # Pop and print with a newline.

এটি অনলাইন চেষ্টা করুন! । ব্যবহার সিপি-1252 এনকোডিং।


বাইট এবং একটি চরিত্রের মধ্যে পার্থক্য কী?
লিকি নুন

2
@ কেনি লাউ আমি আমার পোস্টগুলিতে তা উল্লেখ করতে ভুলে যাচ্ছি ... 05 এএবি 1 ই সিপি -1222 এনকোডিং ব্যবহার করে, কোডটিতে ব্যবহৃত প্রতিটি অক্ষর 1 বাইট হয়।
আদনান

3

রেটিনা , 54 53 বাইট

\d+
$*.
S_`(?<=(.+)¶.*).|\D
T`.`#`.¶|.*$
:m-1=`^#
X
#

একটি লাইনফিড দ্বারা আলাদা করে ইনপুট নেয় এবং মুভ কাউন্টের পরে সমাধান গ্রিড আউটপুট করে।

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

ব্যাখ্যা

\d+
$*.

উভয় পূর্ণসংখ্যাকে অনেকগুলি মধ্যে .রূপান্তর করুন, অর্থাত্ এগুলি অ্যানারিতে রূপান্তর করুন।

S_`(?<=(.+)¶.*).|\D

এটি অ্যানারি উচ্চতায় .প্রতিটি মিলিয়ে .এবং প্রস্থের অলৌকিক উপস্থাপনা ক্যাপচার করে এটিগুলির একটি গ্রিড তৈরি করে । Sবিভক্ত মোড যা বন্দী স্ট্রিং ফেরৎ সক্রিয়, এবং |\Dএবং _একসঙ্গে নিশ্চিত অন্য যে সবকিছু স্ট্রিং থেকে মুছে ফেলা হবে।

T`.`#`.¶|.*$

এটি প্রতিটি লাইনের শেষ অক্ষর পাশাপাশি পুরো শেষ রেখাকে #গুলি করে তোলে ।

:m-1=`^#
X

এটি #সর্বশেষ সারিতে প্রথমটিকে রূপান্তর করতে এক টন বিকল্প ব্যবহার করে X(আমাদের নিশ্চিত করতে হবে যে প্রস্থ -১ ইনপুটগুলির কারণে কেবলমাত্র শেষ সারিটি প্রভাবিত হয়েছে)। mমাল্টি-লাইন মোড সক্রিয় করে যা ^লাইনের শুরুতে ম্যাচ করে। -1=রেটিনাকে কেবলমাত্র শেষ ম্যাচে প্রতিস্থাপন করতে বলে। শেষ অবধি, :ডিফল্ট নীরব মোডটি বন্ধ করে দেয় যে গ্রিডটি মধ্যবর্তী ফলাফল হিসাবে STDOUT এ মুদ্রিত হয়।

#

অবশেষে, আমরা কেবল #স্ট্রিংয়ের মধ্যে সংখ্যাটি গণনা করি যা চলনের সংখ্যার সাথে মিলে যায়।


অ্যানারিতে রূপান্তর করার জন্য একটি অন্তর্নির্মিত রেটিনা যুক্ত করা উচিত।
সাইয়েস

3

পাইকে, 26 বাইট

DtQ+RtF; Q\.*t\#+)\X\#Qt*+

এখানে চেষ্টা করুন


অথবা একটি অপ্রতিযোগিতামূলক 34 বাইট, একটি অ্যাস্টের সাথে নোড প্রয়োগ করুন)

jUa]Dm!X|RZjht]q+".#X"R@)Fs
);jmts

এখানে চেষ্টা করুন!

অথবা 30 বাইট যদি প্যাডিং হিসাবে ফাঁকা স্থান অনুমতি দেওয়া হয়

jUa]Dm!X|RZjht]q+".#X"R@)Pjmts

কেন এটি অপ্রতিযোগিতামূলক?
লিকি নুন

3
চ্যালেঞ্জ পোস্ট হওয়ার পরে আমি ভাষাটি পরিবর্তন করেছি
ব্লু

@ মুদ্দিফিশ অভ্যন্তরীণ সার্ভার ত্রুটিটি ক্লিক করার সময় আপনি এখানে চেষ্টা করুন
উন্মাদ

@ ইনসান বাগটি স্থির করে (আশাবাদী) দিনের পরিবর্তনের জন্য অভ্যন্তরীণ পরীক্ষাগুলি ব্যর্থ হচ্ছিল।
নীল

2

পাইথ, 32 29 24 বাইট

AtMQVH+*\.G\#;+\X*\#G+GH

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

নমুনা ইনপুট:

(4, 5)

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

...#
...#
...#
...#
X###
7

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

AtMQVH+*\.G\#;+\X*\#G+GH
                           assign('Q',eval_input())
AtMQ                       assign('[G,H]',Pmap(lambda d:tail(d),Q))
    VH       ;             for N in range(H):
      +*\.G\#                  implicit_print(plus(times(".",G),"#"))
              +\X*\#G      implicit_print(plus("X",times("#",G)))
                     +GH   implicit_print(plus(G,H))

পূর্ববর্তী প্রচেষ্টা:

JthQK@Q1+*++*\.J\#btK+\X*\#Jt+JK

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

নমুনা ইনপুট:

(4, 5)

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

...#
...#
...#
...#
X###
7

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

JthQK@Q1+*++*\.J\#btK+\X*\#Jt+JK
                                 assign('Q',eval_input())        --Q is now an official pair of numbers (4, 5)
JthQ                             assign("J",decrement(first(Q))) --gets the first element, and then take 1 from it, and assign it to J
    K@Q1                         assign("K",lookup(Q,1))         --K is now the second element (count from 0) of the pair.
        +            +\X*\#J     concat(-----------------------------------------------------------,concat("X",times("#",J)))
         *         tK                   repeat(--------------------------------------,decrement(K))
          +       b                            concat(-------------------------,"\n")
           +    \#                                    concat(-------------,"#")
            *\.J                                             repeat(".",J)
                            t+JK decrement(add(J,K)) <--- auto-print

@ মার্টিনবাটনার সম্ভবত আপনি আমাকে এই গল্ফ সাহায্য করতে পারেন?
লিকি নুন

@ কেনিলাউ আমি কোনও পাইথ জানি না ...
মার্টিন এন্ডার

@ মার্টিনবাটনার পাইথের পরাজিত হবার পক্ষে এটি বেশ বিব্রতকর, ডান
লিকি নুন

আপনি প্রথম দুটি কার্যটি একত্রিত করতে পারেন AtMQ। এটি দুটি মান নির্ধারণ করে Gএবং H
জাকুবে

1

সিজেম, 35 33 বাইট

q~\(_2$(+p'.*a*'#f+)W%_"X#"era+N*

ফর্মটি ইনপুট নেয় width heightএবং সমাধান গ্রিডের পরে প্রথম লাইনে সরানো গণনা আউটপুট করে।

এটি এখানে পরীক্ষা করুন।

এটি একই বাইট গণনার জন্যও কাজ করে:

q~\('.*a*'#f+)W%_"X#"era+N*_'#e=p

কিছুক্ষণের মধ্যে কোনও সিজেএম সমাধান দেখেনি।
সাইয়েস


1

রুবি, 48 বাইট

এটি একটি বেনামে ফাংশন, যা এই মেটা পোস্ট অনুসারে গ্রহণযোগ্য হবে যদি না প্রশ্নটি "সম্পূর্ণ প্রোগ্রাম" না বলে থাকে। আমি সাধারণত এটি সম্পর্কে পেডেন্টিক থাকব না তবে সমস্যাটি খুব সহজ এবং একটি প্রোগ্রাম করা স্কোরের ক্ষেত্রে উল্লেখযোগ্য% বৃদ্ধি হবে।

ইনপুট দুটি আর্গুমেন্ট। রিটার্ন মান হল এমন একটি অ্যারে যা ASCII আর্ট স্ট্রিং এবং #পথের সংখ্যা containing

->w,h{[(?.*(w-=1)+'#
')*(h-=1)+?X+?#*w,w+h]}

পরীক্ষা প্রোগ্রামে

f=->w,h{[(?.*(w-=1)+'#
')*(h-=1)+?X+?#*w,w+h]}

puts f[4,5]

আউটপুট

...#
...#
...#
...#
X###
7

এটি ডাব্লু -1 ডটগুলির h-1 সারিগুলির একটি স্ট্রিং, এর পরে একটি #এবং নিউলাইন line আমি উভয় এবং নিউলাইন উভয়ের জন্য #একটি একক #\nআক্ষরিক ব্যবহারের জন্য #প্রান্তটি রেখেছিলাম (কোডটিতে একটি পালানোর ক্রমের পরিবর্তে সত্যিকারের নতুন লাইন থাকে)) চূড়ান্ত সারিটি তারপরে Xডাব্লু -1 #এর পরে আসে।

এটি ASCII শিল্প প্রজন্মের সময় ডাব্লু এবং এইচ এর মান হ্রাস করার চেয়ে কম ছিল, যাতে চূড়ান্ত গণনাটি সহজ হয় w+h


1

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

w=>h=>--w+--h+`
${"."[r="repeat"](w)}#`[r](h)+`
X`+"#"[r](w)

ব্যবহার

f(4)(5)

7
...#
...#
...#
...#
X###

1

এমএটিএল , 28 26 25 বাইট

+qq35IMwX"46 5Lt4$(88HG(c

সম্পাদনা (10 জুন, 2016): নীচের লিঙ্কটিতে ভাষার পরিবর্তনের সাথে মানিয়ে নিতে একটি পরিবর্তন ( 5Lপ্রতিস্থাপন করা হয়েছে IL) অন্তর্ভুক্ত রয়েছে

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

ব্যাখ্যা

+       % take two inputs. Add them
qq      % subtract 2
35      % push ASCII for '#'
IMw     % push the two inputs again. Swap them
X"      % 2D char array of '#'  repeated as indicated by inputs
46      % push ASCII for '.'
5Lt4$(  % fill all but last and row columns with that
88HG(   % fill 88 (ASCII for 'X') at linear index given by second input
c       % convert to char

0

স্কালা, 118 বাইট

(w:Int,h:Int)=>{print(Array.fill(h-1,w-1)('.')map(new String(_))mkString("","#\n","#\nX"));Seq.fill(w-1)(print("#"))}


(w:Int,h:Int)=>{...}           //define a function with 2 Ints as parameters
print(                        //print ...   
  Array.fill(h-1,w-1)('.')    //an array of arrays with dimensions (h-1,w-1)
                              //and fill it with a dot
  map(new String(_))          //map each inner array of chars to a string
  mkString("","#\n","#\nX")   //create a string from the array, with
                              //an empty string before the array,
                              //"#\n" as a seperator between the elements
                              //and "#\nX" at the end   
);
Seq.fill(w-1)(print("#"))     //w-1 times print "#"

0

হাস্কেল, 64 বাইট

c!n=c<$[2..n]
w#h=unlines$('.'!w++"#")!h++['X':'#'!w,show$w+h-2]

ব্যবহারের উদাহরণ:

*Main> putStr $ 4 # 5
...#
...#
...#
...#
X###
7

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

c!n = c <$ [2..n]                       -- helper function: make (n-1) copies of c

                                        -- main function
                     !h                 -- (h-1) times
       ('.'!w ++ "#")                   --    (w-1) dots and a hash sign
                       ++[      ,     ] -- followed by
                          'X' : '#'!w   --    an 'X' and (w-1) hash signs
                            show$w+h-2  --    and the number of steps
unlines                                 -- join everything with newlines in-between

0

জাভা, 137 132 বাইট

w->h->{String s="";int i=0,j;for(;i<h;i++){for(j=1;j<w;j++)s+=".";s+="#\n";}s+="X";for(j=1;j<w;j++)s+=".";s+="\n"+(w+h-2);return s;}

জাভা যদিও তামাশা নয় ...
ericw31415

s + = এর পরিবর্তে s = s + আপনাকে কয়েকটি বাইট সংরক্ষণ করবে
নীল


0

পাইথন, 48।

lambda w,h:('.'*(w-1)+'#\n')*(h-1)+'X'+'#'*(w-1)

এটি ব্যবহার করতে f=উপরের লাইনের আগে যুক্ত করুন এবং এটিকে কল করুন:

f(4, 5)

ফলাফল:

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