स्पेन लाइसेंस प्लेट खेल


26

यह प्रश्न स्पैनिश भाषा में पूछे गए एक प्रश्न पर आधारित है । हां, मैंने स्पेनिश भाषा में एक एल्गोरिथ्म के लिए कहा। :)

स्पेन में, वर्तमान लाइसेंस प्लेटों में यह पैटर्न है:

1234 XYZ

जहाँ XYZ तीन व्यंजन हैं जो स्पेनिश व्यंजन के पूर्ण सेट (',' को छोड़कर, मुझे लगता है) से लिए गए हैं।

कभी-कभी, अपनी पत्नी के साथ यात्रा करते समय, हम एक खेल खेलने के लिए उपयोग करते हैं। जब हम एक लाइसेंस प्लेट देखते हैं, तो हम इसके तीन व्यंजन लेते हैं और एक शब्द बनाने की कोशिश करते हैं जिसमें तीन व्यंजन होते हैं, जो लाइसेंस प्लेट की तरह ही क्रम में दिखाई देते हैं। उदाहरण (स्पेनिश में):

BCD
    BoCaDo (valid)
    CaBezaDa (not valid)
FTL
    FaTaL (valid)
    FLeTar (not valid)
FTR
    FleTaR (valid, wins)
    caFeTeRa (valid, loses)

विजेता वह है जो कम से कम वर्णों का उपयोग करता है, जैसा कि आप अंतिम उदाहरण में देख सकते हैं।

चुनौती

सबसे छोटा कार्यक्रम या फ़ंक्शन लिखें जो शब्दों की एक सूची और तीन व्यंजन का एक सेट प्राप्त करता है और उस सूची में सबसे छोटा शब्द पाता है जिसमें एक ही क्रम में तीन व्यंजन शामिल होते हैं। इस खेल के प्रयोजनों के लिए, मामला मायने नहीं रखता है।

  • शब्द सूची (पहला पैरामीटर) के लिए इनपुट आपकी भाषा stringप्रकार की एक सरणी होगी । दूसरा पैरामीटर (तीन व्यंजन) एक और होगा string। यदि यह आपकी भाषा के लिए बेहतर है, stringतो तीन व्यंजन के साथ मापदंडों की पूरी सूची के अंतिम आइटम पर विचार करें । आउटपुट दूसरा होगा string
  • शब्द सूची में जिन शब्दों का आविष्कार या अनंत शब्द नहीं होगा, वे ऐसे शब्द होंगे जो किसी भी मानक शब्दकोश में दिखाई देंगे। यदि आपको एक सीमा की आवश्यकता है, तो मान लीजिए कि शब्द सूची में कोई शब्द 50 वर्णों से अधिक लंबा नहीं होगा।
  • यदि समान लेन के साथ कई शब्द हैं जो मान्य उत्तर हो सकते हैं, तो आप उनमें से किसी एक को वापस कर सकते हैं। यदि आप कोई शब्द तीन व्यंजन के पैटर्न से मेल नहीं खाते हैं, तो बस सुनिश्चित करें कि आप सिर्फ एक शब्द, या एक खाली स्ट्रिंग लौटाते हैं।
  • आप समूह में व्यंजन दोहरा सकते हैं, इसलिए तीन व्यंजन के लिए मान्य इनपुट दोनों हैं FLRऔर GGG
  • स्पैनिश व्यंजन अंग्रेजी के बिल्कुल समान हैं, जिसमें "।" शामिल है। स्वर तनावग्रस्त स्वर के श्रवण के साथ समान हैं: "áéíóúü"। अन्य प्रकार के चिह्न जैसे "-" या "" "नहीं होंगे।"
  • आप मान सकते हैं कि मामला हमेशा शब्द सूची और तीन व्यंजन दोनों में समान होगा।

यदि आप अपने एल्गोरिथ्म को स्पेनिश शब्दों के वास्तविक संग्रह के साथ परीक्षण करना चाहते हैं, तो आप ड्रॉपबॉक्स से एक मिलियन से अधिक शब्दों के साथ एक फ़ाइल (15.9 एमबी) डाउनलोड कर सकते हैं ।

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

