এএসসিআইআই বাক্সগুলির আয়তন


40

ভূমিকা

এই চ্যালেঞ্জটিতে আপনাকে একটি আয়তক্ষেত্রাকার কিউবয়েড (3 ডি বক্স) এর নেট (উন্মুক্ত পৃষ্ঠ) এর ASCII উপস্থাপনা হিসাবে দেওয়া হবে । বিন্যাসটি হ'ল:

....+--+.......
....|##|.......
....|##|.......
....|##|.......
+---+--+---+--+
|###|##|###|##|
+---+--+---+--+
....|##|.......
....|##|.......
....|##|.......
....+--+.......

কিউবয়েডের প্রতিটি মুখই চক্রের #দ্বারা বেষ্টিত একটি আয়তক্ষেত্র +-|। জালের বাইরের অংশটি .এস দিয়ে ভরে গেছে । জালে সর্বদা একই অরিয়েন্টেশন থাকবে: তার চারটি প্রতিবেশী মুখ ঘিরে একটি মাঝারি মুখ এবং মধ্যম মুখের অংশটি ইনপুটটির ডান সীমানায় at ইনপুটটি .একটি আয়তক্ষেত্রাকৃতির আকারের সাথে প্যাডযুক্ত এবং এতে অতিরিক্ত সারি বা এর কলাম থাকবে না .

কাজটি

আপনার কাজটি উপরের মতো ডায়াগ্রাম হিসাবে ইনপুট হিসাবে নেওয়া এবং এটি যে কিউবয়েডের প্রতিনিধিত্ব করে তার ভলিউম গণনা করা যা এটির উচ্চতা, প্রস্থ এবং গভীরতার কেবলমাত্র পণ্য। আপনি ইনপুটটিকে একটি নতুন লাইন-বিস্মৃত স্ট্রিং বা স্ট্রিংগুলির একটি অ্যারে হিসাবে নিতে পারেন।

প্রতিটি প্রান্তের দৈর্ঘ্য হ'ল +এর দুই প্রান্তে-পাঠকদের মধ্যকার দূরত্ব । উদাহরণস্বরূপ, অনুভূমিক প্রান্তটির +--+দৈর্ঘ্য 3 এবং উল্লম্ব প্রান্ত রয়েছে

+
|
|
|
+

দৈর্ঘ্য ৪. একটি প্রান্তের সর্বনিম্ন দৈর্ঘ্য ১। উদাহরণস্বরূপ কিউবয়েডের ভলিউম 2 * 3 * 4 = 24 রয়েছে।

বিধি এবং স্কোরিং

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন এবং সর্বনিম্ন বাইট গণনা জিততে পারে।

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

.++..
+++++
+++++
.++..
1

...++....
...||....
...||....
+--++--++
+--++--++
...||....
...||....
...++....
3

..+-+....
..|#|....
+-+-+-+-+
|#|#|#|#|
|#|#|#|#|
+-+-+-+-+
..|#|....
..+-+....
12

.+---+.....
++---++---+
||###||###|
||###||###|
||###||###|
++---++---+
.+---+.....
16

....++.....
....||.....
....||.....
....||.....
+---++---++
|###||###||
|###||###||
|###||###||
+---++---++
....||.....
....||.....
....||.....
....++.....
16

...+--+......
...|##|......
...|##|......
+--+--+--+--+
|##|##|##|##|
+--+--+--+--+
...|##|......
...|##|......
...+--+......
18

....+--+.......
....|##|.......
....|##|.......
....|##|.......
+---+--+---+--+
|###|##|###|##|
+---+--+---+--+
....|##|.......
....|##|.......
....|##|.......
....+--+.......
24

....+-----+..........
....|#####|..........
....|#####|..........
....|#####|..........
+---+-----+---+-----+
|###|#####|###|#####|
|###|#####|###|#####|
|###|#####|###|#####|
|###|#####|###|#####|
+---+-----+---+-----+
....|#####|..........
....|#####|..........
....|#####|..........
....+-----+..........
120

13
আমি সত্যিই এই চ্যালেঞ্জ পছন্দ করি। ইনপুটটির এতগুলি অনর্থক কাঠামো রয়েছে বলে কীভাবে মাত্রাগুলি পুনরুদ্ধার করা যায় তার জন্য প্রচুর পছন্দ রয়েছে।
xnor

উত্তর:


25

রেটিনা , 29 28 বাইট

