আপনি এই পাশা দিয়ে এই শব্দ বানান করতে পারেন?


20

শব্দ গেমগুলিতে চিঠি পাশা সাধারণ। উদাহরণস্বরূপ বগল ডাইস সহ মজাদার শব্দগুলির বানান চেষ্টা করে মজাদার হতে পারে। আপনি যদি এক মুঠো ডাইস ধরে থাকেন তবে সম্ভাবনা রয়েছে যে আপনি কিছু শব্দ বানান করতে পারবেন না। এই চ্যালেঞ্জটি সেই ধারণার একটি সাধারণীকরণ।

চ্যালেঞ্জ

প্রত্যেকের কমপক্ষে 1 টি মুখ এবং একটি শব্দ রয়েছে এমন ডাইসের একটি তালিকা দেওয়া আপনার দেওয়া কাজটি নির্ধারণ করা হয় যে প্রদত্ত পাশা ব্যবহার করে সেই শব্দটির বানান করা সম্ভব কিনা (যার ক্ষেত্রে এটি সত্যবাদী ফলাফলটি ফিরিয়ে আনবে)। প্রতিটি ডাই থেকে কেবল একটি চিঠি ব্যবহার করা যেতে পারে এবং একটি ডাই কেবল একবার ব্যবহার করা যেতে পারে। আপনাকে প্রদত্ত সমস্ত পাশা ব্যবহার করার দরকার নেই।

উদাহরণ

তুচ্ছ উদাহরণে, পাশা [[এ], [সি], [টি]] এবং স্ট্রিং সিএটি সহ ফলাফলটি সত্য। বিএটি অবশ্যই মিথ্যা প্রত্যাবর্তন করবে যেহেতু তাদের সাথে বি এর সাথে কোনও ডাইস নেই

যদি [[A, E, I, O, U], [A, B, C, T], [N, P, R]] ডাইসের সেট হিসাবে দেওয়া হয়, আপনি ART, TON, এবং CUR এর জন্য সত্য হিসাবে ফিরে আসবেন , তবে ক্যাট, ইএটি এবং প্যানের জন্য মিথ্যা কারণ এই স্ট্রিংগুলির জন্য ডাইস পুনরায় ব্যবহার করা দরকার। এটিও মোটামুটি স্পষ্ট হওয়া উচিত যে যথেষ্ট ডাইস না থাকায় এই ডাইসগুলির সাথে সিআরএবি বানান করা যাবে না।

যদি [[এ, বি, সি], [এ, ই, আই], [ই, ও, ইউ], [এল, এন, আর, এস, টি]] পাশের সেট হিসাবে দেওয়া হয় তবে আপনি সক্ষম হবেন বিড়াল বিড়াল, বিই, বিয়ান, টিইএ, বিইটি, এবং বান বানান, তবে আপনি LONE, CAB, BAIL, TAIL, BAA, বা TON বানান করতে পারবেন না

একই ডাই এর বহুগুণ হতে পারে। যদি [[এ, বি, সি], [এ, বি, সি], [এ, বি, সি]] দেওয়া থাকে তবে আপনি সিএবি, বিএএ, এএএ, ইত্যাদি বানান করতে সক্ষম হবেন ... তবে স্পষ্টতই এ ছাড়া কিছু নয়, বি, বা এটি সি।

বিধি

  • স্ট্যান্ডার্ড ফাঁকগুলি কোনও শোষণের নয়
  • এটি , তাই সংক্ষিপ্ততম কোডটি জয়ী।
  • আপনি ধরে নিতে পারেন যে শব্দ এবং ডাইস উভয়ই কেবল মূল অক্ষর দিয়ে তৈরি হবে।
  • আপনি ধরে নিতে পারেন যে শব্দটি সর্বদা কমপক্ষে 1 বর্ণ দীর্ঘ হবে এবং সর্বদা কমপক্ষে 1 ডাই থাকবে।
  • আপনি ধরে নিতে পারেন যে একটি ডাইর একই চিঠির একের বেশি কখনও হবে না।
  • ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক বিন্যাসে থাকতে পারে।

নতুন ট্যাগ তৈরি করছেন কেন?
ব্যবহারকারী 202729

কেউ কি অক্ষরের একটি তালিকা (ভেক্টর) ইনপুট হিসাবে (পাশার অনুরূপ বিন্যাস) নিতে পারে? এমন এক বন্ধুকে জিজ্ঞাসা করুন যিনি 27 বাইট সংরক্ষণ করতে চান।
জেসি

1
@ জাসি "ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক বিন্যাসে থাকতে পারে", তাই হ্যাঁ।
গরুর মাংস

উত্তর:


12

ব্র্যাচল্যাগ , 5 বাইট

∋ᵐ⊇pc

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

আমরা পাশের জন্য ইনপুট ভেরিয়েবল এবং শব্দের জন্য আউটপুট ভেরিয়েবল ব্যবহার করি। এটা তোলে আউটপুট true.যখন এটি শব্দ এবং বানান সম্ভব false.অন্যথায়।

