ওয়েল যে অদ্ভুত… অপেক্ষা না, এমনকি এমনকি!


70

প্রস্তাবনা

পূর্ণসংখ্যাগুলি সর্বদা হয় এমনকি বা বিজোড় । এমনকি পূর্ণসংখ্যা দুটি দ্বারা বিভাজ্য, বিজোড় পূর্ণসংখ্যা হয় না।

যখন আপনি দুটি পূর্ণসংখ্যা যোগ করেন আপনি সমানগুলি সমান বা বিজোড় ছিল কি না তার ভিত্তিতে ফলাফলটি সমান বা বিজোড় হবে কিনা তা নির্ধারণ করতে পারেন:

  • এমনকি + এমনকি = এমনকি
  • এমনকি + বিজোড় = বিজোড়
  • বিজোড় + এমনকি = বিজোড়
  • বিজোড় + বিজোড় = এমনকি

তেমনি, আপনি দুটি পূর্ণসংখ্যাকে গুণ করলে আপনি ফলাফলগুলি সমান বা বিজোড় কিনা তার উপর ভিত্তি করে ফলাফলটি সমান বা বিজোড় হবে কিনা তা নির্ধারণ করতে পারেন:

  • এমনকি * এমনকি = এমনকি
  • এমনকি * বিজোড় = এমনকি
  • বিজোড় * এমনকি = এমনকি
  • বিজোড় * বিজোড় = বিজোড়

সুতরাং, যদি আপনি কোনও গণিতের প্রকাশের সমস্ত পরিবর্তনের সমতা বা বিজোড়তা জানেন যা কেবলমাত্র যোগ এবং গুণকে জড়িত করে তবে আপনি ফলাফলটি সমান বা বিজোড় হবে কিনা তা নির্ধারণ করতে পারেন।

উদাহরণস্বরূপ, আমরা আত্মবিশ্বাসের সাথে বলতে পারি যে (68 + 99) * 37ফলাফলটি একটি বিজোড় হিসাবে ঘটায় কারণ একটি সমাকামীর সাথে বিজোড় ( 68 + 99) একটি বিজোড় এবং সেই বিজোড় সময়ে অন্য একটি বিজোড় ( odd * 37) বিজোড় দেয়।

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা কেবলমাত্র চারটি অক্ষর যুক্ত স্ট্রিংয়ের সাথে নিয়ে থাকে eo+*। এই স্ট্রিংটি কেবলমাত্র যোগ ( ) এবং গুণন ( ) সহ প্রিফিক্স নোটেশনে প্রদত্ত গাণিতিক প্রকাশকে উপস্থাপন করে । প্রত্যেকে কিছু স্বেচ্ছাসেবী এমনকি সংখ্যার প্রতিনিধিত্ব করে এবং প্রত্যেকে কিছু স্বেচ্ছাসৈনিক বিজোড় সংখ্যা উপস্থাপন করে।+*eo

আপনার কাজটি হ'ল অভিব্যক্তিটিকে সহজ করা, মুদ্রণ করা বা একক ফিরানো eবা তার oভিত্তিতে যে অভিব্যক্তির ফলাফলটি সমান বা বিজোড়।

আপনি ধরে নিতে পারেন যে ইনপুটটি সর্বদা বৈধ উপসর্গ শিরোনামে থাকবে। বিশেষত, প্রতিটি +এবং *এরপরে সর্বদা দুটি সম্পর্কিত অপারেশন থাকবে। এই অপারেশনগুলি একক eবা o, বা অন্য কোনও +বা *অভিব্যক্তি হতে পারে যা ঘুরে দেখা যায় অপারেশনগুলি।

উদাহরণস্বরূপ, ইনপুটটি *+eooহিসাবে পড়তে পারে mul(add(e, o), o), বা (e + o) * oসাধারণ ইনফিক্স স্বরলিপিতেeএবং প্রথম oসংশ্লিষ্ট operands হয় +, এবং +eoশেষ oসংশ্লিষ্ট operands হয় *

কেবল এটি পরিষ্কার করার জন্য, এখানে কিছু অবৈধ ইনপুট রয়েছে যাগুলির উপসর্গের ভুল চিহ্ন রয়েছে:

eo
ooe
o+e
ee*
+*oe
+e*o

আউটপুটে একটি একক পেছনের নতুন লাইন ঠিক আছে, তবে অন্যথায় সমতল eবা বিজোড়ের জন্য একটি সমতল oযা আউটপুট হওয়া উচিত।

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

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

(খালি লাইনগুলি কেবল অনুরূপ কেসগুলিকে দর্শনীয়ভাবে পৃথক করতে সহায়তা করে))

e -> e
o -> o

+ee -> e
+eo -> o
+oe -> o
+oo -> e
*ee -> e
*eo -> e
*oe -> e
*oo -> o

+e+ee -> e
+e+eo -> o
+e+oe -> o
+e+oo -> e
+e*ee -> e
+e*eo -> e
+e*oe -> e
+e*oo -> o