T`.p`xy`\G\..+¶
xy

¶\|
$`
y

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

একটা ব্যাপার অনেক তাই আমি এই কীভাবে করবেন নিশ্চিত নন অনুকূল হয়, কিন্তু এটি আসলে ইতিমধ্যে একটি অতি ছোট চেয়ে আমি ভেবেছিলাম এটা হবে, আপনি যা পার্শ্ব সঙ্গে সংখ্যাবৃদ্ধি করতে ইচ্ছুক সেটির এলাকায় অক্ষিপট মধ্যে এই পদ্ধতির উপায়, নির্ভর করে আছে।

আমি বর্তমানে একই বাইট গণনাতে আরও দুটি সমাধান পেয়েছি যা উপরের পদ্ধতির চেয়ে কিছুটা গল্ফযোগ্য বলে মনে হচ্ছে:

\G\..+¶

¶\|
$'¶
G`\.
T`.|+

¶\||\+¶\.\D+
$'¶
G`\.
T`.|+

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

এবং অন্যটি, এখনও 28 বাইটে (এটি আসলে একটি অঞ্চলকে এক পাশ দিয়ে গুণানোর পরিবর্তে তিনটি গুণকে বাড়ায়):

\G\.
x
-(?<=^.+)
$`
¶\|
$`
x

ব্যাখ্যা

মূল ধারণাটি হ'ল উল্লম্ব দিকের দৈর্ঘ্য দ্বারা ইনপুটটির দৈর্ঘ্যের সীমানাকে স্পর্শ করে উপরে মুখের ক্ষেত্রফলটি বহুগুণ করা।

আমি নীচের ইনপুটটিকে উদাহরণ হিসাবে ব্যবহার করব (এর পাশের দৈর্ঘ্য 2, 3 এবং 4, সুতরাং 24 এর একটি ক্ষেত্র):

...+---+.......
...|###|.......
...|###|.......
+--+---+--+---+
|##|###|##|###|
+--+---+--+---+
...|###|.......
...|###|.......
...+---+.......

মঞ্চ 1: লিপ্যন্তরেখা

T`.p`xy`\G\..+¶

রেজেক্স \G\..+¶একটি লাইনের সাথে মেলে যা এর সাথে শুরু হয় .এবং সাথে সাথে পূর্ববর্তী লাইনের সাথে সংলগ্ন। সুতরাং এটি শীর্ষে থাকা সমস্ত লাইনের সাথে মেলে। মঞ্চটি নিজেই .রূপান্তরিত হয় xএবং অন্যান্য সমস্ত অক্ষর (যে কোনও |+-#) এ রূপান্তরিত হয় y। এটি আমাদের নিম্নলিখিত ফলাফল দেয়:

xxxyyyyyxxxxxxx
xxxyyyyyxxxxxxx
xxxyyyyyxxxxxxx
+--+---+--+---+
|##|###|##|###|
+--+---+--+---+
...|###|.......
...|###|.......
...+---+.......

এটিতে yশীর্ষ মুখের অঞ্চলটি উপস্থাপন করার চেয়ে আমাদের আরও একটি কলাম রয়েছে । আমরা পরবর্তী পর্যায়ে এটি ঠিক করি।

দ্বিতীয় পর্যায়: প্রতিস্থাপন করুন

xy

সুতরাং আমরা yএকটি x(যা প্রতি লাইন প্রতি তাদের মধ্যে ঠিক একটি) এর আগে অবস্থিত একটি এবং আমরা উভয় স্ট্রিং থেকে অপসারণ। আমরা এটি পেয়েছি:

xxyyyyxxxxxxx
xxyyyyxxxxxxx
xxyyyyxxxxxxx
+--+---+--+---+
|##|###|##|###|
+--+---+--+---+
...|###|.......
...|###|.......
...+---+.......

সুতরাং এখন আমরা শীর্ষ সংখ্যার প্রতিনিধিত্ব করে এমন মুখের ক্ষেত্রফল পেয়েছি y

পর্যায় 3: প্রতিস্থাপন করুন

¶\|
$`

