একটি ASCII বহুভুজের ক্ষেত্র


31

আপনার এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা একটি স্ট্রিং প্রাপ্ত করে যা ইনপুট হিসাবে অ্যাসিআই-আর্ট বহুভুজকে উপস্থাপন করে এবং বহুভুজের ক্ষেত্রটি দেয় returns

ইনপুটটি এমন একটি স্ট্রিং যা অক্ষরগুলি নিয়ে গঠিত _ / \ L V spaceএবং newlineএকটি সাধারণ বহুভুজকে সংজ্ঞায়িত করে (যার অর্থ কোনও অতিরিক্ত বিভাগ নয়, কোনও স্ব-স্পর্শ নয় এবং কোনও স্ব-ছেদ নেই)।

একক অক্ষরের ঘরের ক্ষেত্রফল 2

  • _মাপ মধ্যে সেল splits 0এবং2
  • \মাপ মধ্যে সেল splits 1এবং1
  • /মাপ মধ্যে সেল splits 1এবং1
  • Lমাপ মধ্যে সেল splits 0এবং2
  • Vমাপ মধ্যে সেল splits 1এবং 1(দুই পক্ষের Vসবসময় বহুভুজ একই দিকে হবে যাতে তারা তালিকা একসঙ্গে চিকিত্সা করা হয়।)

প্রতিটি অক্ষর তার অক্ষর কক্ষের দুটি কোণকে সংযুক্ত করে যা আপনি প্রত্যাশা করেন (যেমন উপরে বাম এবং উপরের ডান ক্ষেত্রে V))

7 এর ক্ষেত্রের একটি উদাহরণ ( 1+2+1দ্বিতীয় সারিতে এবং 1+1+1তৃতীয়টিতে):

 _
/ \
V\/

ইনপুট

  • ইনপুট একটি আয়তক্ষেত্র গঠন করবে, অর্থাৎ নিউলাইনগুলির মধ্যে একই সংখ্যক অক্ষর থাকবে।
  • বহুভুজটির যে কোনও দিকে অতিরিক্ত সাদা অংশ থাকতে পারে।
  • ট্রেলিং নিউলাইন optionচ্ছিক।

আউটপুট

  • একটি একক ধনাত্মক পূর্ণসংখ্যা, বহুভুজের ক্ষেত্রফল।

উদাহরণ

আউটপুটগুলি ইনপুটগুলির শেষ সারির পরে হয়।

  _  
  V  

1

/L
\/

3



    /VV\
    L  /
     L/
14

  ____/\ 
  \    /
/\/   /
\____/

32  

   /V\
  /   \__ 
  \     /
/\/   /V
L____/

45

এটি কোড-গল্ফ তাই সংক্ষিপ্ত এন্ট্রি জিততে পারে।


আপনার তৃতীয় উদাহরণটি 14 হতে হবে
অপ্টিমাইজার

@ অপ্টিমাইজার ধন্যবাদ, সংশোধন হয়েছে।
এলোমেলো

^ ইচ্ছাকৃতভাবে অভাব কি ?
রবউউ

@ রবাউ হ্যাঁ, এটি যথেষ্ট ভাল দেখাচ্ছে না।
এলোমেলো

উত্তর:


5

সিজেম, 48 43 29 বাইট

qN-{i_9%2%U!^:U;J%D%1U2*?}%:+

আপডেট : অরপ এর উত্তর থেকে গণিত এবং রাজ্য * 2 কৌশল ব্যবহার করে প্রচুর গল্ফ করেছে।

এটি কীভাবে কাজ করে (পুরানো, শীঘ্রই আপডেট করা হচ্ছে)

আমরা ইনপুটটিকে নতুন লাইনে বিভক্ত করি এবং তারপরে প্রতিটি অংশের জন্য আমরা সীমানা অক্ষরগুলির উপস্থিতিগুলির পাল্টা বজায় রাখি L\/। এই কাউন্টার% 2 আমাদের দুটি পার্টিশনের মধ্যে কোনটি সমস্ত চরিত্রের জন্য বেছে নেওয়ার পরিমাণের তা বলবে। তারপরে আমরা স্ট্রিংয়ের প্রতিটি অক্ষরের সূচক পাই L _\/Vদেব -1একটি অ্যারের শেষ উপাদান উল্লেখ। সূচক পাওয়ার পরে, আমরা 4558Zb2/অ্যারে তৈরি করতে ব্যবহার করি [[2 0] [0 2] [0 2] [1 1]]এবং তারপরে কাউন্টারটি ব্যবহার করে সঠিক গণনাটি চয়ন করি।

