কিছু এএসসিআইআই-বাক্স আঁকুন


19

অ-নেতিবাচক পূর্ণসংখ্যার দুটি তালিকা নিন এবং নীচে সংজ্ঞায়িত হিসাবে একটি ASCII- বাক্স আউটপুট করুন।

  • কোণ এবং ছেদগুলি প্লাস: +(এএসসিআইআই কোড 43)
  • উল্লম্ব লাইনগুলি বার |(এএসসিআইআই কোড 124)
  • অনুভূমিক লাইনগুলি বিয়োগ -(এএসসিআইআই কোড 45)

প্রথম ইনপুট তালিকাটি অনুভূমিক দিকের প্রতিটি প্লাস চিহ্নের মধ্যে বিয়োগের সংখ্যা নির্দিষ্ট করে।

দ্বিতীয় ইনপুট তালিকাটি উল্লম্ব দিকের প্রতিটি প্লাস চিহ্নের মধ্যে থাকা বারগুলির সংখ্যা নির্দিষ্ট করে।

কয়েকটি উদাহরণ দিয়ে ব্যাখ্যা করা আরও সহজ:

0    // No minuses between each + sign
0    // No bars between + signs

++
++

------------------
1 2   // First a single minus, then two minuses 
1 2   // First  one bar, then two bars

+-+--+
| |  |
+-+--+
| |  |
| |  |
+-+--+


------------------
1 0 3 0 2 0
2 1 0 0

+-++---++--++
| ||   ||  ||
| ||   ||  ||
+-++---++--++
| ||   ||  ||
+-++---++--++
+-++---++--++
+-++---++--++

ব্যাখ্যা:

  • ইনপুট অর্ডার এবং ফর্ম্যাট .চ্ছিক
  • কেবলমাত্র বাক্সগুলি মুদ্রিত / প্রদর্শিত হওয়া উচিত, তবে একটি অনুবর্তী স্থান বা নতুনলাইন গ্রহণ করা হবে।
  • যদি এটি সুবিধাজনক হয় তবে আপনি বিকল্পভাবে সমস্ত ইনপুট মানগুলিতে 1 যুক্ত করতে পারেন। দ্বিতীয় উদাহরণ তারপর হবে: 2 3; 2 3

এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি।


উত্তর:


5

এমএটিএল , 25 22 21 বাইট

'|-+ '2:"1tiYsQ(]E!+)

যোগযুক্ত ইনপুটগুলি ব্যবহার করে 1(চ্যালেঞ্জের দ্বারা অনুমোদিত)।

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

ব্যাখ্যা

কোডটি প্রাথমিকভাবে 1চূড়ান্ত ফলাফলটিতে ফাঁকা স্থান অক্ষরের কলাম সূচকগুলির জন্য একটি অ্যারে তৈরি করে এবং 0অন্যথায়। সুতরাং যদি প্রথম ইনপুট হয় [2 1 4 1 3 1]( [1 0 3 0 2 0]0-ভিত্তিক ফর্ম্যাটে হবে) এই অ্যারে হবে

1 0 1 1 0 0 0 1 1 0 0 1 1

জিরো রানের দৈর্ঘ্য কীভাবে ইনপুটটির সাথে সম্পর্কিত তা নোট করুন। বিশেষত, এই অ্যারেটি নিম্নরূপে নির্মিত হয়েছে:

  1. অ্যারেটিকে একটি এককতে প্রাথমিককরণ করুন 1
  2. ইনপুটটির সংযোজক যোগফলটি গণনা করুন এবং যুক্ত করুন 1। উদাহরণস্বরূপ এটি দেয় [3 4 8 9 12 13]
  3. পদক্ষেপ 2 দ্বারা 1প্রদত্ত (1-ভিত্তিক) সূচকগুলির সাথে এন্ট্রিগুলিকে বরাদ্দ করে পদক্ষেপ 1 থেকে অ্যারে প্রসারিত করুন মধ্যবর্তী এন্ট্রিগুলি স্বয়ংক্রিয়ভাবে সেট হয়ে গেছে 0

সারিগুলির জন্য একই ধরণের অ্যারে তৈরি করা হয়। দ্বিতীয় ইনপুট [3 2 1 1](বা [2 1 0 0 ]) দেয়

1 0 0 1 0 1 1 1

