হাঙ্গেরিয়ান বর্ণানুক্রমিক ক্রম


19

তারপরে যারা আরও অনেক চ্যালেঞ্জ চান তাদের জন্য পুরানো স্প্যানিশ বর্ণমালা অনুসারে , আসুন এক নজরে দেখে নেওয়া যাক হাঙ্গেরিয়ান বর্ণমালাটি কীভাবে অর্ডার করা হয়েছে।

এ, á, বি, সি, সিএস, ডি, ডিজে, ডিজেএস, ই, é, এফ, জি, জি, জি, এইচ, আই, j, জে, কে, এল, ল, এম, এন, এন, এন, ও,, ö, ő, পি, কিউ, আর, এস, এস, টি, টি, টি, ইউ, ü, ű, ভি, ডাব্লু, এক্স, ওয়াই, জেড, জেড

আসলে q, w, xএবং yহাঙ্গেরীয় ভাষায় ব্যবহার করা হয় না, কিন্তু তারা ঋণকৃত শব্দসমূহ এবং বিদেশী নামের জন্য অন্তর্ভুক্ত করা হয়। বিদেশী উচ্চারণযুক্ত অক্ষরগুলি যা হাঙ্গেরিয়ান বর্ণমালার (যেমন ñ) অংশ নয় , অ-উচ্চারণযুক্তগুলির সমান অগ্রাধিকার রয়েছে, তবে আমরা এই চ্যালেঞ্জের জন্য তাদের এড়িয়ে চলেছি।

বিধিগুলি সংক্ষেপে:

  • ডিগ্রাফ ( cs, szইত্যাদি) এবং ট্রিগ্রেফ ( ) dzsতাদের নিজেরাই চিঠি হিসাবে বিবেচিত হয়।
cudar
cukor
cuppant
csalit
csata
  • একই digraph বা trigraph একটি শব্দ একে অপরের পর দুইবার সরাসরি ঘটে, তাহলে তারা একটি সরলীকৃত ভাবে লেখা হয়: sszপরিবর্তে szsz, ddzsপরিবর্তে dzsdzsকিন্তু বর্ণানুসারে জন্য অ সরলীকৃত অর্ডার ব্যবহার করা হয়। উদাহরণস্বরূপ kasza< kaszinó< kassza, কারণ kasszaহিসাবে ব্যবহার করা হয় k+ + a+ + sz+ + sz+ + aক্রম অনুরোধে জন্য। কখনও কখনও যৌগিক শব্দের ক্ষেত্রে আপনি একটি শব্দে নন-চুক্তিবদ্ধ সংস্করণটি খুঁজে পেতে পারেন।
kasza
kaszinó
kassza
kaszt
nagy
naggyá
nagygyakorlat
naggyal
nagyít
  • মূলধন ব্যপার হয় না, ব্যাতিক্রম ব্যতীত যখন দুটি শব্দ মূলধন ব্যতীত হুবহু একই রকম হয়, সেক্ষেত্রে নিম্ন ক্ষেত্রে বর্ণের অগ্রাধিকার থাকে
jácint
Jácint
Zoltán
zongora
  • স্বরাঘাত স্বরবর্ণের সংক্ষিপ্ত এবং দীর্ঘ সংস্করণ একই অগ্রাধিকার আছে ( a - á, e -é, i - í, o - ó, ö - ő, u - ú ü - ű), একটি একক বাদে: যদি দুটি শব্দ অন্যথায় ঠিক একই হবে, সংক্ষিপ্ত স্বরবর্ণ অগ্রাধিকার দীর্ঘ স্বরবর্ণ উপর হয়েছে। মনে রাখবেন, যে অভিশ্রুতি (সঙ্গে স্বরবর্ণ öএবং ü) থেকে সম্পূর্ণ ভিন্ন অক্ষর oএবং u
Eger
egér
író
iroda
irónia
kerek
kerék
kérek
szúr
szül
  • হাইফেন বা স্পেসগুলি (উদাহরণস্বরূপ, যৌগিক শব্দে, নাম ইত্যাদিতে) সম্পূর্ণ উপেক্ষা করা হয়
márvány
márványkő
márvány sírkő
Márvány-tenger
márványtömb

কাজটি

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

আপনাকে লাইনগুলি সঠিকভাবে অর্ডার করতে হবে এবং ফলাফলটি প্রদর্শন / প্রদর্শন করতে হবে।