qN/0f{                                  }      e# Split the input on newline and for each
      \{                             }/        e# swap the 0 to back and for each char in
                                               e# the line, run this loop
        _"L _"#                                e# Copy the char and get index of it in
                                               e# this string "L _"
               4558Zb                          e# This is basically 4558 3base
                                               e# which comes to be [2 0 0 2 0 2 1 1]
                     2/=                       e# Group into pairs of 2 and choose the
                                               e# correct one.
                        2$=                    e# Based on the counter, choose the correct
                                               e# partition amount
                           @@"\/L"&,+          e# Increment the counter if the char is one
                                               e# of \, / and L
                                       ;       e# Pop the counter after each line loop
                                         :+    e# Sum all the numbers to get area

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


22

পাইথ, 47 46 45 36 30

FNs.zx=Z}N"\/L"aY|}N"\/V"yZ;sY

ব্যাখ্যা:

FNs.z            For every character in input, except newlines...
  x=Z}N"\/L"     Swap state if /, \, or L.
  aY|}N"\/V"yZ;  Append 1 if /, \, or V, else 2 times the state to Y.
sY               Sum Y and print.

আমাদের দুটি রাষ্ট্র রয়েছে, "বহুভুজের মধ্যে" এবং "বহুভুজের বাইরে"। উপরের-বাম থেকে নীচে-ডানদিকে পড়ার সময় নিম্নলিখিত অক্ষরগুলি প্রতিটি নিম্নলিখিতটি করে:

/ \     swap state, add one to area
V                   add one to area
_ space             if in polygon, add two to area
L       swap state, if in polygon, add two to area

নোট করুন যে "অঞ্চলটিতে একটি যুক্ত করুন" এবং "বহুভুতে থাকলে অঞ্চলটিতে দুটি যুক্ত করুন" পারস্পরিক একচেটিয়া।


আমি কীভাবে x=কাজ করে তা সম্পর্কে সত্যিই বিভ্রান্ত হয়ে পড়েছি । এটি কোথাও নথিভুক্ত করা হয়?
জাকুবে

@ জাকুব এটি অগমেন্টেড অ্যাসাইনমেন্ট।
orlp

@Jakube এটা কেমন +=বা *=বা যাই হোক না কেন। এই ক্ষেত্রে x, XOR হিসাবে ব্যবহার করা হচ্ছে তাই এটি ঠিক পাইথন এর হিসাবে একই ^=
isaacg

14

রেটিনা , 293 + 15 = 308 314 385 বাইট

;`\s
_
;`\\
/
;`.+
o$0iio
;+`(o(?=/.*(i)|L.*(ii)|V.*(io)|_)|i(?=/.*(io)|L.*(o)|_.*(ii)|V.*(i))).
$1$2$3$4$5$6$7$8
;`o
<empty>
;`ii$
#:0123456789
;+`^(?=i)(i*)\1{9}(?=#.*(0)|i#.*(1)|ii#.*(2)|iii#.*(3)|iiii#.*(4)|iiiii#.*(5)|iiiiii#.*(6)|iiiiiii#.*(7)|iiiiiiii#.*(8)|iiiiiiiii#.*(9))
$1#$2$3$4$5$6$7$8$9$10$11
:.*|\D
<empty>

প্রতিটি লাইন একটি পৃথক ফাইলে যায় তাই আমি বাইট গণনায় 13 যোগ করেছি। বিকল্পভাবে, আপনি যেগুলি একক ফাইলে রাখতে পারেন এবং -sপতাকাটি ব্যবহার করতে পারেন । <empty>আসলে খালি ফাইল বা লাইনের জন্য স্ট্যান্ড।

দুর্ভাগ্যক্রমে, ফলাফলটি কেবল অ্যানারি থেকে দশমিক রূপান্তর করতে আমার 187 বাইট দরকার। আমার ধারণা আমার খুব শীঘ্রই এটি বাস্তবায়ন করা উচিত ।

ব্যাখ্যা

রেটিনা হ'ল একটি রেজেক্স-ভিত্তিক ভাষা (যা আমি রেজেক্সের মতো স্টাফগুলি করতে সক্ষম হবার জন্য ঠিক লিখেছিলাম)। ফাইল / লাইনগুলির প্রতিটি জোড়া একটি প্রতিস্থাপনের স্তরটি সংজ্ঞায়িত করে, প্রথম লাইনটি প্যাটার্ন এবং দ্বিতীয় লাইনটি প্রতিস্থাপনের স্ট্রিং থাকে। প্যাটার্নগুলি পূর্বে- `বিহিত কনফিগারেশন স্ট্রিংয়ের সাহায্যে নেওয়া যেতে পারে, এতে সাধারণ রেজেেক্স সংশোধক পাশাপাশি কিছু রেটিনা-নির্দিষ্ট বিকল্প থাকতে পারে। উপরের প্রোগ্রামটির জন্য, প্রাসঙ্গিক বিকল্পগুলি ;হ'ল এটি সেই পর্যায়ের আউটপুটকে দমন করে এবং +ফল পরিবর্তন বন্ধ হওয়া অবধি লুপে প্রতিস্থাপন প্রয়োগ করে।

