উদ্যানের আর্কিটেকচার - এএসসিআইআই শৈলী


18

আমাদের বাড়ির বাইরে 10x10 মিটার বর্গাকার বাগান রয়েছে। আমরা ঘাস রোপণ করতে এবং একটি টেরেস তৈরি করতে চাই। আমরা কীভাবে বাগানটি বিভক্ত করব তা স্থির করেছি, তবে আমরা ঘাস বনাম টেরেসের পরিমাণের মধ্যে অনুপাতটি সিদ্ধান্ত নিই নি।

আমাদের এটির দৃষ্টিভঙ্গি করতে সহায়তা প্রয়োজন, এবং এএসসিআইআই-আর্ট এটি করার সর্বোত্তম উপায় clearly


চ্যালেঞ্জ:

অন্তর্ভুক্ত ব্যাপ্তিতে [0, 100] (বা allyচ্ছিক দশমিক [0, 1]) পূর্ণসংখ্যায় উদ্যানের প্রতিনিধিত্ব করুন যে বাগানের কত শতাংশ টেরেস হওয়া উচিত।

এক বর্গ মিটার টেরেসকে কোনও ড্যাশ -বা একটি বার দ্বারা প্রতিনিধিত্ব করা হবে |। এক বর্গমিটার ঘাস একটি হ্যাশ চিহ্ন দ্বারা প্রতিনিধিত্ব করা হবে #

  • যদি টেরেসের পরিমাণ 50% এর থেকে কম বা সমান হয়, তবে বাগানটি নীচে বাম কোণে শুরু করে বারগুলি দিয়ে coveredেকে রাখা উচিত এবং অনুভূমিকভাবে পূরণ করা উচিত।
  • যদি টেরেসের পরিমাণ 50% এর বেশি হয় তবে আমরা ডেকিংটি অন্য উপায়ে (বারের পরিবর্তে ড্যাশগুলি) হওয়া এবং নীচের বাম কোণে শুরু করতে এবং অনুভূমিকভাবে পূরণ করতে চাই, তারপর উল্লম্বভাবে।

উদাহরণ:

N = 25%
||########
||########
||########
||########
||########
|||#######
|||#######
|||#######
|||#######
|||#######

N = 75%
##########
##########
-----#####
----------
----------
----------
----------
----------
----------
----------

N = 47%
||||######
||||######
||||######
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####

N = 50%
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####

N = 51%
##########
##########
##########
##########
-#########
----------
----------
----------
----------
----------

N = 0%
##########
##########
##########
##########
##########
##########
##########
##########
##########
##########

N = 100%
----------
----------
----------
----------
----------
----------
----------
----------
----------
----------

এটি তাই বাইটসের সংক্ষিপ্ততম কোড। আই / ও সম্পর্কিত মানক বিধি এটি ASCII- আর্ট, সুতরাং আউটপুট উপরের উদাহরণগুলির মতো হওয়া উচিত। অর্থাৎ আউটপুটটিং ["|", "|" ...]ঠিক নেই not

ব্যাখ্যা সর্বদা হিসাবে উত্সাহিত হয় :)


2
আমার প্রথম ধারণাটি ছিল যে দুটি ক্ষেত্রে কেবল দুটি পৃথক গল্ফিং কাজগুলি সমাধান করার অর্থ হ'ল, তবে এমন একটি সাধারণ কাঠামো পাওয়া যায় যা তাদের মধ্যে ভাগ করে নেওয়ার কোডকে মূল্যবান করে তোলে।
xnor

উত্তর:


7

এপিএল (ডায়ালগ) , 34 বাইট

বেনামে উপসর্গ ফাংশন 0-100 পরিসীমাতে পূর্ণসংখ্যা আশা করে। ধরে নেওয়া ⎕IO( I ndex O rigin) 0, যা বহু সিস্টেমে ডিফল্ট।

{'#-|'[⊖⍉⍣s10 10100↑⍵⍴1+s50≥⍵]}

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

{} ল্যাম্বদা; যুক্তি:

'#-|[] নিম্নলিখিত অ্যারের সাথে স্ট্রিং সূচক করুন:

50≥⍵ 1 যদি 50 টি আর্গুমেন্টের চেয়ে বড় বা সমান হয়, অন্যথায় 0

s← এস ( এস মলের জন্য) স্টোর

1+ বৃদ্ধি

⍵⍴ cyclically r যুক্তি দৈর্ঘ্যের করার eshape

100↑ এর প্রথম শতটি নিন, শূন্যের সাথে প্যাডিং করুন

10 10⍴আর দশটি সারি এবং দশটি কলামে এস্যাপ করুন

 ফলন যে ( sথেকে পৃথক 10 10)

⍉⍣s ছোট হলে স্থানান্তর

 উল্টে উল্টানো


1
{ '# - |' [⊖ (⍉ + + ⍨) ⍣ (⍵≤50) ⊢⍵> ⍎¨∘, ⍨⎕d।]}
ngn

1
আমার পদ্ধতির খুব কাছাকাছি:{⊖⍉⍣c⊢10 10⍴(⍵/'-|'⊃⍨c←⍵≤50),100/'#'}
এরিক আউটগল্ফার

@EriktheOutgolfer আপনি শুধুমাত্র প্রয়োজন99/'#'
ngn

@ ওহ ঠিক আছে,
এরিক আউটগল্ফার

1
@ngn এটি সম্পূর্ণ আলাদা। আপনি এটি পোস্ট করেন না কেন?
অ্যাডম

5

জে , 39, 38 37 বাইট