Input: 'psr', {'hola' 'repasar' 'pasarais' 'de' 'caída' 'pequeñísimo' 'agüeros'}
Output: 'repasar'

Input: 'dsd', {'dedos' 'deseado' 'desde' 'sedado'}
Output: 'desde'

Input: 'hst', {'hastío' 'chest'}
Output: 'chest'

यह , इसलिए सबसे छोटा कार्यक्रम हो सकता है जो मुझे हमेशा अपनी पत्नी को जीतने में मदद करता है! :)


शब्द सूची में शब्द कब तक होने की गारंटी है?
नील

2
वास्तविक लाइसेंस प्लेटों में, पत्र Q की अनुमति नहीं है; और डब्ल्यू , हालांकि एक उचित स्पेनिश पत्र नहीं है
लुइस मेंडो

2
क्या हम सूची में शब्दों को मान सकते हैं और तीन पत्र सभी एक मामले में होंगे?
जोनाथन एलन

1
@LuisMendo W 1969 से एक स्पेनिश पत्र है
Walen

1
@walen यही कारण है कि मैंने "उचित" :-) यह स्पेनिश में मौजूद है, लेकिन विदेशी लगता है
लुइस मेंडो

जवाबों:


7

05AB1E , 10 8 बाइट्स

लियो के लिए धन्यवाद 2 बाइट्स सहेजे गए

ʒæså}éR`

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

व्याख्या

ʒ         # filter list, keep only members for which the following is true
  så      # input is in the
 æ        # powerset of the current word
    }     # end filter
     é    # sort by length
      R   # reverse
       `  # push separately (shortest on top)

मैं headएक बाइट बचाने के अंत में इस्तेमाल किया है , लेकिन अगर एक मैच नहीं है एक खाली सूची उत्पादन होगा।


3
3ù #keep only those of length 3आप इसकी आवश्यकता क्यों है?
सिंह

1
@Leo: मैं नहीं, कि मुझे मूर्ख था। धन्यवाद :)
Emigna

6

MATL , 30 29 बाइट्स

xtog!s2$S"1G!'.*'Yc!@gwXXn?@.

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

व्याख्या

x         % Implicitly take first input (string with three letters). Delete.
          % Gets copied into clipboard G, level 1
t         % Implicitly take second input (cell array of strings defining the
          % words). Duplicate
o         % Convert to numeric array of code points. This gives a matrix where
          % each string is on a row, right-padded with zeros
g         % Convert to logical: nonzeros become 1
!s        % Sum of each row. This gives the length of each word
2$S       % Two-input sort: this sorts the array of strings according to their
          % lengths in increasing order
"         % For each word in the sorted array
  1G      %   Push first input, say 'xyz'
  !       %   Transpose into a column vector of chars
  '.*'Yc  %   Concatenate this string on each row
  !       %   Transpose. This gives a char array which, when linearized in
          %   column-major order, corresponds to 'x.*y.*z.*'
  @g      %   Push corrent word
  w       %   Swap
  XX      %   Regexp matching. Gives a cell array with substrings that match
          %   the pattern 'x.*y.*z.*'
  n       %   Number of matchings
  ?       %   If non-zero
    @     %     Push cell array with current word, to be displayed as output
    .     %     Break loop
          %   Implicit end (if)
          % Implicit end (for)
          % Implicitly display stack

6

PHP , 111 बाइट्स

$y=array_map(str_split,preg_grep("#".chunk_split($_GET[1],1,".*")."#",$_GET[0]));sort($y);echo join($y[0]??[]);

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


2
नंबर प्लेट एक स्ट्रिंग होनी चाहिए, एक सरणी नहीं। लेकिन आपको संशोधक की आवश्यकता नहीं है।
टाइटस

@ टिट्स तय !!
जोर्ग हल्सरमैन

You can suppose the case will always be the same in both the word list and the three consonants.- रेगेक्स संशोधक की कोई आवश्यकता नहीं है। क्या आपने wordwrapइसके बजाय कोशिश की है join(str_split())?
टाइटस

@ टिट्स अच्छा विचार
जॉर्ग ह्यूल्सरमैन

5

जेली ,  12 11  10 बाइट्स

