ল্যাটেক্স অ্যাকসেন্ট ম্যাক্রোগুলি প্রয়োগ করুন


11

ভূমিকা

ল্যাকেক্স টাইপসেটিং সিস্টেম অ্যাকসেন্টগুলির সংজ্ঞা দেওয়ার জন্য ম্যাক্রোগুলি ব্যবহার করে। উদাহরণস্বরূপ, চিঠি by দ্বারা উত্পাদিত হয় \hat{e}। এই চ্যালেঞ্জটিতে আপনার কাজ হ'ল এই কার্যকারিতার একটি ASCII সংস্করণ প্রয়োগ করা।

ইনপুট

আপনার ইনপুটটি মুদ্রণযোগ্য ASCII অক্ষরের একটি খালি খালি স্ট্রিং। এটিতে নতুন লাইন থাকবে না।

আউটপুট

আপনার আউটপুট দুটি স্ট্রেন সমন্বিত একটি স্ট্রিং। প্রথম লাইনে উচ্চারণ রয়েছে এবং দ্বিতীয় লাইনে তারা স্বীকৃত অক্ষর রয়েছে। এটি নিম্নলিখিত হিসাবে ইনপুট থেকে প্রাপ্ত হয়েছে ( Aএকটি স্বেচ্ছাচারিত চরিত্রকে বোঝায়):

  • প্রত্যেককে এটির উপরে দিয়ে \bar{A}প্রতিস্থাপন করা Aহয় _
  • প্রত্যেককে এটির উপরে দিয়ে \dot{A}প্রতিস্থাপন করা Aহয় .
  • প্রত্যেককে এটির উপরে দিয়ে \hat{A}প্রতিস্থাপন করা Aহয় ^
  • -10% বোনাসের জন্য: প্রত্যেককে এটির উপরে দিয়ে \tilde{A}প্রতিস্থাপন করা Aহয় ~
  • অন্য সমস্ত অক্ষরের উপরে তাদের স্থান রয়েছে।

উদাহরণস্বরূপ, ইনপুট

Je suis pr\hat{e}t.

ফলাফল আউটপুট

          ^
Je suis pret.

বিধি এবং স্কোরিং

আপনি অনুমান করতে পারেন অক্ষর \{}শুধুমাত্র ম্যাক্রো ঘটতে \bar{}, \dot{}এবং \hat{}(এবং \tilde{}যদি আপনি বোনাসের জন্য যান)। সকল ম্যাক্রো আর্গুমেন্ট একটি অক্ষর দীর্ঘ, তাই সঠিক হয় \dot{foo}এবং \dot{}ইনপুটে সৃষ্টি হবে না। আউটপুট একটি নতুন লাইন দ্বারা পৃথক স্ট্রিং, বা দুটি স্ট্রিংয়ের তালিকা / জুড়ি হতে পারে। উচ্চারণগুলি সঠিক জায়গায় যতক্ষণ থাকে ততক্ষণ কোনও প্রকারের পূর্ববর্তী ও পূর্ববর্তী শ্বেত স্থানের অনুমতি দেওয়া হয়। বিশেষত, যদি কোনও অ্যাকসেন্ট না থাকে তবে আউটপুট একক স্ট্রিং হতে পারে।

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা (বোনাস পরে) জিতবে এবং মানক লুফোলগুলি অনুমোদিত নয়।

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

বোনাস ছাড়াই:

Input:
No accents.
Output:

No accents.
Input:
Ch\hat{a}teau
Output:
  ^
Chateau
Input:
Som\bar{e} \dot{a}cc\hat{e}nts.
Output:
   _ .  ^
Some accents.
Input:
dot hat\dot{h}a\hat{t}\hat{ }x\bar{x}dot
Output:
       . ^^ _
