দরিদ্র মানুষের ল্যাটেক্স


37

আপনি একটি সমান্তরাল মহাবিশ্বে স্থানান্তরিত হয়েছেন যেখানে লোকেরা হাতে হাতে ASCII শিল্প হিসাবে কম্পিউটারে গাণিতিক সমীকরণ লেখেন। ল্যাটেক্স আসক্ত হিসাবে, এটি সম্পূর্ণরূপে অগ্রহণযোগ্য এবং আপনার এই প্রক্রিয়াটি কিছুটা স্বয়ংক্রিয়ভাবে করা উচিত।

আপনার লক্ষ্য হ'ল একটি প্রোগ্রাম লিখুন যা একটি লেটেক্স গণিত কমান্ড হিসাবে সমীকরণের ASCII সংস্করণকে আউটপুট করে।

বাধ্যতামূলক ল্যাটেক্স সমর্থন করার জন্য আদেশ দেয়

  • যোগফল: একটি যোগফলের জন্য ল্যাটেক্স কমান্ড \sum_{lower bound}^{upper bound}

    আপনার অঙ্কের জন্য যে ASCII চিত্রটি ব্যবহার করতে হবে তা হ'ল:

    upper bound
        ___ 
        \  `
        /__,
    lower bound
    
  • পণ্য: একটি পণ্যের জন্য ল্যাটেক্স কমান্ড \prod_{lower bound}^{upper bound}

    আপনার পণ্যগুলির জন্য যে ASCII চিত্রটি ব্যবহার করতে হবে তা হ'ল:

    upper bound
        ____
        |  |
        |  |
    lower bound
    
  • ভগ্নাংশ: ভগ্নাংশের জন্য ল্যাটেক্স কমান্ডটি \frac{numerator}{denominator}

    ভগ্নাংশের জন্য আপনাকে যে ASCII চিত্রটি ব্যবহার করতে হবে তা হ'ল:

     numerator
    -----------
    denominator
    

এই তিনটি কমান্ডের একটি নয় এমন যে কোনও কিছু যেমন রয়েছে তেমন প্রদর্শিত হয়। উদাহরণস্বরূপ, \sum{i=3}^{e^10}\frac{3x+5}{2}হিসাবে প্রদর্শিত হবে

e^10
___  3x+5
\  ` ----
/__,  2
i=3

ইনপুট

ইনপুটটি একটি স্ট্রিং হিসাবে পাস করা একটি ল্যাটেক্স কমান্ড (বা আপনার ভাষার স্ট্রিংগুলির সমতুল্য)। ল্যাটেক্স কমান্ডগুলি নেস্ট করা যায়, উদাহরণস্বরূপ \frac{\frac{1}{2}}{3}একটি বৈধ ইনপুট। ইনপুটগুলি সর্বদা সঠিক বলে মনে করা হয় (আপনার কোডে ল্যাটেক্সের সিনট্যাক্স পরীক্ষা করার দরকার নেই)। ইনপুটগুলিতে কেবল উপস্থাপিত তিনটি ল্যাটেক্স কমান্ড এবং 'পাঠ্য' থাকবে যা আপনাকে ফর্ম্যাট করতে হবে না।

ল্যাটেক্স কমান্ডগুলি সর্বদা উপরে উপস্থাপিত সিনট্যাক্স সহ আসবে, অর্থাত্ যোগফল এবং পণ্যগুলি সর্বদা উপরের এবং নীচের সীমানা (যদিও তারা খালি থাকতে পারে) থাকবে এবং ভগ্নাংশের জন্য সর্বদা একটি সংখ্যক এবং ডিনোমিনেটর থাকবে।