ŒPċðÐfLÞḣ1

एक पूरा कार्यक्रम जो लोअरकेस वर्णों की सूची (शब्द) और लोअरकेस वर्णों की सूची (अक्षर) को स्वीकार करता है और सबसे छोटे शब्दों में से पहला प्रिंट करता है जिसमें अक्षरों के बराबर एक उप-अनुक्रम होता है (या कुछ भी नहीं होने पर कुछ भी नहीं )।

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

कैसे?

ŒPċðÐfLÞḣ1 - Main link: words; characters
   ðÐf     - filter keep words for which this is truthy:
ŒP         -   the power-set (all sub-sequences of the word in question)
  ċ        -   count (how many times the list of characters appears)
           - ...note 0 is falsey while 1, 2, 3, ... are truthy
       Þ   - sort by:
      L    -  length
        ḣ1 - head to index 1 (would use Ḣ but it yields 0 for empty lists)
           - implicit print (smashes together the list of lists (of length 1))

1
अगर मैं आपकी व्याख्या को सही ढंग से समझूं, तो यह "ब्रो" के व्यंजन के अनुक्रम के लिए "बोरोचो" जैसे शब्द को अस्वीकार कर देगा, क्योंकि "ब्रक" "ब्रुक" का एक विकल्प नहीं है
लियो

@ लियो आह, हाँ अच्छा कैच मुझे लगता है कि यह विफल हो जाएगा ...
जोनाथन एलन

@ लियो - अच्छी तरह से यह तय है (प्रत्येक शब्द के पूरे पावर-सेट के लिए चेक मौजूद है) लेकिन यह पूरी तरह से गोल्फ नहीं हो सकता है ...
जोनाथन एलन

5

पायथ - 22 21 19 12 11 बाइट्स

h+f/yTQlDEk

-1 माल्टीसेन को धन्यवाद।

इनपुट के रूप में 2 लाइनें लेता है। 1 3-अक्षर स्ट्रिंग (लोअरकेस) है, और दूसरा शब्दों की एक लोअरकेस सूची है।

इसे यहाँ आज़माएँ

स्पष्टीकरण:

h+f/yTQlDEk
       lDE   # Sort word list by length
  f          # Filter elements T of the word list...
    yT       # by taking the powerset...
   /  Q      # and checking whether the 3-letter string Q is an element of that.
 +        k  # Add empty string to the list (in case no results found)
h            # And take the first result (the shortest)

पुराना 19-बाइट समाधान:

h+olNf/-T"aeiou"QEk                       

@JonathanAllan: फिक्स्ड! यह बात बताने के लिए धन्यवाद।
मारिया

1
@JonathanAllan: ऐसा लगता है कि उन्होंने इस सवाल को स्पष्ट करने के लिए संपादित किया कि यह उस मामले में एक खाली स्ट्रिंग लौटना चाहिए। मैंने उसी के अनुसार अपना उत्तर संपादित किया है।
मारिया

1
हमारे पास D में एक सॉर्ट मेटा ऑपरेटर है, इसलिए u olN को lD से बदल सकता है
Maltysen

5

Brachylog v2, 11 बाइट्स

tlᵒ∋.&h⊆.∨Ẹ

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

कार्य प्रस्तुत करना। (TIO लिंक में फ़ंक्शन चलाने के लिए कमांड-लाइन तर्क है जैसे कि यह एक पूर्ण कार्यक्रम था।)

व्याख्या

बस फिर से विनिर्देशन का सीधा अनुवाद…

tlᵒ∋.&h⊆.∨Ẹ
t            The last element of {standard input}
   ∋.        contains the return value as an element
     &       and
      h      the first element of {standard input}
       ⊆.    is a subsequence of the return value
         ∨   alternate behaviour if no solution is found:
          Ẹ  return empty string
  ᵒ          tiebreak override: favour answers that have a low
 l           length

