প্যাক ম্যান এই স্ট্রিং খাওয়া যাবে?


46

গেমের আরকেড সংস্করণে প্যাক ম্যান প্যাক-ডট খায়। যাইহোক, এই চ্যালেঞ্জের মধ্যে, তিনি অক্ষরে অক্ষরের অক্ষর এবং একটি স্ট্রিংয়ের বিরামচিহ্নের জন্য ক্ষুধার্ত।

আপনার কাজটি এমন একটি ফাংশন তৈরি করা যা প্যাক-ম্যানকে একটি স্ট্রিং ফিড করে, সে এটি খেতে পারে কিনা তা মূল্যায়ন করে এবং প্যাক-ম্যানের অবস্থানটিতে স্ট্রিংটি ফিরিয়ে দেয়।

প্যাক-ম্যান ( <) প্রতিটি চরিত্রের যেমন চলেছে তার জন্য একটি আন্ডারস্কোর বা স্পেস রেখে বাম থেকে ডানে অক্ষর খায় এবং তার লক্ষ্য প্রথম অবস্থান -১ থেকে শেষ পজিশনে পৌঁছানো +১:

1. <Pac
2. _<ac
3. __<c
4. ___<

তবে, প্যাক-ম্যানের প্রাকৃতিক শত্রু, ভূত তাকে "GHOST" শব্দটির কোনও অক্ষরের মুখোমুখি হলে (কেস সেনসিটিভ নয়) তাকে থামিয়ে দেবে। ghostচরিত্রটির মুখোমুখি হওয়ার সাথে সাথে আপনার ফাংশনটি প্যাক-ম্যানের অবস্থানের সাথে স্ট্রিংটি ফিরে আসবে :

1. <No!
2. _<o!

একটি ভূতকে পরাভূত করতে পারে এমন একমাত্র শক্তি শক্তি। প্যাক-ম্যান যদি কোনও ভূতে আসার আগে "PELLET" শব্দের কোনও চিঠি পৌঁছে দেয় (তবে এটি সংবেদনশীল নয়) তবে সে ভূতটি খাবে এবং চলতে থাকবে এবং সেই গুলি ব্যবহার করা হবে। পাওয়ার ট্যাবলেট স্ট্যাক করতে পারে (অর্থাত্, ppggউভয় ভূতে খাওয়া হবে)। টি অক্ষর, উভয় একটি প্রেতাত্মা এবং একটি বটিকা হিসেবে বিদ্যমান তাই এটি উপেক্ষা করা যেতে পারে (অন্য কোন চিঠি হিসাবে গণ্য, মত a)।

1. <Pop
2. _<op
3. __<p
4. ___<

আরও স্পষ্ট করার জন্য, "প্যাক-ম্যান এখানে হারা" স্ট্রিংয়ে নিম্নলিখিত ক্রিয়াকলাপগুলি ঘটে:

P <P, +1 Pellet (1 pellet)
a <a
c <c
- <-
M <M
a <a
n <n
  <[space]
l <l, +1 Pellet (2 pellets)
o <o, -1 Pellet (1 pellet)
s <s, -1 Pellet (0 pellets)
e <e, +1 Pellet (1 pellet)
s <s, -1 Pellet (0 pellets)
  <[space]
h <h, ghost wins, returns
e
r
e

উদাহরণ

Input: Pacman wins!
Output: ____________<