এখন দ্বিতীয় অ্যারেটি প্রথম দ্বারা 2সম্প্রচারের মাধ্যমে গুণিত , স্থানান্তরিত এবং যুক্ত হয়। এটি 2D অ্যারে দেয়

3 2 3 3 2 2 2 3 3 2 2 3 3
1 0 1 1 0 0 0 1 1 0 0 1 1
1 0 1 1 0 0 0 1 1 0 0 1 1
3 2 3 3 2 2 2 3 3 2 2 3 3
1 0 1 1 0 0 0 1 1 0 0 1 1
3 2 3 3 2 2 2 3 3 2 2 3 3
3 2 3 3 2 2 2 3 3 2 2 3 3
3 2 3 3 2 2 2 3 3 2 2 3 3

স্ট্রিংয়ের ইনডেক্সিং '|-+ '2D চর অ্যারে হিসাবে চূড়ান্ত ফলাফল দেয়। যেহেতু ইনডেক্সিং মডুলার এবং 1-ভিত্তিক, সূচকটি 0শেষ উপাদানটির সাথে মিলিয়ে যায় (স্থান)।

'|-+ '                   % Push this string
      2:"       ]        % Do this twice
         1               % Push 1 (initial array)
          t              % Push another 1 (contents to be filled in)
           i             % Take input
            Ys           % Cumulative sum
              Q          % Add 1
               (         % Fill 1 into those entries of the array
                 E       % Multiply by 2
                  !      % Transpose
                   +     % Add, with broadcast
                    )    % Index (modular, 1-based) into the string

6

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

def f(h,v):r="+"+"+".join("-"*i for i in h)+"+\n";print r+r.join(("|"+"|".join(" "*i for i in h)+"|\n")*i for i in v)+r

আদর্শে এটি চেষ্টা করুন।

এ থেকে খুব বেশি আশা করা যায় না। সত্যই সহজ, সবকিছু একসাথে টানতে কেবল অজগরকে যুক্ত করে এবং স্ট্রিং গুণকে ব্যবহার করে।


6

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

(a,b,g=(a,[s,t])=>t+a.map(n=>s.repeat(n)+t).join``+`
`)=>g(b,[g(a,` |`),g(a,`-+`)])

আউটপুট দুটি ট্রেলিং নিউলাইন অন্তর্ভুক্ত।


কি দারুন. সুতরাং অনুরূপ উত্তর প্রায় একই সময়ে পোস্ট করা। ;)
আর্নল্ড

(আপনি আমাকে 2 মিনিট এবং 2 বাইট দ্বারা প্রহার করেছেন, যদিও)
আর্নল্ড

@ আরনাউল্ড আপনি আপনার ডেমোতে সময় নষ্ট করেছেন ;-)
নীল

হ্যাঁ, আমিও তাই অনুমান করি। ^^ মজার বিষয় হল, আমার সংস্করণটি দুটি পেছনের নতুন লাইনের সাথে 81 বাইট হবে।
আর্নৌল্ড


1

পাইথ, 45 বাইট

AQj.i*hlH]Js.i*hlG\+m*d\-G-mjb*d]XJ"+-""| "Hk

একটি প্রোগ্রাম যা STDIN এ দুটি কমা-বিচ্ছিন্ন তালিকার ইনপুট নেয় এবং ফলাফল মুদ্রণ করে।

এখানে এখনও কিছু গল্ফ করার দরকার আছে।

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

ব্যাখ্যা পরে আসছে


1

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

f[a,b]x=a:do n<-x;(b<$[1..n])++[a]
g x=f[f"+-"x,f"| "x]

একটি ফাংশন সংজ্ঞায়িত করে gযা দুটি ইনপুট তালিকা গ্রহণ করে এবং আউটপুটটির লাইনগুলি সহ একটি তালিকা প্রদান করে


0

পাওয়ারশেল ভি 2+, 89 বাইট

param($a,$b)($x="+$(($a|%{'-'*$_})-join'+')+")
$b|%{,"|$(($a|%{' '*$_})-join'|')|"*$_;$x}

ডাং, ভাববেন না আমি জাভাস্ক্রিপ্ট বেশ ধরতে পারি।