আপনি পরীক্ষার জন্য উপরের উদাহরণগুলির যেকোন এলোমেলোভাবে অর্ডার করা সাবসেট ব্যবহার করতে পারেন।

সম্পাদনা করুন:

ইতিমধ্যে নিজের মতো হাঙ্গেরিয়ান বর্ণানুক্রমিক ক্রম জানে এমন কোনও অন্তর্নির্মিত বা অন্য কোনও উপায়ে ব্যবহার করবেন না knows এটি প্রতিযোগিতাকে অর্থহীন করে তুলবে এবং সেরা নিয়মিত প্রকাশ বা সেরা কোড গল্ফিং কৌশলগুলি খুঁজে পাওয়া থেকে সমস্ত চ্যালেঞ্জ গ্রহণ করবে।

EDIT2:

আইসাকের জিজ্ঞাসা করা একটি স্পষ্টতা পরিষ্কার করতে: "দুটি স্ট্রিং যা কেবলমাত্র মূলধন এবং দীর্ঘ বনাম সংক্ষিপ্ত স্বর দ্বারা পৃথক হয়, তবে উভয় উপায়ে পৃথক হয়": যদিও সরকারী নথিতে কোনও নিয়ম এই প্রশ্নের স্পষ্টভাবে সম্বোধন করে না, একটি উদাহরণ দৈর্ঘ্যের পয়েন্টগুলির মধ্যে পাওয়া যায় মূলধনের চেয়ে স্বরটির বেশি গুরুত্ব রয়েছে।


@ ফ্রিআম দ্য এজিগম্যান আপনি কোথায় দেখছেন?
মরগান থ্রাপ

9
মনুষ্য, আমি আমাদের যথাযথ বর্ণানুক্রমিক ক্রম মুখস্ত করতে পারি না। আমি কিভাবে এই প্রোগ্রাম করতে যাচ্ছি? ;)
আন্দ্রেস ডেক

1
আমি একটি সীমাবদ্ধ-থেকে-ব্যর্থ কাউন্টারিক্স নমুনা নিয়ে আসার চেষ্টা করছি, যেখানে একটি আপাত ডিজিট্রাফ আসলে দুটি অক্ষর, যেমন malacsültবা nyílászáró। আমি অবাক হই যে কোনও আছে কিনা (তবে এটি পরীক্ষা করার জন্য আপনার কোনও শব্দভাণ্ডারের প্রয়োজন হবে যা সম্ভবত এই চ্যালেঞ্জের অংশ নয়)
Andras Deak

1
ডিজেএস সমন্বিত কোনও উদাহরণ নেই
TheConstructor

উত্তর:


4

পার্ল, 250

জন্য +11 অন্তর্ভুক্ত -Mutf8 -CS

use Unicode::Normalize;$r="(?=cs|zs|dz|sz|[glnt]y)";print map/\PC*
/g,sort map{$d=$_;s/d\Kd(zs)|(.)\K$r\2(.)/\L$+\E$&/gi;s/d\Kzs/~$&/gi;s/$r.\K./~$&/gi;s/(\p{Ll}*)(\w?)\s*-*/\U$1\L$2/g;$c=$_;$b=$_=NFD lc;y/̈̋/~~/d;join$;,$_,$b,$c,$d}<>

ব্যবহার সাজাইয়া-সাজানোর-undecorate বাগ্ধারা (ওরফে Schwartzian ট্রান্সফর্ম ), এবং বহুস্তরীয় শ্রেণীবিভাজন , যেখানে স্তর আছে:

  • এল 1: বেস বর্ণগুলি তুলনা করুন, ডায়াক্রিটিক্স, কেস এবং কিছু বিরামচিহ্ন উপেক্ষা করুন।
  • এল 2: বেস লেটার এবং ডায়াক্রিটিক্সের তুলনা করুন, কেস এবং কিছু বিরামচিহ্ন উপেক্ষা করুন।
  • এল 3: বেস চিঠিগুলি, ডায়াক্রিটিক্স এবং কেসের তুলনা করুন, কিছু বিরামচিহ্ন উপেক্ষা করুন।
  • Ln: টাই-ব্রেকিং বাইট-স্তর তুলনা।

অভ্যন্তরীণভাবে (ASCII 0x1C ফিল্ড বিভাজক - যার মূল্য এই চ্যালেঞ্জের বর্ণমালার কোনও বর্ণের চেয়ে কম) একটি স্তর বিভাজক হিসাবে ব্যবহৃত হয়।

