এই শব্দটি কোন ভাষা?


16

আপনার এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা প্রদত্ত শব্দের ভাষা নির্ধারণ করে।

কাজটি হ'ল 4 টি ভাষায় 5000 টি প্রচলিত শব্দগুলির কয়েকটি সনাক্ত করা:

  • ইংরেজি
  • জার্মান
  • ইতালীয়
  • হাঙ্গেরীয়

শব্দগুলির তালিকাগুলি এই গিটহাবের সংগ্রহস্থলে পাওয়া যাবে

তুমি প্রদত্ত পরীক্ষার বিষয় 40% ভুল করার অনুমতি । অর্থাৎ আপনি 20000 ইনপুটগুলির মধ্যে 8000 টি ভুল করে বিভাগ করতে পারেন।

বিস্তারিত

  • তালিকাগুলিতে কেবল ছোট হাতের অক্ষরযুক্ত শব্দ থাকে তবে a-zউদাহরণস্বরূপ won'tএবং möchteঅন্তর্ভুক্ত থাকে না।
  • কয়েকটি শব্দ একাধিক ভাষায় উপস্থিত হয় যার অর্থ আপনার কোডটি সর্বদা প্রত্যাশিত আউটপুটটি সঠিকভাবে অনুমান করতে পারে না।
  • সুবিধার জন্য আপনি সমস্ত পরীক্ষার কেসগুলি একটি তালিকা হিসাবে ডাউনলোড করতে পারেন । প্রতিটি লাইনে একটি সংখ্যা শব্দের ভাষা নির্দেশ করে। ( 1ইংরাজির 2জন্য, জার্মানির 3জন্য, ইতালিয়ান এবং 4হাঙ্গেরীয় ভাষাতে
  • স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।
  • শব্দ ব্যবহার করা আপনার প্রোগ্রামিং ভাষার দ্বারা সরবরাহিত আমাদের অনুরূপ ডেটা তালিকাবদ্ধ করে।

ইনপুট

  • একটি স্ট্রিং যা কেবলমাত্র ছোট অক্ষরের ইংরেজি অক্ষর (আজ) থাকে।
  • ট্রেলিং নিউলাইন optionচ্ছিক।

আউটপুট

  • আপনি প্রতিটি ভাষার জন্য একটি স্বতন্ত্র এবং সামঞ্জস্যপূর্ণ (সর্বদা একই) আউটপুট সরবরাহ করে শব্দগুলিকে শ্রেণিবদ্ধ করতে পারেন। (উদাহরণস্বরূপ 1ইংরাজির 2জন্য, জার্মানির 3জন্য, ইতালিয়ান এবং 4হাঙ্গেরীয়ের জন্য))

এটি কোড গল্ফ তাই সংক্ষিপ্ততম প্রোগ্রাম বা ফাংশন জিতে।

সম্পর্কিত কোড গল্ফ প্রশ্ন: এটি কি একটি শব্দ?

শব্দ তালিকাগুলি উইকশনারি.আর্গ এবং 101 টি ভাষা থেকে নেওয়া হয়েছে।


আপনি কি নিশ্চিত যে তালিকাটি সঠিক? আমি নিশ্চিত যে আমি জার্মান ভাষায় কখনও শুনিনি। সমস্ত সম্ভাব্য ভাষার সাথে একটি অ্যারের আউটপুটিং গণনা করে? যেমন আপাতদৃষ্টিতে সমস্ত ভাষায় তাই এটি {1,2,3,4}
রাখবে

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

তালিকাগুলিতে কেবল ছোট হাতের অক্ষরযুক্ত শব্দ থাকে ... এটি সম্পূর্ণ সত্য নয়। all_languagesফাইল (মূলধন শব্দ কয়েক ডজন অন্তর্ভুক্তMr , Gutenberg"- |, ইত্যাদি) এবং অ শব্দ" "(খালি স্ট্রিং) এবং"]]। আমি ধরে নিচ্ছি যে পূর্বের লোকটিকে ছোট করা এবং আধুনিকটি মুছে ফেলা ঠিক আছে?
চটজলদি ossifrage

