বুলিয়ান সূত্রগুলি সংকুচিত করছে


17

বাক্য গঠন

~না
/\এবং
\/বা
tসত্য
fমিথ্যা
P, Q, FISH, ইত্যাদি: ভেরিয়েবল

(অপারেটরদের অগ্রাধিকার অনুসারে দেওয়া হয়)

ভূমিকা

কিছু বুলিয়ান সূত্রগুলি আরও সংক্ষিপ্ত করে তুলতে বিভিন্ন ফর্মে পরিবর্তন করা যেতে পারে। উদাহরণস্বরূপ, সূত্র

~(~P /\ ~Q)

সংক্ষিপ্ত আকারে পরিবর্তন করা যেতে পারে

P\/Q

সূত্র যখন

P \/ ~P

সংক্ষিপ্ত আকারে পরিবর্তন করা যেতে পারে

t

চ্যালেঞ্জ

এই প্রতিদ্বন্দ্বিতা, আপনি একটি প্রোগ্রাম যা কোনো বুলিয়ান সূত্র শুধুমাত্র ব্যবহার করে দেওয়া লিখতে প্রয়োজন হয় /\, \/, ~, t, f, প্রথম বন্ধনী, বুলিয়ান ভেরিয়েবল (বড় হাতের), এবং হোয়াইটস্পেস, একটি সংক্ষিপ্ত ফর্ম আউটপুট (যেহেতু একটির বেশি সংক্ষিপ্ত রূপকে হতে পারে ) সেই অভিব্যক্তির অক্ষরে যা ভেরিয়েবলের সমস্ত অ্যাসাইনমেন্টের সমতুল্য। সংক্ষিপ্ততম কোড (যে কোনও ভাষায়) জিতেছে। আই / ও যে কোনও যুক্তিসঙ্গত পদ্ধতিতে করা যায়।

এছাড়াও, যেহেতু উত্তরগুলি যাচাই করা কঠিন, কোড কীভাবে কাজ করে তার একটি সংক্ষিপ্ত বিবরণ অন্তর্ভুক্ত করা সহায়ক (তবে প্রয়োজনীয় নয়) would


আপনার "চ্যালেঞ্জ" বিভাগে আপনি কোনও শ্বেতপথের কথা উল্লেখ করেন না, তবে আপনার উদাহরণগুলিতে সেগুলি রয়েছে। আমি কি তাদের পরিচালনা করব?
ভিক্টর স্টাফুসা

4
আমি মনে করি ফ্লোরেন্টের বক্তব্যটি হ'ল গল্ফকে ছেড়ে দেওয়া সাধারণভাবে সমাধান করা একটি কঠিন সমস্যা। অন্যান্য বিষয়গুলির মধ্যে, পার্সারকে নির্ধারণ করতে সক্ষম হতে হবে যে দুটি নির্বিচার সূত্রে একই সত্য শর্ত রয়েছে কিনা। পি omic ~ পি হ্রাস করা যথেষ্ট সহজ যদি পি পারমাণবিক হয় তবে কীভাবে ((এ ^ বি) ভি (এ ^ সি)) ^ ~ (এ ^ (বিভিসি))? আমি মনে করি এটি একটি দুর্দান্ত সমস্যা এবং আমি কিছু প্রতিক্রিয়া দেখতে আগ্রহী। তবে আপনি যদি সংক্ষিপ্ত সমাধান চান তবে সমস্যাটি এ। দ্বারা উপসর্গ শিরোনাম এবং বি ব্যবহার করে গল্ফিংয়ের পক্ষে আরও উপযুক্ত করে তোলা সম্ভব প্রয়োজনীয় হ্রাসের একটি তালিকা সরবরাহ করে।
dfernig

1
আমার 5000 টিরও বেশি অক্ষরের একটি বৈধ (গল্ফড) সমাধান রয়েছে। এটি হাস্যকর ... এটি একটি টোকেনাইজার, একটি এএসটি-পার্সার, একটি এএসটি-পুনরায় লেখক এবং একটি এক্সপ্রেশন জেনারেটর নিয়ে গঠিত।
ফ্লোরেন্ট

