Filter words: Difference between revisions
Content added Content deleted
(Merge dictionary tasks) |
(Blanked the page) |
||
Line 1: | Line 1: | ||
{{Draft task}} |
|||
;Task |
|||
Using [https://web.archive.org/web/20180611003215/http://www.puzzlers.org/pub/wordlists/unixdict.txt unixdict.txt], |
|||
filter words in as many boring, unimaginative, and useless ways that you can think of. (tee hee) |
|||
Wherever possible use generic parameterised and potentially useful routines rather than being specific to one inane petty little task. |
|||
;Extra credit |
|||
Replace as many entries as you can in the following tasks with "<nowiki>see [[Filter_words#</nowiki><i>Lang</i><nowiki>]]</nowiki>"<br> |
|||
[[Alternade_words]]<br> |
|||
[[Prime_words]]<br> |
|||
[[ABC_words]]<br> |
|||
[[Odd_words]]<br> |
|||
[[Changeable_words]]<br> |
|||
[[Words_containing_%22the%22_substring]]<br> |
|||
[[Find_words_with_alternating_vowels_and_consonants]]<br> |
|||
[[Words_from_neighbour_ones]]<br> |
|||
[[Find_words_which_contains_more_than_3_e_vowels]]<br> |
|||
[[Find_words_which_first_and_last_three_letters_are_equals]]<br> |
|||
[[Change_e_letters_to_i_in_words]]<br> |
|||
[[Find_words_which_contains_all_the_vowels]]<br> |
|||
[[Find_words_which_contains_most_consonants]]<br> |
|||
=={{header|Phix}}== |
|||
Draft. All of the very task-specific routines below have simply been copied; they should/will be merged where possible. |
|||
<lang Phix>sequence words = get_text("demo/unixdict.txt",GT_LF_STRIPPED) |
|||
procedure filter_words(string desc, integer rid, len=3, sequence args={}) |
|||
sequence res = call_func(rid,args), |
|||
sres = shorten(res,"",abs(len)), |
|||
shres = iff(len<0?join(sres):sprintf("%v",{sres})) |
|||
printf(1,"%d %s words: %s\n",{length(res),desc,shres}) |
|||
end procedure |
|||
function plain(integer rid) return filter(words,rid) end function |
|||
function alternade() |
|||
sequence res = {} |
|||
for i=1 to length(words) do |
|||
string word = words[i] |
|||
if length(word)>=6 then |
|||
sequence sn = repeat("",2) |
|||
for j=1 to length(word) do |
|||
sn[mod(j-1,2)+1] &= word[j] |
|||
end for |
|||
if sum(sq_gt(apply(true,binary_search,{sn,{words}}),0))=2 then |
|||
res = append(res,sprintf("%s (%s,%s)",{word,sn[1],sn[2]})) |
|||
end if |
|||
end if |
|||
end for |
|||
return res |
|||
end function |
|||
function sap(string word) return sum(apply(word,is_prime))==length(word) end function |
|||
function abc(string word) |
|||
sequence idii = apply(true,find,{"abc",{word}}) |
|||
return find(0,idii)==0 and idii==sort(idii) |
|||
end function |
|||
function oddx(integer /*ch*/, idx) return remainder(idx,2)=1 end function |
|||
function oddch(string word) return filter(word,oddx) end function |
|||
function over4(string word) return length(word)>4 end function |
|||
function oddwords() return filter(filter(apply(words,oddch),over4),"in",words) end function |
|||
function over11(string word) return length(word)>11 end function |
|||
function changeable() |
|||
sequence w11 = filter(words,over11), |
|||
res = {} |
|||
for i=1 to length(w11) do |
|||
for j=i+1 to length(w11) do |
|||
if length(w11[i])=length(w11[j]) |
|||
and sum(sq_ne(w11[i],w11[j]))=1 then |
|||
res = append(res,w11[i]&" <=> "&w11[j]) |
|||
end if |
|||
end for |
|||
end for |
|||
return res |
|||
end function |
|||
function the(string word) return length(word)>11 and match("the",word) end function |
|||
function odd(integer idx) return remainder(idx,2)=1 end function |
|||
function vowel(integer ch) return find(ch,"aeiou")!=0 end function |
|||
function oddeven(string word) |
|||
if length(word)<=9 then return false end if |
|||
sequence consonants = apply(word,vowel), |
|||
ohoneohone = apply(tagset(length(word)),odd) |
|||
return find(consonants,{ohoneohone,sq_not(ohoneohone)}) |
|||
end function |
|||
function over9(string word) return length(word)>=9 end function |
|||
sequence dictionary = filter(words,over9) |
|||
function slicen(integer n) return vslice(dictionary,n)[n..-10+n] end function |
|||
function neighwords() |
|||
return unique(filter(columnize(apply(tagset(9),slicen)),"in",dictionary)) |
|||
end function |
|||
function note(string word) return find_any("aiou",word)=0 and length(find_all('e',word))>3 end function |
|||
function flaste(string word) return length(word)>5 and word[1..3]=word[-3..-1] end function |
|||
function chei(string word) return substitute(word,"e","i") end function |
|||
function cheti(string word) return length(word)>5 and find('e',word) and find(chei(word),words) end function |
|||
function chetei() sequence chetie = filter(words,cheti) return columnize({chetie,apply(chetie,chei)}) end function |
|||
function onev(string word, integer vowel) return length(find_all(vowel,word))=1 end function |
|||
function allv(string word) return length(word)>10 and sum(apply(true,onev,{{word},"aeiou"}))=5 end function |
|||
function consonant(integer ch) return find(ch,"aeiou")=0 end function |
|||
function over10(string word) return length(word)>10 end function |
|||
function mostc() |
|||
sequence w10 = filter(words,over10), |
|||
res = {} |
|||
for i=1 to length(w10) do |
|||
string c = filter(w10[i],consonant) |
|||
if length(unique(c))=length(c) then |
|||
res = append(res,{length(c),w10[i]}) |
|||
end if |
|||
end for |
|||
return sort_columns(res,{-1,2}) |
|||
end function |
|||
constant tests = { |
|||
{"alternade",alternade,2}, |
|||
{"prime",plain,7,{sap}}, |
|||
{"abc",plain,4,{abc}}, |
|||
{"odd",oddwords,5}, |
|||
{"changeable",changeable,1}, |
|||
{"the",plain,3,{the}}, |
|||
{"alternating vowel",plain,3,{oddeven}}, |
|||
{"neighbour",neighwords,-4}, |
|||
{"> 3 e",plain,3,{note}}, |
|||
{"first3=last3",plain,3,{flaste}}, |
|||
{"e to i",chetei,2}, |
|||
{"all vowels",plain,3,{allv}}, |
|||
{"most consonant",mostc,2}} |
|||
papply(false,filter_words,tests)</lang> |
|||
{{out}} |
|||
<pre> |
|||
58 alternade words: {"accost (acs,cot)","accuse (acs,cue)","...","truant (tun,rat)","twirly (til,wry)"} |
|||
36 prime words: {"a","aaa","age","agee","ak","am","ama","...","magma","make","mamma","me","meek","meg","q"} |
|||
55 abc words: {"aback","abacus","abc","abdicate","...","strabismic","syllabic","tabernacle","tablecloth"} |
|||
14 odd words: {"brain","cider","cried","grata","hades","...","sight","saute","spree","spree","trial"} |
|||
26 changeable words: {"aristotelean <=> aristotelian","...","upperclassman <=> upperclassmen"} |
|||
32 the words: {"authenticate","chemotherapy","chrysanthemum","...","weatherproof","weatherstrip","weatherstripping"} |
|||
67 alternating vowel words: aboriginal apologetic bimolecular ... unimodular uninominal verisimilitude |
|||
24 neighbour words: applicate architect astronomy christine ... telephone transcend transport transpose |
|||
16 words with>3 e: {"belvedere","dereference","elsewhere","...","seventeenth","telemeter","tennessee"} |
|||
8 first3=last3 words: {"antiperspirant","calendrical","einstein","hotshot","murmur","oshkosh","tartar","testes"} |
|||
26 e to i words: {{"analyses","analysis"},{"atlantes","atlantis"},"...",{"vector","victor"},{"welles","willis"}} |
|||
25 all vowels words: {"ambidextrous","bimolecular","cauliflower","...","praseodymium","stupefaction","sulfonamide"} |
|||
347 most consonant words: {{9,"comprehensible"},{8,"administrable"},"...",{4,"bourgeoisie"},{4,"onomatopoeia"}} |
|||
</pre> |