সমাধানের ধারণাটি প্রতিটি লাইনকে পৃথকভাবে গণনা করা, কারণ আমরা ইতিমধ্যে যে অক্ষরগুলি ইতিমধ্যে সম্মুখীন হয়েছিল সেগুলি দ্বারা সিদ্ধান্ত নিতে পারি আমরা বহুভুজের অভ্যন্তরে বা বাইরে থাকি কিনা। এর অর্থ হ'ল আমি পুরো জিনিসটিকে একটি একক লাইনে যুক্ত করতে পারি, কারণ কোনও লাইনের শুরু এবং শেষগুলি সর্বদা বহুভুজের বাইরে থাকে। আমরা নোট করতে পারে _এবং স্থান একটি লাইন মিষ্টির অ্যালগরিদম জন্য সম্পূর্ণরূপে অভিন্ন, সেইসাথে \এবং /। সুতরাং একটি প্রথম পদক্ষেপ হিসেবে আমি সব নতুন লাইন এবং স্পেস প্রতিস্থাপন _এবং সব \দ্বারা /পরে কিছু কোড প্রক্রিয়া সহজ করার জন্য।

আমি অক্ষরের সাথে iএবং অভ্যন্তরীণ স্থিতিশীলতার জন্য এস oব্যবহার করার সময় অক্ষরগুলির সাথে বর্তমান অভ্যন্তরীণ / বাহ্যিক অবস্থার উপর নজর রাখছি i। এটি করার জন্য আমি যোগভূক্ত oলাইনে একটি প্রিপেন্ডিং দিয়ে শুরু করে চিহ্নিত করি যে আমরা বহুভুজের বাইরে। আমি ইনপুটটির iioএকেবারে প্রান্তে একটি যুক্তও করছি , যা আমি নতুন অক্ষর উত্পন্ন করতে একটি চেহারা হিসাবে ব্যবহার করব।

তারপরে, প্রথম বড় প্রতিস্থাপনটি কেবলমাত্র একটির পরিবর্তে iবা তার পরের অক্ষরের একটি সেট oদ্বারা প্রতিস্থাপন করে /V_L, যার ফলে পুরো জিনিসটি বন্যা হয়ে যায় এবং তাল মিলিয়ে। প্রতিস্থাপন টেবিলটি নীচের মতো দেখায়, যেখানে কলামগুলি line লাইনের শেষ বর্ণের সাথে এবং পরবর্তী অক্ষরের সাথে সারিগুলি (যেখানে Sস্থানের <>জন্য এবং খালি স্ট্রিংয়ের জন্য) মিল রয়েছে correspond আমি ইতোমধ্যে ইনপুটগুলির সমস্ত অক্ষরগুলি অন্তর্ভুক্ত করেছি যে সমতুল্যতা আমি ইতিমধ্যে ব্যবহার করেছি:

     i     o

/    io    i
\    io    i
L    o     ii
V    i     io
_    ii    <>
S    ii    <>

