পিনয়িন কম্বিনেশনস


13

একটি ফাংশন তৈরি করুন যা যুক্তি হিসাবে পিনয়িন সংলাপযুক্ত একটি স্ট্রিং নেয় এবং অন্যথায় মিথ্যা, মিশ্রণের উপস্থিতিটি সত্য করে দেয়।

"Ü" এর জন্য "v" ব্যবহার করুন।

সংমিশ্রণের সম্পূর্ণ তালিকা এখানে। http://www.pinyin.info/rules/initials_finals.html

উদাহরণ

f("bu") == true
f("zheng") == true
f("nv") == true
f("ri") == true
f("cei") == false
f("ia") == false
f("kian") == false
f("qa") == false

দয়া করে, অক্ষর সংখ্যা হ্রাস করতে ওয়েবপৃষ্ঠাগুলি স্ক্র্যাপ করা বা ইনপুট পদ্ধতি ফাইলগুলি পড়ার মতো কাজ করবেন না। (আপনি যদি এটি করেন তবে ডেটার দৈর্ঘ্য চরিত্রের গণনার দিকে গণনা করা হবে) এই কোড গল্ফের একটি উদ্দেশ্য হ'ল নিয়ম কীভাবে সরল করা যায় তা দেখা to সংক্ষিপ্ততম কোড জিতেছে।


এরকম কিছু সম্পর্কে কি nar? : পি
জিমিনপি

1
উদাহরণ হিসাবে যা বলা হয়েছে তা সত্ত্বেও একটি নোট হিসাবে, আমি বিশ্বাস করি না যে nviএটি কোনও বৈধ সংমিশ্রণ।
রিন্টন

যদি লিঙ্কযুক্ত পৃষ্ঠাটি ইতিমধ্যে বলে যে  this er এই টেবিল থেকে বাদ দেওয়া হয়েছে it তবে এটিও কি যুক্ত করা উচিত নয়? (সর্বোপরি, এটি একটি সংখ্যা ছিল, যদি আমি সঠিকভাবে মনে করি ;-))
জো

উত্তর:


4

জাভাস্ক্রিপ্ট 1.6, 503 496 477 টি অক্ষর

function g(s){return/^([bfmpw]?o|[yjqx]ua?n|[ln]ve?|ei?|y[aio]ng|w?[ae]ng?|w?ai?|wei|y?ao|y?ou|y[ai]n?|yu?e|[^aeiou]+u)$/.test(s)|(((k=6*("ccsszzdflmnprtbghkjqx".indexOf(s[0])+(f=s[1]=='h')))|(r="a.e.ai.ei.ao.ou.an.ang.en.eng.ong.ua.uo.uai.ui.uan.uang.un.i.ia.ie.iao.iu.ian.iang.in.ing.iong.u.ue".split('.').indexOf(s.slice(f+1))))<0?0:k>84?r>17^k<108:parseInt("009m2f00b8jb009m2f00b7r3009m2n00b8jj1dwcfz0000rtfjba4f1xgbnjfj01rz1uyfb1009nn61b37cv1uyfa5".slice(k,k+6),36)>>r&1)}

আরও কিছুটা স্বাচ্ছন্দ্যে ফোম্যাট করা হয়েছে (কোডটিকে কয়েকটি লাইনে ভাঙতে কোনও ত্রুটি বাদ দিয়ে):

function _g(s)
{
  f = s[1] == 'h'
  k = "ccsszzdfghjklmnpqrtxb".indexOf(s[0]) * 6
  k += 6 * f
  return /^(weng|[bfmp]?o|[yjqx]ua?n|[ln]ve?|[ae]i?|y[aeiu]|y[aio]ng|[ae]ng?|wang?|wai?|we[in]|w[ou]|y?ao|y?ou?|y[ai]n|yue)$/.test(s) | 
         !!(k >= 0 && (1 << "a.e.ai.ei.ao.ou.an.ang.en.eng.ong.u.ua.uo.uai.ui.uan.uang.un.i.ia.ie.iao.iu.ian.iang.in.ing.iong.u.ue".split('.').indexOf(s.slice(f + 1)) & parseInt("00j85300mh2v00j85300mgan00j85b00mh332rsovz0002cp00b8jj00b8jjqmlts000b8jjv2mkfz3uwo3jv203jz3pwvelqmlts000jbaq2m6ewvqmlts03pwvdp".slice(k, k + 6), 36)))
}

শূন্য-প্রাথমিক ক্ষেত্রে প্লাস কয়েকটি ওয়ান-অফগুলি নিয়মিত প্রকাশের সাথে পরীক্ষা করা হয়। এর পরে, সারণিটি একটি 6 সংখ্যার, কাঠামো -3 numbers সংখ্যা, প্রাথমিক শব্দ প্রতি এক করে সিরিজ হিসাবে এনকোড করা হয়েছে। অনুসন্ধানের পরে indexOfডান বিটটি নির্বাচন করতে একজোড়া কল এবং একটি শিফট ব্যবহার করা হয়।