আমরা ধরে নিই যে পরিমাণে এবং পণ্যগুলির সীমাটি সর্বাধিক 4 টি অক্ষর দীর্ঘ (= সমষ্টি এবং পণ্য প্রতীকগুলির প্রস্থ), যাতে আপনাকে সম্ভাব্য ওভারল্যাপ সংক্রান্ত সমস্যাগুলির বিষয়ে চিন্তা করতে হবে না। অনুরূপ কারণে, আমরা ধরে নিই যে সীমাগুলি কেবল 'পাঠ্য' এবং ল্যাটেক্স কমান্ড কখনও হবে না, যেমন \sum_{\sum_{1}^{2}}^{1}কোনও বৈধ ইনপুট নয়।

আউটপুট

আপনার প্রোগ্রামটির আউটপুট হ'ল ল্যাপেক্স কমান্ডের ASCII উপস্থাপনা যা আপনাকে ইনপুট হিসাবে দেওয়া হয়েছিল।

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

আপনার প্রোগ্রামটি উল্লম্ব সারিবদ্ধতা অ্যাকাউন্টে নিতে হবে: উদাহরণস্বরূপ, \frac{\frac{1}{2}}{3} = \frac{1}{6}হিসাবে প্রদর্শিত হবে

1
-
2   1
- = -
3   6

অঙ্কগুলি এবং পণ্যগুলির জন্য, যেহেতু চিহ্নগুলি 4 টি অক্ষর বেশি, তাই উল্লম্ব কেন্দ্রটি শীর্ষ থেকে দ্বিতীয় লাইন হিসাবে ধরে নেওয়া হয়।

অনুভূমিক ব্যবধানটি প্রদত্ত ইনপুটটিতে সঠিক বলে ধরে নেওয়া হয়, ইনপুটটিতে ফাঁকা স্থানগুলি প্রদর্শিত হবে।

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

  • ইনপুট abc = 2

    আউটপুট abc = 2

  • ইনপুট e = \sum_{n=0}^{+inf} \frac{1}{n!}

    আউটপুট

        +inf
        ___  1
    e = \  ` --
        /__, n!
        n=0
    
  • ইনপুট e^x = 1 + \frac{x}{1 - \frac{x}{2 + x - ...}}

    আউটপুট

                     x
    e^x = 1 + ---------------
                       x
              1 - -----------
                  2 + x - ...
    
  • ইনপুট \prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}

    আউটপুট

           m
          ___
          \  ` 2j
     n    /__,
    ____  j=0
    |  |  -------
    |  |   i + 1
    i=1
    
  • ইনপুট \frac{sum}{prod} = \sum_{frac}^{prod} sum

    আউটপুট

           prod
    sum    ___
    ---- = \  ` sum
    prod   /__,
           frac
    

স্কোরিং

এটি , তাই সংক্ষিপ্ততম কোডটি জয়ী।


11
ভাল প্রথম চ্যালেঞ্জ। দেখতে বেশ কঠিন মনে হচ্ছে; কিছু সমাধান দেখে আমি উত্তেজিত।
অ্যালেক্স এ

1
@ অ্যালেক্স এ। আমি প্রাথমিকভাবে ইন্টিগ্রালগুলি, বর্গক্ষেত্রের শিকড় এবং সম্প্রসারণযোগ্য প্রথম বন্ধনীও বানাতে চেয়েছিলাম তবে এটি কিছুটা বেশি মনে হয়েছিল ...
17:56 এ ফ্যাটালাইজ করুন

2
আমি বিশ্বাস করি এমন ঘটনাগুলি ঘটবে যেখানে আপনি ওভারল্যাপ পাবেন। উদাহরণস্বরূপ, আপনার যদি একটি যোগফল থাকে যেখানে শব্দটি 4 এর চেয়ে বেশি হয়ে যায় (যেমন একাধিক ভগ্নাংশ, অঙ্কের ভগ্নাংশ), এবং যোগফলটি দীর্ঘ উপরের / নিম্ন সীমাতে থাকে তবে উপরের / নিম্ন সীমাটির স্ট্রিং শব্দটির সাথে ওভারল্যাপ হতে পারে। কীভাবে সমাধান হবে? সীমানা দিয়ে ওভারল্যাপ এড়াতে এই শব্দটি কি যোগফল থেকে আলাদা করতে হবে?
রেটো কোরাাদি


8
আমি সত্যিই প্রত্যাশা করছি যে কেউ ল্যাটেক্স
শ্যাডটালকার

উত্তর:


23

পাইথন 2, 656 627 618 বাইট

M=max
O=lambda l,o=2:[(p+o,c)for p,c in l]
def C(s,m=0):
 if''<s<'}'[m:]:f,w,h,d,s=C(s,1);F,W,H,D,s=C(s);e=M(d,D);return[O(f,e-d)+O(F,w*1j+e-D),w+W,M(h-d,H-D)+e,e,s]
 if'\\'!=s[:1]:return[[(0,s[:1])]*m,m,m,0,s[1:]]
 t=s[1]<'s';e=s[1]>'f';f,w,h,d,s=C(s[5+t+e:]);F,W,H,D,s=C(s[1+e:]);g=M(w,W);G=C('-'*g)[0]
 if e:f,w,h,F,W,H=F,W,H,f,w,h;g=4;p=C('|  |')[0];G=C('_'*(3+t))[0]+[O(C('/__,')[0])+[(1,'\\'),(1+3j,'`')],O(p,1)+O(p)][t]
 x=M(w,W,g);return[O(f,(x-w)/2*1j)+O(F,(x-W)/2*1j+h+3**e)+O(G,(x-g)/2*1j+h),x,h+3**e+H,h+e,s]
