পশ্চিমের দ্রুততম বন্দুক


23

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

আপনি এই দরিদ্র লোকটিকে কীভাবে সাহায্য করবেন। একটি এএসসিআইআই ল্যান্ডস্কেপ দেওয়া হয়েছে, তার ভিতরে বন্দুকটি সন্ধান করুন এবং এতে বলুন যে এতে কতগুলি বুলেট রয়েছে। এই বন্দুক:

  (X)
(X\ /X)
 (XVX)
  \X/

Xউপরের ছবিটির প্রত্যেকটিই একটি বুলেটের সম্ভাব্য স্লট। স্লটে হয় একটি স্থান বা একটি অন্তর্ভুক্ত থাকবে 0,O,o(সামঞ্জস্যপূর্ণ নাও হতে পারে - কাউবয় তার বন্দুকের মধ্যে বিভিন্ন ধরণের গুলি লোড করেছে)।

ল্যান্ডস্কেপটিতে সর্বদা উপরের বর্ণনার সাথে মিলে যাওয়া ঠিক একটি বন্দুক থাকবে। তবে, দয়া করে নোট করুন যে বন্দুকের চারপাশে এবং এর ভিতরে থাকা স্পেসগুলিতে যে কোনও কিছু থাকতে পারে।

ইনপুট

আপনাকে প্রিন্টযোগ্য এএসসিআইআই (তাই ট্যাব নয়) এবং একটি পৃথক লাইনে নতুন লাইনের একটি স্ট্রিং দেওয়া হবে। আপনি চাইলে স্ট্রিংগুলির একটি তালিকাও নিতে পারেন। স্ট্রিংগুলি সমস্ত শূন্যস্থান দিয়ে প্যাড করা হবে, সুতরাং সেগুলি সমস্ত একই দৈর্ঘ্যের হবে। ইনপুটটি কমপক্ষে 4 টি সারি উচ্চ এবং 7 কলাম প্রশস্ত হবে।

ল্যান্ডস্কেপে সর্বদা ঠিক একটি বন্দুক থাকবে।

আউটপুট

আপনি আউটপুট কত বুলেট (will 0, O, oতাই আপনার আউটপুট হবে সবসময় মধ্যে) সেখানে gun, 0এবং 6

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

  (0)   ( )
