diff options
| author | Ruben Westerberg <drclaw@mac.com> | 2019-05-12 20:06:49 +1000 |
|---|---|---|
| committer | Ruben Westerberg <drclaw@mac.com> | 2019-05-12 20:06:49 +1000 |
| commit | 8580177d87273cfc2d335d098b0c30edd8dfa016 (patch) | |
| tree | 685d07fb9fa840f49eb32fcd12f412d4b3743602 | |
| parent | 5a872c511d1a8b507125ed9e2e9ceeca49057e45 (diff) | |
| download | perlweeklychallenge-club-8580177d87273cfc2d335d098b0c30edd8dfa016.tar.gz perlweeklychallenge-club-8580177d87273cfc2d335d098b0c30edd8dfa016.tar.bz2 perlweeklychallenge-club-8580177d87273cfc2d335d098b0c30edd8dfa016.zip | |
Perl5 ch2 solution
Updated p6 solution.
Code needs much improvement!
| -rwxr-xr-x | challenge-007/ruben-westerberg/perl5/ch-2.pl | 81 | ||||
| -rwxr-xr-x | challenge-007/ruben-westerberg/perl6/ch-2.p6 | 86 | ||||
| -rw-r--r-- | challenge-007/ruben-westerberg/words_alpha.txt | 370099 |
3 files changed, 370217 insertions, 49 deletions
diff --git a/challenge-007/ruben-westerberg/perl5/ch-2.pl b/challenge-007/ruben-westerberg/perl5/ch-2.pl new file mode 100755 index 0000000000..add3a37e3b --- /dev/null +++ b/challenge-007/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,81 @@ +#!/usr/bin/env perl +# + +use warnings; +use strict; +use FindBin; + +my @start=split '', $ARGV[0]; +my @end=split '', $ARGV[1]; +my $wordPath= $ARGV[2]; + +die "Not enough arguments" if (@ARGV !=3); +die "Words not the same length: Ladder: ()\n" if (@start != @end); +#my $wordsFile= $FindBin::Bin."/../words_alpha.txt"; +open my $wfh, "<" , $wordPath; +my @words; +my $ok=0; +my $start=$ARGV[0]; +my $end=$ARGV[1]; +while (<$wfh>) { + chomp; + $ok++ if $_ eq $start; + $ok++ if $_ eq $end;; + my @a=(split '', lc $_); + push @words, \@a if @a == @start; +} +close $wfh; +die "Words not in dictionary: Ladder: ()\n" if ($ok!=2); + +my @transforms; +push @transforms, {w=>\@start, p=>undef}; +my @seen; +push @seen, \@start; +my $result; +my $i=0; + +while (@transforms != 0) { + my $e=shift @transforms; + my $c=$$e{w}; + print "Iteration: $i, Queue length: ".scalar @transforms." Current word: @$c\n"; + #print "@$c"; + $result=$e; + last if (join ('', @$c) eq join ('', @end)); + map { + my $d=$_; + my $sum=0; + for (my $i=0; $i<@$c ;$i++) { + $sum++ if @$d[$i] eq @$c[$i]; + } + my $part1= $sum == (@$c-1); + my $part2=grep({ join '', $_ eq join '', @$d} @seen) == 0; + if ($part1 && $part2) { + #print @$d; + push @seen, $d; + push @transforms, {w=>$d, p=>$e}; + } + + } @words; + $i++; +} +if ($result) { + print "Ladder: (".join(" ", reverse pathFromParent($result, \@start)).")"; + +} +else { + print "No ladder found: Ladder: ()"; +} + +sub pathFromParent { + my $parent= shift; + my $word= shift; + my @path; + #print @{$$result{w}};; + while ($parent) { + push @path, join ('', @{$$parent{w}}); + #print @path; + last if (join ('', @{$$parent{w}}) eq join('', @$word)); + $parent=$$parent{p}; + } + return @path; +} diff --git a/challenge-007/ruben-westerberg/perl6/ch-2.p6 b/challenge-007/ruben-westerberg/perl6/ch-2.p6 index d9ce480edc..95a0ba3477 100755 --- a/challenge-007/ruben-westerberg/perl6/ch-2.p6 +++ b/challenge-007/ruben-westerberg/perl6/ch-2.p6 @@ -4,68 +4,56 @@ #read arguments, first is start word second is end word die "Need three arguments, start and end words" if @*ARGS.elems != 3; my ($start,$end, $wordFileName)=@*ARGS[0..2]; +$start.=lc; +$end.=lc; +die "Words not the same length: Ladder ()" unless ($start.chars == $end.chars); -my @words=$wordFileName.IO.lines.grep({.chars == $start.chars}); -unless $start.chars == $end.chars && @words.grep( { $_ eq all ($start, $end)} ) { - say (();); -} +my @words=($wordFileName.IO.lines.grep({.chars == $start.chars})>>.&{.lc.comb.cache}); + +die "Start not in dictionary: Ladder ()" unless (grep $start, @words>>.join); +die "End not in dictionary: Ladder ()" unless (grep $end, @words>>.join); -say "Testing against @words.elems()"; -my @seen; -my $s={word=>$start,parent=>Any}; -#my $node=transforms($start,$s); +my @start=$start.comb; +my @end=$end.comb; my @transforms; my $found=False; my $result; -@transforms.push: $s; -while @transforms > 0 && !$found { - say "To Test: "~ @transforms.elems~ " Dict: " ~ @words.elems; - my $current:= @transforms.shift; - my @toAdd=transforms($current); - @transforms.append: @toAdd; -} -say pathFromParent($result, $start); - - -#read word list from file and filter by word length -sub transforms($parent is rw) { - constant @letters="a".."z"; - my $word=$parent<word>; - #@seen.push($word); - $found = $word eq $end; - $result=$parent; #if ($word eq $end) && (! so $result); - - return if $found; +@transforms.push: {w=>@start , p=>Any}; +my @seen.push: @start; - my @c=$word.comb; - #say $word; - my $w; - my @transforms=gather { - for ^@c -> $c { - for @letters -> $l { - my @tmp=@c; - @tmp[$c]=$l; - $w:=@tmp.join; - if ( (@words.grep($w) > 0) && (@transforms.grep($w) == 0)) { - #say $w; - - @words=@words.grep({ $_ ne $w}); - take {word=>$w, parent=>$parent}; - } - } +my @c=@start; +my $i=0; +while @transforms !== 0 { + my $e=@transforms.shift; + my $c=$e<w>; + say "Itertion: $i, Queue Length: "~ @transforms.elems~ " Current word: $c"; + #exit if $c ~~ <h e r m> && @transforms !==0; + $result=$e; + last if $c ~~ @end; + + @words.map(-> $d { + if (($d >>eq<< $c).sum == ($c-1)) && (@seen.grep($d) == 0) { + @seen.push: $d; + @transforms.push: (w=>$d, p=>$e).Hash; } - } - @transforms; + }); + $i++; } - +if $result { + say "Ladder: ("~pathFromParent($result,$start)~")"; +} +else { + say "No ladder found: Ladder: ()"; +} + sub pathFromParent($node, $word) { my @path; my $parent=$node; while ($parent) { - @path.push: $parent<word>; - last if $parent<word> eq $word; - $parent=$parent<parent>; + @path.push: $parent<w>.join; + last if $parent<w>.join eq $word.join; + $parent=$parent<p>; } @path.reverse; } diff --git a/challenge-007/ruben-westerberg/words_alpha.txt b/challenge-007/ruben-westerberg/words_alpha.txt new file mode 100644 index 0000000000..8902fa2503 --- /dev/null +++ b/challenge-007/ruben-westerberg/words_alpha.txt @@ -0,0 +1,370099 @@ +a +aa +aaa +aah +aahed +aahing +aahs +aal +aalii +aaliis +aals +aam +aani +aardvark +aardvarks +aardwolf +aardwolves +aargh +aaron +aaronic +aaronical +aaronite +aaronitic +aarrgh +aarrghh +aaru +aas +aasvogel +aasvogels +ab +aba +ababdeh +ababua +abac +abaca +abacay +abacas +abacate +abacaxi +abaci +abacinate +abacination +abacisci +abaciscus +abacist +aback +abacli +abacot +abacterial +abactinal +abactinally +abaction +abactor +abaculi +abaculus +abacus +abacuses +abada +abaddon +abadejo +abadengo +abadia +abadite +abaff +abaft +abay +abayah +abaisance +abaised +abaiser +abaisse +abaissed +abaka +abakas +abalation +abalienate +abalienated +abalienating +abalienation +abalone +abalones +abama +abamp +abampere +abamperes +abamps +aband +abandon +abandonable +abandoned +abandonedly +abandonee +abandoner +abandoners +abandoning +abandonment +abandonments +abandons +abandum +abanet +abanga +abanic +abannition +abantes +abapical +abaptiston +abaptistum +abarambo +abaris +abarthrosis +abarticular +abarticulation +abas +abase +abased +abasedly +abasedness +abasement +abasements +abaser +abasers +abases +abasgi +abash +abashed +abashedly +abashedness +abashes +abashing +abashless +abashlessly +abashment +abashments +abasia +abasias +abasic +abasing +abasio +abask +abassi +abassin +abastard +abastardize +abastral +abatable +abatage +abate +abated +abatement +abatements +abater +abaters +abates +abatic +abating +abatis +abatised +abatises +abatjour +abatjours +abaton +abator +abators +abattage +abattis +abattised +abattises +abattoir +abattoirs +abattu +abattue +abatua +abature +abaue +abave +abaxial +abaxile +abaze +abb +abba +abbacy +abbacies +abbacomes +abbadide +abbaye +abbandono +abbas +abbasi +abbasid +abbassi +abbasside +abbate +abbatial +abbatical +abbatie +abbe +abbey +abbeys +abbeystead +abbeystede +abbes +abbess +abbesses +abbest +abbevillian +abby +abbie +abboccato +abbogada +abbot +abbotcy +abbotcies +abbotnullius +abbotric +abbots +abbotship +abbotships +abbott +abbozzo +abbr +abbrev +abbreviatable +abbreviate +abbreviated +abbreviately +abbreviates +abbreviating +abbreviation +abbreviations +abbreviator +abbreviatory +abbreviators +abbreviature +abbroachment +abc +abcess +abcissa +abcoulomb +abd +abdal +abdali +abdaria +abdat +abderian +abderite +abdest +abdicable +abdicant +abdicate +abdicated +abdicates +abdicating +abdication +abdications +abdicative +abdicator +abdiel +abditive +abditory +abdom +abdomen +abdomens +abdomina +abdominal +abdominales +abdominalia +abdominalian +abdominally +abdominals +abdominoanterior +abdominocardiac +abdominocentesis +abdominocystic +abdominogenital +abdominohysterectomy +abdominohysterotomy +abdominoposterior +abdominoscope +abdominoscopy +abdominothoracic +abdominous +abdominovaginal +abdominovesical +abduce +abduced +abducens +abducent +abducentes +abduces +abducing +abduct +abducted +abducting +abduction +abductions +abductor +abductores +abductors +abducts +abe +abeam +abear +abearance +abecedaire +abecedary +abecedaria +abecedarian +abecedarians +abecedaries +abecedarium +abecedarius +abed +abede +abedge +abegge +abey +abeyance +abeyances +abeyancy +abeyancies +abeyant +abeigh +abel +abele +abeles +abelia +abelian +abelicea +abelite +abelmoschus +abelmosk +abelmosks +abelmusk +abelonian +abeltree +abencerrages +abend +abends +abenteric +abepithymia +aberdavine +aberdeen +aberdevine +aberdonian +aberduvine +aberia +abernethy +aberr +aberrance +aberrancy +aberrancies +aberrant +aberrantly +aberrants +aberrate +aberrated +aberrating +aberration +aberrational +aberrations +aberrative +aberrator +aberrometer +aberroscope +aberuncate +aberuncator +abesse +abessive +abet +abetment +abetments +abets +abettal +abettals +abetted +abetter +abetters +abetting +abettor +abettors +abevacuation +abfarad +abfarads +abhenry +abhenries +abhenrys +abhinaya +abhiseka +abhominable +abhor +abhorred +abhorrence +abhorrences +abhorrency +abhorrent +abhorrently +abhorrer +abhorrers +abhorrible +abhorring +abhors +abhorson +aby +abib +abichite +abidal +abidance +abidances +abidden +abide +abided +abider +abiders +abides +abidi +abiding +abidingly +abidingness +abie +abye +abiegh +abience +abient +abies +abyes +abietate +abietene +abietic +abietin +abietineae +abietineous +abietinic +abietite +abiezer +abigail +abigails +abigailship +abigeat +abigei +abigeus +abying +abilao +abilene +abiliment +abilitable +ability +abilities +abilla +abilo +abime +abintestate +abiogeneses +abiogenesis +abiogenesist +abiogenetic +abiogenetical +abiogenetically +abiogeny +abiogenist +abiogenous +abiology +abiological +abiologically +abioses +abiosis +abiotic +abiotical +abiotically +abiotrophy +abiotrophic +abipon +abir +abirritant +abirritate +abirritated +abirritating +abirritation +abirritative +abys +abysm +abysmal +abysmally +abysms +abyss +abyssa +abyssal +abysses +abyssinia +abyssinian +abyssinians +abyssobenthonic +abyssolith +abyssopelagic +abyssus +abiston +abit +abitibi +abiuret +abject +abjectedness +abjection +abjections +abjective +abjectly +abjectness +abjoint +abjudge +abjudged +abjudging +abjudicate +abjudicated +abjudicating +abjudication +abjudicator +abjugate +abjunct +abjunction +abjunctive +abjuration +abjurations +abjuratory +abjure +abjured +abjurement +abjurer +abjurers +abjures +abjuring +abkar +abkari +abkary +abkhas +abkhasian +abl +ablach +ablactate +ablactated +ablactating +ablactation +ablaqueate +ablare +ablastemic +ablastin +ablastous +ablate +ablated +ablates +ablating +ablation +ablations +ablatitious +ablatival +ablative +ablatively +ablatives +ablator +ablaut +ablauts +ablaze +able +ableeze +ablegate +ablegates +ablegation +ablend +ableness +ablepharia +ablepharon +ablepharous +ablepharus +ablepsy +ablepsia +ableptical +ableptically +abler +ables +ablesse +ablest +ablet +ablewhackets +ably +ablings +ablins +ablock +abloom +ablow +ablude +abluent +abluents +ablush +ablute +abluted +ablution +ablutionary +ablutions +abluvion +abmho +abmhos +abmodality +abmodalities +abn +abnaki +abnegate +abnegated +abnegates +abnegating +abnegation +abnegations +abnegative +abnegator +abnegators +abner +abnerval +abnet +abneural +abnormal +abnormalcy +abnormalcies +abnormalise +abnormalised +abnormalising +abnormalism +abnormalist +abnormality +abnormalities +abnormalize +abnormalized +abnormalizing +abnormally +abnormalness +abnormals +abnormity +abnormities +abnormous +abnumerable +abo +aboard +aboardage +abobra +abococket +abodah +abode +aboded +abodement +abodes +abody +aboding +abogado +abogados +abohm +abohms +aboideau +aboideaus +aboideaux +aboil +aboiteau +aboiteaus +aboiteaux +abolete +abolish +abolishable +abolished +abolisher +abolishers +abolishes +abolishing +abolishment +abolishments +abolition +abolitionary +abolitionise +abolitionised +abolitionising +abolitionism +abolitionist +abolitionists +abolitionize +abolitionized +abolitionizing +abolla +abollae +aboma +abomas +abomasa +abomasal +abomasi +abomasum +abomasus +abomasusi +abominability +abominable +abominableness +abominably +abominate +abominated +abominates +abominating +abomination +abominations +abominator +abominators +abomine +abondance +abongo +abonne +abonnement +aboon +aborad +aboral +aborally +abord +aboriginal +aboriginality +aboriginally +aboriginals +aboriginary +aborigine +aborigines +aborning +aborsement +aborsive +abort +aborted +aborter +aborters +aborticide +abortient +abortifacient +abortin +aborting +abortion +abortional +abortionist +abortionists +abortions +abortive +abortively +abortiveness +abortogenic +aborts +abortus +abortuses +abos +abote +abouchement +aboudikro +abought +aboulia +aboulias +aboulic +abound +abounded +abounder +abounding +aboundingly +abounds +about +abouts +above +aboveboard +abovedeck +aboveground +abovementioned +aboveproof +aboves +abovesaid +abovestairs +abow +abox +abp +abr +abracadabra +abrachia +abrachias +abradable +abradant +abradants +abrade +abraded +abrader +abraders +abrades +abrading +abraham +abrahamic +abrahamidae +abrahamite +abrahamitic +abray +abraid +abram +abramis +abranchial +abranchialism +abranchian +abranchiata +abranchiate +abranchious +abrasax +abrase +abrased +abraser +abrash +abrasing +abrasiometer +abrasion +abrasions +abrasive +abrasively +abrasiveness +abrasives +abrastol +abraum +abraxas +abrazite +abrazitic +abrazo +abrazos +abreact +abreacted +abreacting +abreaction +abreactions +abreacts +abreast +abreed +abrege +abreid +abrenounce +abrenunciate +abrenunciation +abreption +abret +abreuvoir +abri +abrico +abricock +abricot +abridgable +abridge +abridgeable +abridged +abridgedly +abridgement +abridgements +abridger +abridgers +abridges +abridging +abridgment +abridgments +abrim +abrin +abrine +abris +abristle +abroach +abroad +abrocoma +abrocome +abrogable +abrogate +abrogated +abrogates +abrogating +abrogation +abrogations +abrogative +abrogator +abrogators +abroma +abronia +abrood +abrook +abrosia +abrosias +abrotanum +abrotin +abrotine +abrupt +abruptedly +abrupter +abruptest +abruptio +abruption +abruptiones +abruptly +abruptness +abrus +abs +absalom +absampere +absaroka +absarokite +abscam +abscess +abscessed +abscesses +abscessing +abscession +abscessroot +abscind +abscise +abscised +abscises +abscising +abscisins +abscision +absciss +abscissa +abscissae +abscissas +abscisse +abscissin +abscission +abscissions +absconce +abscond +absconded +abscondedly +abscondence +absconder +absconders +absconding +absconds +absconsa +abscoulomb +abscound +absee +absey +abseil +abseiled +abseiling +abseils +absence +absences +absent +absentation +absented +absentee +absenteeism +absentees +absenteeship +absenter +absenters +absentia +absenting +absently +absentment +absentminded +absentmindedly +absentmindedness +absentness +absents +absfarad +abshenry +absi +absinth +absinthe +absinthes +absinthial +absinthian +absinthiate +absinthiated +absinthiating +absinthic +absinthiin +absinthin +absinthine +absinthism +absinthismic +absinthium +absinthol +absinthole +absinths +absyrtus +absis +absist +absistos +absit +absmho +absohm +absoil +absolent +absolute +absolutely +absoluteness +absoluter +absolutes +absolutest +absolution +absolutions +absolutism +absolutist +absolutista +absolutistic +absolutistically +absolutists +absolutive +absolutization +absolutize +absolutory +absolvable +absolvatory +absolve +absolved +absolvent +absolver +absolvers +absolves +absolving +absolvitor +absolvitory +absonant +absonous +absorb +absorbability +absorbable +absorbance +absorbancy +absorbant +absorbed +absorbedly +absorbedness +absorbefacient +absorbency +absorbencies +absorbent +absorbents +absorber +absorbers +absorbing +absorbingly +absorbition +absorbs +absorbtion +absorpt +absorptance +absorptiometer +absorptiometric +absorption +absorptional +absorptions +absorptive +absorptively +absorptiveness +absorptivity +absquatulate +absquatulation +abstain +abstained +abstainer +abstainers +abstaining +abstainment +abstains +abstemious +abstemiously +abstemiousness +abstention +abstentionism +abstentionist +abstentions +abstentious +absterge +absterged +abstergent +absterges +absterging +absterse +abstersion +abstersive +abstersiveness +abstertion +abstinence +abstinency +abstinent +abstinential +abstinently +abstort +abstr +abstract +abstractable +abstracted +abstractedly +abstractedness +abstracter +abstracters +abstractest +abstracting +abstraction +abstractional +abstractionism +abstractionist +abstractionists +abstractions +abstractitious +abstractive +abstractively +abstractiveness +abstractly +abstractness +abstractor +abstractors +abstracts +abstrahent +abstrict +abstricted +abstricting +abstriction +abstricts +abstrude +abstruse +abstrusely +abstruseness +abstrusenesses +abstruser +abstrusest +abstrusion +abstrusity +abstrusities +absume +absumption +absurd +absurder +absurdest +absurdism +absurdist +absurdity +absurdities +absurdly +absurdness +absurds +absurdum +absvolt +abt +abterminal +abthain +abthainry +abthainrie +abthanage +abtruse +abu +abubble +abucco +abuilding +abuleia +abulia +abulias +abulic +abulyeit +abulomania +abumbral +abumbrellar +abuna +abundance +abundances +abundancy +abundant +abundantia +abundantly +abune +abura +aburabozu +aburagiri +aburban +aburst +aburton +abusable +abusage +abuse +abused +abusedly +abusee +abuseful +abusefully +abusefulness +abuser +abusers +abuses +abush +abusing +abusion +abusious +abusive +abusively +abusiveness +abut +abuta +abutilon +abutilons +abutment +abutments +abuts +abuttal +abuttals +abutted +abutter +abutters +abutting +abuzz +abv +abvolt +abvolts +abwab +abwatt +abwatts +ac +acacatechin +acacatechol +acacetin +acacia +acacian +acacias +acaciin +acacin +acacine +acad +academe +academes +academy +academia +academial +academian +academias +academic +academical +academically +academicals +academician +academicians +academicianship +academicism +academics +academie +academies +academise +academised +academising +academism +academist +academite +academization +academize +academized +academizing +academus +acadia +acadialite +acadian +acadie +acaena +acajou +acajous +acalculia +acale +acaleph +acalepha +acalephae +acalephan +acalephe +acalephes +acalephoid +acalephs +acalycal +acalycine +acalycinous +acalyculate +acalypha +acalypterae +acalyptrata +acalyptratae +acalyptrate +acamar +acampsia +acana +acanaceous +acanonical +acanth +acantha +acanthaceae +acanthaceous +acanthad +acantharia +acanthi +acanthia +acanthial +acanthin +acanthine +acanthion +acanthite +acanthocarpous +acanthocephala +acanthocephalan +acanthocephali +acanthocephalous +acanthocereus +acanthocladous +acanthodea +acanthodean +acanthodei +acanthodes +acanthodian +acanthodidae +acanthodii +acanthodini +acanthoid +acantholimon +acantholysis +acanthology +acanthological +acanthoma +acanthomas +acanthomeridae +acanthon +acanthopanax +acanthophis +acanthophorous +acanthopod +acanthopodous +acanthopomatous +acanthopore +acanthopteran +acanthopteri +acanthopterygian +acanthopterygii +acanthopterous +acanthoses +acanthosis +acanthotic +acanthous +acanthuridae +acanthurus +acanthus +acanthuses +acanthuthi +acapnia +acapnial +acapnias +acappella +acapsular +acapu +acapulco +acara +acarapis +acarari +acardia +acardiac +acardite +acari +acarian +acariasis +acariatre +acaricidal +acaricide +acarid +acarida +acaridae +acaridan +acaridans +acaridea +acaridean +acaridomatia +acaridomatium +acarids +acariform +acarina +acarine +acarines +acarinosis +acarocecidia +acarocecidium +acarodermatitis +acaroid +acarol +acarology +acarologist +acarophilous +acarophobia +acarotoxic +acarpellous +acarpelous +acarpous +acarus +acast +acastus +acatalectic +acatalepsy +acatalepsia +acataleptic +acatallactic +acatamathesia +acataphasia +acataposis +acatastasia +acatastatic +acate +acategorical +acater +acatery +acates +acatharsy +acatharsia +acatholic +acaudal +acaudate +acaudelescent +acaulescence +acaulescent +acauline +acaulose +acaulous +acc +acca +accable +accademia +accadian +acce +accede +acceded +accedence +acceder +acceders +accedes +acceding +accel +accelerable +accelerando +accelerant +accelerate +accelerated +acceleratedly +accelerates +accelerating +acceleratingly +acceleration +accelerations +accelerative +accelerator +acceleratorh +acceleratory +accelerators +accelerograph +accelerometer +accelerometers +accend +accendibility +accendible +accensed +accension +accensor +accent +accented +accenting |