f,w,h,d,s=C(raw_input())
for y in range(h):print"".join(dict(f).get(y+x*1j,' ')for x in range(w))

STDIN এ ইনপুট নেয় এবং STDOUT এ আউটপুট লিখে।

প্রোগ্রাম অনুমান চেয়ে অন্য কোন নিয়ন্ত্রণ ক্রম \frac, \sumঅথবা \prodইনপুট (অর্থাত, এটা স্বাভাবিক টেক্সট, যেমন দেখাবে না) দেখা এবং যে ~হিসাবে ভাল মনে হচ্ছে না (এটা গণিত মোডে একটি বিশেষ অর্থ আছে যাহাই হউক না কেন।) উপর অন্যদিকে, প্রোগ্রাম করে সীমা যেমন নির্বিচারে সূত্র সমর্থন \sumএবং \prod

ব্যাখ্যা

এটি ঠিক টেক্সের মতো কাজ করে! (ভাল, সাজানোর ...) প্রতিটি সাবফর্মুলা (একক অক্ষর থেকে শুরু করে আরও জটিল সূত্রে তৈরি করা) একটি বাক্সে পরিণত হয়, যার সাথে সম্পর্কিত প্রস্থ, উচ্চতা এবং গভীরতা (বেসলাইন) থাকে) সহজ সূত্রের বাক্সগুলি বড় আকারের বাক্সগুলিতে একত্রিত হয়ে জটিল সূত্রগুলি তৈরি করে, ইত্যাদি so প্রতিটি বাক্সের বিষয়বস্তুগুলি বক্সের উপরের-বাম কোণে আপেক্ষিকভাবে অবস্থান / চরিত্রের জোড়গুলির তালিকা হিসাবে উপস্থাপিত হয়; যখন বাক্সগুলি একটি বড় বাক্সে সংযুক্ত করা হয়, তখন পজিশনগুলি বড় বক্সের অভ্যন্তরে থাকা ছোট বাক্সগুলির আপেক্ষিক অবস্থান অনুসারে অফসেট হয় এবং তালিকাগুলি সংমিশ্রিত হয়।

অবশেষে, আমরা একটি শীর্ষ স্তরের বাক্স দিয়ে শেষ করি যা প্রিন্টযোগ্য ফর্মে রূপান্তরিত হয়।


এটিকে কিছুটা মশলা করতে, নিম্নলিখিত সংস্করণটি বর্গাকারকেও সমর্থন করে:

উদাহরণ:

  • \frac{-b +- \sqrt{b^2 - 4ac}}{2a}

            _________
    -b +- \/b^2 - 4ac
    -----------------
           2a
    
  • |v| = \sqrt{ \sum_{i}^{} v[i]^2 }

               _____________
              / ___
    |v| =    /  \  ` v[i]^2
            /   /__,
          \/     i
    

9
আমাকে বলতে হবে আমি পুরোপুরি মুগ্ধ! চালানোর চেষ্টা করে \prod_{i=1}^{\sum_{azededzeda}^{k}} \frac{\sum_{j=0}^{m} 2j}{i + 1}এবং এটি প্রয়োজন না হলেও, ওভারল্যাপ না দিয়ে সমস্ত কিছু সঠিকভাবে আউটপুট করে। নিস!
ফ্যাটালাইজ করুন

4
এবং আপনি বর্গমূলকে কেবলমাত্র 18% বেশি বাইট সহ সমর্থন করেন with এই মানুষটিকে কেউ থামিয়ে দেয়!
ফ্যাটালাইজ করুন

1
@ সব বোঝার! চমৎকার কাজ :)
কেডে

22

ল্যাটেক্স, 540 532 টি অক্ষর

দাবি অস্বীকার: এটি নিখুঁত নয় এবং যুক্তিযুক্তভাবে একটি বৈধ উত্তর হিসাবে গণনা করা হয় না।

\ Usepackage [LGRgreek] {mathastext}
\ রিনিউককম্যান্ড {\ যোগফল \ কার্ন -১ এএক্স \ ডিসপ্লেস্টাইল \ ম্যাথপ {pha ভফ্যান্টম \ \ ইন্ট} \ আর্ট} অ্যারে} {l} \ এমবক্স {\ আন্ডারলাইন \ sp hspace {12pt}}} \\ \ box ম্যাকব্যাক্স { } \ hspace {8pt} `\\\ MBOX {/ \ নিম্নরেখা {\ hspace {8pt}},} \ শেষ {অ্যারের}} \ displaylimits}
\ রিনিউককম্যান্ড \ \ প্রোড} {\ কার্ন -১ এএক্স \ ডিসপ্লেস্টাইল \ ম্যাথপ {pha ভফ্যান্টম \ \ ইন্ট} \ আর্ট {অ্যারে} {সি} \ এমবক্স {\ আন্ডারলাইন \ sp hspace {16pt}}} \\ \ \ \ \ \ | \\ | \ \ \ \ | \ শেষ {অ্যারে}} \ ডিসপ্লেমিটস}
\ Renewcommand {অর্থাত \ frac} [2] {\ mathop {\ xleaders \ hbox {-} \ hfill \ kern0pt} \ সীমা ^ {# 1}: _ {# 2}}
\ DeclareMathSizes {10} {10} {10} {10}

@ ফ্যাটালাইজ থেকে কিছু সহায়তা, বিশদ জন্য মন্তব্য দেখুন।

টেস্ট:

ইনপুট: \prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন যে আউটপুটটি ঠিক সেই অনুমানটিকে অনুসরণ করে না। এটি আমার উত্তরটিকে অযোগ্য ঘোষণা করতে পারে তবে আমি এখনও মনে করি এটি পোস্ট করা ভাল।

আমি শেয়ারলেটেক্সটকম এ লিখেছি। আপনি এটি এখানে খেলতে পারেন ।


1
নিস! আমি আপনার কোডটি কিছুটা খেলেছি এবং আমি মনে করি যে আপনি নিজের ভগ্নাংশটি এতে পরিবর্তন করে \newcommand{\frac}[2]{\mathop{\xleaders\hbox{-}\hfill\kern0pt}\limits^{#1}_{#2}}, এর \DeclareMathSizes{10}{10}{10}{10}পরে যুক্ত (ল্যাটেক্সকে সংখ্যার সংকেত এবং সংকেত সঙ্কুচিত করা থেকে রোধ করতে) এবং আপনার যোগফল এবং পণ্যের সংজ্ঞা যুক্ত করে \kern-1exআগে সবকিছু সংশোধন করতে পারবেন \displaystyle
59
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.