এখানে আমাদের লক্ষ্যটি হ'ল Aপাশের দৈর্ঘ্যের দ্বারা এই অঞ্চলটিকে গুণিত করা , যা |একটি লাইন প্লাস 1 এর শুরুতে সংখ্যা However তবে, এটি একটি সংখ্যার দ্বারা গুণ করা আসলেই সহজ n+1কারণ আমরা ইতিমধ্যে Aস্ট্রিংয়ের একটি অনুলিপি পেয়েছি number । আমরা যদি প্রতিস্থাপন nসঙ্গে জিনিসগুলি A, আমরা দিয়ে শেষ n+1কপি A। এটি আমাদের জন্য বিষয়গুলি অনেক সহজ করে তোলে।

সুতরাং আমরা |ম্যাচের সামনের সবকিছু দিয়ে একটি লাইনফিডের পরে অবিলম্বে যেকোনটিকে প্রতিস্থাপন করি । এই স্ট্রিংটি বেশ অনেকাংশে ম্যাঙ্গলেস করে এবং এটি আমাদের প্রয়োজনের তুলনায় মোটামুটি আরও বড় করে তোলে তবে yএর ফলাফলগুলি আমরা সন্ধানের ফলাফল হিসাবে শেষ হয়:

xxyyyyxxxxxxx
xxyyyyxxxxxxx
xxyyyyxxxxxxx
+--+---+--+---+xxyyyyxxxxxxx
xxyyyyxxxxxxx
xxyyyyxxxxxxx
+--+---+--+---+##|###|##|###|
+--+---+--+---+
...|###|.......
...|###|.......
...+---+.......

মঞ্চ 4: ম্যাচ

y

yযা আছে তা হ'ল s এর সংখ্যা গণনা করা , যা শেষে দশমিক সংখ্যা হিসাবে মুদ্রিত হয়।


15

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

lambda l:l[0].find('+')*~l[0].count('-')*~`l`.count("'|")

স্ট্রিংগুলির একটি তালিকা গ্রহণ করে এমন একটি ফাংশন।

3 টি মাত্রা আলাদাভাবে নির্ধারণ করে:

l[0].find('+')
+প্রথম সারিতে প্রথমটির সূচক ।

-~l[0].count('-')
-প্রথম সারিতে চিহ্নের সংখ্যা ।

~`l`.count("'|")
|প্রতীক দিয়ে শুরু হওয়া সারিগুলির সংখ্যা , তালিকার স্ট্রিং উপস্থাপনার মাধ্যমে এর আগে একটি উদ্ধৃতি চিহ্ন রয়েছে।


62 বাইট:

def f(l):a=l[0].find('+');print(len(l[0])/2-a)*(len(l)-a+~a)*a

স্ট্রিংগুলির একটি তালিকা গ্রহণ করে ফলাফল মুদ্রণ করে এমন একটি ফাংশন।

প্রথম সারিতে aসূচক হিসাবে একটি মাত্রা সন্ধান করে +। অন্যান্য দুটি মাত্রা এটি থেকে অনুমিত হয় এবং ইনপুট আয়তক্ষেত্রের প্রস্থ এবং উচ্চতা।

একটি 63-বাইট বিকল্প, মাত্রা পৃথকভাবে সন্ধান:

lambda l:l[0].find('+')*~l[0].count('-')*~zip(*l)[0].count('|')

11

বাশ + কোর্টিলস, 83, 77 বাইট

সম্পাদনাগুলি:

  • "এখানে স্ট্রিং" ব্যবহার করে এবং কিছুটা রেজিপ্সকে অনুকূল করে 6 টি বাইট সংরক্ষণ করা হয়েছে

Golfed

bc<<<`sed -rn '1{s/(.+)[^\.]*\1/(0\1)*(0/
s/\./+1/gp;a)*(-1
}
/^[+|]/a+1
'`\)

ব্যাখ্যা

সঙ্গে ট্রান্সফর্ম sed :

....+--+....... => (0+1+1+1+1)*(0+1+1+1 )*(-2 +1
. =>()
. =>()
. =>()
. =>()
+ => +1
| => +1
+ => +1
. =>()
. =>()
. =>()
. =>()

ব্যাকটিক্স ব্যবহার করে নিউলাইনগুলি থেকে মুক্তি পান, যোগ করুন)

=> (0+1+1+1+1)*(0+1+1+1 )*(-2 +1 +1 +1 +1)

ফিড ফলে অভিব্যক্তি বিসি

=> 24

পরীক্ষা

./box <<EOF
.++..
+++++
+++++
.++..
EOF

1

./box <<EOF
...++....
...||....
...||....
+--++--++
+--++--++
...||....
...||....
...++....
EOF

3

