সংক্ষিপ্ত স্নাপিয়ার পাইথন ২.6 (২ (২ টি অক্ষর)
golfed:
n=lambda p,s:p[0]==s[0]and m(p[1:],s[1:])
def m(p,s):
q,r,t,u=p[0],p[1:],s[0],s[1:]
return any((q=='?'and(t and m(r,u)),q=='+'and(t and(m(p,u)or m(r,u))),q=='*'and(m(r,s)or(t and m(p,u))),q=='\\'and n(r,s),q==t==0))or n(p,s)
glob=lambda*a:m(*[list(x)+[0]for x in a])
ungolfed:
TERMINATOR = 0
def unpack(a):
return a[0], a[1:]
def terminated_string(s):
return list(s) + [TERMINATOR]
def match_literal(p, s):
p_head, p_tail = unpack(p)
s_head, s_tail = unpack(s)
return p_head == s_head and match(p_tail, s_tail)
def match(p, s):
p_head, p_tail = unpack(p)
s_head, s_tail = unpack(s)
return any((
p_head == '?' and (s_head and match(p_tail, s_tail)),
p_head == '+' and (s_head and(match(p, s_tail) or match(p_tail, s_tail))),
p_head == '*' and (match(p_tail, s) or (s_head and match(p, s_tail))),
p_head == '\\' and match_literal(p_tail, s),
p_head == s_head == TERMINATOR,
)) or match_literal(p, s)
def glob(p, s):
return match(terminated_string(p), terminated_string(s))
সমন্বিত:
- অলসভাবে মূল্যায়ন করা লজিকাল গন্ডগোল!
- সি স্টাইলের স্ট্রিং!
- একাধিক তুলনা বুদ্ধিমান!
- প্রচুর কুৎসিত!
খালি স্ট্রিং থেকে মাথাটা পপিংয়ের সময় যদি আপনি কোনও ধরণের টার্মিনেটর মান পেতে পারেন তবে কীভাবে জিনিসগুলি সরল করা হয়েছে তা চিত্রিত করার জন্য ব্যবহারকারীর 300 এর উত্তরে ক্রেডিট দিন।
আমি আশা করি মি এর যুক্তি ঘোষণার সময় মাথা / লেজ আনপ্যাকিং ইনলাইন সম্পাদন করা যেতে পারে। তারপরে এম ল্যাম্বডা হতে পারে, ঠিক যেমন তার বন্ধুরা এন এবং গ্লোব। পাইথন 2 এটি করতে পারে না এবং কিছুটা পড়ার পরে দেখে মনে হচ্ছে পাইথন 3ও পারে না। দুর্ভোগ।
পরীক্ষামূলক:
test_cases = {
('abc', 'abc') : True,
('abc', 'abcdef') : False,
('a??', 'aww') : True,
('a*b', 'ab') : True,
('a*b', 'aqwghfkjdfgshkfsfddsobbob') : True,
('a*?', 'a') : False,
('?*', 'def') : True,
('5+', '5ggggg') : True,
('+', '') : False,
}
for (p, s) in test_cases:
computed_result = glob(p, s)
desired_result = test_cases[(p, s)]
print '%s %s' % (p, s)
print '\tPASS' if (computed_result == desired_result) else '\tFAIL'