मैं पहेलियाँ, आईएल कोड गोल्फ प्रोग्रामिंग


21

पृष्ठभूमि

इतालवी निश्चित लेख (अंग्रेजी के अनुरूप ) के सात अलग-अलग रूप हैं: l ' , il , lo , gli , i , la , le । जो एक का उपयोग करने के लिए तीन चर पर निर्भर करता है:

  • लिंग: पुल्लिंग / स्त्रीलिंग।
  • संख्या: एकवचन / बहुवचन।
  • बाद के शब्द का प्रारंभिक अक्षर: स्वर / व्यंजन प्रकार A / व्यंजन प्रकार B।
    • स्वर इनमें से कोई भी है: aeiou
    • व्यंजन प्रकार बी इन मामलों में से एक है: s- इसके बाद एक और व्यंजन, z- , gn- , pn- , ps- , x- , i- इसके बाद स्वर (यह मैं अर्धवृत्त के रूप में कार्य करता है)।
    • व्यंजन प्रकार A एक व्यंजन है जो कि B नहीं है।

तालिका आलेख को तीन से ऊपर के चर के बारह संयोजनों में से प्रत्येक में उपयोग करने के लिए दिखाती है। ध्यान दें कि l ' फ़ॉर्म निम्नलिखित शब्द से एक एकल उद्धरण और एक स्थान के बिना जुड़ा हुआ है।

यहाँ छवि विवरण दर्ज करें

चुनौती

एक शब्द इनपुट और एक या दो तार, संख्या या बूलियन लिंग और संख्या का संकेत । (प्रारंभिक अक्षर इनपुट शब्द से प्राप्त करना होगा)।

इनपुट शब्द एएससीआईआई अक्षरों को कम करने का एक क्रम होगा। उच्चारण स्वर (उदाहरण के लिए, उनके गैर उच्चारण चिह्न संस्करणों से बदल दिया जाएगा realtà के रूप में इनपुट होगा realta )।

लिंग और संख्या इनपुट अलग-अलग संख्या, बूलियन या स्ट्रिंग्स या स्ट्रिंग की एक संयुक्त संख्या हो सकती है (उदाहरण के लिए, मर्दाना एकवचन के लिए 1, स्त्री एकवचन के लिए 2, आदि)।

किसी भी उचित प्रारूप और विभाजक का उपयोग किया जा सकता है, जब तक कि यह उत्तर में निर्दिष्ट है।

आउटपुट शब्द लेख के उपयुक्त रूप से पहले के रूप में की जरूरत अंतरिक्ष या एकल उद्धरण के साथ,। आउटपुट भी कम होना चाहिए। रिक्त स्थान की अनुगामी या अग्रणी स्थान की अनुमति है।

कोड गोल्फ, सबसे छोटी जीत।

परीक्षण के मामलों

निम्नलिखित मैं इनपुट अक्षरों का उपयोग में m, fलिंग निर्दिष्ट करने के लिए, और s, pसंख्या के लिए (यह सिर्फ एक संभव इनपुट प्रारूप है)।

Input               Output              Comment

macchina f s        la macchina         Initial letter is cons. A
zio m s             lo zio              Initial letter is cons. B
libri m p           i libri             Initial letter is cons. A
ieri m s            lo ieri             Initial letter is cons. B
aquile f p          le aquile           Initial letter is vowel
spagnoli m p        gli spagnoli        Initial letter is cons. B
golf m s            il golf             Initial letter is cons. A
ombra f s           l'ombra             Initial letter is vowel
impossibili m p     gli impossibili     Initial letter is vowel

आप नियमित क्रियाओं के संयोजन पर एक चुनौती बनाना चाहते हैं।
user6245072

@ user6245072 खैर, यह पहले से ही है ... अंतर शायद बहुत छोटा होगा
लुइस मेंडू

