ফিনিশ ভাষায় চামচ কথা


19

এই চ্যালেঞ্জটি অ্যাল্টো ইউনিভার্সিটিতে আমি যে প্রোগ্রামিং কোর্সে নিয়েছি তা পরীক্ষার কেসগুলির ভিত্তিতে তৈরি এবং এতে রয়েছে । অনুমতি সঙ্গে উপাদান ব্যবহার করা হয়।

আড়াই বছর আগে ইংরেজিতে স্পুনারিজম সম্পর্কে একটি চ্যালেঞ্জ ছিল । তবে ফিনিশ ভাষায় স্পুনারিজমগুলি আরও জটিল।

ফিনিশ

ফিনিশ ভাষায়, স্বরগুলি হয় aeiouyäöএবং ব্যঞ্জনবর্ণ হয় bcdfghjklmnpqrstvwxz। ( åপ্রযুক্তিগতভাবে ফিনিশ অংশ, কিন্তু এখানে বিবেচনা করা হয় না।)

সর্বাধিক প্রাথমিক স্পুনেরিজমগুলি প্রতিটি শব্দের প্রথম স্বর গ্রহণ করে এবং এর আগে যে কোনও ব্যঞ্জনবর্ণ থাকে এবং অংশগুলি বিনিময় করে:

henri kontinen -> konri hentinen
tarja halonen -> harja talonen
frakki kontti -> kokki frantti
ovi kello -> kevi ollo

দীর্ঘ স্বর

কিছু শব্দে একই ধারাবাহিক দুটি স্বর থাকে। এই ক্ষেত্রে, স্বর জোড়টি অবশ্যই অন্য শব্দের প্রথম স্বর দিয়ে স্বল্প করতে হবে, দৈর্ঘ্য একই রাখার জন্য স্বরকে ছোট করা বা দীর্ঘ করতে হবে ow

haamu kontti -> koomu hantti
kisko kaappi -> kasko kiippi

পরপর দুটি ভিন্ন স্বর ক্ষেত্রে এটি প্রযোজ্য নয়:

hauva kontti -> kouva hantti
puoskari kontti -> kooskari puntti

একই ধরণের তিন বা ততোধিক চিঠি ইনপুটটিতে উপস্থিত হবে না

স্বরবোধ

ফিনিশ ভাষায় স্বরযুক্ত সম্প্রীতি বলে এই মনোরম জিনিস রয়েছে । মূলত, এর অর্থ হ'ল পিছনের স্বরগুলি aou এবং সামনের স্বরগুলি äöy একই শব্দের মধ্যে উপস্থিত হওয়া উচিত নয়।

যখন একটি শব্দ মধ্যে সামনে বা পিছনে স্বরবর্ণ সোয়াপিং, শব্দ বাকি অন্য ধরনের সব স্বরবর্ণ শব্দের নতুন শুরু মেলে পরিবর্তন করা উচিত ( a <-> ä, o <-> ö, u <-> y):

yhä kontti -> kouha ntti
hauva läähättää -> yvä haahattaa

eএবং iনিরপেক্ষ এবং অন্য সমস্ত অক্ষরের সাথে প্রদর্শিত হতে পারে; এগুলিকে একটি শব্দে অদলবদল করে শব্দের বাকী অংশে পরিবর্তন আনতে হবে না

বিশেষ ক্ষেত্রে

অনেক loanণ শব্দের এবং যৌগিক শব্দ সহ কিছু শব্দের সাথে স্বরযুক্ত সাদৃশ্য প্রয়োগ হয় না। এই মামলাগুলি "সঠিকভাবে" পরিচালনা করার প্রয়োজন হয় না।

চ্যালেঞ্জ

দুটি শব্দ দেওয়া হয়েছে, শব্দগুলি spoonerised আউটপুট।

ইনপুট শব্দগুলিতে কেবল অক্ষর a-zএবং থাকবে äö। আপনি বড় হাতের বা ছোট হাতের অক্ষর ব্যবহার করতে বেছে নিতে পারেন তবে আপনার পছন্দটি অবশ্যই শব্দ এবং ইনপুট / আউটপুট উভয়ের মধ্যেই সামঞ্জস্যপূর্ণ হতে হবে।

আই / ও যে কোনও সুবিধাজনক বিন্যাসে করা যেতে পারে । (শব্দগুলি স্ট্রিং বা অক্ষরের অ্যারে হিসাবে বিবেচনা করা উচিত।)

এটি , তাই বাইটগুলির মধ্যে সংক্ষিপ্ততম সমাধানটি জিতে।

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


আমরা কি একটি ইনপুট / আউটপুট এনকোডিং চয়ন করতে পারি? এছাড়াও, একক অক্ষরের পরিবর্তে ইনপুটটি ডায়াক্রিটিক্সের সংমিশ্রণটি ব্যবহার করা দরকার কি তা গ্রহণযোগ্য?
ডোরকনবব