সংযুক্তির সারণীতে সমস্ত কক্ষের বিরুদ্ধে পরীক্ষা করা হয়েছে (সত্যের জন্য ভরা ঘরগুলি পরীক্ষিত, ভুয়া পরীক্ষার জন্য খালি কোষ)।

সম্পাদনা করুন: জি, কে, হি, জা, কি, জি এবং জি এর সত্যিকারের / মিথ্যা ঘন ব্লক রয়েছে বলে তুলনা করে বেস-36 lookup লুউকের ৩ 36 টি অক্ষরের কিছু প্রতিস্থাপন করা হয়েছে।

সম্পাদনা করুন: একটি অপ্রয়োজনীয় এড়াতে !!বিগ টেস্টটি পুনরায় সাজানো হয়েছে এবং আরও বেশি রেগেক্সকে কমপ্যাক্ট করা হয়েছে।


তোমার দরকার কেন !!? আমি নিশ্চিত না যে কেন আপনার কখনও দ্বিগুণ প্রয়োজন হবে না তা আমি বুঝতে পেরেছি ...
পিটার ওলসন

এটির সাথে, রিটার্ন 0 বা 1 হয়; এটি ব্যতীত "সত্য" শূন্যরূপে ফিরে আসবে তবে অগত্যা নয়। আমার পরীক্ষার স্ক্রিপ্টটি যাচাই করছে if (g(s) == (validList.indexOf(s) >= 0)যা দিয়ে মিথ্যা প্রত্যাবর্তন করে 16 == true; আমি এটিকে "সত্য 'বলতে কী বোঝায়" দৃষ্টিকোণ থেকে বিতর্ক করেছি এবং জিনিসটি রেখে দিয়েছি। উভয় ক্ষেত্রেই আমার পরিকল্পিত পরিবর্তন হয়েছে যা পরবর্তীকালে (কমবেশি) !!প্রতিস্থাপনের 1<<r&*parseIntমাধ্যমে (parseInt>>r)&1শেষ করে দেবে যাতে রিটার্নটি 1 এবং আমি দুটি অক্ষর শেভ করি।
ডকম্যাক্স

1

পিএইচপি, 548 টি অক্ষর

মঞ্জুর, এটি সম্ভবত সর্বোত্তম নয়, তবে আমি বৈধ পিনয়িন সংমিশ্রণগুলি মেলানোর জন্য একটি রেজেেক্স লিখেছি। ভেরিয়েবলের সাথে পুনরাবৃত্তি সাবস্ট্রিংগুলি প্রতিস্থাপন করে অক্ষরগুলি হ্রাস করা হয়েছে।

কোড

<?php $a='?|e(i|ng?)';$b='|o(u|ng)|u';$c='|a?n)?|i(a[on]';$d='(a(ng?|o|i)';$e='|ng?)';$f='(i|ng)?';echo(preg_match("/^([bpm](a(i|o$e$a|u|o|i(e|a[on]$e?)|[pm]ou|m(e|iu)|f(a(ng?)?|ou$a|u)|d$d$a?$b(o|i$c?|e|u)?)|[dtnl]$d?|e$f$b(o$c|e)?)|[jqxy](i(a(o$e?|e|u|o?ng|n)|u(e|a?n))|([zcs]h?|r)i|[nl](ve?|i(n|ang?|u))|[dl]ia|[dt](ing|ui)|[dn]en|diu|([gkh]|[zcs]h?)(e(ng?)|a(o|ng?|i)?|ou|u(o|i|a?n)?)|r(e(ng?)?|a(o$e$b(a?n?|o|i)?)|[gkh](ei|ong|u(a$f))|[zcs]hua$f|([zcs]|[zc]h)ong|(z|[zs]h)ei|a(i|o$e?|ou$a?|w(u|a(i$e?|o|e(i$e))$/",$argv[1]))?"true":"false";

ব্যবহার

> php pinyin.php bu
> true
> php pinyin.php cei
> false

1

F #, 681 টি অক্ষর

type l=Y|J|Q|X|W|F|B|P|M|N|L|T|D|Z|K|H|Zh|G|Sh|Ch|C|S|R|Iong|Vn|Van|Ia|Iu|In|Iang|Ve|V|Ian|Iao|Ie|Ing|I|Ei|A|Ai|An|Ang|Eng|U|Ao|E|Ou|Uo|Uan|Un|Ui|En|Ong|Ua|Uang|Uai|Ueng|O
let v x=x.GetHashCode()
let n x=J.GetType().GetNestedType("Tags").GetFields().GetValue(v x).ToString().Substring(6).ToLower();
let(^)a b=List.collect(fun x->List.map(fun z-> n x+ n z)b)a
let(-)a b=[v a..v b]
let(&)a b=a@b
let(!)a=[v a]
[<EntryPoint>]
let main a=
 printf"%b"(List.exists(fun x->x=a.[0])(Y-X^Iong-I& !W^Ei-Ui@Ua-O& !F^Ei-A@An-U@ !Ou&(F-N@D-Sh)^ !En&F-M^ !O&B-M^ !In&N-L^Iu-Un& !D^Ia-Iu&B-D^Ian-Ao& !M^E-Ou&Ch-S^A-Ong&T-Sh^Ei-Ui&N-G^ !Ong&K-Ch^Ua-Uai& !R^An-Ua&(Sh-R@ !Z@ !Zh)^ !I&["lia";"pou";"mui"]))
 0

প্রাথমিক ব্যঞ্জনবর্ণ সঠিক (Y, W ইত্যাদি) ব্যতীত সিলেবলগুলি পুরোপুরি পায় না।


1

এপিএল (ডায়ালগ প্রসারিত) , 475 বাইট

s←⊢⊆⍨' '≠⊢
a b c2097144 131064 1957895
f←{(⊂⍵)∊(12v),(s'yi ya ye yao you yan yang yin ying yong yu yue yuan yun wu wa wo wai wei wan wang wen weng nv lv nve lve'),(,⊤(a-8)1966080 393208 1966064 2096720 1966072 1048568a a 2056184a 131048a 7288b 7280 106488b 7280b 0 1958911 73735c c 352263c 24583 1859591c,57)/,('bpmfdtnlgkhzcs',s'zh ch sh r j q x')∘.,v'aoe',s'ai ei ao ou an ang en eng ong u ua uo uai ui uan uang un ueng i ia ie iao iu ian iang in ing iong u ue uan un'}

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

গল্ফিং চলছে।

Ungolfed

s←{⍵⊆⍨' '≠⍵}
cons'b p m f d t n l g k h z c s zh ch sh r j q x'
vwls'a o e ai ei ao ou an ang en eng ong u ua uo uai ui uan uang un ueng i ia ie iao iu ian iang in ing iong u ue uan un'
tabcon∘.,vwl
bin←,⊤2097136 1966080 393208 1966064 2096720 1966072 1048568 2097144 2097144 2056184 2097144 131048 2097144 7288 131064 7280 106488 131064 7280 131064 0 1958911 73735 1957895 1957895 352263 1957895 24583 1859591 1957895 7 7 7 7 7
all'aoe',(12vwl),(s'yi ya ye yao you yan yang yin ying yong yu yue yuan yun wu wa wo wai wei wan wang wen weng nv lv nve lve'),bin/,tab
f←{(⊂⍵)∊all}

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

সহায়ক ফাংশন sএকটি স্পেস-সীমাবদ্ধ স্ট্রিংটি প্যাক করে:

{⍵⊆⍨' '≠⍵}    monadic function taking a string
    ' '≠⍵       0s at spaces, 1s elsewhere
 ⍵⊆⍨            Partition (split at 0s)

আমি প্রথমে সম্ভাব্য প্রাথমিক এবং চূড়ান্ত স্ট্রিংগুলি অক্ষরে অক্ষরে সংরক্ষণ করি, তারপরে tabপ্রথম তালিকা থেকে প্রতিটি স্ট্রিংয়ের সংক্ষিপ্তকরণ সহ একটি তালিকা তৈরি করব দ্বিতীয় তালিকা থেকে প্রতিটি স্ট্রিং।

এরপরে, আমি বাইনারি ডেটা সংখ্যার তালিকা হিসাবে সঞ্চয় করি। কিছু পূর্ণসংখ্যার পুনরাবৃত্তি হয় এবং তাই ভেরিয়েবলগুলিতে সংরক্ষণ করা যেতে পারে, যা কিছু স্থানের এলিজেন্সকেও অনুমতি দেয়।

প্রতিটি পূর্ণসংখ্যার বাইনারি মধ্যে ডিকোড করা হয়, এবং টেবিলের এক সারি প্রতিনিধিত্ব করে। সংখ্যার প্রতিটি বিট এমএসবি প্রথম কলামটি উপস্থাপন করে, সেই সারিতে একটি নির্দিষ্ট অক্ষর যুক্তিযুক্ত অক্ষর কিনা তা উপস্থাপন করে। সমস্ত অবৈধ সিলেবলগুলি টেবিল থেকে সরানো হয়েছে।

আমরা তালিকায় টেবিলটি সমতল করি, বিশেষ কেস হিসাবে প্রাথমিক ব্যঞ্জনাবিহীন ফর্মগুলিতে যুক্ত করি এবং শেষ পর্যন্ত আমাদের ইনপুট তালিকায় আছে কিনা তা পরীক্ষা করে দেখি।

সম্ভাব্য আরও গল্ফিং সম্ভাবনা:

  • বেস 64 বা বেস 255 এনকোডিং লিখুন
  • সংখ্যাগুলি আরও ছোট করার জন্য কলাম এবং সারিগুলি পুনরায় অর্ডার করুন।

পাইথন সহায়ক স্ক্রিপ্ট এবং টেস্ট-কেস জেনারেটর: এটি অনলাইনে চেষ্টা করুন!

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