টুইটগুলি ইংরেজি তালিকাগুলি আপডেট করেছে। (এখানে 60 ডলার বড় হাতের শব্দ এবং 2 টি অ-শব্দ ছিল))
ডলার

ডায়াক্রিটিক্স অপসারণ করবেন কেন? যদি লক্ষ্যটি হ'ল যে ভাষাগুলি মাতৃভাষা নেই তাদের আলাদা করা, তবে যে ভাষাগুলিতে ডায়াক্রিটিক্স নেই সেগুলি ব্যবহার করবেন না কেন?
প্যাট

উত্তর:


9

রেটিনা , 51 বাইট

.*[aeio]$
1
A`en$|ch|ei|au
^$
2
A`[jkz]|gy|m$
\D+
4

আমি রেইজেক্সগুলি নিয়ে এসেছি এবং @ মার্টিনব্যাটনার কি রেটিনায় গল্ফিং / গল্ফিংয়ে রূপান্তর করেছিলেন তাই ... দলের প্রচেষ্টার জন্য হারে?

ম্যাপিং হচ্ছে 1 -> Italian, 2 -> German, (empty) -> Hungarian, 4 -> Englishপ্রতিটি বিভাগে শ্রেণিবদ্ধ পরিমাণ 4506 + 1852 + 2092 + 3560 = 12010

এটি অনলাইন চেষ্টা করুন! | পরিবর্তিত মাল্টলাইন সংস্করণ

ব্যাখ্যা

প্রথমত, পাইথন সমতুল্য কিছু হ'ল:

import re
def f(s):
  if re.search("[aeio]$", s):
    return 1
  if re.search("en$|ch|ei|au", s):
    return 2
  if re.search("[jkz]|gy|m$", s):
    return ""
  return 4

আমাকে কেবল এটি বলতে দাও যে o$এটি ইতালীয়দের একটি দুর্দান্ত সূচক।

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

.*[aeio]$
1

প্রথম লাইনের ম্যাচগুলিকে দ্বিতীয়টির সামগ্রীর সাথে প্রতিস্থাপন করে।

পরবর্তী তিনটি লাইন একই কাজ করে তবে রেটিনার অ্যান্টি-গ্রেপ মোড ব্যবহার করে - অ্যান্টি-গ্রেপ (এর সাথে নির্দিষ্ট) A` ) রেখাটি যদি রেগেক্সের সাথে মিলে যায় তবে এটি সরিয়ে ফেলবে, এবং নিম্নলিখিত দুটি লাইনটি খালি লাইন থেকে পছন্দসই আউটপুটটিতে প্রতিস্থাপন হবে।

A`en$|ch|ei|au
^$
2

নিম্নলিখিত লাইনটি আবার অ্যান্টি-গ্রেপ ব্যবহার করে, তবে খালি লাইনটি প্রতিস্থাপন করে না, হাঙ্গেরিয়ানদের জন্য নির্দিষ্ট আউটপুট দেয়।