Input: Pacman loses wah-wah :(
Output: _______________<h-wah :(

Input: PELLET PELLET GHOST
Output: ___________________<

Input: Hello World!
Output: <Hello World!

Input: <_!@12<_<_<
Output: ___________<

এটি কোড-গল্ফ - বাইট জয়ের সর্বনিম্ন স্কোর।


29
তাহলে খোলসের কোনও মেয়াদ শেষ হওয়ার তারিখ নেই?
Rɪᴋᴇʀ

আউটপুটটিতে কি অনুসরণীয় টেবুলেশন গ্রহণ করা হয়?
কাটেনকিও

7
"এখানে" যেখানে প্যাকম্যান হেরে যায় তার জন্য +1। চতুর পরীক্ষা কেস।
অলিভিয়ার ডুলাক

5
> [আমি] n এই চ্যালেঞ্জ, তিনি একটি অক্ষরে অক্ষরে অক্ষরের এবং বিরামচিহ্নের জন্য ক্ষুধার্ত। ... ইয়্যাক -ম্যান?
কাজ

9
প্রতিবার আমি <প্রতীকটির দিকে
তাকালেই

উত্তর:



30

রেটিনা , 55 38 বাইট

i`^(([elp])|[^ghos]|(?<-2>.))*
$.&$*_<

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

ব্যাখ্যা

সমস্যাটি মূলত দীর্ঘতম উপসর্গটি সন্ধান করা যার সাথে মেলে না বন্ধের বন্ধনী। ছাড়া যে আমরা পারেন ব্যবহার করতে পারেন e, lবা pস্থানে (এবং হয় g, h, oবা sস্থানে )

সুতরাং, এই সমাধানটি ভারসাম্যপূর্ণ গ্রুপগুলির প্রায় একটি পাঠ্যপুস্তকের উদাহরণ example আমি কিভাবে তারা কাজ সম্পর্কে খুব বেশী বিস্তারিত মধ্যে যেতে হবে না যেমন এই কোড মূলত মান উদাহরণস্বরূপ আপনার উপর ছেড়ে পড়তে পারেন হিসাবে একই সমীকরণ গ্রুপ আমার তাই উত্তরে

পুরো প্রোগ্রামটি তাই একক রেজেক্সের বিকল্প। iসক্রিয় কেস-insensitivity। তারপরে আমরা হয় একটি ফাঁকির সাথে মেলে [elp]এবং গভীরতা কাউন্টারকে বাড়িয়ে তুলি (গ্রুপের ক্যাপচার স্ট্যাকের আকারে 2), অথবা আমরা এমন কোনও কিছু মেলে যা ভূতের সাথে নয় [ghos]বা আমরা একটি ভূতের সাথে মেলে .এবং স্ট্যাক থেকে পপিংয়ের মাধ্যমে গভীরতার পাল্টা হ্রাস করি 2। অবশ্যই, নীতিগতভাবে এটি [^ghos]বিভাগের সাথে একটি পেলিট বা বিভাগের সাথে একটি অ-ভূতের সাথে মেলানোর অনুমতি দেয় .তবে লোভী মেলানো এবং যেভাবে রেজেক্স ব্যাকট্র্যাক হয়েছে তা ধন্যবাদ, এই সম্ভাবনাগুলি কখনই রেজেক্স ইঞ্জিন দ্বারা চেষ্টা করা যায় না।

প্রতিস্থাপনের পরে দুটি রেটিনা নির্দিষ্ট বৈশিষ্ট্য ব্যবহার করা হয়: $*তার বামে টোকেন দ্বারা নির্দিষ্ট করা হিসাবে চরিত্রটি তার ডানদিকে পুনরাবৃত্তি করে। সেই টোকেনটি $.&যা পুরো ম্যাচের দৈর্ঘ্য। এর অর্থ হ'ল আমরা ম্যাচের প্রতিটি চরিত্রকে একটি দিয়ে প্রতিস্থাপন করব _। এবং তারপরে আমরা <সেই আন্ডারস্কোরগুলিতে একটি সংযোজন করি । ইনপুট অংশটি যা খাওয়া হয় না কেবল বিকল্পের দ্বারা অকার্যকর থাকে।


ক্যাপচার গ্রুপ গুলোতে দুর্দান্ত অপব্যবহার!
ফুটো নুন

11
পছন্দ করুন এটিই ভারসাম্যপূর্ণ গ্রুপগুলির জন্য তৈরি করা হয়। : ডি
মার্টিন ইন্ডার

1
আরে দেখুন, একটি রেটিনা উত্তর যা দূরবর্তীভাবে আমি ব্যবহার করি এমন রেগেক্সের মতো দেখায়
বিড়াল

10

পাইথন 2, 114 113 108 বাইট

s=raw_input()
p=i=0
for c in s:
 p+=(c in'plePLE')-(c in'ghosGHOS')
 if p<0:break
 i+=1
print'_'*i+'<'+s[i:]

আপনার ফাংশনটি Noneউত্তর দেয় না returns এবং আপনি কিভাবে 107 গণনা করবেন? আমি 110 টি গণনা করি
স্টিফান পোচম্যান

@ স্টেফানপোকম্যান ডাবল স্পেসগুলি হ'ল ট্যাব এবং এটি ফেরত দেওয়ার পরিবর্তে উত্তরটি মুদ্রণের অনুমতি দিয়েছে
নীল

@ মুদিফিশ আহ, ধন্যবাদ তারা এখানে ট্যাব বলে মনে হয় না, যদিও আমি "সম্পাদনা" করতে গেলেও না। এবং সমস্যাটি পরিষ্কারভাবে "রিটার্ন" কে জানিয়েছে ... সাইট-প্রশস্ত বিধি কি এটির উপর চাপ দেয়? (আমি এখানে বেশ নতুন এবং জানি না)
স্টেফান পোচম্যান

@ স্টেফানপোকম্যান ট্যাবগুলি এসই দ্বারা খাওয়া হয় (সাধারণত 4 স্পেসে রূপান্তরিত হয়)। কোনও কার্যক্রমে স্পষ্টভাবে বর্ণিত মুদ্রণের অনুমতি নেই। ওপি সম্ভবত এইটিকে ওভাররাইড করার অর্থ নয়
নীল

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

8

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

কখনও কখনও পাইথনকে একটি কার্যকরী ভাষা হিসাবে গড়ে তোলার আমার অনড় দৃ determination়তার এর সুবিধা রয়েছে।

def f(s,l=1):l+=(s[:1]in'plePLE')-(s[:1]in'ghosGHOS');return s*l and'_'+f(s[1:],l)or'<'+s

(সামান্য) অবহেলিত:

def f(s, l=1):
    l += (s[:1] in 'plePLE') - (s[:1] in 'ghosGHOS')
    return (s * l) and ('_' + f(s[1:], l)) or ('<' + s)

পুনরাবৃত্তি ব্যবহার করে ফলাফলের স্ট্রিং তৈরি করে। l("জীবন") এর আপডেটে পেললেটগুলির জন্য 1 টি যোগ হয় ( True - False == 1), ভূতের জন্য 1 টি বিয়োগ করে ( False - True == -1) এবং অন্য কোনও চরিত্রের জন্য 0 যোগ করে। sপাইথনের টুকরো টুকরো টুকরো টুকরো করা এবং সত্য যে ধন্যবাদ, তাই খালি স্ট্রিং যখন এটি 0 যুক্ত করে '' in any_str == True

রিটার্নের বিবৃতিটি একটি বাইট সংরক্ষণের test and b or aজায়গায় ব্যবহার করে a if test else b। পুনরাবৃত্তি বেস কেসটি ঘটে যখন স্ট্রিংটি শেষ হয় বা প্যাক-ম্যানটি পেললেটগুলি থেকে চালিত হয়, সংক্ষিপ্তভাবে উপস্থাপিত হয় s*p, যা সমান ''(এবং সুতরাং মিথ্যাতে মূল্যায়ন করে) হয় যখন হয় s == ''বা হয় p == 0


8

সি #, 269 256 232 212 211 বাইট

প্রথমে এখানে পোস্ট করুন, সুতরাং এটি সম্ভবত এটির চেয়ে অনেক বেশি দীর্ঘ (এবং সম্ভবত এটি সি # তে রয়েছে)। আমি যেখানে এটি সংক্ষিপ্ত করতে পারি তার কোনও টিপস দুর্দান্ত হবে!

যারা আমাকে সহায়তা করেছেন মন্তব্যে সবাইকে ধন্যবাদ!

গল্ফ সংস্করণ

static void p(string x){int p=0,i=0;string t='<'+x;var s=t.ToCharArray();for(;++i<s.Length;){if("PELpel".Contains(s[i]))p++;if("GHOSghos".Contains(s[i])&&--p<0)break;s[i]='<';if(i>0)s[i-1]='_';}Console.Write(s);}

উদার সংস্করণ

static void p(string x) {
 int p = 0, i = 0;
 string t = '<' + x;
 var s = t.ToCharArray();
 for (; ++i < s.Length;) {
  if ("PELpel".Contains(s[i])) p++;
  if ("GHOSghos".Contains(s[i]) && --p < 0) break;
  s[i] = '<';
  if (i > 0) s[i - 1] = '_';
 }
 Console.Write(s);
}

1
আপনি ভের-কীওয়ার্ড ব্যবহার করে বিভিন্ন ধরণের পরিবর্তন করতে পারবেন। যেমন var temp = '' + ইনপুট; 4 টি চর সংরক্ষণ করার জন্য লুপটির জন্য আবারও লেখা যেতে পারে: জন্য (var i = 0; i ++ <s.Length;)
সিশারপি

1
আপনি "int i = 0, p = 0; স্ট্রিং P =" Pelpel ", G =" GHOSghos ", t = '' + x;" ঘোষণার জন্য কমা ব্যবহার করতে পারেন; এবং @ সিএসপি থেকে পরিবর্তন, "(; i ++ <s.Length;)" এর জন্য লুপ তৈরি করে। অতিরিক্ত হিসাবে, আপনি "কনসোল.ওরাইট (গুলি)" করতে পারেন; সরাসরি মোট 235 বাইটের জন্য।
নিকসন

1
আমি মনে করি এটি elseআরও 5 টি অক্ষর সংরক্ষণ না করেও কাজ করা উচিত । এবং লুপটি শুরু করে i = 1আপনি কোডটি প্রতিবার কার্যকর করা যেতে পারে তবে শেষটিকে সরিয়ে ফেলতে সক্ষম হওয়া উচিত।
হিজড়া

1
আপনি আপনার সি ঘোষণা থেকে মুক্তি পেতে পারেন এবং কেবলমাত্র s[i]5 টি অক্ষরের জন্য অ্যাক্সেসটিকে ইনলাইন করতে পারেন।
ফাইজে

1
এটি নির্ধারিত মূল্য P="PELpel"এবং এবং G="GHOSghos"? আপনি কেবল একবার এগুলি ব্যবহার করুন। আমি কি কিছু মিস করছি, বা এটি কি কেবলমাত্র 4 টি অতিরিক্ত চরিত্র? এছাড়াও, আপনার কি দরকার else? "PELpel".Contains(c)এবং "GHOSghos".Contains(c)পারস্পরিক একচেটিয়া হওয়া উচিত।
jpmc26

7

পাইথ, 53 48 44 বাইট

!!@-> ট্রিকটির জন্য @ বাইট @ পিটু 1998 এর জন্য ধন্যবাদ }(যা কেবল পাইথ জানেন এমন লোকেরা বুঝতে পারে)

++ * জেফ <@ + এসএম._ এম - !! @ ডি "পেলপেল" !! @ ডি "জিহসগোস" কিউইউটি00 \ _ \ <> কিজেজে 
++ * জেফ <@ + এসএম._এম - !! @ ডি "পিইএল" !! @ D "ঘোষ" rQ1_1T00 \: _ \ <> QJ
++, * Jf <@ + + sM._m-} ঘ "PEL"} ঘ "ঘোষ" rz1_1T00 \: _ \ <> zJ

পরীক্ষা স্যুট.


17
যা কেবল পাইথকে জানে তারা খুব ভালভাবে বুঝতে পারে , বাকি কোডের মতো স্বাভাবিকভাবেই
লুই মেন্ডো

4
@ লুইসেমেন্ডো যারা পাইথ জানেন না তাদের কাছে ন্যায়সঙ্গত হওয়ার জন্য, আমি দৃ sure়ভাবে নিশ্চিত যে তাদের বেশিরভাগই বুঝতে পারে যে একটি সিঙ্গেলন সেট এবং অন্য একটি সেট এর মধ্যবর্তী সেট ছেদটি সিঙ্গেলন সেটের সদস্যের সদস্য হওয়ার সমতুল্য বৃহত্তর সেট: পি
ফ্রাইআমএইচগম্যান

1
@ ফ্রাইআম দ্য এজিগম্যান এত স্পষ্টতই !!@কেবল একটি ট্রিগ্রফ, তাই }না? : পি
CAD97

7

এমএটিএল , 37 36 35 বাইট

tkt'ghos'mw'pel'm-Ys1=Y>&)g95*60bhh

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

ব্যাখ্যা

tkt      % Input string implicitly. Duplicate, convert to lower case, duplicate
'ghos'm  % True for "ghost" characters
w'pel'm  % Swap to bring lowercase copy to top. True for "pellet" characters
-Ys      % Subtract, cumulative sum. Pac-Man can reach until the first "1"
1=       % True for entries that equal 1
Y>       % Cumulative maximum. This gives false until the first true is found, and
         % true from there on
&)       % Split original string in two parts, given by the zeros and ones respectively
g95*     % Convert the first part into ones and multiply by 95. This gives a numerical
         % array containing number 95 (ASCII for '_')
60       % Push 60 (ASCII for '<')
b        % Bubble up second part of original string
hh       % Concatenate the three strings/arrays, automatically converting to char

7

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

s=>s.replace(/./g,c=>p<0?c:(p+=/[elp]/i.test(c)-/[ghos]/i.test(c))<0?"<"+c:"_",p=0)+"<".slice(p<0)

ব্যাখ্যা: pপেলটের বর্তমান সংখ্যা বজায় রাখে। যদি এটি ইতিমধ্যে নেতিবাচক হয় তবে আমরা কেবলমাত্র অক্ষরটি ফিরিয়ে দেব এবং এগিয়ে চলেছি, যাতে বাকী স্ট্রিংটি অচ্ছুত থাকে। অন্যথায়, আমরা বর্তমানের চরিত্রটি পরীক্ষা করে দেখি এবং এটি যদি pনেতিবাচক হয়ে যায় তবে আমরা <অক্ষরটি সন্নিবেশ করি , অন্যথায় আমরা বর্তমান চরিত্রটিকে এর সাথে প্রতিস্থাপন করি _। অবশেষে, যদি pকখনও নেতিবাচক না হয়, আমরা <স্ট্রিংটির সাথে একটি প্রত্যয় আছি ।


4

পাইথ, 47 46 44 বাইট

++*\_Kh+f!h=+Z-}Jr@zT0"pel"}J"ghos"Uzlz\<>zK

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

লিকি নুনের থেকে একেবারে ভিন্ন পদ্ধতির, এবং আমি নিশ্চিত যে এটি আরও গল্ফ করা যেতে পারে।


Zপরিবর্তে ব্যবহার করুন Gএবং এতে পরিবর্তন f!করুনf!h
লিকি নুন

@ ল্যাকইনুন সবেমাত্র এটি অন্য একটি ট্যাবে খুঁজে পেয়েছেন। ধন্যবাদ।
পুর্কাকুডারী

2
আমি মনে করি t"ghost"সরানো উচিত
লিকি নূনের

যদি আমরা আমাদের সমাধানগুলি গল্ফ করে রাখি তবে আমাদের সমাধানগুলির মধ্যে সংজ্ঞা নির্ধারণের পার্থক্য কী?
লিকি নুন

@ ল্যাকইনুন আমি নিশ্চিত নই যে এর মধ্যে কোনটি নিকটে রয়েছে তবে আমার প্রথম প্রচেষ্টাটি আমাকে ৪৩ বাইট পেয়েছে এবং আমি মনে করি না যে আমার তৃতীয় উত্তর যুক্ত করা দরকার to হয়তো আমাদের পাইথ চ্যাটরুমে একসাথে কাজ করা উচিত?
FryAmTheEggman

4

লুয়া, 198 190 184 185 163 বাইট

ঠিক আছে, আমি স্বীকার করি, এটি দীর্ঘ। খুব দীর্ঘ. লুয়াতে স্ট্রিংগুলি নিয়ে খেলা করার জন্য কয়েকটি সরঞ্জাম রয়েছে তবে এটি সীমিত, শর্তসাপেক্ষে এটি অনেকগুলি স্থান নেয়।

সম্পাদনা করুন: আমাকে 9 বাইট সংরক্ষণ করার জন্য @ লিক্যনুন ধন্যবাদ :) একটি বাগ ঠিক করতে কিছু বাইট হারিয়েছেন

সম্পাদনা করুন 2: 163 বাইটস সমাধানটি লিক্যুন দ্বারা পাওয়া গেছে

i=0p=0n=...for c in n:gmatch"."do
p=p+(c:find"[ghosGHOS]"and-1or c:find"[pelPEL]"and 1or 0)if p<0then
break else i=i+1 end end print(('_'):rep(i)..'<'..n:sub(i+1))

পুরানো 185

p=0z=(...):gsub(".",function(c)p=p+(c:find"[ghosGHOS]"and-1or
c:find"[pelPEL]"and 1or 0)s=p<0 and 1or s
return s and c or'_'end)_,i,s=z:find"(_+)"print((s or'')..'<'..z:sub(1+(i or 0)))

Ungolfed

i=0                        -- number of characters eaten
p=0                        -- pellet counter
n=...                      -- shorthand for the argument
for c in n:gmatch"."       -- iterate over each characters in the input
do
  p=p+(c:find"[ghosGHOS]"  -- if the current char is a GHOST
        and-1              -- decrement the pellet counter
      or c:find"[pelPEL]"  -- if it's a PELLET
        and 1              -- increment it
      or 0)                -- else, leave it alone
  if p<0                   -- if we try to eat a ghost without pellet
  then 
    break                  -- stop iterating
  else
    i=i+1                  -- else, increment our score
  end
end

print(('_'):rep(i)         -- print i*'_'
  ..'<'                    -- appended with Pacman
  ..n:sub(i+1))            -- appended with the remaining characters if we died

d=c:lower()বড় হাতের অক্ষরগুলিও সরান এবং অনুসন্ধান করুন
লিকি নুন

and 1or s and 1or s s and s
ফাঁস নুন

@ লেকিউন দেখেনি যে কেবলমাত্র সমস্ত চিঠি লেখার চেয়ে এটি সংক্ষিপ্ত হবে ... ধন্যবাদ এছাড়াও, দ্বিতীয় মন্তব্যে আমার পরিবর্তিত কিছু উল্লেখ করা হয়েছে, তবে কেবল অবারিত> _ <
ক্যাটেনকিয়ো

print(('').rep('_',i)..','..z:sub(i+1))
লিকি নুন

@ ল্যাকইনুন আমি একই ধরণের সমাধানের আশেপাশে কাজ করছি, তবে সমস্যাটি inil
এমনটি

3

পাইথন 3, 176 157 150 149 134 133 124 বাইট

যুক্ত একটি ফাংশন সংজ্ঞায়িত করুন fযা স্ট্রিংটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে

def f(s):
 n=i=0
 for c in s:
  if c in"GgHhOoSs":
   if n:n-=1
   else:break
  n+=c in"PpEeLl";i+=1
 return"_"*i+"<"+s[i:]

সম্ভবত আরও গল্ফ করা যেতে পারে

যারা মন্তব্য করেছেন তাদের সবাইকে ধন্যবাদ: ডি


1
x=c.upper()
Lower

আপনি ;নিজের লাইনে প্রতিটি রাখার চেয়ে আলাদা করে একই লাইনে কিছু এক্সপ্রেশন লিখে কিছু সংরক্ষণ করতে পারেন । এছাড়াও আপনি পাইথন 2 ব্যবহার করতে পারেন যা আপনাকে প্রথম উদ্দেশ্য স্তর হিসাবে স্পেস এবং দ্বিতীয়টির মতো ট্যাব ব্যবহার করতে দেয়।
ডেনকার

n=i=0, না n=0এবং i=0t[i]="_"পরিবর্তে t[i] = "_", একই জন্য t[i] = "<"return''.join(t), সেই জায়গাটি সরিয়ে দিন।
এরিক আউটগলফার

@ লিক্যনুন টেস্টকেসগুলিতে বড় হাতের অক্ষর রয়েছে।
TuxCraftting

@ TùxCrîñftîñg না, তাদের অর্থ "GgHhOoSs"এবং "PpEeLl"
এরিক আউটগলফার

2

পাইথন 3, 114 110 বাইট

আমার প্রথম কোড গল্ফ

ডঃ গ্রিন ডিম এবং আয়রন ম্যানকে 4 বাইট সংরক্ষণ করার জন্য ধন্যবাদ

l,x=1,0
f,y,s="ghosGHOS","pelPEL",input()
while s[x:]*l:l+=(s[x]in y)-(s[x]in f);x+=l>0
print("_"*x+"<"+s[x:])

একটি লজিকাল এবং গুণনের জন্য বুলিয়ানগুলির মূল্যায়ন এক এবং শূন্যের সাথে ব্যবহার করে। (0 * 0 = 0, 1 * 0 = 0, 1 * 1 = 1)। আমি আশা করি এটি প্রথম চেষ্টা করুন।


সুন্দর উত্তর, এবং সাইটে আপনাকে স্বাগতম! অজগরটির কোন সংস্করণ আপনি ব্যবহার করছেন? আপনি এটি নির্দিষ্ট করতে চাইতে পারেন। এছাড়াও, আমি এটি পরীক্ষা করিনি, তবে আপনি while s[x:]*l4 বাইট বন্ধ করতে সক্ষম হতে পারেন ।
ডিজেএমসিএমহেম

1

পাওয়ারশেল, 185

{$l=1;$o="";for($i=0;($i -lt $_.Length) -or (($o+="<") -and 0); $i++){if ($_[$i] -match '[pel]'){$l++}if($_[$i] -match '[ghos]'){$l--}if(!$l){$o+="<"+$_.substring($i);break}$o+="_"}$o}

Ungolfed:

("Pacman wins!",
"Pacman loses wah-wah :(",
"PELLET PELLET GHOST",
"Hello World!"
) | 
% {
    $l=1;$o="";
    for($i = 0; ($i -lt $_.Length) -or (($o+="<") -and 0); $i++) {
        if ($_[$i] -match '[pel]') { $l++ }
        if ($_[$i] -match '[ghos]') { $l--}
        if (!$l) { $o+="<"+$_.substring($i); break }        
        $o += "_"
    }
    $o
}

1

পাইথন 3, 211 184 বাইট

আর্গুমেন্ট 'গুলি' একটি স্ট্রিং

def f(s):
    p=c=0
    for i in s:
        if i in "gGhHoOsS":
            if p<1:break
            else:p-=1
        if i in "pPeElL":p+=1
        c+=1
    return"_"*c + "<" + s[c:]

আমি যে কোনও গল্ফিং টিপসকে প্রশংসা করব কারণ এটি আমার প্রথম কোড গল্ফ প্রচেষ্টা

মন্তব্য করার জন্য ধন্যবাদ :)


2
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! কিছু টিপস: অপারেটরগুলির মধ্যে প্রচুর অযৌক্তিক শ্বেতস্পেস রয়েছে। এগুলি অপসারণ করা ভাল পরিমাণ বাইট সংরক্ষণ করতে পারে। এছাড়াও আপনি পাইথন 2 ব্যবহার করতে পারেন, যা আপনাকে প্রথম উদ্দেশ্যে স্তর এবং অন্যগুলির জন্য ট্যাব হিসাবে স্পেস ব্যবহার করতে দেয়।
ডেনকার

1
আপনি প্রথমটিকে return "_"*c + "<" + s[c:]ঠিক একটি দিয়ে প্রতিস্থাপন করতে পারেন breakযে কোনওভাবে লুপের পরে কোডটি কার্যকর করা হবে।
আরফি

এটি অনলাইন চেষ্টা করুন! আমি 183 বাইট পেয়েছিলাম। আপনি গণনা করা একটি ট্রেলিং নিউলাইন আছে?
পাভেল

1

Haskell,, 119 113 বাইট

6 বাইট কম জন্য ড্যানিয়েল ওয়াগনার ধন্যবাদ।

p=(0!)
n!(c:s)|elem c"ghosGHOS"=if n<1then '<':c:s else(n-1)&s|elem c"elpELP"=(n+1)&s|0<1=n&s
_!_="<"
n&s='_':n!s

এটি হিসাবে কল করুন p "Hello World!"

1thenএকটি প্রান্ত ক্ষেত্রে যে আমার GHC (7.10) সঠিকভাবে ব্যাখ্যা করা হয়, কিন্তু এটি সবচেয়ে সিনট্যাক্স highlighters এর ছোঁড়ার। সুতরাং এটি আপনার সংকলকটিতেও আলাদাভাবে ব্যাখ্যা করা যেতে পারে।

Ungolfed:

pacman string = go 0 string

-- | In the golfed version: (!)
go _   []                   = "<"                            -- won
go pellets (char:string)
 | char `elem` "ghosGHOS"
 = if pellets < 1        then '<':char:string                -- lost
                         else nextStep (pellets - 1) string  -- ghost
 | char `elem` "elpELP"
 =                            nextStep (pellets + 1) string  -- pellet
 | otherwise
 =                            nextStep  pellets      string  -- anything else

-- | In the golfed version: (&)
nextStep pellets string = '_':(go pellets string)

1
সমস্ত প্রহরীকে একই লাইনে রেখে আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন, যেমন n!(c:s)|elem c"blah"=blah|elem c"blah"=blah|0<1=blah
ড্যানিয়েল ওয়াগনার

@ ড্যানিয়েল ওয়াগনার চমৎকার টিপস, ধন্যবাদ!
মারলিন

আপনি কি একটি টিআইও লিঙ্ক যুক্ত করতে পারেন ? আমি এটি কার্যকর করার চেষ্টা করার সময় ত্রুটিগুলি পেতে থাকি।
পাভেল

1

সি, 237 বাইট

#include<stdio.h>
#include<string.h>
main(p,i,j){char s[99];fgets(s,99,stdin);for(p=i=0;s[i];++i){if(strchr("GHOSghos",s[i])){if(p)p--;else break;}else if(strchr("PELpel",s[i]))p++;}j=i-(s[i]==0);while(j--)printf("_");printf("<%s",s+i);}

1

সি ++, 315 373 327 বাইট

(দ্রষ্টব্য: এখনও গল্ফিং)

#include <iostream>
#include <string>
using namespace std;
int main(){string input;getline(cin, input);
if(input.find("Pac-Man loses")!=string::npos||input.find("Pacman loses")!=string::npos)
    cout<<"<"<<input.substr(15,input.length()-1);
else{for(unsigned i=0;i<=input.length();++i)
    cout << "_";
cout<<"<";
}return 0;
}

1
থাকার কথা যখন প্যাক-ম্যান হারাচ্ছে না।
টিলেডেরো

হাই @ টেল্ডেরো, আমার কোডটি পর্যালোচনা করার জন্য ধন্যবাদ! আমি আমার পোস্ট আপডেট করব।
টাকমা

আমি মনে করি এটি আরও গল্ফ করা যেতে পারে। পরে নতুন লাইন / স্পেস অপসারণের চেষ্টা করুন if(), এবং প্রায় শূণ্যস্থান সরানোর !=, ||, =, -, এবং <=। এছাড়াও, cin>>inputপরিবর্তে কাজ করে না getline? আপনি প্রায় ঘনীভূত করতে পারেন ;
ননওনিহলে

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


1

রুবি, (১১৯ বাইট)

q=i=0;a=$**" ";a.split(//).each{|c|q+=((c+?p=~/[ple]/i)^1)-((c+?g=~/[ghos]/i)^1);q<0?break : i+=1};p ?_*i+?<+a[i..-1]

আমি এখানে নতুন থাকায় সম্ভবত কিছু জিনিস আমি মিস করছি ...

রুবি আমার বন্ধু :)


1
পিপিসিজিতে আপনাকে স্বাগতম!
ফ্লিপট্যাক

0

পার্ল, 54 (52 + 2) বাইট

s/([pel](?1)*[ghos]|[^ghos
])*/'_'x(length$&).'<'/ei

-pকমান্ড-লাইন বিকল্পগুলিতে নির্দিষ্ট করা দরকার ।

ব্যাখ্যা:

-pবিকল্প বিবৃতি একটি পঠিত রুপান্তরিত-প্রিন্ট লুপ, যেখানে প্রতিটি লুপ পুনরাবৃত্তির সময়, আবৃত করা ঘটায় $_লাইন বিভেদক সহ ইনপুট একটি লাইন রয়েছে।

রেজেক্স মূলত রেটিনা উত্তরের মত একই ধারণা।

অনুসন্ধানের প্যাটার্নটিকে ([pel](?1)*[ghos]|[^ghos ])*"গ্রহণযোগ্য" বলুন। তারপরে এটি পুনরাবৃত্তভাবে সংজ্ঞায়িত করা যেতে পারে:

একটি স্ট্রিং "গ্রহণযোগ্য" যদি:

  • এটি একটি চরিত্র PELLETছাড়া T, একটি গ্রহণযোগ্য স্ট্রিং দ্বারা অনুসরণ, একটি অক্ষর দ্বারা অনুসৃত GHOSTছাড়া T
  • এটি একটি অক্ষর নয় GHOSTতবে Tএটি একটি নতুন লাইন চরিত্র নয়।
  • এটি গ্রহণযোগ্য স্ট্রিংগুলির যে কোনও সংখ্যার (0 সহ) সংমিশ্রণ।

এই সংজ্ঞাটি PELপ্রেতের চেয়ে আরও বেশি গুলি ব্যবহারের অনুমতি দেয়: একটি চরিত্রটি পেললেট চরিত্র বা নন-ভূত চরিত্রের সাথে মিলে যায়।

খালি স্ট্রিংটি গ্রহণযোগ্য হিসাবে বিবেচিত হয়, সুতরাং রেজেক্স 0 অবস্থানের সাথে মিলের গ্যারান্টিযুক্ত, যেখানে দীর্ঘতম গ্রহণযোগ্য সাবস্ট্রিংয়ের সাথে মিল থাকবে।

এই দীর্ঘতম গ্রহণযোগ্য সাবস্ট্রিং তারপর সমান দৈর্ঘ্যের আন্ডারস্কোর, দ্বারা অনুসরণ দ্বারা মেলানো হয় <


আইরিক ফ্ল্যাগগুলি প্রতিটি বাইট হিসাবে -p গণনা করে।
পাভেল

1
@ পাভেল এটি জটিল। যদি -pইতিমধ্যে ব্যবহৃত না হয়ে সাধারণ অনুরোধ -, যেমন perl -e-> perl -pe, তবে এটি -বিনামূল্যে। তবে আমার মনে হয় perl -eউদ্ধৃতি দেওয়ার কারণে সংস্করণটি দীর্ঘতর, সুতরাং আমি মনে করি যে আমি এটি এখানে ব্যবহার করতে পারি না।
এইচডিভি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.