./box <<EOF
....+--+.......
....|##|.......
....|##|.......
....|##|.......
+---+--+---+--+
|###|##|###|##|
+---+--+---+--+
....|##|.......
....|##|.......
....|##|.......
....+--+.......
EOF

24

এটি অনলাইন চেষ্টা করুন! ( বিসি পরিবর্তে ব্যাশ পাটিগণিতের সম্প্রসারণ ব্যবহার করে, কারণ পরবর্তীটি উপলভ্য নয়)


10

শামুক , 19 বাইট

AM
=~d^.+\+.+l.+^.2

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

ধারণাটি হ'ল আমরা জালের ডানদিকের প্রান্তে কোথাও শুরু করি এবং তারপরে নীচের দিকে কোথাও ভ্রমণ করি। প্রান্তের দৈর্ঘ্য এবং মুখের ক্ষেত্রফল সমস্ত মিলে যাওয়া পাথ গণনা করার প্রক্রিয়া দ্বারা গুণিত হয়।

AM   ,, A -> count all matching paths
     ,, M -> first char matched is the one in the current direction
     ,,      from the starting location, rather than directly on it
=~          ,, check that we are on the right edge of the grid
d ^.+ \+    ,, go down, matching one or more non-'.' characters, then a '+'
.+          ,, go down one or more times
l .+        ,, go left one or more times
^. 2        ,, match two further characters which aren't '.' to the left

4

জাভাস্ক্রিপ্ট (ES6), 67 91

s=>(a=~-s.search`
`/2-(b=s.indexOf`+`))*b*(s.split`
`.length-1-2*b)

পরীক্ষা

F=
s=>(a=~-s.search`
`/2-(b=s.indexOf`+`))*b*(s.split`
`.length-1-2*b)

out=x=>O.textContent+=x+'\n\n'

;`.++..
+++++
+++++
.++..
1

...++....
...||....
...||....
+--++--++
+--++--++
...||....
...||....
...++....
3

..+-+....
..|#|....
+-+-+-+-+
|#|#|#|#|
|#|#|#|#|
+-+-+-+-+
..|#|....
..+-+....
12

.+---+.....
++---++---+
||###||###|
||###||###|
||###||###|
++---++---+
.+---+.....
16

....++.....
....||.....
....||.....
....||.....
+---++---++
|###||###||
|###||###||
|###||###||
+---++---++
....||.....
....||.....
....||.....
....++.....
16

...+--+......
...|##|......
...|##|......
+--+--+--+--+
|##|##|##|##|
+--+--+--+--+
...|##|......
...|##|......
...+--+......
18

....+--+.......
....|##|.......
....|##|.......
....|##|.......
+---+--+---+--+
|###|##|###|##|
+---+--+---+--+
....|##|.......
....|##|.......
....|##|.......
....+--+.......
24

....+-----+..........
....|#####|..........
....|#####|..........
....|#####|..........
+---+-----+---+-----+
|###|#####|###|#####|
|###|#####|###|#####|
|###|#####|###|#####|
|###|#####|###|#####|
+---+-----+---+-----+
....|#####|..........
....|#####|..........
....|#####|..........
....+-----+..........
120`
.split('\n\n').forEach(t=>{
  t=t.split('\n')
  k=+t.pop()
  t=t.join('\n')
  v=F(t)
  out(v+' '+k +' '+(v==k?'OK':'KO')+'\n'+t)
})
<pre id=O></pre>


3

রুবি, 44

অন্যান্য উত্তরের অনুরূপ নীতিতে কাজ করে: +গভীরতা সন্ধান করতে প্রথমে সন্ধান করুন, প্রস্থটি সন্ধান করার .পরে পরবর্তীটি +সন্ধান করুন এবং |লাইনের শেষে সংখ্যাটি গণনা করুন এবং উচ্চতা সন্ধান করতে 1 যুক্ত করুন।