dot hathat xxdot
Input:
\hat{g}Hmi\hat{|}Su5Y(\dot{G}"\bar{$}id4\hat{j}gB\dot{n}#6AX'c\dot{[}\hat{)} 6\hat{[}T~_sR\hat{&}CEB
Output:
^   ^     . _   ^  .      .^  ^     ^
gHmi|Su5Y(G"$id4jgBn#6AX'c[) 6[T~_sR&CEB

বোনাস সহ:

Input:
Ma\tilde{n}ana
Output:
  ~
Manana
Input:
\dot{L}Vz\dot{[}|M.\bar{#}0\hat{u}U^y!"\tilde{I} K.\bar{"}\hat{m}dT\tilde{$}F\bar{;}59$,/5\bar{'}K\tilde{v}R \tilde{E}X`
Output:
.  .   _ ^     ~   _^  ~ _      _ ~  ~
LVz[|M.#0uU^y!"I K."mdT$F;59$,/5'KvR EX`

আমি এই প্রোটোটাইপ শুরু করে যান কিন্তু তারপর আমি বুঝতে পারলাম কত সহজ পাইথন হবে ...
বিড়াল

1
আমরা কি ধরে নিতে পারি যে প্রতিটি মার্কআপ এন্ট্রিতে কেবল একটি চর থাকে? বা, অন্য কথায়, \bar{foo}একটি বৈধ ইনপুট?
পিটার টেলর

@ পিটারটেলর হ্যাঁ, প্রতিটি ম্যাক্রো যুক্তি হ'ল এক অক্ষর দীর্ঘ। আমি এটা স্পষ্ট করব।
Zgarb

উত্তর:


4

পাইথ, 51 46 45 43 41 40 বাইট

আমি কোঁকড়া ধনুর্বন্ধনী অপসারণ এবং বিভক্ত \, ঠিক যেমন রেটো Koradi এর সিজেএম উত্তর দেয়। কোডগুলি bar, dotএবং hatপ্রথম অক্ষরের কোডের শেষ দশমিক অঙ্ক দ্বারা কেবল স্বীকৃত হয়, মডুলো ৩. আমি কেবল প্রথম অংশে (আরআইপি) যুক্ত করি এবং প্রথমটি বিশেষত প্রথম অংশটি পরিচালনা করার জন্য কোডটি সংরক্ষণ করে শেষ পর্যন্ত সরিয়ে ফেলি ।barf """"

jtMsMCm,+@".^_"eChd*\ -ld4>d3c-+*4Nz`H\\

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.


1
" তারপরে আমি কেবল যুক্ত করব barf... " +1
অ্যাডিসন ক্রম্প

3

জুলিয়া, 204 184 বাইট * 0.9 = 165.6

x->(r=r"\\(\w)\w+{(\w)}";t=[" "^endof(x)...];while ismatch(r,x) m=match(r,x);(a,b)=m.captures;t[m.offsets[1]-1]=a=="b"?'_':a=="d"?'.':a=="h"?'^':'~';x=replace(x,r,b,1)end;(join(t),x))

এটি একটি বেনাম ফাংশন যা একটি স্ট্রিং গ্রহণ করে এবং উপরের এবং নীচের লাইনের সাথে সম্পর্কিত কয়েকটি স্ট্রিং প্রদান করে। শীর্ষ রেখার পিছনে সাদা স্থান থাকবে। ফাংশনটি কল করতে, এটির একটি নাম দিনf=x->...

Ungolfed:

function f(x::AbstractString)
    # Store a regular expression that will match the LaTeX macro call
    # with capture groups for the first letter of the control sequence
    # and the character being accented
    r = r"\\(\w)\w+{(\w)}"

    # Create a vector of spaces by splatting a string constructed with
    # repetition
    # Note that if there is anything to replace, this will be longer
    # than needed, resulting in trailing whitespace
    t = [" "^endof(x)...]

    while ismatch(r, x)
        # Store the RegexMatch object
        m = match(r, x)

        # Extract the captures
        a, b = m.captures

        # Extract the offset of the first capture
        o = m.captures[1]

        # Replace the corresponding element of t with the accent
        t[o-1] = a == "b" ? '_' : a == "d" ? '.' : a == "h" ? '^' : '~'

        # Replace this match in the original string
        x = replace(x, r, b, 1)
    end

    # Return the top and bottom lines as a tuple
    return (join(t), x)
end

2

সিজেম, 53 বাইট

Sl+'\/(_,S*\@{(i2/49-"_. ^"=\3>'}-_,(S*@\+@@+@@+\}/N\

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

ব্যাখ্যা:

S       Leading space, to avoid special case for accent at start.
l+      Get input, and append it to leading space.
'\/     Split at '\.
(       Split off first sub-string, which does not start with an accent.
_,      Get length of first sub-string.
S*      String of spaces with the same length.
\       Swap the two. First parts of both output lines are now on stack.
@       Rotate list of remaining sub-strings to top.
{       Loop over sub-strings.
  (       Pop first character. This is 'b, 'd, or 'h, and determines accent.
  i       Convert to integer.
  2/      Divide by two.
  49-     Subtract 49. This will result in 0, 1, or 4 for the different accents.
  "_. ^"  Lookup string for the accents.
  =       Get the correct accent.
  \       Swap string to top.
  3>      Remove the first 3 characters, which is the rest of the accent string
          and the '{.
  '}-     Remove the '}. All the macro stuff is removed now.
  _,(     Get the length, and subtract 1. This is the number of spaces for the first line.
  S*      Produce the spaces needed for the first line.
  @\+     Bring accent and spaces to top, and concatenate them.
  @@+     Get previous second line and new sub-string without formatting to top,
          and concatenate them.
  @@+     Get previous first line and new accent and spacing to top,
          and concatenate them.
  \       Swap the two lines to get them back in first/second order.
}/      End loop over sub-strings.
N\      Put newline between first and second line.

1

হাস্কেল, 156 * 0.9 = 140.4 বাইট

g('\\':a:r)=(q,l):g s where q|a=='b'='_'|a=='d'='.'|a=='h'='^'|a=='t'='~';(_,_:l:_:s)=span(<'{')r
g(a:b)=(' ',a):g b
g""=[('\n','\n')]
f=uncurry(++).unzip.g

ব্যবহারের উদাহরণ:

*Main> putStr $ f "\\dot{L}Vz\\dot{[}|M.\\bar{#}0\\hat{u}U^y!\"\\tilde{I} K.\\bar{\"}\\hat{m}dT\\tilde{$}F\\bar{;}59$,/5\\bar{'}K\\tilde{v}R \\tilde{E}X`"
.  .   _ ^     ~   _^  ~ _      _ ~  ~  
LVz[|M.#0uU^y!"I K."mdT$F;59$,/5'KvR EX`

এটি কীভাবে কাজ করে: অক্ষর অনুসারে ইনপুট স্ট্রিং চরিত্রটি নিয়ে যান এবং জোড় অক্ষরের একটি তালিকা তৈরি করুন, উপরের আউটপুট স্ট্রিংয়ের জন্য বাম, নিম্ন আউটপুট স্ট্রিংয়ের ডানদিকে। যদি একটি \পাওয়া যায়, উপযুক্ত উচ্চারণটি নিন, অন্যথায় বাম উপাদানগুলির জন্য একটি স্থান নিন। পরিশেষে জোড়াগুলির তালিকাকে একটি স্ট্রিংয়ে রূপান্তর করুন।


0

পাইথন 3, 203 বাইট

বোনাস ছাড়াই:

l=list(input())
b=list(" "*len(l))
try:
 while 1:s=l.index("\\");t=l[s+1];del l[s+6];del l[s:s+5];b[s] = "b"==t and "_" or "d"==t and "." or "h"==t and "^" or "*";
except:print("".join(b)+"\n"+"".join(l));

আমি সত্যিই একটি সংক্ষিপ্ত সংস্করণ আশা করি।


1
বাইট গণনাটির অগ্রগতি দেখে এটি সর্বদা সুন্দর। সি: আমি পুরাতন বাইট গণনা ছেড়ে দেওয়ার পরামর্শ দিই, তার চারপাশে <s></s>, তারপরে নতুন বাইট গণনাটি টাইপ করব যাতে আমরা সংক্ষিপ্তার দিকে ধাপগুলি দেখতে পারি।
অ্যাডিসন ক্রম্প 14
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.