1
গাণিতিক এটি একটি ফাংশন কল ( BooleanMinimize)
ফ্লোরেন্ট

1
রেকর্ডের জন্য, আমার কাছে এখন 498-চরিত্রের সমাধান রয়েছে, যার sha256sum b9c98d088b78c30bb2108008a064a7b95722a4694d90ddad94a025c2eb4ed30a। আমি পরবর্তী তারিখে আসল কোডটি পোস্ট করব, কারণ আমি সৃজনশীলতা দমন করতে চাই না।
লিলি চুং

উত্তর:


2

ওহ ঠিক আছে, আমি আসলে আমার উত্তর পোস্ট করতে ভুলবেন না। এটি মূলত কেএসএবের উত্তর ব্যবহার করে এমন একই একই পদ্ধতির ব্যবহার করে তবে কেবল সংক্ষিপ্ত বৈধ এক্সপ্রেশনটি মুদ্রণ করে।

পাইথন 3, 493

e=lambda x:eval(x.replace('\\/','+').replace('/\\','%'),None,w)
class V(int):
 def __add__(s,o):return V(s|o)
 def __mod__(s,o):return V(s*o)
 def __invert__(s):return V(-s+1)
import re;from itertools import product as P;t=V(1);f=V(0);i=input();v=re.findall('[A-Z]+',i)
for k in range(1,len(i)):
 for m in P(''.join(v)+'~/\\tf',repeat=k):
  m=''.join(m)
  try:
   for d in P((V(0),V(1)),repeat=len(v)):
    w=dict(zip(v,d))
    if e(m)!=e(i):raise
  except:continue
  print(m);exit()
print(i)

নোট করুন যে হ্যাশটি আমি আগে গণনা করেছি তাতে পিছনের নিউলাইনটি অন্তর্ভুক্ত ছিল এবং আমি গল্ফ def e(x): returnকরার আগে ছিলe=lambda x:


1

পাইথন 616

বিশেষভাবে দক্ষ নয়, তবে ইনপুটগুলির জন্য উপযুক্ত সময়ে কাজ করে যার ফলাফলগুলি প্রায় 5 বা 6 টি অক্ষর। কোনও স্ট্রিং মেলে কিনা তা পরীক্ষা করতে, এটি সমস্ত ভেরিয়েবলের জন্য সত্য / মিথ্যা মানগুলির প্রতিটি সম্ভাব্য সংমিশ্রণের মধ্য দিয়ে লুপ করে এবং নিশ্চিত করে তোলে যে প্রত্যেকে একমত হয়েছে। এটি ব্যবহার করে এটি সম্পর্কিত অক্ষর সমন্বিত প্রতিটি সম্ভাব্য স্ট্রিং পরীক্ষা করে (এমনকি প্রয়োজনীয়ভাবে সিনট্যাকটিক্যালি সঠিকও নয়)।

এটি প্রকৃতপক্ষে প্রতিটি সমমানের অভিব্যক্তি (প্রতিটি আকারের) মুদ্রণ করবে এবং আসলে কখনও শেষ হবে না।

কোড:

c=['t','f'];o=['1 ','0 ']
def e(s,v):
 for k in v:s=s.replace(k,v[k])
 return eval(s)
def z(t,p='~/\\() '):
 w=[]
 if p=='':return[t]*(t not in['']+c)
 for s in t.split(p[0]):w.extend(z(s,p[1:]))
 w.sort(key=lambda v:-len(v));return w
def m(v):
 l=list('~\\/()')+v
 for s in l:yield s
 for r in m(v):
    for s in l:yield s+r
def n(x):
 if x<1:yield []
 else:
    for l in n(x-1):
     for b in o:yield[b]+l
t=raw_input();v=z(t)+c;l=len(v)
for s in m(v):
 g=1
 for y in n(l):
    y[-2:]=o;d=dict(zip(v+['/\\','\\/','~'],y+['and ','or ','not ']))
    try:
     if e(s,d)!=e(t,d):g=0
    except:g=0
 if g:print s

ইনপুট / Ouput:

> ~(~P /\ ~Q)
Q\/P
P\/Q
...

> P /\ ~P
f
~t
...

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