(o\ /o( \ / )
 (oVo) ( V )
  \o/   \ /

0

----------------------------
////////////////////////////
////////////////////////////
/////////////(o)////////////
///////////(0\// )//////////
////////////( Vo)///////////
/////////////\ /////////////
////////////////////////////
----------------------------

3

()()()()()()()()()()()()()()()()\)/)()()()()()()()()()()()()
()()()()()()()()()()()()()()()()(V)()()()()()()()()()()()()(
()()()()()()()(\0/)()()()()()()()()()()()()()()()()()()()()(
()()()()()()()()()()()()()()()()()()()()()()()( )()()()()()(
()()()()()()(o)()()()()()()()(00)()()()()()(( \(/0)()()()()(
()()()()()()()()()()()()()()()()()()()()()()(( V )()()()()()
()()()()()()()()()()()()()()()()()()()()()()()\O/()()()()()(

2

------(0)---
||||(0\|/0)
-----(0V0)--
||||||\0/
-------_------
|||||||-|
------|-|
|||||||-|
------|-|

6

00ooOO(0)/\\/V

  ( )
( \\/ )
 ( V )
 \\ /

00OOoo()()()())))

0

  (\)     (0)
(0\\/0) ( \0/ )
 (0V0)   ( V )
 \\0/     \ /

1 (left gun is invalid because of the `\` in the bullet slot)

-00(0)00\0
-(O\0/o)\ 
- (OVo)o\0
-o \ /oo/ 

5

এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।



10
+1 যদি কেউ এই চ্যালেঞ্জটি এফজিআইটিডাব্লু করে;)
বিটা

2
0বন্দুকের বাউন্ডিং বাক্সের ভিতরে কিন্তু বন্দুকের বাইরে রয়েছে এমন কোনও পরীক্ষার কেস যুক্ত করা উচিত ।
মার্টিন ইন্ডার

@ স্টেপহেন ওহ ঠিক আছে, বন্দুকের ভিতরে একটি শূন্য আছে যা এটির নয়। বন্দুকের বাইরে জিরো রাখা ভাল তবে তার সীমাবদ্ধ বাক্সের মধ্যে থাকা ভাল।
মার্টিন ইন্ডার

"ইনপুটটি কমপক্ষে 4 টি সারি উচ্চ এবং 5 কলাম প্রশস্ত হবে wide" - যদি সর্বদা একটি বন্দুক থাকে তবে ইনপুটটি কমপক্ষে 7 টি কলাম প্রশস্ত হওয়া উচিত ।
মনাসেখ্যাটজ-রিইনস্টেট মনিকা

উত্তর:


19

শামুক , 71 বাইট

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

A
\/a=\)2w\V={\\u\(}c=\/b={\\c\(2}u!{(nb|.|.n.)=^o=^O=^0^ }{nb|.|.n.}^ 

4
Programming language for 2-dimensional pattern matching.আপনারা অবশ্যই খুশি হবেন যে আমি তখন এই চ্যালেঞ্জটি করেছি: পি
স্টিফেন

25
আপনার কি এই ভাষার কোনও লিঙ্ক আছে? এটি বেশ মজার বিষয় যে পশ্চিমে দ্রুততম বন্দুকটি শামুক।
পাইরুলেজ


6
@ পাইরুলিজ আপনি টিআইও পৃষ্ঠায় ভাষার নামটি ক্লিক করতে পারেন
স্টিফেন

আমি কীভাবে এটি কাজ করে তাতে আগ্রহী।
ক্রিটিকি লিথোস

6

গণিত, 170 বাইট

Catch@BlockMap[b="O"|"o"|"0";MatchQ[#,p=Characters@{"  (X)  ","(X\\ /X)"," (XVX) ","  \\X/  "}/." "->_/."X"->$;p/.$->b|"X"|" "]&&Throw@Count[Pick[#,p,$],b,2]&,#,{4,7},1]&

স্ট্রিং / অক্ষরের একটি অ্যারে নেয়। বুলেটের সংখ্যা ফেরত দেয়।


4

জাভাস্ক্রিপ্ট, 215 211 209 বাইট

-4 বাইটের জন্য শেগিকে ধন্যবাদ!

f=

i=>[...i].map((_,x)=>eval(String.raw`a=i.match(/(\n|^).{${x}}..\(${Z='([oO0 ])'}\).*\n.{${x}}\(${Z}\\.\/${Z}\).*\n.{${x}}.\(${Z}V${Z}\).*\n.{${x}}..\\${Z}\//);a&&alert(a.filter(i=>/^[oO0]$/.test(i)).length)`))

tests = [["  (0)   ( )\n(o\\ /o( \\ / )\n (oVo) ( V )\n  \\o/   \\ /",0],["----------------------------\n////////////////////////////\n////////////////////////////\n/////////////(o)////////////\n///////////(0\\// )//////////\n////////////( Vo)///////////\n/////////////\\ /////////////\n////////////////////////////\n----------------------------",3],["()()()()()()()()()()()()()()()()\\)/)()()()()()()()()()()()()\n()()()()()()()()()()()()()()()()(V)()()()()()()()()()()()()(\n()()()()()()()(\\0/)()()()()()()()()()()()()()()()()()()()()(\n()()()()()()()()()()()()()()()()()()()()()()()( )()()()()()(\n()()()()()()(o)()()()()()()()(00)()()()()()(( \\(/0)()()()()(\n()()()()()()()()()()()()()()()()()()()()()()(( V )()()()()()\n()()()()()()()()()()()()()()()()()()()()()()()\\O/()()()()()(",2],["------(0)---\n||||(0\\|/0)\n-----(0V0)--\n||||||\\0/\n-------_------\n|||||||-|\n------|-|\n|||||||-|\n------|-|",6],["00ooOO(0)/\\\\/V\n\n  ( )\n( \\\\/ )\n ( V )\n \\\\ /\n\n00OOoo()()()())))",0],["  (\\)     (0)\n(0\\\\/0) ( \\0/ )\n (0V0)   ( V )\n \\\\0/     \\ /",1]]

alert = x => i = x;

tests.forEach((t, index) => {
    i = 'Not Found'
    f(t[0]);
    document.getElementById('a').textContent += t[0] + '\n\n' + i + '\n\n';
    if (i != t[1]) {
        document.getElementById('a').textContent += 'Failed test ' + index + '! Expected '  + t[1] + '\n\n';
        document.getElementById('a').style = 'color: red'
    }
})
<pre id="a"></pre>

মূলত, স্ট্রিংয়ের দৈর্ঘ্য থেকে শুরু করে nলাইন বিরতির পরে বন্দুকের অক্ষরের সাথে মেলে চেষ্টা করে ।n0


Zআক্ষরিক মধ্যে নির্ধারিত কয়েক বাইট সংরক্ষণ করুন , আপনি প্রথমবার এটি ব্যবহার এবং এর থেকে মুক্তি পেয়ে {}
শেগি

@ শেগি ধন্যবাদ!
আরটিয়ার

3

পাইথন 2, 219 224 227 বাইট

import re
f=lambda s:sum(sum(g>' 'for g in m.groups())for m in[re.match(r'.*@..\(X\)..@\(X\\./X\)@.\(XVX\).@..\\X/.*'.replace('X','([0Oo ])').replace('@',r'[^\n]*\n.{%d}'%i),'\n'+s,re.DOTALL)for i in range(0,s.find('\n'))]if m)

সম্পাদনা: একটি বাগ ফিক্স করা হয়েছে যার জন্য আমার 5 বাইট খরচ হয়েছে: (... অতিরিক্ত এসের 3 টি বাইট r''প্রয়োজন ছিল যা প্রয়োজন ছিল না। এবং তারপরে গ্রার !! \আমার কোডে অক্ষরগুলি সঠিকভাবে গণনা করছিল না , তাই 6 যুক্ত করা হয়েছিল ...

নতুন লাইনের সাথে একটি স্ট্রিং নেয়; গুলি পাওয়া সংখ্যা আবার চালু।

মূলত, একটি রেজেেক্স প্রয়োগ করে যা 0, 1, ... লাইনগুলির শুরুতে প্যাডের লাইনলাইন্থ অক্ষর সহ বন্দুকের প্যাটার্নটি সন্ধান করে।


3

সি (জিসিসি) , 357 351 বাইট

#define M(F,C)F(i){i=s[i]==C;}
b,i;char*s,c;M(L,'(')M(R,')')M(A,'/')M(D,'\\')M(V,'V')B(i){i=b=(c=s[i])==32?b:c==111?b+1:c==79?b+1:c==48?b+1:0;}(*t[])(int)={L,B,R,L,B,D,A,B,R,L,B,V,B,R,D,B,A};main(j,v,k,l)char**v;{for(s=v[1];s[l++]!=10;);for(;k=i,s[i++];){for(j=17;j--;)if(!(t[j])(k-=j==13?l-3:j==8?l-5:j==5?2:j==2?l-4:1))break;b=j<0?putchar(b+47):1;}}

এটি অনলাইন চেষ্টা করুন! (গল্ফড) (প্রসারিত) (357 গল্ফড) (357 প্রসারিত)

বিল্ট-ইন প্যাটার্ন ম্যাচিং না করে কোনও ভাষায় সমাধান কীভাবে খারাপ হবে তা আমি ভাবছিলাম। আমি যে ভয় পেয়েছিলাম তার চেয়ে অনেক ছোট এটি বেরিয়ে এসেছিল।

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

দ্রষ্টব্য 1: আমি ধারাবাহিক সারি প্রস্থ নিশ্চিত করতে ফাঁকা জায়গায় পরীক্ষার কেস প্যাড করেছি।

দ্রষ্টব্য 2: আপনি যদি ফেরতের কৌশলটির পরিবর্তে অ্যাসাইনটি পছন্দ না করেন তবে 10 বাইট যুক্ত করুন । স্পষ্টতার জন্য, আমি প্রসারিত কোডটিতে প্রকৃত রিটার্নের বিবৃতি ব্যবহার করেছি।


তিনটি অপ্রচলিত অপ্টিমাইজেশন: - সরাসরি প্রিন্টফের পরিবর্তে (3 বাইট) বি এর মান সহ পুতচর ব্যবহার করুন। - বুলেট গণনা (1 বাইট) মুদ্রণের জন্য if স্টেটমেন্টের পরিবর্তে টের্নারি অপারেটর ব্যবহার করুন। - রোল বুলেট গণনা সূচনা প্রিন্ট টেরিনারি (2 বাইট) এ। শেষটি কিছুটা দুর্গন্ধযুক্ত, যেহেতু প্রথম সূচকটি পরীক্ষা করার সময় এর অর্থ খ শূন্য, তবে যেহেতু কোনও বন্দুক সূচক 0 তে থাকতে পারে না, আমি মনে করি এটি একটি ন্যায্য পরিবর্তন।
jiv
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.