[:|.>&50|:'#-|'"0{~_10]\100{.]$1+51>]

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

                     _10]\100{.]$1+51>] - prepares a 10x10 array of 0, 1 or 2
                                 1+51>] - 1 if N<=50 otherwise 2
                               ]$       - list of N copies of the above (1 or 2)
                          100{.         - the above list filled to 100 items with 0
                     _10]\              - reshape the list to a 10x10 array
           '#-|'"0                      - constant array of chars
                   {~                   - replaces each digit 0, 1 or 2 with #, - or |     
     >&50                               - is N>50 ? 
         |:                             - if not, transpose the array
                                          (in fact |: here is rearrange axes
                                           0 - transpose
                                           1 - leave it intact)        
 |.@                                    - reverse the order ot the rows

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


{.সীমানা যুক্তি দিয়ে একটি দুর্দান্ত কৌশল।
জোনা

2
31 বাইট:(]|.@|:_10{&'#|-'\100{.1+$)>&50
ফ্রাউনফ্রগ

@ ফ্রাউনফ্রগ - দুর্দান্ত কোড!
গ্যালেন ইভানভ

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

5

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

[0 ... 100] এ পূর্ণসংখ্যার হিসাবে ইনপুট নেয় ।

n=>(y=9,g=x=>~y?'|-#'[[x,y][k=n/51|0]*9+x+y<n?k:2]+[`
`[x-9]]+g(x++-9?x:!y--):'')(0)

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

ফর্ম্যাট এবং মন্তব্য

n => (                          // given the terrace percentage n
  y = 9,                        // and starting with y = 9
  g = x =>                      // g = recursive function taking x:
    ~y ?                        //   if y is greater than or equal to 0:
      '|-#'[                    //     pick the relevant character:
        [x, y][k = n / 51 | 0]  //       using k = 1 if n > 50, 0 otherwise
        * 9 + x + y             //       and comparing either 10 * x + y or 10 * y + x
        < n ?                   //       with n; if we're located over the terrace area:
          k                     //         append either '|' or '-'
        :                       //       else:
          2                     //         append '#'
      ] +                       //     end of character insertion
      [`\n`[x - 9]] +           //     append a linefeed if x == 9
      g(x++ - 9 ? x : !y--)     //     update (x, y) and do a recursive call
    :                           //   else:
      ''                        //     stop recursion
)(0)                            // initial call to g with x = 0


4

জেলি , 23 বাইট

<©51ị⁾|-ẋḷ"”#ẋ³¤s⁵Z®¡ṚY

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

Çইনপুট পরিবর্তন করতে ফুটারের আগে নম্বরটি পরিবর্তন করুন। কমান্ড-লাইন আর্গুমেন্ট ছাড়াই কোনও প্রোগ্রামে মোনাডিক লিঙ্ক হিসাবে কাজ করে, যা অনুমোদিত


খুব সুন্দর উত্তর +1। ȷ2³
মোনাডিক

আমি 24 বাইটও পেতে পেরেছি, ভেবেছিলাম এটি এখানেও অনুপ্রেরণার উত্স হতে পারে।
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার আমি এটির কথা ভেবেছিলাম, তবে আমি সত্যিই নিশ্চিত নই যে আমি যদি এ জাতীয় কোনও ধারণা গ্রহণ করতে পারি (কেবল নীলাদিক প্রোগ্রামগুলিতে কাজ করব? হুম ...)
এরিক দ্য আউটগল্ফার

ডেনিসের সাথে আমার এই আলোচনাটি দেখুন ।
মিঃ এক্সকোডার

3

এসডাব্লুআই প্রোলগ, 249 বাইট

p(X):-write(X).
r(X,Y,G):-G=<50,10*X-Y+1=<G,p('|').
r(_,_,G):-G=<50,p('#').
r(X,Y,G):-(10-Y)*10+X>G,p('#').
r(_,_,_):-p('-').
l(_,11,_):-nl.
l(X,Y,G):-r(Y,X,G),Z is Y+1,l(X,Z,G).
a(10,G):-l(10,1,G).
a(Y,G):-l(Y,1,G),Z is Y+1,a(Z,G).
s(G):-a(1,G),!.

সমাধানটি বেশ সোজা। প্রক্রিয়াটি aসারি তৈরি করে, lএকটি সারিতে কলামগুলিতে অক্ষর লিখি এবং rকোন অক্ষরটি প্রিন্ট করা উচিত তা স্থির করে।


2
G<51পরিবর্তে কাজ করা উচিত G<=50
লাইকনি

3

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

'|-#'100:i>~o10eG50>?!E]P)

এটি অনলাইন চেষ্টা করুন! অথবা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

'|-#'     % Push this string
100:      % Push array [1 2 ... 100]
i         % Input a number and push it
>~        % Less than or equal (element-wise)? This transforms the
          % array into [true ... true false ... false]
o         % Convert to double. True becomes 1, false becomes 0
10e       % Rehaspe into 10-row matrix, in column-major order
G         % Push input
50>       % Greater than 50?
?         % If so
  !       %   Transpose
  E       %   Multiply by 2 (element-wise). So 0 remains as 0, and
          %   1 becomes 2
]         % End
P         % Flip vertically
)         % Index into string, modularly. So 1 corresponds to '|',
          % 2 to '-', and 0 to '#'
          % Implicitly display

3

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

T=j=10
n=input()+T
while j:print([(n-j)/T*'|',min(n-T*j,T)*'-'][n>60]+'#'*T)[:T];j-=1

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

উভয় ক্ষেত্রে প্রতিটি লাইন ডানদিকে #দৈর্ঘ্য 10 দ্বারা প্যাড করা হয় , যা আমাদের দুটি কেসের মধ্যে সেই কোডটি ভাগ করে দেয়। 10 নম্বরটি প্রায়শই যথেষ্ট ব্যবহৃত হত যে এলিয়াসিং T=10একটি শালীন সংখ্যা বাইট সংরক্ষণ করেছিল।


অবৈধ! ইনপুট থেকে 51এবং পরে, এটি একটি সারি মিস করে।
এরিক আউটগল্ফার

@ এরিকথ আউটগলফার
xnor

@ এরিকথ আউটগল্ফার ধন্যবাদ, আমি মনে করি এটি ঠিক করে দিয়েছে?
এক্সএনওর

দেখে মনে হচ্ছে এটি ঠিক হয়ে গেছে।
এরিক দি আউটগল্ফার

2

রুবি , 92 82 বাইট