@ ডুরকনবব আপনি যে কোনও এনকোডিং চয়ন করতে পারেন, তবে পাঠ্যটি এনএফসি-তে থাকবে (অর্থাত্ কোনও সম্মিলিত অক্ষর নেই)। একটি এনকোডিং কিছু ভাষার সাথে সামঞ্জস্যের ক্ষেত্রে হতে পারে তবে এনএফসি / এনএফডি সম্ভবত তা করবে না। (যে কোনও কিছু যা পরিচালনা করতে পারে U+0308 COMBINING DIAERESISতা U+00E4 LATIN SMALL LETTER A WITH DIAERESIS
ঠিকঠাকভাবে

1
যেহেতু eএবং iনিরপেক্ষ হয়, হয় fihus keksy, huvu lehyএবং lesmä prihtiজন্য গ্রহণযোগ্য উত্তর kehys fiksu, levy huhuএবং prisma lehtiযথাক্রমে?
আর্নল্ড

1
একটি পার্শ্ব মন্তব্য হিসাবে কারণ দীর্ঘ স্বরবর্ণ এবং স্বরবর্ণ সম্প্রীতির, ফিনিশ spoonerism একটি নয় involutory ফাংশন । উদাহরণস্বরূপ, puoskari äyskäri --> äöskäri puuskari --> puoskari ääskäri
আর্নল্ড

@ আর্নল্ড ন। আমি প্রশ্নটি আপডেট করব; নিরপেক্ষ স্বরগুলির কোনও পরিবর্তন হওয়া উচিত।
পুর্কাকুডারী

উত্তর:


9

জাভাস্ক্রিপ্ট (ES6), 196 175 বাইট

বাক্যটিকে বাক্য গঠন বাক্য গঠনে দুটি স্ট্রিং হিসাবে গ্রহণ করে (a)(b)। দুটি অ্যারে অক্ষরের অ্যারে প্রদান করে।

a=>b=>[(e=/(.*?)([eiäaöoyu])(\2?)(.*)/,g=(a,[,c,v])=>[...c+v+(a[3]&&v)+a[4]].map(c=>(j=e.search(v),i=e.search(c))>9&j>9?e[i&~1|j&1]:c))(a=e.exec(a),b=e.exec(b),e+=e),g(b,a)]

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

কিভাবে?

প্রতিটি ইনপুট শব্দ নিয়মিত এক্সপ্রেশন ই এর মধ্য দিয়ে যায় , যার 4 টি ক্যাপচারিং গ্রুপ রয়েছে:

e = /(.*?)([eiäaöoyu])(\2?)(.*)/    1: leading consonants (or empty)
     [ 1 ][     2    ][ 3 ][ 4]     2: first vowel
                                    3: doubled first vowel (or empty)
                                    4: all remaining characters

সহায়ক ফাংশন g () শব্দের সমস্ত ক্যাপচারিং গ্রুপকে [] হিসাবে আপডেট করার জন্য এবং অন্য শব্দের প্রথম এবং দ্বিতীয় ক্যাপচারিং গ্রুপকে সি এবং ভি হিসাবে গ্রহণ করে ।

আমরা বেসিক স্পুনারিজম প্রয়োগ করি এবং এর সাথে দীর্ঘ স্বরগুলির যত্ন করি:

c + v + (a[3] && v) + a[4]

স্বরবৃত্তির সাদৃশ্য প্রয়োগ করার জন্য, আমরা প্রথমে নিয়মিত ভাবটি ই- তে একটি স্ট্রিংকে নিজের মধ্যে যুক্ত করে জোর করি , যা দেয়:

e = "/(.*?)([eiäaöoyu])(\2?)(.*)//(.*?)([eiäaöoyu])(\2?)(.*)/"
     ^^^^^^^^^^^^^^^^
     0123456789ABCDEF (position as hexa)

স্বরগুলিকে সুরেলা করতে হবে এমন ফলাফলগুলি স্ট্রিংয়ে 9 এর চেয়ে বেশি অবস্থান করে। তদ্ব্যতীত, ভাবটি এমনভাবে সাজানো হয়েছিল যাতে সামনের স্বরগুলি - এমনকি পজিশনে অবস্থিত, যখন পিছনের স্বরগুলি অরূপ অবস্থানে অবস্থিত, তাদের সমকক্ষগুলির পাশের।

তাই নিম্নলিখিত অনুবাদ সূত্র যা আউটপুট শব্দের প্রতিটি অক্ষরের সি প্রয়োগ করা হয় :

(j = e.search(v), i = e.search(c)) > 9 & j > 9 ? e[i & ~1 | j & 1] : c

4

পাইথন 3 , 235 231 225 221 217 215 বাইট

import re
S=F,B='äöy','aou'
def f(a,b,C=1):
 e,r,Q,W=re.findall(fr' ?(.*?([ei{B+F}]))(\2)?(\w*)'*2,a+' '+b)[0][2:6]
 for c in zip(*S*(W in B)+(B,F)*(W in F)):r=r.replace(*c)
 return[Q+W*len(e)+r]+(C and f(b,a,[]))

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


সংরক্ষিত

  • -২ বাইট, লিনকে ধন্যবাদ
  • -4 বাইট, জ্যাকারি ধন্যবাদ

2
এর সাথে দুটি বাইট সংরক্ষণ করুন:fr' ?(.*?([ei{B+F}]))(\2)?(\w*)'
লিন

1
আরও ভাল: আপনি দ্বিতীয় পংক্তিতে পরিবর্তন করতে পারেন S='äöy','aou', তারপরে পঞ্চম লাইনে: (F,B)=> Sএবং (B,F)=> S[::-1](এটি @ লিনের দেওয়া পরামর্শের সাথে সঙ্গতিপূর্ণ নয়)
জাকারিয়া

এছাড়াও, আপনি e,r,Q,W=re.findall(r' ?(.*?([eiaouäöy]))(\2)?(\w*)'*2,a+' '+b)[0][2:5]আরও কয়েকটি বাইট সংরক্ষণের জন্য চতুর্থ লাইনটি পরিবর্তন করতে পারেন ।
জাকারিয়া

আমি যা বলতে চাইছিলাম: ২ য় লাইনে S=F,B='aöy','aou', এবং তারপরে ৪ র্থ লাইনে পরিবর্তন (F,B)করুন S
জাকারি

S=F,B=...আপনি যদি প্রতিস্থাপন (F,B)করেন তবে কয়েকটি বাইট সংরক্ষণ করা উচিতS
জাকারিয়া

0

পাইথ, 84 বাইট

.b++hY*W@N2JhtY2XW}JeA@DJc2"aouäöy"eNGH_Bmth:d:"^([^A*)([A)(\\2)*(.+)"\A"aeiouyäö]"4

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