आप वास्तव में लगभग उत्तर दे सकते हैं h⊆.&t∋- मूल्यांकन आदेश को स्वैप करने का मतलब है कि ब्रेकीलॉग डिफ़ॉल्ट रूप से सबसे छोटा उत्तर चुनेगा (जैसा कि यह पहली बाधा देखता है , जो कि डिफ़ॉल्ट टाईब्रेक के रूप में बल्कि सुविधाजनक "सबसे छोटा" है) - लेकिन उस मामले में, ब्रेकीग्लॉट मूल्यांकन एल्गोरिथ्म दुर्भाग्य से एक अनंत लूप में जाएगा यदि उत्तर वास्तव में नहीं मिला है। तो लगभग आधा जवाब कोई उपयुक्त जवाब नहीं होने के मामले को संभालने के लिए समर्पित है। फिर भी, lᵒटाईब्रेक ओवरराइड (जो तकनीकी रूप से एक प्रकार है, का उपयोग करता हैसूची के प्रारंभ में पासिंग तत्वों को डिफ़ॉल्ट रूप से फैलाना) केवल दो बाइट्स हैं; अन्य तीन एक खाली स्ट्रिंग को आउटपुट करने की आवश्यकता से आते हैं, विशेष रूप से जब आउटपुट नहीं मिलता है, जैसा कि ब्रैचीलॉग के डिफ़ॉल्ट "नो सोल्यूशंस" प्रहरी मूल्य के विपरीत .होता है (क्योंकि अंतिम का अर्थ होगा यदि हमें इसके साथ पालन नहीं करना था )।

दिलचस्प बात यह है कि, एक ऐसी सुविधा है जिसे पहले ब्रेकीलॉग में लागू किया गया था जिसने यहां एक बाइट को बचाया होगा। एक बिंदु पर, आप का उपयोग कर इनपुट तर्क से तत्वों निकाल सकते ?₁, ?₂आदि वाक्य रचना; यह आपको कार्यक्रम को फिर से व्यवस्थित करने की अनुमति देगा tlᵒ∋.⊇?₁∨Ẹ, जो केवल 10 बाइट्स है। दुर्भाग्य से, जो कार्यान्वयन किया गया था वह वास्तव में काम नहीं करता था (और कई अन्यथा काम करने वाले कार्यक्रमों को तोड़ने का कारण बना), इसलिए इसे वापस कर दिया गया था। आप कार्यक्रम को "वैचारिक रूप से" 10 बाइट्स लंबे होने के रूप में सोच सकते हैं।


4

हास्केल 129 125 74 बाइट्स

import Data.List
l#w=sortOn length[p|p<-w,isInfixOf l$filter(`elem`l)p]!!0

CREDIT से @nimi


1
आप सबसे सही mapऔर filterएक सूची समझ के साथ बदल सकते हैं । जैसा कि आपके पास पहले से ही Data.Listगुंजाइश है, आप sortOn lengthन्यूनतम लंबाई वाले तत्व को खोजने के लिए सिर का उपयोग कर सकते हैं और चुन सकते हैं । अंत में, yएक इन्फिक्स फ़ंक्शन करें। यह सब बनाता है fऔर kज़रूरत से ज़्यादा: l#w=sortOn length[p|p<-w,isInfixOf l$filter(`elem`l)p]!!0
नमि

आप सही हे! मैंने अभी गोल्फ शुरू किया है! धन्यवाद!
डेविड स्पैत्रो

1
एक और: यदि आप करने के लिए आयात स्विच Data.Lists, आप उपयोग कर सकते हैं argminके बजाय sortOnऔर बचाने !!0: l#w=argmin length[...]Data.Listsहै कई अच्छे कार्यों
nimi

3

पर्ल, 53 बाइट्स

48 बाइट्स कोड + 5 के लिए -paF

$"=".*";($_)=sort{$a=~y///c-length$b}grep/@F/,<>

यह इस तथ्य का लाभ उठाता है कि m//ऑपरेटर में सूचीबद्ध सूचियाँ उस $"चर का उपयोग करती हैं जो प्रारंभिक इनपुट स्ट्रिंग को बदलता psrहै p.*s.*rजिससे फिर प्रत्येक अतिरिक्त शब्द के लिए मिलान किया जाता है और उस पर हल किया जाता है length

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