->n{puts (r=0..9).map{|y|r.map{|x|n>(n>50?100-y*10+x:x*10+9-y)?"|-"[n/51]:?#}*''}}

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

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

গ্রিডের প্রতিটি কক্ষের নীচের বাম কোণে শুরু হওয়া এবং অনুভূমিকভাবে বা উল্লম্বভাবে n এর মানের উপর নির্ভর করে প্রগতিশীল সংখ্যা রয়েছে:

যদি n>50, সংখ্যাটি 100-y*10+xঅন্যথায় এটি হয়x*10+9-y


2

কাঠকয়লা , 25 বাইট

NθGTχ#↶F÷θχ⟦χ⟧﹪θχ¿›θ⁵⁰‖T↖

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

Nθ                          Input integer into q
  G                         Draw filled polygon
   T                        Directions Right, Down, Left
    χ                       Size 10
     #                      Filled with `#`
      ↶                     Rotate cursor left (now points up)
       F÷θχ                 Repeat q/10 times (integer divide)
           ⟦χ⟧              Print 10 `|`s and move to the next column
              ﹪θχ           Print (q mod 10) `|`s
                 ¿›θ⁵⁰      If q > 50
                      ‖T↖   Reflect diagonally

1
@ স্টিভিগ্রিফিন ওফস, ভুল তির্যক। চেক না করার জন্য দুঃখিত।
নিল

এটি আসলে 25 টি অক্ষর , তবে 61 বাইট , তাই না?
জিরোঅন

@ জিরোওন চারকোল তার নিজস্ব কোড পৃষ্ঠা ব্যবহার করে ।
নিল

আচ্ছা বুঝলাম! বর্নানার জন্য ধন্যবাদ. :)
জিরোঅন

2

তুষ , 24 বাইট

↔?T†▼'-≤50⁰S↑C10+R⁰'|∞'#

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

ব্যাখ্যা

↔?T†▼'-≤50⁰S↑C10+R⁰'|∞'#  Input is a number, say n=12
                     ∞'#  Infinite string of #s: "#######...
                +         Prepend to it
                   '|     the character |
                 R⁰       repeated n times: "||||||||||||####...
             C10          Cut to pieces of length 10: ["||||||||||","||##########","##..
           S↑             Take first 10 pieces.
 ?     ≤50⁰               If n is at most 50,
  T                       then transpose,
   †▼'-                   else take minimum with '-' for each character.
↔                         Reverse, implicitly print separated by newlines.



1

এপিএল (ডায়ালগ ক্লাসিক) , 33 বাইট

f←{'#-|'[⊖(⍉+⍨)⍣(⍵≤50)⊢⍵>⍎¨∘.,⍨⎕d]}

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

অ্যাডামের উত্তরের ভিত্তিতে

⎕d স্ট্রিং হয় '0123456789'

∘., কার্টিজিয়ান পণ্য

নিজেই

⍎¨ প্রতিটি মূল্যায়ন করুন - 0..99 এর 10x10 ম্যাট্রিক্স পান

⍵>আর্গুমেন্টটি বেশি হওয়ার জন্য বুলিয়ান ম্যাট্রিক্স

বিভাজক হিসাবে কাজ করে

(⍉+⍨)⍣(⍵≤50)যদি ⍵≤50 ম্যাট্রিক্সের দ্বিগুণ হয় ( +নিজেই) এবং ট্রান্সপোজ করে ( )

উল্লম্ব বিপরীত

'#-|'[ ]'#-|'ম্যাট্রিক্সের প্রতিটি উপাদানগুলির সাথে স্ট্রিংকে সূচী করুন


এই ব্যাখ্যাটি দুর্দান্ত, ইমো।
অ্যাডাম


1

রেটিনা , 72 62 বাইট

.+
$*|
T`|`-`.{51,}
$
100$*#
M!10`.{10}
O$s`(?<!-.*)\S
$.%`
O`

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। সম্পাদনা করুন: @ মার্টিনইেন্ডারের কিছু সহায়তায় 10 বাইট সংরক্ষণ করা হয়েছে। ব্যাখ্যা:

.+
$*|

|প্রদত্ত সংখ্যাটির পুনরাবৃত্তি করুন

T`|`-`.{51,}

তবে যদি ইনপুটটি কমপক্ষে 51 হয় তবে সেগুলিতে পরিবর্তন করুন -

$
100$*#

100 #এস যোগ করুন।

M!10`.{10}

10 টির 10 টি গ্রুপে বিভক্ত করুন, কিছু বাদ পড়েছে।

O$s`(?<!-.*)\S
$.%`

যদি ইনপুটটি কমপক্ষে 51 হয় তবে ফলাফলটি স্থানান্তর করুন।

O`

ফলাফলটি বাছাই করুন।

বিকল্প সমাধান, এছাড়াও 62 বাইট:

.+
$*|
T`|`-`.{51,}
$
100$*#
M!10`.{10}
O`
O$^s`\S(?!.*-)
$.%`

ট্রান্সপোজ করার পূর্বে বাছাই করা স্থানান্তরের শর্তে বাইট সাশ্রয়ের অনুমতি দেয় তবে সঠিক ক্রমে ফলাফল পেতে একটি বাইট খরচ হয়।


আপনার #প্রথম Oপর্যায়ে দরকার নেই, কারণ $.%`সর্বাধিক হবে 9। আপনি এই মত শেষে আর একটি বাছাই পর্বের খরচে লুপ এড়ানো, কিছু বাইট সংরক্ষণ করতে পারেন: tio.run/##K0otycxL/... বোধহয় যে ফল পুনরায় সাজাতে এমনকি একটি খাটো উপায় Mচূড়ান্ত আকৃতি মধ্যে পর্যায় ।
মার্টিন ইন্ডার

হ্যাঁ, উদাহরণস্বরূপ আপনি Oস্টেজের পরে ডান দিকে সরল মঞ্চটি সরাতে পারেন M, যাতে আপনি লুকবিহাইডের পরিবর্তে লিকহ্যাড ব্যবহার করতে পারেন।
মার্টিন ইন্ডার

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



0

জেলি , 24 বাইট

³<51
ȷ2Ḷ<s⁵ZḤ$Ç¡Ṛị“-|#”Y

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

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

আমি অনেকগুলি সুপারস্ক্রিপ্ট ব্যবহার করি ...

³<51 ~ Helper link.

³    ~ The input.
 <   ~ Is smaller than
  51 ~ 51?
     ~ Yields 1 for truthy, 0 for falsy.

ȷ2Ḷ<s⁵ZḤ$Ç¡Ṛị“-|#”Y ~ Main link.

ȷ2                  ~ 1e2 (i.e compressed 100).
  Ḷ                 ~ Lowered range. Yields [0, 100) ∩ ℤ.
   <                ~ Is smaller than the input? (element-wise).
    s⁵              ~ Split into sublists of length 10.
         Ç¡         ~ Repeat <last link as a monad> times (either 1 or 0 times).
      ZḤ$           ~ Zip (transpose) and unhalve element-wise.
           Ṛ        ~ Reverse.
            ị       ~ Modular, 1-based indexing into...
             “-|#”  ~ The literal string "-|#".
                  Y ~ Join by newlines.

0

আর , 102 বাইট

n=scan();m=matrix("#",y<-10,y);m[0:n]="if"(n<51,"|","-");write("if"(n>50,m[,y:1],t(m[y:1,])),"",y,,"")

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

স্টিডিন nথেকে পড়ে এবং বাগানটি স্টাডাউটে মুদ্রণ করে।

ব্যাখ্যা:

n=scan()               # read from stdin
m=matrix("#",10,10)               # create 10x10 matrix of "#"
m[0:n]="if"(n<51,"|","-")         # set the first n entries in m to the appropriate character
m="if"(n>50,                      # prepare for printing using write
       m[,10:1],                  # reverse m left to right
       t(m[10:1,]))               # flip m top to bottom and transpose
write(m,"",10,,"")                # write m to stdout in 10 columns with no separator

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