যা প্রমাণ করে যে এটা না যে গলফ ভাষায় কঠিন। স্ট্যাক-ভিত্তিক ভাষা আরও ভাল করতে পারে।

পাইথ ডিফল্টরূপে আইএসও -8859-1 ব্যবহার করে, তাই äöপ্রতিটি বাইট রয়েছে।

ব্যাখ্যা

  • Qশব্দের ইনপুট জোড় যুক্ত, অন্তর্নিহিতভাবে যুক্ত করা হয়।
  • m: ইনপুটটিতে প্রতিটি শব্দ ম্যাপ dকরুন:
    • :"^([^A*)([A)(\\2)*(.+)"\A"aeiouyäö]": রেজেক্সটি পেতে স্ট্রিংয়ের Aসাথে প্রতিস্থাপন করুন ।aeiouyäö]^([^aeiouyäö]*)([aeiouyäö])(\2)*(.+)
    • :d: সমস্ত ম্যাচ সন্ধান করুন এবং তাদের ক্যাপচারিং গ্রুপগুলি ফিরিয়ে দিন।
    • h: প্রথম (এবং একমাত্র) ম্যাচটি নিন।
    • t: পুরো ম্যাচটি সমেত প্রথম গ্রুপটি বাদ দিন।
  • _B: পেতে বিপরীত সঙ্গে জুড়ি [[first, second], [second, first]]
  • .b: প্রতিটি জোড় শব্দের ম্যাপ করুন এতে N, Y:
    • hY: দ্বিতীয় শব্দের শুরুতে ব্যঞ্জনবর্ণ গ্রহণ করুন।
    • @N2: প্রথম শব্দের দীর্ঘ প্রথম স্বর গ্রহণ করুন, বা None
    • htY: দ্বিতীয় শব্দের প্রথম স্বর গ্রহণ করুন।
    • J: এটি সংরক্ষণ করুন J
    • *W2: যদি একটি দীর্ঘ স্বর থাকে তবে দ্বিতীয় শব্দের স্বরটি নকল করুন।
    • +: ব্যঞ্জনবর্ণে এটি যুক্ত করুন।
    • c2"aouäöy": aouäöyপেতে দুটি বিভক্ত ["aou", "äöy"]
    • @DJ: দ্বিতীয় শব্দের প্রথম স্বর দিয়ে ছেদটি জোড়টি সাজান। এই জুটির শেষে দ্বিতীয় শব্দের প্রথম স্বর দিয়ে অর্ধেকটি পায়।
    • A: জুটি সংরক্ষণ করুন G, H
    • e: দ্বিতীয়ার্ধ নিন।
    • }J: দেখুন দ্বিতীয় শব্দের প্রথম স্বরটি দ্বিতীয়ার্ধে রয়েছে কিনা।
    • XW... eNGHযদি এটি ছিল, মানচিত্র Gথেকে H, প্রথম শব্দের প্রত্যয় অন্যথায় প্রত্যয় রাখা হিসাবে হয়।
    • +: প্রত্যয় যুক্ত করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.