+o+ee -> o
+o+eo -> e
+o+oe -> e
+o+oo -> o
+o*ee -> o
+o*eo -> o
+o*oe -> o
+o*oo -> e

*e+ee -> e
*e+eo -> e
*e+oe -> e
*e+oo -> e
*e*ee -> e
*e*eo -> e
*e*oe -> e
*e*oo -> e

*o+ee -> e
*o+eo -> o
*o+oe -> o
*o+oo -> e
*o*ee -> e
*o*eo -> e
*o*oe -> e
*o*oo -> o

++eee -> e
++eeo -> o
++eoe -> o
++eoo -> e
++oee -> o
++oeo -> e
++ooe -> e
++ooo -> o

+*eee -> e
+*eeo -> o
+*eoe -> e
+*eoo -> o
+*oee -> e
+*oeo -> o
+*ooe -> o
+*ooo -> e

*+eee -> e
*+eeo -> e
*+eoe -> e
*+eoo -> o
*+oee -> e
*+oeo -> o
*+ooe -> e
*+ooo -> e

**eee -> e
**eeo -> e
**eoe -> e
**eoo -> e
**oee -> e
**oeo -> e
**ooe -> e
**ooo -> o

+e+e+e+ee -> e
+o+o+o+oo -> o
*e*e*e*ee -> e
*o*o*o*oo -> o
+e+o+e+oe -> e
+o+e+o+eo -> o
*e*o*e*oe -> e
*o*e*o*eo -> e
+e*e+e*ee -> e
+o*o+o*oo -> o
*e+e*e+ee -> e
*o+o*o+oo -> o

+**++*+*eeoeeooee -> e
+**++*+***eooeoeooeoe -> e
+**+***+**++**+eooeoeeoeeoeooeo -> o

+e*o*e**eoe -> e
+*e+e+o+e**eeoe -> e
**o++*ee*++eoe*eo+eoo -> o

8
আমরা কি ইনপুট হিসাবে e এবং o এর পরিবর্তে 1 এবং 0 নিতে পারি?
ভূত_স_ই_কোড

8
@ঘোস্ট_ইন_এই_ কোড কোড না, দুঃখিত।
ক্যালভিনের

2
evalঠিক আছে ব্যবহার করছেন ?
xnor

1
@ এক্সনর শিওর যাই হোক না কেন কাজ করে.
ক্যালভিনের

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

উত্তর:


43

সিজেম, 18 17 13 বাইট

4 বাইট সংরক্ষণের জন্য অ্যাডিটসুকে ধন্যবাদ।

qW:O%eu~"eo"=

পরীক্ষার স্যুটটি এখানে চেষ্টা করে দেখুন। (পরীক্ষার স্যুটটি পারমালিঙ্কের জন্য খুব দীর্ঘ। চ্যালেঞ্জের বিশেষ থেকে এগুলি অনুলিপি করুন))

ব্যাখ্যা

q     e# Read the input.
W:O   e# Push a -1 and store it in variable O.
%     e# Use the -1 to reverse the string, because CJam's stack-based nature and the
      e# commutativity of the operators means we can evaluate the code in postfix notation.
eu    e# Convert the string to upper case, turning 'e' into 'E' (a variable with even value
      e# 14) and 'o' into 'O' (which we've stored the odd value -1 in).
~     e# Evaluate the string as CJam code, leaving the result on the stack.
"eo"= e# Use the result as an index into the string "eo". CJam's indexing is cyclic so it
      e# automatically takes inputs modulo 2. Negative indices also work as expected.

27

পাইথ, 16 14 বাইট

@"eo".vjdXzGU9

পাইথ নিজেই একটি স্ট্রিং মূল্যায়ন করতে পারে, এটি পাইথ সিনট্যাক্সে। অতএব, আমি প্রতিস্থাপন eএবং oসঙ্গে 4এবং 5। তারপরে মূল্যায়ন আমাকে একটি এমনকি বা বিজোড় নম্বর দেবে এবং আমি সহজেই ফলাফলটি মুদ্রণ করতে পারি।

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

@"eo".vjdXzGU9   implicit: z = input string
         XzGU9   replace "e" in z with 4 and "o" with 5
       jd        put a space between each char
     .v          evaluate it (Pyth style)
@"eo"            and print "e" or "o"

প্রতিস্থাপন অতিরিক্ত ব্যাখ্যা। Gবর্ণমালা দিয়ে শুরু করা একটি পরিবর্তনশীল abc...xyzU9তালিকা হয় [0, 1, ..., 8]XzGU9বর্ণমালার বর্ণগুলি তালিকার মানগুলির সাথে প্রতিস্থাপন করে। সুতরাং , এর সাথে , ..., সাথে , ..., সাথে , সাথে , ..., এবং এর সাথে aপ্রতিস্থাপিত হয় । সুতরাং আমি একটি এমনকি সংখ্যার সাথে এবং একটি বিজোড় সংখ্যা সঙ্গে প্রতিস্থাপিত হয় । অন্যান্য সমস্ত প্রতিস্থাপনের মোটেই কোনও প্রভাব নেই।0b1e4i8j0o5eo


