একটি 1 ডি ভাষা পার্স করুন


13

কেবল 0 এর 1, 2 এবং বন্ধনী সমন্বিত একটি স্ট্রিং দেওয়া হয়েছে, স্ট্রিংয়ের ব্যাকরণ গাছকে আউটপুট দিন।

A এর 22 টি আর্গুমেন্ট দরকার - একটি বাম এবং একটি ডানে

একটি 1বাম বা ডান - একটি একক যুক্তি প্রয়োজন

একজন 0কোনো আর্গুমেন্ট প্রয়োজন হয় না এবং বেস কেস

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

একটি ইনপুট স্ট্রিং সর্বদা একটি সম্পূর্ণ গাছ হবে যাতে কোনও অক্ষর না পড়ে। স্ট্রিংটিতে কেবলমাত্র একটি একক সঠিক সমাধান থাকবে। নোট করুন যে ফাংশনগুলি পরিবর্তনীয় এবং এর জন্য যে কোনও যুক্তি বিন্যাস 2গ্রহণযোগ্য হবে। আপনাকে এমন ইনপুট হ্যান্ডেল করতে হবে না যা এই প্রয়োজনীয়তার সাথে সামঞ্জস্য করে না।

আউটপুট ব্যাকরণ ফর্ম্যাট function(arguments)পুনরাবৃত্তি আকারে হবে

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

0 --> 0
01 --> 1(0)
020 --> 2(0,0)
101 --> 1(1(0))
0120 --> 2(1(0),0)
0120210 --> 2(1(0),2(0,1(0)))
01210 --> 2(1(0),1(0))
(020)210 --> 2(2(0,0),1(0))
((020)20)1 --> 1(2(0,2(0,0)))

10201বৈধ ইনপুট কি ?
নিল

না, এটি 1 (2 (0,1 (0)) বা 2 (1 (0), 1 (0)) হতে পারে
ব্লু

আসলে আমি ভাবছিলাম এটি 1 (2 (1 (0), 0)) ;-)
নীল

1
আমি এখনও দেখতে পাচ্ছি না কেন কেন 0120210পার্স করা যায় না 2[4](2[2](1[1](0[0]), 0[3]), 1[5](0[6]))যেখানে বন্ধনী সংখ্যাগুলি স্ট্রিংয়ের অবস্থান নির্দেশ করে।
শুক্রবার

101অস্পষ্টও।
ফেয়ারসুম

উত্তর:


3

পাইথন 3.6 (প্রাক রিলিজ), 199

মরগান থ্র্যাপকে ধন্যবাদ 6 বাইট সংরক্ষণ করা

import re
def f(s):s=s.strip('()');i,j=[m.start()if m else-1for m in(re.search(c+'(?![^(]*\))',s)for c in'21')];return i>0and f'2({f(s[:i])},{f(s[i+1:])})'or j>=0and f'1({f(s[:j])or f(s[j+1:])})'or s

ব্যাখ্যা এবং অবারিত সংস্করণ:

import re

def f(s):
    s=s.strip('()')
    # Search for '2' and '1' outside of brackets
    i, j = [m.start() if m else -1
            for m in (re.search(c + '(?![^(]*\))', s) for c in '21')]

    if i > 0:
        # Call `f(s[:i])` and `f(s[i+1:])`, concatenate the results
        return f'2({f(s[:i])},{f(s[i+1:])})'
    elif j>=0:
        # Call `f(s[:j])` and `f(s[j+1:])`, choose the non-empty result
        return f'1({f(s[:j]) or f(s[j+1:])})'
    else:
        return s
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.