1
एक छोटी सी तकनीकी कालापव्यय: / j / सामान्य रूप से एक कहा जाता है semivowel अंग्रेजी में है, न कि semiconsonant । मुझे आश्चर्य है कि अगर वे [rather] [[] ( लो शेफ , लो chardonnay ), फ्रांसीसी नामों के साथ भिन्नता ( l'Havet लेकिन lo lugo) के बजाय भिन्नता वाले मामलों में कारक हैं, तो वे क्या समाधान देंगे ? जीवाश्म रूप ( gli dei , per lo meno ), महिलाओं को उनके अंतिम नाम ( l'Antonia but la Antonini ), आदि द्वारा संदर्भित किया जाता है , जो कि गोल्फ-कोड के लिए काफी दुर्जेय बात होगी।
19us में Janus Bahs Jacquet

1
इतालवी के रूप में मैं आपको ieriपरीक्षा के मामले को छोड़ने के लिए कहता हूं क्योंकि यह क्रिया विशेषण है और संज्ञा नहीं है! (BTW यह औपचारिक रूप से सही था) कृपया!
जियाको गारबेलो

1
हम आम तौर पर कहते हैं: "गैर pensare एक Ieri, Pensa एक Domani"
गियाकोमो Garabello

जवाबों:


7

रेटिना, 138 133 129 113 बाइट्स

^.(s[^aeiou]|z|gn|pn|ps|x|i[aeiou])
B$&
^.[aeiou]
V$&
^\d.
A$&
V[02]
l'
A0
il 
B0
lo 
A1
i 
.1
gli 
.2
la 
.3
le 

परीक्षण सूट। ( %(G`\nएक ही बार में सभी परीक्षण-मामलों को चलाने के लिए तैयार )

इनपुट प्रारूप: इसके बजाय macchina f sबन जाता है 2macchina

0: Masculine Singular
1: Masculine Plural
2: Feminine Singular
3: Feminine Plural

रूपांतरण तालिका केविन लाउ के लिए धन्यवाद ।


4

पायथन 3.5, 238 235 192 181 178 बाइट्स:

( -13 बाइट्स लीकी नन के सुझावों के लिए धन्यवाद! )

import re;R=re.match;lambda a,b:(R('s[^aeiou]|(z|gn|pn|ps|x|i)[aeiou]',a)and['lo ','gli ','la '][b]or R('[aeiou]',a)and["l'",'gli '][b%2]or['il ','i ','la '][b]if b<3else'le ')+a

एक अनाम मेमने का कार्य जो तर्क के रूप में लेता है (<String>, <Integer Gender-Plurality mapping>), जहाँ मानचित्रण निम्नानुसार है:

0 -> Masculine Singular
1 -> Masculine Plural
2 -> Feminine Singular
3 -> Feminine Plural

इसे कॉल करने के लिए, बस फ़ंक्शन को कोई भी मान्य नाम दें, और फिर इसे प्रिंट विवरण के अंदर लपेटे गए सामान्य फ़ंक्शन की तरह कहें। इसलिए, यदि प्रश्न का नाम दिया जाना थाU , तो बस इसे कॉल करें print(U(<String>, <Integer Gender-Plurality mapping>))

यह ऑनलाइन की कोशिश करो! (Ideone)


zzz and yyy or xxxदो बाइट्स से छोटा है[xxx,yyy][bool(zzz)]
लीक नून

@LeakyNun मैं ऐसा कर सकता हूं? वाह, मुझे भी नहीं पता था। धन्यवाद! :)
आर। काप

यह तब तक काम करता है जब तक yyyसच्चाई है।
लीकी नून

@LeakyNun हाँ, बिल्कुल।
आर। काप

["l'",'gli '][b%2]3 बाइट्स से कम है["l'",'gli ',"l'"][b]
लीकी नून

4

जावा, 227 208 195 बाइट्स

-13 बाइट्स लीकी नन की बदौलत

String f(String a,int o){boolean v=a.matches("^([aeou]|i[^aeiou]).*"),b=a.matches("^([ixz]|gn|pn|ps|s[^aeiou]).*");return(o>1?o>2?"le ":v?"l'":"la ":o>0?v||b?"gli ":"i ":v?"l'":b?"lo ":"il ")+a;}

निम्न मैपिंग के आधार पर आपकी स्ट्रिंग और एक इंट लेता है:

0: Masculine Singular
1: Masculine Plural
2: Feminine Singular
3: Feminine Plural

परिणाम के साथ एक स्ट्रिंग लौटाता है।

परीक्षण मामलों के साथ और बिना टर्नरी ऑपरेटरों (अभी के लिए) के साथ अधूरा:

class Test {

    public static String f(String a, int o) {
        boolean v = a.matches("^([aeou]|i[^aeiou]).*");
        boolean b = a.matches("^([ixz]|gn|pn|ps|s[^aeiou]).*");
        String r;
        if(o > 1)
            if(o > 2)
                r = "le ";
            else
                if(v)
                    r = "l'";
                else
                    r = "la ";
        else
            if(o > 0)
                if(v || b)
                    r = "gli ";
                else
                    r = "i ";
            else
                if(v)
                    r = "l'";
                else if(b)
                    r = "lo ";
                else
                    r = "il ";
        return r + a;
    }

    public static void main(String[] args) {
        System.out.println(f("macchina", 2));
        System.out.println(f("zio", 0));
        System.out.println(f("libri", 1));
        System.out.println(f("ieri", 0));
        System.out.println(f("aquile", 3));
        System.out.println(f("spagnoli", 1));
        System.out.println(f("golf", 0));
        System.out.println(f("ombra", 2));
        System.out.println(f("impossibili", 1));
    }
}

रेगेक्स जादू का एक छोटा सा उपयोग करता है और निर्दिष्ट दो बूलियन के आधार पर कार्य करता है। मेरे आश्चर्य के लिए, किसी भी आयात की आवश्यकता नहीं है, जो कोड आकार के साथ मदद करता है!


1
मेरा है ... जावा से अधिक लंबा है ?! मैं थोड़ा और asap नीचे गोल्फ खदान चाहिए! हालांकि अच्छी नौकरी! +1
आर। कप

अगर मुझे कमांड लाइन या स्टडिन से अपनी दलीलें लेनी होतीं, तो यकीन

हाँ, बुलियन भी स्वीकार कर लिया। मैंने संपादित किया है कि
लुईस मेन्डो

मुझे लगता है कि आप 0/1इसके बजाय उपयोग कर सकते हैं false/trueजिससे आपको कुछ बाइट्स बचाना चाहिए।
लीक नून

String e = "[^aeiou]).*";वास्तव में उपयोग नहीं करना आपको 5 बाइट्स बचाता है।
लीक नून

3

रूबी, 147 146 बाइट्स

इसे ऑनलाइन आज़माएं?

किस लेख का उपयोग करना है यह निर्धारित करने के लिए एक बेहतर विधि का उपयोग करना संभव हो सकता है, लेकिन मुझे किसी के बारे में पता नहीं है।

कल्पना के अनुसार, पहचानकर्ता एक संख्या है, जो निम्नानुसार है:

0: Masculine Singular
1: Masculine Plural
2: Feminine Singular
3: Feminine Plural

->w,i{(%w"lo gli la le l' gli l' le il i la le"[(0..2).find{|r|[/^(i[aeiou]|s[^aeiou]|z|x|[gp]n|ps)/,/^[aeiou]/,//][r]=~w}*4+i]+' '+w).sub"' ",?'}

2

बैच, 446 390 385 380 बाइट्स

@echo off
set w=%2
call:l %1 l' gli_ l' le_ il_ i_ la_ le_ lo_ gli_ le_ le_
exit/b
:l
for /l %%a in (0,1,%1)do shift
set o=%5
for %%a in (gn pn ps)do if %%a==%w:~,2% set o=%9
for %%a in (s z x)do if %%a==%w:~,1% set o=%9
for %%a in (a e i o u)do if %%a==%w:~,1% set o=%1
for %%a in (a e i o u)do if i%%a==%w:~,2% (set o=%9)else if s%%a==%w:~,2% set o=%1
echo %o:_= %%w%

नया संस्करण 0-3लिंग और संख्या के लिए एक ही एन्कोडिंग का उपयोग करता है और कई अन्य उत्तरों के रूप में। 1-आयामी सरणी बनाकर काम करता है %2.. %13रूपों की, फिर पहले 1+%1तत्वों को शिफ्ट करना ताकि ब्याज के रूप बन जाएं %1, %5और %9(जो कि भाग्यशाली है कि बैच %9बिना स्थानांतरण के ऊपर नहीं जाएगा )। फिर यह श्रमसाध्य रूप से उपसर्गों की सूचियों की जांच करता है ताकि यह पता लगाया जा सके कि किस फॉर्म का उपयोग करने की आवश्यकता है। _शब्द के उत्पादन तक एक स्थान का प्रतिनिधित्व करने के लिए एक प्लेसहोल्डर के रूप में उपयोग किया जाता है।


बाइट्स को बचाने के लिए शायद उन्हें एक अंक (या यदि आवश्यक हो तो पत्र) में एन्कोड किया गया हो। सब कुछ बाइट्स के लिए है!
मूल्य इंक

@ केविनलाउ-केकेनी अंक एन्कोडिंग पर स्विच करने से मुझे लिंग और संख्या को फिर से लिखने से 56 बाइट्स बचाने की अनुमति मिली!
नील

1

पायथन 3, 235 बाइट्स

मुझे यह देखने में दिलचस्पी थी कि रेगेक्स के बिना पायथन में मुझे यह कितना छोटा लग सकता है। यह पता चला है कि यह सबसे अच्छा विकल्प नहीं है ...

lambda s,c,v='aeiou':[["l'",'il','lo'],['gli','i','gli'],["l'",'la','la'],['le']*3][c][[[1,2][s[0]=='s'and s[1]not in v or s[0]in'zx'or s[:2]in['gn','pn','ps']or s[0]=='i'and s[1]in v],0][s[0]in v and not(s[0]=='i'and s[1]in v)]]+' '+s

एक अनाम फ़ंक्शन जो शब्द के तर्क sऔर cएक पूर्णांक के रूप में लिंग-संख्या कोड के माध्यम से इनपुट लेता है , निम्नलिखित मानचित्रण का उपयोग करते हुए:

0 - Masculine Singular
1 - Masculine Plural
2 - Feminine Singular
3 - Feminine Plural

और सही लेख के साथ शब्द देता है।

यह काम किस प्रकार करता है

cअलग-अलग सूचियों के रूप में प्रत्येक के लिए संभावनाओं वाली एक सूची बनाई गई है। इसके बाद cप्रासंगिक विकल्पों के साथ 3-तत्व सूची में उपज के मूल्य का उपयोग करके सूची को अनुक्रमित किया जाता है । एक सूची सूचकांक अब बूलियन अभिव्यक्तियों के परिणामों के साथ एक अन्य नेस्टेड सूची में अनुक्रमित करके चुना जाता है। यदि पहला वर्ण sस्वर है और स्वर का iअनुसरण नहीं किया जाता है, तो विकल्प के लिए vowelअनुक्रमणिका की वापसी के माध्यम से उपज दी जाती है 0। एल्स, एक बूलियन अभिव्यक्ति के Trueलिए cons. Bऔर जिसके Falseलिए cons. Aमूल्यांकन किया जाता है, सूचकांकों 2और 1क्रमशः उपज । अंत में, इंडेक्स का उपयोग लेख को प्राप्त करने के लिए किया जाता है, जिसे वापस भेजे जाने से पहले एक स्थान और मूल स्ट्रिंग के साथ मिलाया जाता है।

Ideone पर इसे आज़माएं


1

जावास्क्रिप्ट 210 बाइट्स

(s,p)=>{var c=i=>!("aeiou".indexOf(s[i])+1),r=["z","gn","pn","ps","x"].some(t=>!s.indexOf(t))||(c(1)?s[0]=="s":s[0]=="i")?2:c(0)?1:0;return (p&1?(p&2?"le ":r&1?"i ":"gli "):!r?"l'":p&2?"la ":r&1?"il ":"lo ")+s}

एक अनाम फ़ंक्शन, जहां दो पैरामीटर s और p ले रहे हैं

s  is the input string
p  is plurality (bit 0, set=plural) and gender (bit 1, set=f) combined as
    0 = masculine singular
    1 = masculine plural
    2 = feminine singular
    3 = feminine plural

फंक्शन को एक वैरिएबल और कुछ अनपैकिंग) में असाइन करने के बाद, इसे टेस्ट किया जा सकता है

var f=(s,p)=>{
    var c = i=>!("aeiou".indexOf(s[i])+1),
        r = ["z","gn","pn","ps","x"].some(t=>!s.indexOf(t))
             || ( c(1)? s[0]=="s":s[0]=="i" )
             ?   2 : c(0) ? 1 : 0;

     return (p&1?(p&2?"le ":r&1?"i ":"gli "):!r?"l'":p&2?"la ":r&1?"il ":"lo ")+s;
}

console.log("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
 f("macchina",2),
 f("zio",0),
 f("libri",1),
 f("ieri", 0),
 f("aquile",3),
 f("spagnoli",1),
 f("golf",0),
 f("ombra",2),
 f("impossibili",1))

कहा पे

  • csस्थिति में एक व्यंजन के लिए परीक्षण करने के लिए एक समारोह है i
  • r एक स्वर के साथ शुरू करने के लिए 0 का मूल्यांकन करता है, एक प्रकार के व्यंजन के साथ शुरू करने के लिए 1 और एक प्रकार के बी व्यंजन के साथ शुरू करने के लिए 2 (रिवर्स ऑर्डर में परीक्षण)।
  • रिटर्न स्टेटमेंट में कड़वापन इसे एक साथ रखता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.