ইনপুট $aএবং $bসুস্পষ্ট অ্যারে হিসাবে নেয় । পরিবর্তনশীল সেট $xমাধ্যমে looping উপর ভিত্তি করে বাক্সে শীর্ষ সারিতে হতে $aএবং কিছু স্ট্রিং সংযুক্তকরণের। এটি পেরেন্সে এনপ্যাপুলেটেড তাই এটি পাইপলাইনে রাখা হয়েছে। এর পরে, আমরা মাধ্যেমে লুপ $b, প্রতিটি পুনরাবৃত্তির পাইপলাইন প্রকল্পের দুটি স্ট্রিং নির্বাণ - একই শৈলী স্ট্রিং কিন্তু স্পেস এবং |পরিবর্তে হাইফেন এবং +, এবং $x। এই স্ট্রিংগুলি সমস্ত পাইপলাইন থেকে Write-Outputপ্রোগ্রামের সমাপ্তির সাথে অন্তর্ভুক্ত হয় এবং তাদের মধ্যে ডিফল্ট নিউলাইন থাকে।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\make-some-ascii-boxes.ps1 @(0) @(0)
++
++

PS C:\Tools\Scripts\golfing> .\make-some-ascii-boxes.ps1 @(1,0,3,0,2,0) @(2,1,0,0)
+-++---++--++
| ||   ||  ||
| ||   ||  ||
+-++---++--++
| ||   ||  ||
+-++---++--++
+-++---++--++
+-++---++--++

PS C:\Tools\Scripts\golfing> .\make-some-ascii-boxes.ps1 @(1,4,1) @(1,2,1)
+-+----+-+
| |    | |
+-+----+-+
| |    | |
| |    | |
+-+----+-+
| |    | |
+-+----+-+

0

রুবি, 66 বাইট

->x,y{d=->c,m,z=x{c+z.map{|w|m*w}*c+c+$/}
d[d[?+,?-],d[?|,' '],y]}

0

জেলি , 30 26 বাইট

Ḣị“+-“| ”ị@
1;+\Ṭ
Ç€,€/Ñ€Y

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

কিভাবে?

গৃহীত ইনপুটটি দুটি তালিকার একটি তালিকা [vertical, horizontal], এবং বর্ধিত বিকল্প ব্যবহার করে
- উদাহরণস্বরূপ 3 লাগে [[3,2,1,1], [2,1,4,1,3,1]]
প্রতিটি এটিকে যথাক্রমে সারি টাইপ বা সারিচ্যাকারটাইপ নির্দেশ করে একটি বুলিয়ান অ্যারে রূপান্তরিত হয়, উদাহরণস্বরূপ [[1,0,0,1,0,1,1,1], [1,0,1,1,0,0,0,1,1,0,0,1,1]]
বাক্সগুলি পরে সারিগুলি তৈরি করে তৈরি করা হয় সারি টাইপ এবং সারিচ্যাকারটাইপ সংমিশ্রণগুলি দ্বারা চিহ্নিত অক্ষরগুলি - অর্থাত্ একটি সারি টাইপ হয় "+-"বা "| "একটি এবং একটি সারিচ্যাকারটাইপ এই দুটি অক্ষরের একটি চিহ্নিত করে।

Ḣị“+-“| ”ị@ - Link 1, create a row: [rowType, [rowCharaterTypes]]
Ḣ           - head - get the rowType
  “+-“| ”   - list of strings ["+-", "| "]
 ị          - index into (if rowType is 1 "+-"; if rowType is 0 "| ")
         ị@ - index into with reversed operands (index into that from rowCharaterTypes)
                (replace each 1 in rowCharaters with "+" or "|" and each 0 with "-" or " ")

1;+\Ṭ - Link 2, create the Type lists from the inputs: int[] nCharacters
1;    - 1 concatenated with the input
  +\  - reduce with addition (accumulation provides the indices)
    Ṭ - boolean array with 1s at those indices
            As an example take the vertical of example 3:
            [3,2,1,1] -> [1,3,2,1,1] -> [1,4,6,7,8] -> [1,0,0,1,0,1,1,1]
            each of which will be passed as a rowType for Link 1

Ç€,€/Ñ€Y - Main link, takes one argument: [Vertical, Horizontal] (incremented option)
Ç€       - call the last link (2) for each of the two lists in the input
  ,€/    - pair each and reduce (making a list of [rowtype [rowCharacterTypes]])
     р  - call the next link (1) for each
       Y - join on line feeds
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.