ব্যাখ্যা

∋ᵐ        Map element: Take one side from each die
  ⊇       Subset
   p      Permute
    c     Concatenate into a string: will only succeed if it results in the output word

8

হাস্কেল , 48 44 বাইট

import Data.List
(.mapM id).any.(null.).(\\)

এটি একটি বেনামে ফাংশন। কিছু শনাক্তকারীর কাছে fএটিকে ব্যবহার করা যায় f "ART" ["AEIOU", "ABCT", "NPR"], যা ফল দেয় Trueএটি অনলাইন চেষ্টা করুন!

বিনা পয়েন্ট সমান সমতুল্য

f word dice = any(\s -> null $ word\\s) $ mapM id dice

mapM idতালিকাগুলির তালিকার উপরে তালিকার Monadউদাহরণটি ব্যবহার করা হয় এবং অ-নিরস্তকর পছন্দ হিসাবে দেখা যায় । সুতরাং যেমন mapM id ["AB","123"]ফলন ["A1","A2","A3","B1","B2","B3"]

এই প্রতিটি পাশা সংমিশ্রণের জন্য, আমরা (\\)প্রদত্ত শব্দের সংশ্লেষের পার্থক্য এবং সংমিশ্রণটি খালি তালিকা দেয় কিনা তা পরীক্ষা করে দেখি ।


@ লুইস মেন্ডো নির্দেশ করার জন্য ধন্যবাদ! অন্য পদ্ধতিতে স্যুইচ করে স্থির করা হয়েছে যা 4 বাইট সংরক্ষণে শেষ হয়েছে।
লাইকনি

6

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

f=([c,...w],a)=>!c||a.some((d,i)=>d.match(c)&&f(w,a.filter(_=>i--)))
<div oninput=o.textContent=f(i.value,d.value.split`\n`)>
<textarea id=d rows=9>
ABC
AEI
EOU
LNRST
</textarea>
<br>
<input id=i value=BEAN>
<pre id=o>true


1
@ রিকহিচকক ব্যর্থ EEE
নিল

6

পাইথন 2 , 82 বাইট

f=lambda d,w:w==''or any(w[0]in x>0<f(d[:i]+d[i+1:],w[1:])for i,x in enumerate(d))

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

f=lambda d,w:w==''                                                                 # Base case: we can spell '' with any dice.
                  or any(                                 for i,x in enumerate(d)) # Otherwise, we check if there is some die x such that...
                         w[0]in x                                                  # the first letter is on this die,
                                 >0<                                               # and
                                    f(d[:i]+d[i+1:],w[1:])                         # we can spell the rest of the word with the rest of the dice.

তুলনা শৃঙ্খল w[0]in x>0<f(...)সমতূল্য: w[0]in x এবং x>0 এবং 0<f(...)

এর মধ্যে দ্বিতীয়টি সর্বদা সত্য ( str> int) এবং এর তৃতীয়টি সমান f(...), যাতে পুরো জিনিসটি লেখার জন্য একটি ছোট উপায় হয়w[0]in x and f(...)


5

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

সংবাহন সিনট্যাক্স ইনপুট লাগে (w)(a), যেখানে W শব্দ আমরা খুঁজছেন এবং একটি পাশা বর্ণনা স্ট্রিং একটি তালিকা রয়েছে। ফেরত পাঠায় 0 বা 1

w=>P=(a,m='')=>w.match(m)==w|a.some((w,i)=>P(a.filter(_=>i--),m+`[${w}]`))

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

মন্তব্য

আমরা পাশার প্রতিটি সাবসেট-ক্রমকে নিয়মিত অভিব্যক্তি বিন্যাসে পরিণত করি এবং লক্ষ্য শব্দের বিপরীতে তাদের পরীক্ষা করি।

w =>                        // w = target word
  P =                       // P = recursive function taking:
    (a,                     //   a[] = list of dice
        m = '') =>          //   m   = search pattern
    w.match(m) == w |       // force a truthy result if w matches m
    a.some((w, i) =>        // for each word w at position i in a[]:
      P(                    //   do a recursive call:
        a.filter(_ => i--), //     using a copy of a[] without the current element
        m + `[${w}]`        //     and adding '[w]' to the search pattern
      )                     //   end of recursive call
    )                       // end of some()

3

কাস্তে , 5 বাইট

~V`¦Π

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

অন্যথায় শূন্য শব্দের বানান করা সম্ভব হলে একটি শূন্য-মান প্রদান করে।

ব্যাখ্যা

~V`¦Π  Arguments: word [Char], dice [[Char]]
 V     Checks if any element of a list (2) satisfies a predicate (1)
