এটি কি ওয়ার্ডিনিয়ান?


20

কোনও ইনপুট কোনও প্রোগ্রামিং ভাষা ব্যবহার করে ওয়ার্ডিনিয়ান হয় কিনা তা দেখার সবচেয়ে সংক্ষিপ্ততম উপায় কী?

ওয়ার্ডিনিয়ান এমন একটি শব্দ যা মূল শব্দের দৈর্ঘ্য 1 থেকে দৈর্ঘ্যের শব্দ ধারণ করে। উদাহরণ স্বরূপ,

বিন

'আমি' একটি শব্দ
'ইন' একটি শব্দ
'বিন' একটি শব্দ

অথবা,

পর্যায়

'ক' একটি শব্দ
'তা' একটি শব্দ ( হ্যাঁ এটি )
'বয়স' একটি শব্দ
'স্ট্যাগ' একটি শব্দ
'স্টেজ' একটি শব্দ

ইনপুট

আপনার কোডটি কোনও যুক্তিসঙ্গত বিন্যাসে ইনপুট হিসাবে একটি শব্দ এবং অভিধান নিতে হবে।

আউটপুট

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

শব্দবিদদের আরও তথ্যের জন্য এখানে ক্লিক করুন

শব্দের একটি তালিকা যা আমি ইনপুট এবং সাবওয়ার্ড হিসাবে ব্যবহার করব। এছাড়াও, @ xnor এর প্রতিক্রিয়া হিসাবে, এতে প্রতিটি দৈর্ঘ্যের সাবওয়ার্ড থাকতে হবে, সাব-ওয়ার্ডের শৃঙ্খল নয়। নোট করুন যে কেবল একটি শব্দ ইনপুট হিসাবে ব্যবহৃত হবে।


@ ফ্রাইআম দ্য এজিগম্যান আমি এখানে একটি সম্পূর্ণ অভিধান রাখতে পারি না। যদি এটি কোন শব্দ বিদ্যমান আছে?
জ্যাক মারাইস

6
আমি ইনপুট হিসাবে অভিধানে পাস করার পরামর্শ দিই। এইভাবে, পরীক্ষার মামলাগুলি সামনে আসা সহজ (যেমন আপনি নিজের ছোট্ট অভিধান তৈরি করতে পারেন)
নাথান মেরিল

2
এটিতে কেবল প্রতিটি দৈর্ঘ্যের সাবওয়ার্ড থাকতে হবে, বা এগুলি কি একটি শৃঙ্খল হতে হবে যেখানে প্রতিটি সাবওয়ার্ড আগেরটিতে একটি বর্ণ যুক্ত করে?
xnor

@ ফ্রাইআম দ্য এজিগম্যান আমি সমস্ত প্রশ্নের একটি তালিকা সরবরাহ করার জন্য আমার প্রশ্নটি সম্পাদনা করেছি ited
জ্যাক মারাইস

1
@ জ্যাক্কস মারাইসের ধারণাটি একটি শব্দ এবং অভিধান নেওয়া এবং সত্যটি প্রত্যাবর্তন করা উচিত যদি শব্দটি শব্দভাণ্ডারের (অভিধান অনুসারে) থাকে
নাথান মেরিল

উত্তর:


4

পাইথ, 20 16 15 13 11 বাইট

4 বাইট বাঁচানোর জন্য লিকি নুনকে ধন্যবাদ! দুর্ভাগ্যক্রমে, আমি পরে পুরো পদ্ধতিটি পরিবর্তন করেছি, তবে এটি এখনও সহায়তা করে।

gl{lM}#zQlz

শব্দ অনুসারে অভিধান হিসাবে ইনপুট আশা করে। আউটপুটস সত্য বা মিথ্যা।

এখানে চেষ্টা করুন!

ব্যাখ্যা:

        lz   Collects the length of the word  input
g             and compares it to:
 l             The length of the following:
     # Q        Select all words from the dictionary that
    } z         are contained within the input word.
  lM            Map them to their respective lengths, and
 {              then remove any duplicates.

খালি স্ট্রিংটি ""একটি বৈধ শব্দ হলে এটি কাজ করে না ।


1
.Eএর সাথে প্রতিস্থাপন করা যেতে পারেs
লিকি নুন

1
m}kHএর সাথে প্রতিস্থাপন করা যেতে পারে}RH
লিকি নুন

1
আমি আপনাকে কেবল গল্ফড কোডটি
Leaky Nun

11

পাইথন, 52 বাইট

lambda w,d:len({len(x)for x in d if x in w})==len(w)