নোট করুন যে চূড়ান্ত অক্ষরটি সর্বদা ইঙ্গিত দেয় যে অক্ষরটি পরে আমরা বহুভুজের অভ্যন্তরে বা বাইরে থাকি না কেন is এর সংখ্যাটি সেই ক্ষেত্রের সাথে সামঞ্জস্য করে যে বহুভুজের সাথে যুক্ত হওয়া দরকার। উদাহরণ হিসাবে এখানে সর্বশেষ উদাহরণ ইনপুটটিতে প্রথম চারটি পুনরাবৃত্তির ফলাফল রয়েছে (এটি একটি পুরানো সংস্করণ দ্বারা উত্পন্ন হয়েছিল যা প্রতিটি লাইনকে পৃথকভাবে প্লাবিত করেছিল, তবে নীতিটি এখনও একই):

o   /V\
o  /   \___
o  L     _/
o/\/   /V
oL__ _/
o   V

o  /V\
o /   \___
o L     _/
oi\/   /V
oii__ _/
o  V

o /V\
o/   \___
oL     _/
oiio/   /V
oiiii_ _/
o V

o/V\
oi   \___
oii     _/
oiioi   /V
oiiiiii _/
oV

oiV\
oiii  \___
oiiii    _/
oiioiii  /V
oiiiiiiii_/
oio

শেষ অবধি, আমি oমিলে যাওয়া সমস্ত কিছু মুছে ফেলে সমস্ত লাইন এবং লাইন ব্রেকগুলি থেকে মুক্তি পেয়েছি এবং [^i]বাকীটি দশমিক-থেকে-অবিচ্ছিন্ন রূপান্তর যা বিরক্তিকর।


4

পার্ল, 65 58 বাইট