->s{(s=~/\+/)*($'=~/\./)*s.split("|
").size}

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

f=->s{(s=~/\+/)*    # index of first match of /\+/ in s
($'=~/\./)*         # $' is a special variable, contains string to right of last match. index of /\./ in $' 
s.split("|
").size}            # split the string at |\n to form an array and count the members

puts f[".++..
+++++
+++++
.++.."]

puts f["...++....
...||....
...||....
+--++--++
+--++--++
...||....
...||....
...++...."]

#etc.

3

05 এ বি 1 ই , 21 বাইট

আসুন Wএবং Hযথাক্রমে ইনপুটটির প্রস্থ এবং উচ্চতা - বাক্সটি নয়। তারপর, বক্স মাত্রা A, Bএবং Cএই নিয়ম অনুসরণ করুন:

W = 2(A+C)+1
H = B+2C+1

নিচের চিত্র শো কি A, Bএবং Cপ্রান্ত নাম নিরিখে আছেন:

....AAAA.......
....|##|.......
....|##|.......
....|##|.......
B---+--CCCCC--+
B###|##|###|##|
B---+--+---+--+
....|##|.......
....|##|.......
....|##|.......
....+--+.......

সুতরাং উপরের সূত্রগুলি। এই প্রোগ্রামটি নির্ণয় A, মান deduces Bএবং Cএবং পরিশেষে তাদের পণ্য নির্ণয় করে।

S'.ÊO<D¹g<;-(D·|g-()P

S'.Ê                  From each character of the first line, yield 0 if it is '.' or 1 otherwise. The result is stored in an array
    O<D               A = sum(array) - 1
       ¹g<;-(D        C = (W-1)/2 - A
              ·|g-(   B = H-1-2*C
                   )  Yield [A,C,B]
                    P Take the product and implicitly display it

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

প্রাক্তন সংস্করণ - বিভিন্ন পদ্ধতির - 26 বাইট

|vyS'.Ê})¬O<sø¬O<s€O¬Ê1k)P

|                          Take the input as an array of lines (strings)
 vy                        For each line
   S'.Ê                    For each character in the line, yield 0 if it is '.' or 1 otherwise
       }                   End For
        )                  Wrap the results as an array
         ¬O<               A = sum(first_line) - 1
            sø             Transpose the box pattern
              ¬O<          B = sum(first_line) - 1 ; since the pattern is transposed, it corresponds to the first column
                 s€O       Sum every line from the transposed pattern
                    ¬Ê1k   C = index of the first line that has a different sum from the first line
                        )  Yield [A, B, C]
                         P Take the product A*B*C and implicitly display it

2

বেফঞ্জ 93 , 56 বাইট

~2%#^_1+
  @.*+<
`"z"~<|:`~0+
5*\`#^_\1>*\~7
%2~\<\+1_^#

অনলাইনে চেষ্টা করে দেখুন!

ব্যাখ্যা:

বাক্সের ভলিউমটি .অন্য কোনও অক্ষরের আগে প্রথম লাইনে s এর সংখ্যা, প্রথম লাইনে +এবং -s এর সংখ্যা - 1 দ্বারা এবং |+1 দিয়ে শুরু হওয়া রেখার সংখ্যা দ্বারা গণনা করা যেতে পারে ।

~2%#^_1+         Uses the ASCII value % 2 of a character to count the .s

%2~\<\+1_^#      IP wraps around to the bottom. Counts the non . chars
                 Works because ("+" % 2) == ("-" % 2) == 1

5*\`#^_\1>*\~7   Multiplies the previous 2 results and cycles through
                 characters until it hits a newline or EOF

`"z"~<|:`~0+     Adds 1 to the 3rd dimension if the following char is a "|"
                 Also checks for EOF; If there is more input, goes back to
                 previous line. Otherwise, goes to the last line

  @.*+<          Adds 1 to the 3rd dimension, multiplies it to the rest,
                 prints the volume, and ends the program

3 য় লাইনে উল্লম্ব ব্যবহার করতে আমাকে নীচের পরিবর্তে আইপি আপ লাইনগুলি সরাতে হয়েছিল। আইপি যদি লাইনগুলি নিচে চলে যাচ্ছিল, উল্লম্ব যদি নীচের অনুভূমিকটি আঘাত করার সময় স্ট্যাকের শীর্ষটিকে 1 হতে বাধ্য করে, যদি এটি ভুল দিকে প্রেরণ করে।


2

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

f(x:r)=sum$fst(span(>'+')x)>>[1|'|':_<-"|":r,'-'<-'-':x]

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

ব্যাখ্যা

ইনপুটটি প্রতিটি লাইনের জন্য স্ট্রিংগুলির তালিকা হিসাবে প্রত্যাশিত, তাই fপ্যারামিটারে xপ্রথম লাইন এবং rঅবশিষ্ট রেখার একটি তালিকা।

  1. fst(span(>'+')x)ফেরৎ .একটি স্ট্রিং হিসাবে প্রথম লাইনের -prefix, তাই length(fst(span(>'+')x))প্রথম মাত্রা হয় d1
  2. একটি তালিকা বোধগম্য ফিল্টার হিসাবে কাজ করতে পারে, যেমন প্রথম লাইনে ['-' | '-' <- x]সকলের একটি স্ট্রিং প্রদান করে -, তাই 1 + length['-' | '-' <- x]দ্বিতীয় মাত্রা দেয় d2
  3. অ্যানালগভাবে |প্রথম সারিতে সংখ্যা গণনা করা যায়, 1 + length['|' | '|':_ <- r]তৃতীয় মাত্রাও এটি d3

২ এবং ৩ এর তালিকা উপলব্ধিগুলি '-' বা '|' এর প্রতিটি সংঘের জন্য যেকোন একটি তালিকা তৈরি করে 1+sum[1|'-'<-x]এবং সংক্ষিপ্ত করা যেতে পারে 1+sum[1|'|':_<-r]of এবং তারপরে যোগফল নেওয়া। আমরা আরও বাইরের লাগাতে পারেন 1+সংযোজন করে তালিকা ধী মধ্যে -থেকে xএবং "|"থেকে rউত্পাদ sum[1|'-'<-'-':x]এবং sum[1|'|':_<-"|":r]। এখন আমরা উভয় ভবিষ্যদ্বাণীকে একই বোধগম্য করে উভয় তালিকার বোধগম্যকে একত্রিত করতে পারি: sum[1|'|':_<-"|":r,'-'<-'-':x]সুবিধামত এই দুটি মাত্রার পণ্যকে সঠিকভাবে গণনা করে কারণ তালিকার জন্য Fএবং Gনীচের তালিকার বোধগম্যতাটি কার্তেসিয়ান পণ্য F x G =[(a,b)|a<-F,b<-G]

পরিশেষে, ২ এবং ৩ এর সংমিশ্রণে ১ কে গুণিত করার পরিবর্তে আমরা >>তালিকাগুলিতে অপারেটরটি ব্যবহার করতে পারি : বারবার F>>Gপুনরাবৃত্তি G length Fকরে ফলাফলকে স্বীকৃতি দেয়। সুতরাং fst(span(>'+')x)>>[1|'|':_<-"|":r,'-'<-'-':x]একটি তালিকা পুনরাবৃত্তি d2*d3বেশী d1, বার একটি তালিকা ফলনশীল d1*d2*d3বেশী যা পরে ভলিউম পেতে সংকলিত আপ করা হয়।


প্রয়োজনীয়তা সরিয়ে আপনি স্ট্রিংগুলির তালিকা হিসাবে ইনপুটটি নিতে পারেন lines
জাগারব

@ জগারব ধন্যবাদ, এটি কিছুটা বাইট সংরক্ষণ করে।
লাইকনি

1

জাভা 8, 185 129 বাইট

Zgarb ধন্যবাদ -56 বাইট জন্য

golfed:

int g(String[]i){int h=0;for(String k:i){if(k.charAt(0)=='.')h++;else break;}return((i[0].length()-2*h-1)/2)*(i.length-2*h-1)*h;}

ungolfed:

int g(String[] i) {
    int h = 0;
    for (String k : i) {
        if (k.charAt(0) == '.') h++;
        else break;
    }
    return ((i[0].length()-2*h-1)/2)*(i.length-2*h-1)*h;
}

ব্যাখ্যা

a*b*h = ((length_of_line-2*h-1)/2)*(number_of_lines-2*h-1)*h

কোথায় aএবং bবেসের মাত্রা এবং hউচ্চতা হয়। আপনি যেখানে hপ্রথমটি hশুরু করেছিলেন সেখানে প্রথম রেখাটি গণনা করে আপনি সন্ধান করতে পারেন .


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


1

জাভা, 112 বাইট

int v(String[]s){int a=s[0].lastIndexOf('+')-s[0].indexOf('+'),b=s[0].length()/2-a;return a*b*(s.length-2*b-1);}

সম্প্রসারিত:

int v(String[] s)
{
  // length of the edge in the first line
  int a = s[0].lastIndexOf('+') - s[0].indexOf('+');
  // length of the second edge
  // int b = s[0].length() - 2 * a - 1; <-- multiplied by 2
  int b = s[0].length()/2 - a; // <-- hack, length is always odd
  // length of the third edge in ()
  // volume
  return a * b * (s.length - 2 * b - 1);
} // end method v

1

পাওয়ারশেল, 68 67 বাইট

($c="$args"|% i*f +)*($args[0].Length/2-.5-$c)*($args.Count-1-2*$c)

নোট: "$args"|% i*f + শর্টকাট জন্য"$args".indexOf('+')

ব্যাখ্যা

ওসেবলের উত্তর থেকে ভাল ব্যাখ্যা নেওয়া হয়েছিল :

আসুন Wএবং Hযথাক্রমে ইনপুটটির প্রস্থ এবং উচ্চতা - বাক্সটি নয়। তারপর, বক্স মাত্রা A, Bএবং Cএই নিয়ম অনুসরণ করুন:

W = 2(A+C)+1
H = B+2C+1

নিচের চিত্র শো কি A, Bএবং Cপ্রান্ত নাম নিরিখে আছেন:

CCCCAAAA.......
....|##|.......
....|##|.......
....|##|.......
B---+--+---+--+
B###|##|###|##|
B---+--+---+--+
....|##|.......
....|##|.......
....|##|.......
....+--+.......

এবং ইনপুট প্রথম লাইনে Cপ্রথম অবস্থান +

পরীক্ষার স্ক্রিপ্ট:

$f = {

($c="$args"|% i*f +)*($args[0].Length/2-.5-$c)*($args.Count-1-2*$c)

}

@(

,(1, ".++..",
     "+++++",
     "+++++",
     ".++..")

,(3,"...++....",
    "...||....",
    "...||....",
    "+--++--++",
    "+--++--++",
    "...||....",
    "...||....",
    "...++....")

,(12,"..+-+....",
     "..|#|....",
     "+-+-+-+-+",
     "|#|#|#|#|",
     "|#|#|#|#|",
     "+-+-+-+-+",
     "..|#|....",
     "..+-+....")

,(16,".+---+.....",
     "++---++---+",
     "||###||###|",
     "||###||###|",
     "||###||###|",
     "++---++---+",
     ".+---+.....")

,(16,"....++.....",
     "....||.....",
     "....||.....",
     "....||.....",
     "+---++---++",
     "|###||###||",
     "|###||###||",
     "|###||###||",
     "+---++---++",
     "....||.....",
     "....||.....",
     "....||.....",
     "....++.....")

,(18,"...+--+......",
     "...|##|......",
     "...|##|......",
     "+--+--+--+--+",
     "|##|##|##|##|",
     "+--+--+--+--+",
     "...|##|......",
     "...|##|......",
     "...+--+......")


,(24,"....+--+.......",
     "....|##|.......",
     "....|##|.......",
     "....|##|.......",
     "+---+--+---+--+",
     "|###|##|###|##|",
     "+---+--+---+--+",
     "....|##|.......",
     "....|##|.......",
     "....|##|.......",
     "....+--+.......")

,(120,"....+-----+..........",
      "....|#####|..........",
      "....|#####|..........",
      "....|#####|..........",
      "+---+-----+---+-----+",
      "|###|#####|###|#####|",
      "|###|#####|###|#####|",
      "|###|#####|###|#####|",
      "|###|#####|###|#####|",
      "+---+-----+---+-----+",
      "....|#####|..........",
      "....|#####|..........",
      "....|#####|..........",
      "....+-----+..........")

) | % {
    $expected,$s = $_
    $result = &$f @s
    "$($result-eq$expected): $result"
}

আউটপুট:

True: 1
True: 3
True: 12
True: 16
True: 16
True: 18
True: 24
True: 120

0

ওল্ফ্রাম ভাষা (গণিত) , a৪ বাইট

(2(x=#@"
")-(y=#@"|")-9)((9-5x+y)^2-9#@".")/54&@*CharacterCounts

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

সংখ্যা ব্যবহার ., |এবং \nইনপুট অক্ষর ভলিউম সঠিক তথ্যের জন্য। এটি নির্বোধ দেখাচ্ছে কারণ এর জায়গায় সত্যিকারের নতুন লাইন রয়েছে \n

যদি A, Bএবং Cএর পক্ষগুলি হয়, তবে . = 2C(A+2C), | = 5B+4C-9এবং \n = B+2C, সুতরাং আমরা ABCএই তিনটি চরিত্রের পরিসংখ্যান অনুসারে ভলিউমের জন্য সমাধান করতে পারি ।

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