~      Composes both arguments of the above function
  `¦     (1) Is the word a subset of the element?
    Π    (2) Cartesian product of the dice list

2

পার্ল 5 -plF , 48 46 বাইট

@ ডোমহাস্টিংস 2 বাইট সংরক্ষণ করেছে

$_=grep/@{[sort@F]}/,map"@{[sort/./g]}",glob<>

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

ইনপুট:

word               # The word to validate
{A,B,C}{D,E,F}     # Each die is surrounded by braces, commas between the letters

আউটপুট:

0বৈধ নয় এমন একটি শব্দের জন্য। বৈধতাযুক্ত শব্দের জন্য কোনও ধনাত্মক পূর্ণসংখ্যা

কিভাবে?

এই ব্যাখ্যাটি কোডটিকে কার্যকর করার ক্রমে দেখায়, কার্যকরভাবে এই ওয়ান-লাইনারের ডান থেকে বামে।

-F             # The first line of input is automatically split by the -F command option into the @F array.
glob<>         # Read the rest of the input and enumerate all of the permutations of it
map"@{[sort/./g]}",  # Split the permutation into separate letters, sort them and put them back together
/@{[sort@F]}/, # use the sorted letters of the target to match against
$_=grep        # check all of those permutations to see if the desired word is in them
-p             # Command line option to output the contents of $_ at the end

1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 98 বাইট

f=(s,d,u=[])=>d<1?s.every(t=>u.pop().match(t)):d.some((x,i)=>f(s,e=[...d],[...u,x],e.splice(i,1)))

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

ধরে নিচ্ছি যথেষ্ট পাশা আছে

জাভাস্ক্রিপ্ট (নোড.জেএস) , 100 বাইট

f=(s,d,u=[''])=>d<1?s.every(t=>u.pop().match(t)):d.some((x,i)=>f(s,e=[...d],[...u,x],e.splice(i,1)))

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

জাভাস্ক্রিপ্ট (নোড.জেএস) , 99 বাইট

s=>f=(d,u=[''])=>d<1?s.every(t=>u.pop().match(t)):d.some((x,i)=>f(e=[...d],[...u,x],e.splice(i,1)))

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


1

জেলি ,  10  9 বাইট

-1 এরিক দ্য আউটগোল্ফারকে ধন্যবাদ (এর wচেয়ে ẇ@> ব্যবহার করুন। <)

Œ!Œp€Ẏw€Ṁ

একটি ডায়াডিক লিঙ্ক বামে (পাশা) অক্ষরের তালিকার একটি তালিকা এবং ডানে (শব্দ) অক্ষরের একটি তালিকা গ্রহণ করে যা সম্ভব হলে 1 এবং যদি না হয় তবে 0 প্রদান করে।

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুটটি দেখুন

কিভাবে?

Œ!Œp€Ẏw€Ẹ - Link: list of lists of characters Dice, list of characters Word
Œ!        - all permutations of the dice (i.e. all ways to order the dice)
  Œp€     - Cartesian product of €ach (i.e. all ways to roll each ordering)
     Ẏ    - tighten (i.e. all ordered ways to roll the dice)
       €  - for each:
      w   -   first index (of sublist W) in the result (positive if there, 0 otherwise)
        Ẹ - any truthy? (1 if it is possible to roll the word, 0 otherwise)

দ্রুত অ্যালগরিদম (9 টি বাইট):

একই ইনপুট ফর্ম্যাট সহ একটি ডায়াডিক লিঙ্ক যা সম্ভব হলে ইতিবাচক পূর্ণসংখ্যা (সত্যবাদী) এবং অন্যথায় 0 (মিথ্যা) প্রদান করে।

Œpf€Ṣ€ċṢ} - Link: list of lists of characters Dice, list of characters Word
Œp        - Cartesian product of the dice (all rolls of the dice)
  f€      - filter keep for €ach (keep the rolled letters if they are in the word)
    Ṣ€    - sort €ach result
       Ṣ} - sort Word
      ċ   - count occurrences

1

আর , 192 185 135 117 111 109 বাইট

function(x,...)s(x)%in%apply(expand.grid(lapply(list(...),c,"")),1,s)
s=function(x)paste(sort(x),collapse="")

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

-2 অক্ষর জিউসেপিকে ধন্যবাদ জানায়।


যদি কোনও শব্দের আপনার পাশা চেয়ে কম অক্ষর থাকে তবে এটি ব্যর্থ হবে।
জিউসেপ

আমি মনে করি আপনি এটি 21 বাইট ব্যয়ে সংরক্ষণ করতে পারেন, এখানে চেষ্টা করে দেখুন
জিউস্পে

@ জিউসেপ আপনি দিনটি বাঁচিয়েছেন!
জেসি

আপনার দরকার নেইF=
জিউস্পে

0

পাইথ , 21 বাইট

.Em}eQdsm.ps.nd.U*bZh

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

ব্যাখ্যা:
.Em}eQdsm.ps.nd.U*bZhQ # Code with implicit variables
.E                     # Print whether any of
       sm.ps  d        # all positive length permutations of each element in
        m   .nd.U*bZhQ # the Cartesian product of the list of dice
  m}eQd                # contain the target word
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.