A`[jkz]|gy|m$

অবশেষে, শেষ দুটি লাইন

\D+
4

এর সাথে একটি খালি-অ-অঙ্কিত রেখা প্রতিস্থাপন করে 4। সমস্ত প্রতিস্থাপন কেবল তখনই ঘটতে পারে যদি কোনও পূর্বের প্রতিস্থাপন সক্রিয় না হয়, একটি if/else ifশৃঙ্খলা অনুকরণ করে ।


1

ল্যাবভিউ, 29 ল্যাবভিউ পুরষ্কার এবং 148,950 বাইট

ভাষাগুলির মধ্যে চক্র এবং শব্দটি যদি থাকে তবে পুনরাবৃত্তিকে একটি অ্যারেতে রাখে। এটি ভিতরের লুপটি পরীক্ষা করে ith লাইনে বাছাই করে এবং করছে= । ল্যাবভিউতে এটি কেবলমাত্র সত্য দেয় যদি স্ট্রিংগুলি একই রকম হয়।

এখন আউটপুট অ্যারের প্রথম উপাদানটি নিন যাতে বাকী অংশগুলিতে ইংলিশ হয়ে যায়।

এখনকার আউটপুটটি 0ইংরেজী, 1জার্মান, 2ইতালীয় এবং 3হাঙ্গেরীয়ের জন্য।


আমি ল্যাবভিউয়ের সাথে পরিচিত নই, তবে আপনি কীভাবে মানগুলি (শব্দ তালিকাগুলি) সঞ্চয় করবেন এবং সেগুলি কীভাবে ল্যাবভিউ প্রিমিটিভে প্রতিবিম্বিত হয়? মেটা এন্ট্রি বলছে: " ধ্রুবক: স্ট্রিংগুলি প্রতিটি চরিত্রের জন্য 1 ল্যাবভিউ আদিম "। এটি কি আদিম গণনাটিকে খুব বেশি বাড়িয়ে দেবে না?
insertusernamehere

আমি এমন কোনও ফাইল থেকে লোড করি যা ডিরেক্টরি পথ + স্ট্রিং + লোড ফাইলের সাথে বিল্ড পাথ। স্টোরেজ অভ্যন্তরীণভাবে সম্পন্ন হয় এবং তারগুলি দিয়ে যায়।
ইউমেল

5
আমি ভুল হতে পারি, তবে আমি মনে করি চ্যালেঞ্জের মূলটি কীভাবে ওয়ার্ডলিস্টগুলি সংকুচিত / সঞ্চয় করতে হবে about সুতরাং কোনও বাহ্যিক ফাইল থেকে লোড করার অনুমতি দেওয়া হবে না। ওপিকে সে বিষয়ে জিজ্ঞাসা করবে। :)
insertusernamehere

2
আপনি যদি কোনও বাহ্যিক ফাইল ব্যবহার করেন তবে এটির আকারটি আপনার কোড আকারে যুক্ত করা উচিত কারণ এটি আপনার সমাধানের একটি অংশ।
এলোমেলো

আমি এই ধারণার মধ্যে ছিলাম যে তাদের দেওয়া হবার কথা ছিল তবে তারা তাদের
অসুবিধে করল

1

জাভা, 3416 বাইট, 62%

এটি আমার সমাধান, আমি প্রদত্ত শব্দের তালিকা বিশ্লেষণ করি এবং প্রতিটি ভাষার জন্য 60 টি কমন্স বিগ্রাম এবং ট্রিগার খুঁজে পাই। আমি এখন শব্দের বিপরীতে আমার এন-গ্রাম পরীক্ষা করছি এবং শব্দটির সাথে বেশিরভাগ এন-গ্রাম দিয়ে ভাষা বেছে নিচ্ছি।

public class Classificator {

    String[][] triGr = {
            {"ing","ion","ent","tio","ted","nce","ter","res","ati","con","ess","ate","pro","ain","est","ons","men","ect","red","rea","com","ere","ers","nte","ine","her","ble","ist","tin","for","per","der","ear","str","ght","pre","ver","int","nde","the","igh","ive","sta","ure","end","enc","ned","ste","dis","ous","all","and","anc","ant","oun","ten","tra","are","sed","cti"},
            {"sch","che","ver","gen","ten","cht","ich","ein","ste","ter","hen","nde","nge","ach","ere","ung","den","sse","ers","and","eit","ier","ren","sen","ges","ang","ben","rei","est","nen","nte","men","aus","der","ent","hei","her","lle","ern","ert","uch","ine","ehe","auf","lie","tte","ige","ing","hte","mme","end","wei","len","hre","rau","ite","bes","ken","cha","ebe"},
            {"ent","are","ato","nte","ett","ere","ion","chi","con","one","men","nti","gli","pre","ess","att","tto","par","per","sta","tra","zio","and","iam","end","ter","res","est","nto","tta","acc","sci","cia","ver","ndo","amo","ant","str","tro","ssi","pro","era","eri","nta","der","ate","ort","com","man","tor","rat","ell","ale","gio","ont","col","tti","ano","ore","ist"},
            {"sze","ere","meg","ett","gye","ele","ond","egy","enn","ott","tte","ete","unk","ban","tem","agy","zer","esz","tet","ara","nek","hal","dol","mon","art","ala","ato","szt","len","men","ben","kap","ent","min","ndo","eze","sza","isz","fog","kez","ind","ten","tam","nak","fel","ene","all","asz","gon","mar","zem","szo","tek","zet","elm","het","eve","ssz","hat","ell"}

                    };
    static String[][] biGr = {
        {"in","ed","re","er","es","en","on","te","ng","st","nt","ti","ar","le","an","se","de","at","ea","co","ri","ce","or","io","al","is","it","ne","ra","ro","ou","ve","me","nd","el","li","he","ly","si","pr","ur","th","di","pe","la","ta","ss","ns","nc","ll","ec","tr","as","ai","ic","il","us","ch","un","ct"},
        {"en","er","ch","te","ge","ei","st","an","re","in","he","ie","be","sc","de","es","le","au","se","ne","el","ng","nd","un","ra","ar","nt","ve","ic","et","me","ri","li","ss","it","ht","ha","la","is","al","eh","ll","we","or","ke","fe","us","rt","ig","on","ma","ti","nn","ac","rs","at","eg","ta","ck","ol"},
        {"re","er","to","ar","en","te","ta","at","an","nt","ra","ri","co","on","ti","ia","or","io","in","st","tt","ca","es","ro","ci","di","li","no","ma","al","am","ne","me","le","sc","ve","sa","si","tr","nd","se","pa","ss","et","ic","na","pe","de","pr","ol","mo","do","so","it","la","ce","ie","is","mi","cc"},
        {"el","en","sz","te","et","er","an","me","ta","on","al","ar","ha","le","gy","eg","re","ze","em","ol","at","ek","es","tt","ke","ni","la","ra","ne","ve","nd","ak","ka","in","am","ad","ye","is","ok","ba","na","ma","ed","to","mi","do","om","be","se","ag","as","ez","ot","ko","or","cs","he","ll","nn","ny"}

                    };

    public int guess(String word) {

        if (word.length() < 3) {
            return 4; // most words below 2 characters on list are hungarians
        }
        int score[] = { 0, 0, 0, 0 };
        for (int i = 0; i < 4; i++) {
            for (String s : triGr[i]) {
                if (word.contains(s)) {
                    score[i] = score[i] + 2;
                }
            }
            for (String s : biGr[i]) {
                if (word.contains(s)) {
                    score[i] = score[i] + 1;
                }
            }
        }
        int v = -1;
        int max = 0;
        for (int i = 0; i < 4; i++) {
            if (score[i] > max) {
                max = score[i];
                v = i;
            }
        }
        v++;
        return v==0?Math.round(4)+1:v;
    }
}

এবং এটি আমার টেস্টকেস

public class Test {

    Map<String, List<Integer>> words = new HashMap<String, List<Integer>>();

    boolean validate(String word, Integer lang) {
        List<Integer> langs = words.get(word);
        return langs.contains(lang);
    }

    public static void main(String[] args) throws FileNotFoundException {

        FileReader reader = new FileReader("list.txt");
        BufferedReader buf = new BufferedReader(reader);
        Classificator cl = new Classificator();
        Test test = new Test();
        buf.lines().forEach(x -> test.process(x));
        int guess = 0, words = 0;
        for (String word : test.words.keySet()) {
            int lang = cl.guess(word);
            if (lang==0){
                continue;
            }
            boolean result = test.validate(word, lang);
            words++;
            if (result) {
                guess++;
            }
        }
        System.out.println(guess+ " "+words+ "    "+(guess*100f/words));
    }

    private void process(String x) {
        String arr[] = x.split("\\s+");
        String word = arr[0].trim();
        List<Integer> langs = words.get(word);
        if (langs == null) {
            langs = new ArrayList<Integer>();
            words.put(word, langs);
        }
        langs.add(Integer.parseInt(arr[1].trim()));

    }

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