अगर मैं आपकी सूची में "adsd" सम्मिलित करता हूं, तो आपका प्रोग्राम इसे खोजने में विफल रहता है। खोजने के लिए पहला वर्ण शब्द में पहला होने की आवश्यकता नहीं है।
चार्ली

@CarlosAlejo इनपुट को एक अनुगामी न्यूलाइन की आवश्यकता है, फिर ठीक काम करता है: इसे ऑनलाइन आज़माएं! । हालांकि, गार्ड ने मुझे पकड़ लिया, जैसा कि <<<ऑपरेटर ने कहा कि मेरे लिए कमांड लाइन में!
डोम हेस्टिंग्स

3

जावास्क्रिप्ट (ईएस 6), 77 75 72 बाइट्स

3 व्यंजन cऔर lकरी वाक्य रचना में शब्दों की सूची लेता है (c)(l)। एक ही मामले में दोनों इनपुट अपेक्षित हैं।

c=>l=>l.map(w=>x=!w.match([...c].join`.*`)||!x[w.length]&&x?x:w,x='')&&x

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


c=>l=>l.sort((a,b)=>a[b.length]&&1).find(w=>w.match(c.split``.join`.*`))72 के लिए, मुझे लगता है
लार्स

@LarsW वास्तव में, धन्यवाद! हालाँकि मैंने नए नियम का पालन करने के लिए एक और तरीका चुना है: या एक खाली स्ट्रिंग यदि कोई शब्द तीन व्यंजन के पैटर्न से मेल नहीं खाता है
अरनुलद

3

आर, 101 बाइट्स

पहली बार गोल्फ! मुझे यकीन है कि यह किसी भी तरह से संघनित हो सकता है

स्ट्रिंग एक्स और संभावित इनपुट के एक चरित्र वेक्टर वाई लेता है

w=pryr::f((b=y[sapply(gsub(paste('[^',x,']'),'',y),function(l)regexpr(x,l))>0])[which.min(nchar(b))])

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

संपादित करें: मेरा संस्करण 135 था, -34 के लिए स्क्रूबल धन्यवाद!


1
PPCG में आपका स्वागत है! यह एक स्निपेट की तरह दिखता है जहां इनपुट हार्डकोडेड वेरिएबल्स में होता है। उत्तर पूर्ण कार्यक्रमों या कॉल करने योग्य कार्यों के लिए होना चाहिए। संभव I / O विधियों के लिए आप इस (या अन्य R उत्तरों) पर एक नज़र डाल सकते हैं ।
मार्टिन एंडर

2

रेटिना , 58 बाइट्स

O#$^`¶.+
$.&
s`^((.)(.)(.).*¶(?-s:(.*\2.*\3.*\4.*)))?.*
$5

इसे ऑनलाइन आज़माएं! एक पंक्ति पर तीन व्यंजन और फिर बाद की सभी पंक्तियों पर शब्दों की सूची बनाता है। स्पष्टीकरण: पहली पंक्ति को लंबाई के आधार पर संख्यात्मक Oरूप से की गई सूची ¶.+को छोड़कर । एक मैच फिर एक पंक्ति के लिए मांगा जाता है जिसमें तीन व्यंजन सम्मिलित होते हैं। यदि अंतिम से छोटी रेखा अर्थात सबसे छोटी लाइन मौजूद है, तो ऐसी लाइन आउटपुट बन जाती है, अन्यथा आउटपुट खाली हो जाता है। अस्थायी रूप से के प्रभाव बंद हो जाती है तो यह है कि केवल एक ही लाइन मिलान किया जाता है।#$$.&?-s:s`


1
मैं तय नहीं कर सकता कि क्या वे तीन पेट बटन या तीन स्तन हैं।
चार्ली

@CarlosAlejo क्या आप किसी भी मौके से एक्सेन्ट्रिक गैलम्बिट्स के बारे में सोच रहे हैं?
नील

मैं टोटल रिकॉल से एलियन के बारे में सोच रहा था, लेकिन एक्सेन्ट्रिक भी एक विकल्प हो सकता है ... :)
चार्ली

2
@CarlosAlejo जाहिर तौर पर मैरी एक्सेन्ट्रिक गैलम्बिट्स के प्रति श्रद्धांजलि है।
नील