এই বাস্তবায়নের মধ্যে অনেকগুলি সীমাবদ্ধতা রয়েছে:

  • বিদেশী চরিত্রগুলির জন্য কোনও সমর্থন নেই।
  • চুক্তিবদ্ধ মিথুনযুক্ত (দীর্ঘ) ডিগ্রাফ / ট্রাইগ্রাফ এবং ব্যঞ্জনবর্ণ + ডিগ্রাফ / ট্রাইগ্রাফের মধ্যে বিচ্ছিন্ন করা যায় না, উদাহরণস্বরূপ: könnyű কে <k><ö> <ny> <ny> <ű> হিসাবে সমষ্টি করা উচিত , যখন tizennyolc <t> < i> <z> <e> <n> <ny> <o> <l> <c> ; házszám 'ঠিকানা = বাড়ি (h )z) নম্বর (szám)' এর <h><á><z><sz><á> <এম> হিসাবে নয় এবং * <h><á><zs> <z> হিসাবে সংগৃহীত হওয়া উচিত <á> <এম>
  • চুক্তিবদ্ধ দীর্ঘ ডিগ্রাফগুলির জন্য সংগৃহীততা এটিকে সামঞ্জস্যপূর্ণ নয় (তবে এটি স্থিতিশীল): আমরা অভিন্ন স্তরে ( ssz < n szz, ..., zszs < n zzs ) বিচ্ছিন্ন করি ; সম্পূর্ণ ফর্মগুলির আগে গ্লিবসি সংক্ষিপ্ত ফর্মগুলি সঙ্কলন করে ( এসএসজি <এসজিজ, ..., জেডজেস <zszs ), আইসিইউ L3 কেস এবং ভেরিয়েন্টস থেকে শুরু হওয়া সংক্ষিপ্ত ফর্মগুলির আগে দীর্ঘ ফর্মগুলি সঙ্কুচিত করে ( szsz < 3 szz, ..., zszs < 3 জেড )

প্রসারিত সংস্করণ:

use Unicode::Normalize;

$r="(?=cs|zs|dz|sz|[glnt]y)";   # look-ahead for digraphs

print map/\PC*\n/g,             # undecorate
  sort                          # sort
  map{                          # decorate

          $d=$_;                # Ln: identical level

          # expand contracted digraphs and trigraphs
          s/d\Kd(zs)|(.)\K$r\2(.)/\L$+\E$&/gi;

          # transform digraphs and trigraphs so they 
          #  sort correctly
          s/d\Kzs/~$&/gi;s/$r.\K./~$&/gi;

          # swap case, so lower sorts before upper
          # also, get rid of space, hyphen, and newline
          s/(\p{Ll}*)(\w?)\s*-*/\U$1\L$2/g;

          $c=$_;                # L3: Case

          $b=$_=NFD lc;         # L2: Diacritics

          # transform öő|üű so they sort correctly
          # ignore diacritics (acute) at this level
          y/\x{308}\x{30b}\x{301}/~~/d;

                                # L1: Base characters
          join$;,$_,$b,$c,$d
  }<>

†। কয়েকটি সুপরিচিত মাল্টি-লেভেল কোলিশন অ্যালগরিদম হ'ল ইউনিকোড কোলিশন অ্যালগরিদম (ইউসিএ, ইউনিকোড ইউটিএস # 10) , আইএসও 14651 ( আইএসও আইটিটিএফ সাইটে উপলভ্য ) আইএসও টিআর 30112 এ এলসি_কোলেট অংশ ( আইএসও / আইসিসি জেটিসি 1 / এ উপলব্ধ খসড়া) এসসি 35 / ডাব্লুজি 5 হোম ) যা আইএসও / আইইসি টিআর 14652 (আইএসও / আইইসি জেটিসি 1 / এসসি 22 / ডাব্লুজি 20 হোম এ উপলব্ধ ) এবং পসিএক্সে এলসি_ক্লোলেটকে অবিচ্ছিন্ন করে