আপনি কেন ভাবটি বিপরীত করছেন? এছাড়াও, আপনার কি ফলাফলের মডুলো 2 নেওয়ার দরকার নেই, বা সূচকের চারপাশে মোড়ানো?
xnor

@ xnor একটি স্ট্রিংয়ের কোনও উপাদান অ্যাক্সেস করা মডুলো মোড়ক সম্পন্ন করা হয়। সুতরাং
মডুলোর

@ এক্সনর তবে বিপরীত জিনিসটির জন্য ধন্যবাদ। অবশ্যই এটি প্রয়োজনীয় নয়। (আমি আজ একটি
লিটল

16

পার্ল, 50 45 40 টি অক্ষর

(39 অক্ষর কোড + 1 অক্ষর কমান্ড লাইন বিকল্প।)

1while s/\+oe|\+eo|\*oo/o/||s/\W\w\w/e/

নমুনা রান:

bash-4.3$ echo -n '**o++*ee*++eoe*eo+eoo' | perl -pe '1while s/\+oe|\+eo|\*oo/o/||s/\W\w\w/e/'
o

কীভাবে while/../?
প্রাইমো

ডোহ। আমি বোকা। এর sedসংস্করণটি চেষ্টা করার সময় প্রকৃতপক্ষে সেই শর্তটি ব্যবহার করা হয়েছে ... আপনাকে ধন্যবাদ, প্রিমো।
manatwork

বা আরও ভাল 1while s/\+oe...,। আমি খুব নিশ্চিত [+*]যে প্রতিস্থাপন করা যাবে \W
প্রাইমো

আপনাকে আবার ধন্যবাদ, প্রিমো। আমি মনে করি আমার একবারে একটি সমাধানে মনোনিবেশ করা উচিত। ( gemaআমাকে পাগল করে দিচ্ছে ...)
manatwork


13

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

(+`\*oo|\+(eo|oe)
o
\W\w\w
e

সুবিধাজনক এক ফাইল সংস্করণের জন্য -sপতাকা ব্যবহার করা হয়।

আমরা বিজোড় এক্সপ্রেশন (অদলবদল *oo, +oe, +eoকরার জন্য) oযতক্ষণ না আমরা, তারপর বাকি প্রতীক অক্ষর অক্ষর এক্সপ্রেশন অদলবদল করতে পারেন e। আমরা এটি না করা পর্যন্ত এটি পুনরাবৃত্তি করি এবং চূড়ান্ত একটি অক্ষরটি আমাদের আউটপুট।

(এই সমাধানটি ম্যানটওয়ার্কের পার্ল উত্তরের মতো ))

এটি অনলাইন চেষ্টা করুন! (ডেনিস দ্বারা)


12

পাইথন 2, 90

def f(s):i=iter(s);a=next(i);return(a>'a')*a or'oe'[f(i)==f(i)if'*'<a else'e'in f(i)+f(i)]

iterফাংশন একটি FIFO কিউ যা স্মরণ কিভাবে স্ট্রিং এর অনেক কল জুড়ে পার্স করা হয়েছে মধ্যে ইনপুট স্ট্রিং করতে একটি ভাল উপায় f। এটি আদর্শবান, সুতরাং ইনপুটটি স্ট্রিংয়ের পরিবর্তে ইতিমধ্যে পুনরাবৃত্ত হলে এটি আবার কল করা নির্দোষ। উত্তরের অর্ধেকটি শুরু করে or'oe'... মনে হয় এটি গল্ফযোগ্য হওয়া উচিত, তবে আমি কিছুই খুঁজে পেলাম না।

-1 Sp3000 ধন্যবাদ।


দুর্দান্ত সমাধান! iterআমার মনকে সত্যিই টলমল করে পুনরাবৃত্ত ফাংশনগুলি ।
xnor

3
এখানে পাটিগণিতের সরাসরি গণনা করার একটি উপায় এখানে রয়েছে eval:def f(s,e=0,o=1):i=iter(s);a=next(i);return'eo'[eval(a*(a>'a')or f(i)+a+f(i))%2]
xnor

1
@ এক্সনর আপনি উত্তর হিসাবে পোস্ট করতে পারেন। এটি এই সমাধান থেকে অনেক পৃথক।
ফেয়ারসাম

9

গণিত, 91 84 বাইট

#//.s_:>s~StringReplace~{"+ee"|"+oo"|"*ee"|"*eo"|"*oe"->"e","+eo"|"+oe"|"*oo"->"o"}&

এটি সঙ্কুচিত করার জন্য একটি উপায় খুঁজছেন ...


3
//.তুলনায় খাটো FixedPoint
আলেফাল্ফা

8

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

def f(s,e=0,o=1):i=iter(s);a=next(i);return(a>'a')*a or'eo'[eval(f(i)+a+f(i))%2]

এটি ফেয়ারসামের অত্যন্ত চালাক উত্তরে নির্মিত যা iterপোলিশ-স্বরলিপি অপারেশনগুলি প্রয়োগ করতে ব্যবহার করে। নতুন ধারণাটি হ'ল evalএক্সপ্রেশনগুলি +এবং এর *সাথে মূল্যায়ন করার জন্য eval(f(i)+a+f(i)), যেখানে অপারেটরটিকে aপুনরাবৃত্তির ফলাফলগুলির মধ্যে ইনফিক্স স্থাপন করা হয়। Alচ্ছিক e=0,o=1function চ্ছিক ফাংশন আর্গুমেন্টে বাইন্ডিংগুলি ব্যবহার করে । তারপরে আউটপুটটি মোড 2 নেওয়া হয়।


এটি অজগর 3 তেও কাজ করে the উপায় দ্বারা, কীভাবে eval এর "e = 0, o = 1" বাইন্ডিংগুলির প্রয়োজন?
করেল

@ কারহেল এটি মত প্রকাশের মূল্যায়ন করে e+o, তাই সংখ্যার উল্লেখ করার জন্য এটির ভেরিয়েবলগুলির প্রয়োজন।
xnor

8

সি, 79 বাইট

সোজা পুনরাবৃত্তি। চারটি অনুমোদিত ইনপুট অক্ষরের কিছু (কাকতালীয়?) বিটওয়াইজ বৈশিষ্ট্যের উপর নির্ভর করে।

f(){int c=getchar();return c&4?c:c&1?f()^f()^'e':f()&f();}main(){putchar(f());}

8

শেল + জিএনইউ ইউটিলিটিস, 33

dc -eFo`rev|tr oe OK`2%p|tr 10 oe

এসটিডিআইএন থেকে ইনপুট নেওয়া হয়।

এই ক্ষেত্রে স্ট্যাক-ভিত্তিক ক্যালকুলেটরের সাথে ইনপুটটি উল্টানো এবং মূল্যায়ন করার একই কৌশল করে dc। আমরা প্রতিস্থাপন করতে পারে eএবং oসঙ্গে 0এবং 1, কিন্তু তারপর স্পেস বেঠিক নম্বর মধ্যে ডিজিটের লোভী পার্সিং এড়াতে ব্যবধান প্রবিষ্ট করা প্রয়োজন হবে।

পরিবর্তে eপরিবর্তিত হয় Kযার dcসাহায্যে বর্তমান সূক্ষ্মতাটিকে স্ট্যাকের দিকে ধাক্কা দেওয়ার জন্য আদেশ রয়েছে, যা পূর্বনির্ধারিতভাবে 0 হয়। এবং oপরিবর্তিত হয় Oযার dcসাহায্যে বর্তমান আউটপুট বেসটিকে স্ট্যাকের দিকে ঠেলে দিতে হবে। এটি অদ্ভুত হওয়া দরকার, তাই Foডিসি-তে অন্য কিছু করার আগে আমরা এটি 15 এ সেট করি ।

তারপর এটি কেবল গেলিক ভাষার 2 এবং প্রিন্টিং গ্রহণ একটি ব্যাপার 2%p। কেবলমাত্র সম্ভাব্য মানগুলি এখন 0এবং 1তাই, আউটপুট বেস 15 হ'ল তা বিবেচ্য নয় Then তারপরে trফিরে oবা এটিকে অনুবাদ করে e


আমি পছন্দ করি যদি আপনি আপনার চোখকে স্ক্রিন করেন তবে এই উত্সটি প্রায় দেখায় dc Forever OK


5

গুরুতরভাবে , 24 বাইট

,R'2'e(Æ'1'o(Æ£ƒ'e'o2(%I

আরও দক্ষ স্ট্যাক ম্যানিপুলেশন সম্ভবত এই সংক্ষিপ্ত করতে পারে, তবে মেহ, আমি এতে খুশি।

যেমন একটি স্ট্রিং হিসাবে ইনপুট লাগে "+*oee"

এটি অনলাইনে চেষ্টা করুন (ইনপুটটি ম্যানুয়ালি প্রবেশ করাতে হবে)

ব্যাখ্যা:

,R        get input and reverse it
'2'e(Æ    replace all "e"s with "2"s
'1'o(Æ    replace all "o"s with "1"s
£ƒ        cast as function and call
'e'o2(%I  push "e" if result is even, else "o"

5

রুবি, 61 বাইট

রিকার্সিভ ডেসেন্ট পার্সিং এবং বুলিয়ান বীজগণিত ব্যবহার করে।

def f
gets(1)==?+?f^f : ~/\*/?f&f : $_==?o
end
puts f ? ?o:?e

ফাংশনটি একবারে স্টিডিনের একটি চরিত্র পড়ে। যদি এটি একটি +বা একটি পড়ে থাকে *তবে বিজোড় বা এমনকি নির্ধারণের জন্য এটি নিজেকে দু'বার কল করে। ফাংশনটি trueবিজোড় এবং এর falseজন্য ফিরে আসে even^ XOR যাও এবং & এবং অপারেটরদের যথাক্রমে উপরন্তু এবং গুণ এক্সপ্রেশন এর "oddness" নির্ধারণ করতে ব্যবহার করা হয়।

এখানে একটি অবারিত সংস্করণ:

def f
  x = gets(1)
  case x
  when '+'
    f ^ f
  when '*'
    f & f
  else
    x == 'o'
  end
end

puts f ? 'o' : 'e'

প্রাথমিক সংস্করণে বাগটি নির্দেশ করার জন্য @ শেলকে ধন্যবাদ।


1
এটি কাজ করে না, +eeদেয় o। আমি ধারণাটি পছন্দ করি
শেলভাকু

f^fসাথে !f^fএবং f&fসাথে প্রতিস্থাপন f|fএবং এটি কাজ করে। পরীক্ষার মামলাগুলি চালানোর জন্য প্রোগ্রাম: পেস্টবিন.
com

1
ধন্যবাদ, ভাল ধরা! মনে হচ্ছে আমি নিজেকে সেখানে কিছুটা বিভ্রান্ত করেছি। দুর্দান্ত টেস্ট স্যুটও! টেস্ট-চালিত হ'ল উপায়, গল্ফ করার
সময়ও

@ শেল আহা ..! আমি ফিরে পরিবর্তিত f^fএবং f&fএবং ফ্লিপ $_==?eএবং ?e:?oপরিবর্তে :)
daniero

1
বাহ, প্রতিদিন নতুন কিছু ... শিখতে ruby-doc.org/core/Regexp.html#method-i-7E
Shelvacu

4

মিনকোলাং 0.14 , 40 বাইট

আমি একটি চতুর eval পদ্ধতি করার চেষ্টা করেছি, কিন্তু দেখা যাচ্ছে যে মূল স্থানের বাইরে কোডবক্সে যুক্ত হওয়া কোনও মান প্রোগ্রামের কাউন্টারে পৌঁছাতে পারে না। সুতরাং আমি একটি কম চালাক eval পদ্ধতি করেছি। : P: P

$o"eo+*"r0I4-[4g1Z2*1F]l*"e"+O.
0f1f+f*f

এখানে চেষ্টা করুন।

ব্যাখ্যা

$o                                Read in whole input as characters
  "eo+*"                          Push these characters onto the stack (in reverse order)
        r                         Reverse the stack
         I4-                      Push the length of the stack - 4
            [                     For loop; pop n and repeat that many times
             4g                   Get the item at the fourth index and put it on top
               1Z                 Pops n and pushes first index of n in stack
                 2*               Multiply by 2
                   1F             Gosub; goes to codebox(2n,1) to be returned to
                     ]            Close for loop
                      l*          Multiply by 10
                        "e"+      Add 101 ("o" is 111)
                            O.    Output as character and stop.
0f1f+f*f                          Does the appropriate operation then returns to F

1
সাব্বাস! ভাল ওল 'শেল একটি (আধা) গল্ফিং ভাষা মারায় ;
ডিজিটাল ট্রমা

4

জাভাস্ক্রিপ্ট, 110 106 94 বাইট

while(i.length>2)i=i.replace(/([+*][eo]{2})/,(o,e)=>{return"+oe+eo*oo".indexOf(o)<0?"e":"o"});

অবশ্যই ক্ষুদ্রতম সমাধান নয়, তবে সম্ভবত জাভাস্ক্রিপ্টের মতো ভার্ভোজ ভাষায় সবচেয়ে ক্ষুদ্রতম সমাধান সম্ভবত!


নন-ক্যাপচারিং গ্রুপগুলি ব্যবহার করা পারফরম্যান্সের পক্ষে ভাল তবে কোড আকারের পক্ষে খারাপ। তাদের অপসারণ ভাল ?:
manatwork

সম্মত ... এবং তাই সংশোধিত
আরকাইন 3'15

এখন অন্য চেহারা দেখুন। আপনার কোডটি আরও কিছুটা কমে যেতে পারে while(i.length>2)i=i.replace(/[+*][eo]{2}/,function(o){return"+oe+eo*oo".indexOf(o)>=0?"o":"e"})। অথবা আপনি যদি ECMAScript 6 এর ফ্যাট তীর ফাংশনে পরিবর্তন করেন তবে while(i.length>2)i=i.replace(/[+*][eo]{2}/,o=>"+oe+eo*oo".indexOf(o)>=0?"o":"e")। তবে দুর্ভাগ্যক্রমে প্রয়োজনীয়তা প্রোগ্রাম বা ফাংশন বলে, যখন আপনার বর্তমান কোডটি একটি স্নিপেট। এটি হয় ইনপুট এবং আউটপুট বা যুক্তি এবং রিটার্ন মান হ্যান্ডেল করা উচিত।
manatwork

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

1
@ আরকাইন, আপনাকে নিয়মিত অভিব্যক্তিতে কোনও গ্রুপ ক্যাপচার করার দরকার নেই কারণ আপনি যেভাবে যাইহোক পুরো ম্যাচড স্ট্রস্ট্রিংটিকে এক টুকরো হিসাবে ব্যবহার করবেন। একই কারণে কলব্যাকে ই প্যারামিটার পাস করার দরকার নেই।
manatwork

4

, 24 20 19 18 বাইট

i`2:e;1:o;~2%'o'e?

, ইনপুট লাগে এটা reverses, নির্ধারণ eকরার 2 এবং oকরতে 1 এবং পোস্ট এটা টাম্বলার থেকে হে কোড যেমন মূল্যায়ন করে।

ব্যাখ্যা:

i` ইনপুট পান এবং এটি বিপরীত করুন, কারণ ও পোস্টফিক্স স্বরলিপি ব্যবহার করে
2: ই; 2 এ 2 প্রদান করুন
1: ণ; `O` থেকে 1 নির্ধারণ করুন
% 2% ইভাল এবং ফলাফলটি কিনা তা পরীক্ষা করে দেখুন
'O'e? আউটপুট 'ই' এমনকি যদি, 'ও' তবে বিজোড় হয়

4

জিএনইউ শেড, ৩।

:
s/*oo\|+eo\|+oe/o/
t
s/\W\w\w/e/
t

পোস্ট করার পর আমার হিসাবে এই ঠিক একই পদ্ধতির দেখেছি @ manatwork এর পার্ল উত্তর এবং @ randomra এর অক্ষিপট উত্তর । সুতরাং আমি অনুমান করি যে আমি পাশাপাশি যেতে পারি এবং সেগুলিও ধার করতে পারি \W\w\w

4 বাইট বন্ধ শেভ করার জন্য @ রুদকে ধন্যবাদ


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

@ রুড ঠিক আছে আমি এটি আগে চেষ্টা করেছিলাম, কিন্তু |যখন -rব্যবহার করা হয় না তখন পালানোর প্রয়োজনীয়তা বুঝতে পারি নি। তবুও, স্কোর থেকে আরও 2 বাইট - ধন্যবাদ!
ডিজিটাল ট্রমা

2

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

কল করুন f

f=until((==1).l)r
r s|l s<3=s|3#s?o=r('o':3%s)|3#s?sequence["+*","oe","oe"]=r('e':3%s)|0<1=1#s++r(1%s)
l=length
(#)=take
(%)=drop
(?)=elem
o=["+eo","+oe","*oo"]

2

জাভাস্ক্রিপ্ট, 92 71 বাইট

f=i=>i>"0"?i:f(i.replace(/.[eo]{2}/,e=>"eo"[eval((e[1]>"e")+"^&"[+(e[0]<"+")]+(e[2]>"e"))]))

এটি কিছুটা অবহেলিত, তবে আমি evalএবং বিটওয়াইস অপারেটরগুলি ব্যবহার করে কিছু করতে চেয়েছিলাম । সটীক:

f = (i) => // function(i) { return
    i>"0"  // i[0] == "o" || i[0] == "e" :-) - the characters `*` and `+` are both <"0"
      ? i  // finish
      : f(i.replace( // recursively repeat with
          /.[eo]{2}/, // first occurrence of "something" followed by two values
          (e) =>    // replaced by
              "eo"[ // string indexing
                eval(
                    (e[1]>"e")        // e[1] == "o" ? "true" : "false"
                  + "^&"[+(e[0]<"+")] // e[0] == "+" ? "^" : "&"
                  + (e[2]>"e")        // e[2] == "o" ? "true" : "false"
                )
              ]     // like eval(…) ? "o" : "e"
        ))

পুনরাবৃত্তি (e[…]>"e")আমাকে কিছুটা বিরক্ত করে, তবে নিম্নলিখিতগুলি (103 বাইট) আরও ভাল নয়:

f=i=>i>"0"?i:f(i.replace(/e|o/g,x=>+(x>"e")).replace(/.\d\d/,e=>"eo"[eval(e[1]+"^&"[+(e[0]<"+")]+e[2])]))

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

f=i=>i>"0"?i:f(i.replace(/.[eo]{2}/,v=>"eo"[+"+oe+eo*oo".includes(v)]))

1

ডার্ট, 173 বাইট

f(i){var l=i.split(''),e='e',o='o';g(p){if(l[p]!=e&&l[p]!=o){var x=p+1,y=p+2;g(x);g(y);l[p]=l[p]=='+'?l[x]!=l[y]?o:e:l[x]==o?l[y]:e;l.removeRange(x,p+3);}}g(0);print(l[0]);}

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


1

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

এখানে একটি গুরুতর ভাষা ব্যবহার করে এমন একটি পদ্ধতির কথা বলা হয়েছে;)

গল্ফ সংস্করণ:

p(s:_)[]=s
p s(x:y)=p(r$x:s)y
r[]=[]
r('e':'e':'+':x)=r$'e':x
r('e':'o':'+':x)=r$'o':x
r('o':'e':'+':x)=r$'o':x
r('o':'o':'+':x)=r$'e':x
r('e':'e':'*':x)=r$'e':x
r('e':'o':'*':x)=r$'e':x
r('o':'e':'*':x)=r$'e':x
r('o':'o':'*':x)=r$'o':x
r x=x

উদাহরণ:

*Main> p [] "+**+***+**++**+eooeoeeoeeoeooeo"
'o'

অসম্পূর্ণ এবং বেশ বিস্তৃত সংস্করণ:

type Stack = String

parse :: String -> Char
parse = parse' []

parse' :: Stack -> String -> Char
parse' (s:_) []     = s
parse' s     (x:xs) = parse' (reduce $ x:s) xs

reduce :: Stack -> Stack
reduce [] = []
reduce ('e':'e':'+':xs) = reduce $ 'e':xs
reduce ('e':'o':'+':xs) = reduce $ 'o':xs
reduce ('o':'e':'+':xs) = reduce $ 'o':xs
reduce ('o':'o':'+':xs) = reduce $ 'e':xs
reduce ('e':'e':'*':xs) = reduce $ 'e':xs
reduce ('e':'o':'*':xs) = reduce $ 'e':xs
reduce ('o':'e':'*':xs) = reduce $ 'e':xs
reduce ('o':'o':'*':xs) = reduce $ 'o':xs
reduce xs               = xs

উদাহরণ:

*Main> parse "+**+***+**++**+eooeoeeoeeoeooeo"
'o'

বৈশিষ্ট্য: প্যাটার্ন মেলানো এবং পুনরাবৃত্তি।


1

জल्फ, 11 বাইট

(অ-প্রতিযোগিতামূলক, ভাষা যেমন প্রশ্ন পোস্ট করে দেয়)) এখানে চেষ্টা করে দেখুন!

FVyAi"oe"@\x12

( \x12প্রকৃত চরিত্রের সাথে প্রতিস্থাপন করুন \x12। দোভাষীটিতে এটি স্বয়ংক্রিয়ভাবে করা উচিত))

ব্যাখ্যা:

FVyAi"oe"@\x12
    i          input
          \x12 character 12
         @     char code at
   A "oe"      replace all os with 1s and all es with 2s
  y            eval as jolf, returning the answer
 V             return parity "even" or "odd"
F              get first character
               implicit output

1

পাইথন 3, 171 145 135 বাইট

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

def p(i):
 s=[]
 for c in i[::-1]:
  s+=[c>'e'if c>'a'else getattr(s.pop(),'__'+('axnodr'[c>'*'::2])+'__')(s.pop())]
 return'eo'[s[0]]

যে callable()মার্জিত, কিন্তু দীর্ঘ। (শর্ত Reversing করেছে এবং সরিয়েছে notখাটো করা হবে।) পরীক্ষা হলে পরিবর্তে মি পূর্ণসংখ্যা m in[0,1]খাটো হতে পারে, কিন্তু যদি গ মান পরীক্ষণ c in'eo'এমনকি খাটো করা হবে। এটি পরে c>'a'এই ক্ষেত্রে একই হিসাবে ।
manatwork

আসলে ভেরিয়েবল মি এবং এর সংখ্যাসূচক মানগুলির প্রয়োজন নেই। কেবল fors+=[c>'e'if c>'a'else{'*':o.and_,'+':o.xor}[c](s.pop(),s.pop())]
এটির

@ মান্যাটওয়ার্ক: ধন্যবাদ! আমি মনে করি না যে আমি শর্তটি বিপরীত করতে পারি, কারণ আমি ভেবেছিলাম যে এটি s.pop()প্রতিটি লুপকে কল (দ্বিগুণ) করবে। আমি এখন পর্যন্ত পরীক্ষার বিরক্ত করিনি; তবে ওহে, এখন পয়েন্টটি মোটা হয়ে গেছে।
টিম পেডারিক

একটি প্রশ্ন শুরু থেকেই আমাকে বিরক্ত করেছিল: operator মডিউলটি কেন ব্যবহার করছে ? bool.__and__()এবং bool.__xor__()handier আছেন: s+=[c>'e'if c>'a'else getattr(s.pop(),{'*':'__and__','+':'__xor__'}[c])(s.pop())]। কিন্তু উপর ভিত্তি করে gnibbler এর slicing ডগা , যে মধ্যে পরিবর্তন করা যাবে s+=[c>'e'if c>'a'else getattr(s.pop(),'__'+('axnodr'[c>'*'::2])+'__')(s.pop())]
manatwork

@ মানাটওয়ার্ক: কারণ আমি এটি ভেবে দেখিনি। আমি কেবল ইনফিক্স অপারেটরগুলি ( ^, &) এবং তাদের operatorপ্রতিযোগীদের বিবেচনা করেছি, যে পদ্ধতিগুলি বাস্তবে প্রয়োগ করে সেগুলি ভুলে গিয়ে। ওহ, এবং reversed()এখন পাইথন গল্ফিংয়ের টিপসের জন্য আরও একটি ধন্যবাদ ফেলে দেওয়া হয়েছে ।
টিম পেডেরিক

1

হাস্কেল, 98 94 বাইট

আর একটি হাস্কেল প্রচেষ্টা নিয়ে আপনাকে বিরক্ত করার জন্য দুঃখিত; এটি প্রমাণ করতে চেয়েছিলেন যে এটি 100 বাইটেরও কম সময়ে খুব সম্ভব।

p(c:s)|any(<'a')s=p(c:p s)
p('+':x:y:s)|x/=y='o':s
p('*':'o':s)=s
p(c:_:_:s)|c<'a'='e':s
p s=s

এমন কোনও ফাংশন সংজ্ঞা দেয় pযা কোনও বৈধ এক্সপ্রেশনকে প্যারামিটার হিসাবে গ্রহণ করে এবং ফলাফলকে দৈর্ঘ্যের 1 স্ট্রিং হিসাবে প্রদান করে।

উদাহরণ:

*Main> p "**o++*ee*++eoe*eo+eoo"
"o"

কোনও অপারেটর বাদ না দেওয়া পর্যন্ত ফাংশনটি স্ট্রিংয়ের ডানদিকের অপারেটরটিকে বারবার হ্রাস করে কাজ করে।


0

++ , 46 বাইট যুক্ত করুন

D,g,@,d"oe"$eA"e"=+o
D,f,@,bR€gbU32CjbV2%"eo":

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

পাদলেখ সহজেই সমস্ত উদাহরণ ইনপুট এবং তার সাথে সম্পর্কিত ফলাফলগুলি গণনা করে।

কিভাবে এটা কাজ করে

এখানে উত্তরগুলি হারিয়ে যাওয়ার মতো, এটি প্রতিস্থাপন এবং মূল্যায়ন ব্যবহার করে। আমাদের মূল কাজটি হ'ল fএবং gএটি একটি সহায়ক ফাংশন। আমরা উদাহরণ হিসাবে ব্যবহার করব "*e*o*e*oe"(যা e)।

fইনপুট স্ট্রিং নেওয়া এবং এটিকে বিপরীত করে, ফলন দিয়ে শুরু হয় "eo*e*o*e*"। তারপরে আমরা gপ্রতিটি উপাদানের উপর ম্যাপ করি :

gচূড়ান্ত আদেশ না হওয়া পর্যন্ত একটি অনুলিপি রাখতে আর্গুমেন্টের অনুলিপি করে শুরু হয়। আমরা তখন পরীক্ষা যদি যুক্তি স্ট্রিং হয় "oe", ফলনশীল 1 অক্ষর এবং 0 জন্য *বা +। এরপরে আমরা আবার যুক্তিটিকে চাপ দিন এবং এটি সমান কিনা তা পরীক্ষা করে দেখুন "e"। এর পরে এই ফলাফলটি পূর্ববর্তী চেকটিতে যুক্ত করা হয়। এই উৎপাদ 0 পারেন জন্য *বা +, 1 জন্য oএবং 2 জন্য e। এরপরে আমরা এই মান এবং যুক্তির মধ্যে লজিক্যাল ওআর নিই। যদি মান 0 হয় তবে এটি আর্গুমেন্ট দ্বারা (যেমন *বা +) দ্বারা প্রতিস্থাপন করা হবে, অন্যথায় এটি যেমন রয়েছে তেমনটি (যেমন 1 এবং 2 ) রেখে দেওয়া হবে।

এটি ইনপুটটির বিপরীতে সমস্ত অক্ষরকে একটি সংখ্যাসূচক মানতে রূপান্তর করে। এর পরে আমরা প্রতিটি উপাদানকে ফাঁকে ফাঁকে যোগ দেই, তা নিশ্চিত করার জন্য যে অঙ্কগুলি সংবিষ্ট না হয়। আমাদের উদাহরণস্বরূপ, এটি স্ট্রিং দেয় "2 1 * 2 * 1 * 2 *"। তারপরে আমরা এটির ++ এর পোস্টফিক্স স্বরলিপিটি ব্যবহার করে 8 টি উত্পাদন করে মূল্যায়ন করতে পারি । তারপরে আমরা স্ট্রিংয়ের সাথে ইনডেক্সিং করে সংশ্লিষ্ট চিঠিটি ফেরত দেওয়ার আগে এই মানের সমতাটি পাই, এমনকি সংখ্যার জন্য 0 এবং বিজোড় সংখ্যার জন্য 1 প্রদান করি "eo"

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