map{map{$b^=2*y,/\\L,,;$a+=y,/\\V,,||$b}split//}<>;print$a
  • / \ বা এল দেখলে and বি 0 এবং 2 এর মধ্যে টগল করুন $
  • দেখে / \ বা ভিতে 1 এ 1 যুক্ত করুন।
  • অন্য কিছু দেখার পরে $ b এ Add যোগ করুন।

দুর্দান্ত সমাধান, পার্ল আশ্চর্যজনকভাবে কমপ্যাক্ট।
orlp

1
আরও কিছু লাভের জন্য ইনপুট প্রসেসিং সরল করা যেতে পারে:$/=\1;$-^=2*y,/\\L,,,$a+=y,/\\V,,||$-for<>;print$a
নটকি

4

জিএনইউ সেড, 290 + 1

-rসিডে পাস করা সুইচটির জন্য +1 হ'ল । মন্তব্য এবং অতিরিক্ত শ্বেত স্পেস স্কোর গণনা করা হয় না।

আমি খুব বিস্তারিতভাবে দেখিনি, তবে আমি মনে করি এটি সম্ভবত মার্টিনের রেটিনা জবাবের মতো :

:                      # label to start processing next (or first) line
s/[0-9]//g             # remove the count of colons from previous lines
H                      # append the current line to the hold space
g                      # copy the hold space to the pattern space
y^_\\^ /^              # Replace '_' with ' ' and replace '\' with '/'
s/(\n| +$)//g          # strip newlines and trailing space
:o                     # start of "outside loop"
s/(^|:) *V/\1:/        # replace leading spaces and "V" with ":"
to                     #   if the above matches, stay outside
s/(^|:) *[|/]/\1:/     # replace leading spaces and "|" or "/" with ":"
ti                     #   if the above matches, go inside
s/(^|:) *L/\1::/       # replace leading spaces and "L" with "::"
:i                     # start of "inside" loop
s/: /:::/              # replace space with "::"
ti                     #   if the above matches, stay inside
s/:V/::/               # replace "V" with ":"
ti                     #   if the above matches, stay inside
s/:[|/]/::/            # replace "|" or "/" with ":"
to                     #    if the above matches, go outside
s/:L/:/                # remove "L"
to                     #    if the above matches, go outside
h                      # copy current string of colons to hold buffer
:b                     # start of colon count loop
s/:{10}/</g            # standard sed "arithmetic" to get string length
s/<([0-9]*)$/<0\1/
s/:{9}/9/
s/:{8}/8/
s/:{7}/7/
s/:{6}/6/
s/:{5}/5/
s/::::/4/
s/:::/3/
s/::/2/
s/:/1/
s/</:/g
tb                     # once arithmetic done, pattern buffer contains string length
N                      # append newline and next line to pattern buffer
b                      # loop back to process next line

সংক্ষিপ্ত বিবরণ

  • প্রতিটি ইউনিটকে কোলন দিয়ে প্রতিস্থাপন করুন :
  • কলোন সংখ্যা গণনা করুন

নোট

  • sedলাইনমুখী তাই একসাথে একাধিক লাইন প্রক্রিয়াজাত করতে কিছু কাজ প্রয়োজন। Nকমান্ড তারপর বর্তমান প্যাটার্ন স্থান থেকে পরের লাইনে একটি newline সংযোজন মাধ্যমে এই কাজটি করে। সঙ্গে অসুবিধা Nআছে একবার ইনপুট স্ট্রিম ফাইলের শেষে পায়, এটা শোধবোধ হয় sedআরও প্রক্রিয়াকরণের করতে কোন বিকল্প ছাড়া সম্পূর্ণরূপে। এটি পেতে, আমরা পরের লাইনে পড়ার ঠিক আগে, প্রতিটি লাইনের শেষে কলোনগুলির বর্তমান সেটটি গণনা করি।

আউটপুট:

$ echo '   /V\
  /   \__ 
  \     /
/\/   /V
L____/' |sed -rf polyarea.sed
45
$

3

সি, 93 96 108 বাইট

সম্পাদনা করুন: মন্তব্যগুলিতে অ্যাকাউন্টের পরামর্শ গ্রহণ করেছেন, সময়টিকে লুপের জন্য একক-বিবৃতিতে রূপান্তরিত করেছেন এবং "i" ভেরিয়েবল সম্পূর্ণরূপে সরিয়ে দিয়েছেন।

int s,t;main(c,v)char**v;{for(;c=*v[1]++;t+=s+(c>46^!(c%19)^s))s^=c>13^c%9>4;printf("%d",t);}

মূল পোস্ট:

এটিকে এক মজাদার মতো মনে হয়েছিল এবং অবশেষে আমাকে এখানে একটি অ্যাকাউন্ট তৈরি করতে পারা যথেষ্ট যথেষ্ট সমস্যার।

main(c,v)char**v;{int i,t,s;i=t=s=0;while(c=v[1][i++]){s^=c>13^c%9>4;t+=s+(c>46^!(c%19)^s);}printf("%d",t);}

বহুভুজের পাঠ্যটি প্রথম কমান্ড-লাইন আর্গুমেন্ট হিসাবে পাস করা উচিত; এটি কোনও পরিমাণে নিউলাইন / হোয়াইটস্পেসের সাথে বা ছাড়াই কাজ করা উচিত।

এটি কেবল একবারে বহু চরিত্রের একটি অক্ষরে পড়ে, '/', 'L', বা '\' তে বহুভুজের ভিতরে বা বাইরে বর্তমানে স্যুইচ করে এবং '/', 'ভি' তে 1 দ্বারা 1 টি বৃদ্ধি পায়, এবং '\', বা 2 দ্বারা '0' এর বাইরে যদি 'এল', '_', স্পেস এবং নতুন লাইনে থাকে।

এই প্রথম কোনওরকম "গল্ফিং" (বা সি, এটি সি ++ থেকে আলাদা) এর জন্য আমার হাত চেষ্টা করছে, সুতরাং যে কোনও সমালোচনা প্রশংসিত হয়!


স্বাগতম এবং ভাল কাজ! আপনি i=t=s=0;যেভাবে intযাইহোক সি সমস্ত গুলি থেকে শুরু করে বলে মনে করেন আপনি এড়িয়ে যেতে সক্ষম হতে পারেন । এছাড়াও, দেখুন আপনি whileলুপটিকে একটি forলুপে পরিণত করতে পারেন কিনা ; এটি প্রায়শই কয়েকটি বাইট সংরক্ষণ করে।
Ypnypn

উপরের লুপটির ধারণাটি ব্যবহার করে আমি মনে করি আপনি এরকম কিছু করতে পারেন: ...int i,t,s;for(i=t=s=0;c=v[1][i++];t+=s+(c>46^!(c%19)^s))s^=c>13^c%9>4;...যা 4 টি বাইট সংরক্ষণ করতে পারে; একটি {, একটি} এবং দুটি;
দাইদালুস আলফা

উপরে উল্লিখিত হিসাবে, আপাতদৃষ্টিতে গ্লোবাল ভেরিয়েবলগুলি স্বয়ংক্রিয়ভাবে 0 তে সেট করা থাকে, সুতরাং যদি ভিতরে int i,t,v;না রেখে সামনে রাখা হয় তবে mainআমরা i=t=s=0আরও 7 টি বাইট সংরক্ষণ থেকে মুক্তি পেতে পারি ।
দাইদালুস আলফা

3

পসিক্স সেড, 245 244

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

H
/^\([L\\]_*\/\|V\| \)*$/!d
x
s/[_ ]/  /g
s/^/!/
s/$/!/
:g
s/\([^V]\)V/V\1/
tg
y/V/ /
s/L/!  /g
s,[/\\], ! ,g
s/![^!]*!//g
:d
/ /{
s/     /v/g
s/vv/x/g
/[ v]/!s/\b/0/2
s/  /b/g
s/bb/4/
s/b /3/
s/v /6/
s/vb/7/
s/v3/8/
s/v4/9/
y/ bvx/125 /
td
}

প্রসারিত এবং টীকাযুক্ত

#!/bin/sed -f

# If leading blank lines may exist, then delete them
# (and add 8 bytes to score)
#/^ *$/d

# Collect input into hold space until we reach the end of the figure
# The end is where all pieces look like \___/ or V
H
/^\([L\\]_*\/\|V\| \)*$/!d

x

# Space and underscore each count as two units
s/[_ ]/  /g

# Add an edge at the beginning and end, so we can delete matching pairs
s/^/!/
s/$/!/
# Move all the V's to the beginning and convert each
# to a single unit of area
:gather
s/\([^V]\)V/V\1/
tgather
y/V/ /

# L is a boundary to left of cell; / and \ in middle
s/L/!  /g
s,[/\\], ! ,g

# Strip out all the bits of outer region
s/![^!]*!//g

# Now, we have a space for each unit of area, and no other characters
# remaining (spaces are convenient because we will use \b to match
# where they end).  To count the spaces, we use roman numerals v and x
# to match five and ten, respectively.  We also match two (and call
# that 'b').  At the end of the loop, tens are turned back into spaces
# again.
:digit
/ /{
s/     /v/g
s/vv/x/g
/[ v]/!s/\b/0/2
s/  /b/g
s/bb/4/
s/b /3/
s/v /6/
s/vb/7/
s/v3/8/
s/v4/9/
y/ bvx/125 /
tdigit
}

# If trailing blank lines may exist, then stop now
# (and add 2 bytes to score)
#q

1

সি, 84 বাইট

a;i;f(char*s){for(;*s;a+=strchr("\\/V",*s++)?1:i+i)i^=!strchr("\nV_ ",*s);return a;}

আমরা যখনই দেখি \, আমরা পক্ষগুলি স্যুইচ করি , /বা L; আমরা সর্বদা একটির জন্য যোগ করি \\, /বা V, তবে 2, (ভিতরে থাকলে) বা 0 (বাইরে থাকলে) স্থান, নিউলাইন, Lবা জন্য যোগ করি _

ভেরিয়েবলগুলি aএবং iএন্ট্রি শূন্য হিসাবে ধরে নেওয়া হয় - যদি ফাংশনটি একাধিকবার বলা হয় তবে সেগুলি পুনরায় সেট করতে হবে।

Ungolfed:

int a;                          /* total area */
int i;                          /* which side; 0=outside */
int f(char*s)
{
    while (*s) {
        i ^= !strchr("\nV_ ",*s);
        a += strchr("\\/V",*s++) ? 1 : i+i;
    }
    return a;
}

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

#include <stdio.h>
int main()
{
    char* s;
    s = "  _  \n"
        "  V  \n";
    printf("%s\n%d\n", s, f(s));
    a=i=0;

    s = "/L\n"
        "\\/\n";
    printf("%s\n%d\n", s, f(s));
    a=i=0;


    s = "    /VV\\\n"
        "    L  /\n"
        "     L/";
    printf("%s\n%d\n", s, f(s));
    a=i=0;

    s = "  ____/\\ \n"
        "  \\    /\n"
        "/\\/   /\n"
        "\\____/";
    printf("%s\n%d\n", s, f(s));
    a=i=0;

    s = "   /V\\\n"
        "  /   \\__ \n"
        "  \\     /\n"
        "/\\/   /V\n"
        "L____/";
    printf("%s\n%d\n", s, f(s));
    a=i=0;

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