1

पिप , 17 बाइट्स

@:qJ`.*`N_FI#_SKg

शब्द सूची को कमांड-लाइन तर्कों और स्टैडॉन के व्यंजन के रूप में लेता है। इसे ऑनलाइन आज़माएं!

व्याख्या

                   g is list of cmdline args (implicit)
              SKg  Sort g using this key function:
            #_      Length of each item (puts shortest words first)
          FI       Filter on this function:
  q                 Line of input
   J`.*`            joined on regex .* (turns "psr" into `p.*s.*r`)
        N_          Count regex matches in item (keeps only words that match)
@:                 Get first element of result (using : meta-operator to lower precedence)
                   If the list is empty, this will give nil, which results in empty output

1

जावा 8, 132 126 बाइट्स

s->a->{String r="";for(String x:a)r=(x.length()<r.length()|r.isEmpty())&x.matches(r.format(".*%s.*%s.*%s.*",s))?x:r;return r;}

-6 के लिए धन्यवाद बाइट्स @Nevay

स्पष्टीकरण:

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

s->a->{              // Method with two String-array parameters and String return-type
  String r="";       //  Result-String, starting empty
  for(String x:a)    //  Loop over the words
    r=(x.length()<r.length()
                     //   If a word is smaller than the current `r`,
      |r.isEmpty())  //   or `r` is still empty
      &x.matches(r.format(".*%s.*%s.*%s.*",s))?
                     //   And if the word is valid
       x             //    Change `r` to the current word
      :              //   Else:
       r;            //    Leave `r` the same
  return r;}         //  Return the result

1
126 बाइट्स:s->a->{String r="";for(String x:a)r=(x.length()<r.length()|r.isEmpty())&x.matches(r.format(".*%s.*%s.*%s.*",s))?x:r;return r;}
नेवय


0

MATL , 28 27 26 बाइट्स

x"l1G@g3XNXm/@gn*v]&X<2Gw)

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

x- पहले से इनपुट (तीन अक्षरों वाला स्ट्रिंग) लें और इसे हटा दें। क्लिपबोर्ड जी में स्तर 1 में स्वचालित रूप से कॉपी किया जाता है (यह हिस्सा @Luis मेंडो के जवाब से प्रेरित था )।

" - इसके माध्यम से इम्प्लांटली दूसरा इनपुट (शब्दों का सेल एरे) लें।

l - बाद में उपयोग करने के लिए 1 पुश

1G - पहला इनपुट पुश करें ('psr' कहें)

@g - वर्तमान शब्द को सरणी के रूप में पुश करें

3XN- nchoosek- शब्द से 3 अक्षरों के सभी संयोजन प्राप्त करें

Xm- देखें कि क्या लाइसेंस प्लेट कोड 'psr' इन संयोजनों में से एक है। झूठे के लिए 0 और सच्चे के लिए 1 रिटर्न देता है।

/- इस परिणाम से 1 (जो हमने पहले धकेल दिया) को विभाजित किया। को 0s परिवर्तन Infरों

@gn - वर्तमान शब्द की लंबाई प्राप्त करें

*- विभाजन परिणाम से लंबाई गुणा करें। लंबाई तब वापस आती है, जब शब्द में 3 वर्ण हों, अन्यथा वापस लौटता हैInf

v - लंबवत रूप से इन परिणामों को एक ही सरणी में बदल दें

] - संवृत पाश

&X< - उस एरे से न्यूनतम मान का इंडेक्स प्राप्त करें अर्थात वह इंडेक्स जिसमें अक्षरों और न्यूनतम लंबाई वाले शब्द पाए गए

2G - दूसरा इनपुट फिर से पुश करें

w - स्टैक के शीर्ष पर न्यूनतम सूचकांक वापस लाएं

) - न्यूनतम इंडेक्स के साथ मान्य शब्द को वापस करते हुए, न्यूनतम सूचकांक के साथ शब्दों की सूची में सूचकांक

(निहित उत्पादन।)


पुराने:

x"@g1Gy3XNXm1w/wn*v]&X<2Gw)

x"@g1Gy3XNXm1w/wn*v]2Gw2$S1)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.