‡। এটি সঠিকভাবে করার জন্য অভিধানের প্রয়োজন হবে। আইসিইউ অদ্ভুতভাবে মূলধনযুক্ত গোষ্ঠীগুলিকে অ-সংকোচন / নন-ডিজিট্রাফ / নন- ট্রিগ্রাফ হিসাবে বিবেচনা করে , যেমন: সিসিএস < 3 সিসি < 3 সি সিএস < 3 সি সিএস < 3 সি সিএস < 3 সিএস < 3 সিএস < 3 সিএস < 3 সিএস < 3 CCS < 3 CCS < 3 সিসিএস


আমার বিস্তৃতি RegExp ব্যবহার করে আপনার কিছু বাইট সংরক্ষণ করতে সক্ষম হওয়া উচিত।
TheConstructor

6

জাভা 8, 742 বাইট

অন্য 3 বাইট ফাংশন নামকরণের দ্বারা কমাতে পারে sপরিবর্তে sortবা অন্য 16 বাইট বেড়ে চলেছে শ্রেণী-সংজ্ঞা না পারেন।

public class H{String d="cs|dzs?|gy|ly|sz|ty|zs";void sort(java.util.List<String>l){l.sort((a,b)->{String o="-a-á-b-cs-dzs-e-é-f-gy-h-i-í-j-k-ly-m-ny-o-ó-ö-ő-p-q-r-sz-ty-u-ú-ü-ű-v-w-x-y-zs-";int i=c(r(a),r(b),r(o));return i!=0?i:(i=c(a,b,o))!=0?i:b.charAt(0)-a.charAt(0);});}String r(String a){for(int i=0;i<8;i++)a=a.toLowerCase().replace("ááéíóőúű".charAt(i),"aaeioöuü".charAt(i));return a;}int c(String a,String b,String o){a=n(a);b=n(b);while(!"".equals(a+b)){int i=p(a,o),j=p(b,o);if(i!=j)return i-j;a=a.substring(i%4);b=b.substring(j%4);}return 0;}int p(String a,String o){a=(a+1).replaceAll("("+d+"|.).*","-$1");return o.indexOf(a)*4+a.length()-1;}String n(String a){return a.toLowerCase().replaceAll("(.)(?=\\1)("+d+")| |-","$2$2");}}

এটি ব্যবহার করা যেতে পারে:

new H().sort(list);

পরীক্ষা স্যুট:

public static void main(String[] args) {
    test(Arrays.asList("cudar", "cukor", "cuppant", "csalit", "csata"));
    test(Arrays.asList("kasza", "kaszinó", "kassza", "kaszt", "nagy", "naggyá", "nagygyakorlat", "naggyal",
            "nagyít"));
    test(Arrays.asList("jácint", "Jácint", "Zoltán", "zongora"));
    test(Arrays.asList("Eger", "egér", "író", "iroda", "irónia", "kerek", "kerék", "kérek", "szúr", "szül"));
    test(Arrays.asList("márvány", "márványkő", "márvány sírkő", "Márvány-tenger", "márványtömb"));
}

private static void test(final List<String> input) {
    final ArrayList<String> random = randomize(input);
    System.out.print(input + " -> " + random);
    new H().sort(random);
    System.out.println(" -> " + random + " -> " + input.equals(random));
}

private static ArrayList<String> randomize(final List<String> input) {
    final ArrayList<String> temp = new ArrayList<>(input);
    final ArrayList<String> randomOrder = new ArrayList<>(input.size());
    final Random r = new Random();
    for (int i = 0; i < input.size(); i++) {
        randomOrder.add(temp.remove(r.nextInt(temp.size())));
    }
    return randomOrder;
}

প্রদায়ক

[cudar, cukor, cuppant, csalit, csata] -> [csata, cudar, cuppant, csalit, cukor] -> [cudar, cukor, cuppant, csalit, csata] -> true
[kasza, kaszinó, kassza, kaszt, nagy, naggyá, nagygyakorlat, naggyal, nagyít] -> [naggyá, kassza, kaszinó, nagygyakorlat, nagyít, nagy, kaszt, kasza, naggyal] -> [kasza, kaszinó, kassza, kaszt, nagy, naggyá, nagygyakorlat, naggyal, nagyít] -> true
[jácint, Jácint, Zoltán, zongora] -> [Zoltán, jácint, zongora, Jácint] -> [jácint, Jácint, Zoltán, zongora] -> true
[Eger, egér, író, iroda, irónia, kerek, kerék, kérek, szúr, szül] -> [egér, Eger, kerék, iroda, író, kerek, kérek, szúr, irónia, szül] -> [Eger, egér, író, iroda, irónia, kerek, kerék, kérek, szúr, szül] -> true
[márvány, márványkő, márvány sírkő, Márvány-tenger, márványtömb] -> [márványtömb, márványkő, Márvány-tenger, márvány sírkő, márvány] -> [márvány, márványkő, márvány sírkő, Márvány-tenger, márványtömb] -> true