একটি বেনাম ফাংশন যা একটি শব্দ wএবং অভিধান নেয় d। এতে dযে শব্দগুলি সাবস্ট্রিংগুলি হয় সেগুলি wতাদের দৈর্ঘ্যের একটি সেট তৈরি করে এবং তারপরে অক্ষরে অক্ষরে অক্ষরে অক্ষর রয়েছে কিনা তা পরীক্ষা করে দেখায় w


উঘ আমি ঠিক ঠিক একই জিনিসটি লিখেছিলাম কেবলমাত্র আমার x এর পরিবর্তে ডাব্লু এবং [{এর পরিবর্তে { +1
ড্যানিয়েল

@ ডপপ্প আপনি যদি [পরিবর্তে ব্যবহার করেন তবে এটি কাজ করবে না {{...}একটি সেট বোঝা (একই হিসাবে set([...])) same
mbomb007

@ mbomb007, ঠিক আছে, একটি সেট প্রয়োজন হবে
ড্যানিয়েল

@ এক্সনর এই উত্তরটি নির্বাচন না করার জন্য দুঃখিত, তবে এটি একটি কোড গল্ফ হিসাবে, আমাকে সবচেয়ে সংক্ষিপ্ততম নির্বাচন করতে হবে ...
জ্যাক

4

পাইথন 3, 108 বাইট

lambda w,d,r=range:all(any(i in d for i in j)for j in[[w[i:i+s]for i in r(len(w)+1-s)]for s in r(1,len(w))])

নাম প্রকাশে অনিচ্ছুক একজন ফাংশন যা একটি শব্দ আর্গুমেন্ট মাধ্যমে ইনপুট নেয়, wএকটি স্ট্রিং এবং একটি অভিধান হিসাবে dস্ট্রিং এবং আয় একটি তালিকা হিসাবে Trueবা False

কিভাবে এটা কাজ করে

প্রথম পদক্ষেপটি এমন একটি তালিকা উপলব্ধি যা দৈর্ঘ্য অনুসারে শ্রেণিবদ্ধ wবাদে সমস্ত সাবস্ট্রিংয়ের তালিকার একটি তালিকা তৈরি wকরে। উদাহরণস্বরূপ, জন্য 'stage', তালিকা [['s', 't', 'a', 'g', 'e'], ['st', 'ta', 'ag', 'ge'], ['sta', 'tag', 'age'], ['stag', 'tage']]তৈরি করা হয়। iপ্রতিটি স্ট্রিংয়ের দৈর্ঘ্যের জন্য সমস্ত বৈধ প্রারম্ভিক সূচকগুলি লুপিং করে এবং প্রতিটি দৈর্ঘ্যের সাবস্ট্রিং ব্যবহার sকরে sটুকরো টুকরো করে অর্জন করা যায় w[i:i+s]। এই তালিকার প্রতিটি তালিকার জন্য অভিধানে প্রতিটি সাবস্ট্রিংয়ের উপস্থিতি পরীক্ষা করা হয়েছে; anyপ্রদত্ত দৈর্ঘ্যের জন্য কমপক্ষে একটি ম্যাচ পাওয়া গেলে কলিং হিট দেয়। সবশেষে, allসমস্ত স্ট্রিংয়ের দৈর্ঘ্যের জন্য কোনও মিল খুঁজে পাওয়া যায় কিনা তা চেক করে কল করা এবং এর ফলাফলটি ফিরে আসে।

আইডিয়নে চেষ্টা করে দেখুন


4

রুবি, 44 বাইট

  • 7 নটথ চার্চস এবং তার সেট অপারেটর ট্রিকসকে ধন্যবাদ বাইটস অফ করুন!
  • রুবি ২.৩ নিরাপদ নেভিগেশন অপারেটর ট্রিক সহ @ জর্দানকে ধন্যবাদ জানায় 2 বাইট w[x]&.size:)
->w,d{[*1..w.size]-d.map{|x|w[x]&.size}==[]}

এটি একটি বেনাম ফাংশন যা একটি শব্দ wএবং অভিধান গ্রহণ করে (শব্দের অ্যারে) d। দুটি অ্যারে তৈরি করে: প্রথমটিতে 1 নম্বর পর্যন্ত এবং এর দৈর্ঘ্য সহ w; দ্বিতীয় অ্যারে হ'ল dপ্রতিটি শব্দের সাথে তাদের আকারে ম্যাপ করা থাকে যদি সেগুলি wঅন্যথায় থাকে তবে এটির একটি সাবস্ট্রিং nil। তারপরে এটি দ্বিতীয় অ্যারেতে প্রথম অ্যারের সমস্ত উপাদান রয়েছে কিনা তা পরীক্ষা করতে বিয়োগ বিস্তৃত করে।


1
রুবি ২.৩ এ "নিরাপদ নেভিগেশন অপারেটর" এর সাহায্যে আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন: w[x]&.size==iপরিবর্তে x.size==i&&w[x]
জর্দান

ওহ, ধন্যবাদ @ জর্দান
অদ্ভুত

1
আপনি আপনার বেনামে ফাংশনটিতে (এবং সম্ভবত পুরো প্রোগ্রামটি) আরও কয়েকটি বাইট সংরক্ষণ করতে পারেন uniqএবং -[p]বাদ দিয়ে সেট বিয়োগফল ব্যবহার করে:[*1..w.size]-d.map{...}==[]
চার্লস নয়

পছন্দ করুন ধন্যবাদ :)
ডানিরো

3

পাওয়ারশেল v3 + v2 +, 127 110 70 65 বাইট

param($a,$d)($d|?{$a-match$_}|select length -U).count-eq$a.length

(আমি এখন দেখতে পাচ্ছি যে আমার পদ্ধতি @ xnor এর মতো, যদিও আমি এটি স্বাধীনভাবে তৈরি করেছি)

অ্যারে হিসাবে প্রত্যাশা করে ইনপুট শব্দ $aএবং অভিধান নেয় (নীচের উদাহরণগুলি দেখুন)। সম্পূর্ণতা মাধ্যমে loops এবং সঞ্চালিত একটি এন্ট্রি যেখানে বর্তমান শব্দ উঠিয়ে ফেলা একটি Regex হয় ইনপুট শব্দ বিরুদ্ধে (অর্থাত, বর্তমান শব্দ ইনপুট শব্দের একটি সাবস্ট্রিং যায়)।$d$d$dWhere-Object$_-match$a

আমরা সেই সাবস্ট্রিং শব্দ এবং তাদের পাইপের সব সংগ্রহ Select-Objectউপর lengthপরামিতি এবং -Unique বাধ্যতা। এটি প্রতিটি স্ট্রিংয়ের অনন্য দৈর্ঘ্য টেনে আনবে। উদাহরণ হিসেবে বলা যায়, ইনপুট শব্দের জন্য comb, এই একটি অ্যারের হবে (4,2)জন্য ('comb','om')

আমরা .countসেই ফলাফলের অ্যারেটি গ্রহণ করি এবং এটি ইনপুট শব্দের সাথে তুলনা করি .length। যদি এটির সমান হয় তবে এর অর্থ হ'ল প্রতিটি স্ট্রিংয়ের দৈর্ঘ্য অভিধানে রয়েছে, সুতরাং $TRUE, অন্যথায় আমরা কমপক্ষে একটি অনুপস্থিত $FALSE। সেই বুলিয়ান মানটি পাইপলাইনে রেখে গেছে এবং আউটপুট অন্তর্ভুক্ত।

এনবি - এটি v2 + এ কাজ করা উচিত , যেহেতু -inঅপারেটর আর উপস্থিত নেই, তবে আমি সেই সংস্করণটি পরীক্ষা করে দেখিনি।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\is-it-a-wordinian.ps1 'stage' (gc .\words.txt)
True

PS C:\Tools\Scripts\golfing> .\is-it-a-wordinian.ps1 'metal' (gc .\words.txt)
True

PS C:\Tools\Scripts\golfing> .\is-it-a-wordinian.ps1 'comb' (gc .\words.txt)
False

2

পার্ল, 86 বাইট

-Eকোনও অতিরিক্ত ব্যয় ছাড়াই প্রয়োজন ।

chop(($s,@d)=<>);for$=(1..($x=length$s)){$-+=!!grep$s=~/$_/,grep$===y///c,@d}say$-==$x

STDIN এর মাধ্যমে সমস্ত ইনপুট গ্রহণ করে। প্রথম ইনপুট হ'ল লক্ষ্য শব্দ, বাকী ইনপুট অভিধান। 1সাফল্যের উপর মুদ্রণ , ব্যর্থতার ফাঁকা স্ট্রিং।

ব্যবহার

perl -E 'chomp(($s,@d)=<>);for$=(1..($x=length$s)){$-+=!!grep$s=~/$_/,grep$===y///c,@d}say$-==$x' <<< 'stage
a
ta
age
stag
stage'
1
perl -E 'chomp(($s,@d)=<>);for$=(1..($x=length$s)){$-+=!!grep$s=~/$_/,grep$===y///c,@d}say$-==$x' <<< 'stage
a
at
age
stag
stage'

perl -E 'chomp(($s,@d)=<>);for$=(1..($x=length$s)){$-+=!!grep$s=~/$_/,grep$===y///c,@d}say$-==$x' <<< 'bin
i
in
bin'
1

2

গণিত, 90 বাইট

Sort[MemberQ[DictionaryWordQ/@StringPartition[#,t,1],True]~Table~{t,StringLength@#}][[1]]&

ম্যাথমেটিকার বিল্টিন ব্যবহার করে DictionaryWordQ

dঅভিধান হিসাবে ইনপুট নেওয়া 5 বাইট ছোট, তবে দীর্ঘ তালিকার জন্য খুব ধীর:

m=MemberQ;Sort[m[d~m~#&/@StringPartition[#,t,1],True]~Table~{t,StringLength@#}][[1]]&

2

এমএটিএল , 15 বাইট

@ Xnor এর উত্তর থেকে একটি ধারণা ব্যবহার করে 1 বাইট সংরক্ষণ করা হয়েছে ।

XXgc32>!suz1Gn=

ফলাফল 1বা 0সত্যবাদী বা মিথ্যা জন্য।

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

XX      % Take the two inputs implicitly. Apply the second as a regex into the
        % first. Since the second input is a cell array, each of its contents is
        % applied separately as a regex. So for each dictionary word ("sub-word") 
        % this outputs the sub-word if found in the original word, or else an 
        % empty array. Gives a cell array of cells of strings
g       % Remove one level of nestedness
c       % Convert to char. This concatenates all found sub-words as rows of a 2D 
        % char array, padding with spaces as needed
32>!s   % For each row, count how many non-space characters there are. This is 
        % the length of each sub-word
uz      % Number of distinct non-zero elements
1Gn     % Push length of the original word
=       % Are they equal? Implicitly display

1

পার্ল, 42 41 বাইট

জন্য +2 অন্তর্ভুক্ত -p0

অভিধানের পরে এসটিডিনে শব্দটি দিন:

(echo stage; cat dictionary.txt) | ./wordinian.pl

(ইউনিক্সে পরীক্ষা করার সময় ডিকশনারিটি \nলাইন টার্মিনেটর হিসাবে ব্যবহার করে , তা নিশ্চিত করুন \r\n)

wordinian.pl:

#!/usr/bin/perl -p0
s%\G.%!/^.*(.{$+[0]})\H*
\1
/%eg;$_=!//

1

জাভাস্ক্রিপ্ট (ফায়ারফক্স 30-57), 68 বাইট

(w,a)=>new Set((for(x of a)if(~w.search(x))x.length)).size==w.length

একটি জেনারেটর উপলব্ধি ব্যবহার করে একটি মধ্যবর্তী অ্যারে তৈরি করা এড়ানো হয়। 73 বাইট ES6 সংস্করণ:

(w,a)=>new Set(a.filter(x=>~w.search(x)).map(x=>x.length)).size==w.length

1

05 এ বি 1 ই , 8 বাইট

ŒÃ€gZLåP

প্রথম ইনপুট হিসাবে শব্দ, দ্বিতীয় ইনপুট হিসাবে অভিধান-তালিকা।

এটি অনলাইনে চেষ্টা করুন বা আরও কয়েকটি পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

Π        # Get all possible substrings of the (implicit) input-string
 Ã        # Only keep the ones which are also in the (implicit) dictionary-list
  g      # Get the length of each remaining string
    Z     # Push the maximum length (without popping the list)
     L    # Pop and push a list in the range [1, maximum-length]
      å   # Check for each value if it's in the list of lengths
       P  # And check if this is truthy for all
          # (then output the result implicitly as result)


0

এসকিউএফ , 147 বাইট

ফাইল হিসাবে ফাংশন হিসাবে ব্যবহার:

params["w","d"];a=[];c=count w;for"i"from 1 to c do{a=a+[""];for"j"from 0 to c-i do{q=w select[j,i];if(q in d)then{a set[i-1,q]}}};c==count(a-[""])

যেমন কল করুন: ["WORD", DICTIONARY] call NAME_OF_COMPILED_FUNCTION

Ungolfed:

//name parameters
params["w", "d"];
a = []; c = count w;
//for each length of subword
for "i" from 1 to c do {
    //add entry to the `a`
    a = a + [""];
    //for each starting position for that length
    for "j" from 0 to c - i do {
        //get subword
        q = w select [j, i];
        //check if in dictionary
        if(q in d) then {
            //set the entry to the wubword
            a set [i - 1, q]
        }
    }
};
//check if length of word is equal to number of subwords
c == count (a - [""])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.