Ungolfed:

public class HungarianOrder {

    String d = "cs|dzs?|gy|ly|sz|ty|zs";

    void sort(java.util.List<String> l) {
        l.sort((a, b) -> {
            String o = "-a-á-b-cs-dzs-e-é-f-gy-h-i-í-j-k-ly-m-ny-o-ó-ö-ő-p-q-r-sz-ty-u-ú-ü-ű-v-w-x-y-zs-";
            int i = c(r(a), r(b), r(o));
            return i != 0 ? i
                    : (i = c(a, b, o)) != 0 ? i
                            : b.charAt(0) - a.charAt(0);
        });
    }

    // toLower + remove long accent
    String r(String a) {
        for (int i = 0; i < 8; i++)
            a = a.toLowerCase().replace("ááéíóőúű".charAt(i), "aaeioöuü".charAt(i));
        return a;
    }

    // iterate over a and b comparing positions of chars in o
    int c(String a, String b, String o) {
        a = n(a);
        b = n(b);
        while (!"".equals(a + b)) {
            int i = p(a, o), j = p(b, o);
            if (i != j)
                return i - j;
            a = a.substring(i % 4);
            b = b.substring(j % 4);
        }
        return 0;
    }

    // find index in o, then looking if following characters match
    // return is index * 4 + length of match; if String is empty or first character is unknown -1 is returned
    int p(String a, String o) {
        a = (a+1).replaceAll("("+d+"|.).*", "-$1");
        return o.indexOf(a) * 4 + a.length() - 1;
    }

    // expand ddz -> dzdz and such
    String n(String a) {
        return a.toLowerCase().replaceAll("(.)(?=\\1)("+ d +")| |-", "$2$2");
    }
}

আমি জাভা- Listটাইপ এবং order()এটির কাজটি ব্যবহার করছি, তবে তুলনাকারী সব আমার।


চিত্তাকর্ষক! আমি ভাবছি আপনার <String>কয়েকটি তালিকাভুক্তির জন্য তালিকার ধরণের স্পেসিফায়ারটি ফেলে দেওয়া এবং কয়েকটি অক্ষর সংরক্ষণ করতে সক্ষম হওয়া উচিত ?
জোশ

@ জোশ না, এটি দুটি ক্যাসেট তৈরি করবে যেমন জাভা Objectতখন ক এবং বি প্রকার হিসাবে নির্ধারণ করবে । যদিও আমি সম্ভবত ক্লাস-জেনেরিক-প্যারামিটার বর্ধিত করে সংজ্ঞায়িত করতে পারি String। এছাড়াও আমি সংক্ষিপ্ততম কোডটি আশা করি না। ;-)
দ্য কনস্ট্রাক্টর

3

পাইথন 3, 70

Shooqie ধন্যবাদ 8 বাইট সংরক্ষণ করা।

আমি পাইথনকে ভালবাসি। : ডি

স্ট্রিংগুলির একটি তালিকা প্রত্যাশা করে।

from locale import*;setlocale(0,'hu')
f=lambda x:sorted(x,key=strxfrm)

3
এটি কি স্ট্যান্ডার্ড ফাঁক নয়?
বনাম

1
@vsz আমি যতটা জানি জানি না। বিল্ট-ইনগুলি ব্যবহার করা প্রচুর চ্যালেঞ্জের অংশ।
মরগান থ্রাপ

1
@vsz এর মান-লঘফোল পোস্টের তুলনায় এটি একটি আপ-ডাউন-ভোটের অনুপাত খুব কম, আপনাকে স্পষ্টভাবে এটি নিষিদ্ধ করতে হবে।
FryAmTheEggman

1
ঠিক আছে, এটি করেছেন। আমি স্পষ্টভাবে এটি নিষিদ্ধকরণ হিসাবে বিবেচনা করেছি তবে আমি যদিও এটি স্পষ্ট হওয়া উচিত যে এটি পুরো চ্যালেঞ্জকে একটি মূল বিষয় হিসাবে চিহ্নিত করবে। আমি অসুবিধার জন্য দুঃখিত।
বনাম

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