diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-05-09 19:34:20 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-09 19:34:20 +0100 |
| commit | 8b05ba4d487cf3fd9da18b01997d7c7e0dc189c1 (patch) | |
| tree | f20b008dcd68955d048e87d63d33d5297645a150 | |
| parent | b40f713bfdd9f13a17ae45929f3a484b3707bcdf (diff) | |
| parent | 6f6333d86f00a6329a93c544a70ec2e6404d8fa7 (diff) | |
| download | perlweeklychallenge-club-8b05ba4d487cf3fd9da18b01997d7c7e0dc189c1.tar.gz perlweeklychallenge-club-8b05ba4d487cf3fd9da18b01997d7c7e0dc189c1.tar.bz2 perlweeklychallenge-club-8b05ba4d487cf3fd9da18b01997d7c7e0dc189c1.zip | |
Merge pull request #4037 from PerlMonk-Athanasius/branch-for-challenge-111
Perl solution to Task 2 of the Perl Weekly Challenge #111
| -rw-r--r-- | challenge-111/athanasius/perl/ch-2.pl | 205 | ||||
| -rw-r--r-- | challenge-111/athanasius/perl/words_alpha.txt | 370103 |
2 files changed, 370308 insertions, 0 deletions
diff --git a/challenge-111/athanasius/perl/ch-2.pl b/challenge-111/athanasius/perl/ch-2.pl new file mode 100644 index 0000000000..37651b63bb --- /dev/null +++ b/challenge-111/athanasius/perl/ch-2.pl @@ -0,0 +1,205 @@ +#!perl + +############################################################################### +=comment + +Perl Weekly Challenge 111 +========================= + +TASK #2 +------- +*Ordered Letters* + +Submitted by: E. Choroba + +Given a word, you can sort its letters alphabetically (case insensitive). For +example, "beekeeper" becomes "beeeeekpr" and "dictionary" becomes "acdiinorty". + +Write a script to find the longest English words that don't change when their +letters are sorted. + +=cut +############################################################################### + +#--------------------------------------# +# Copyright © 2021 PerlMonk Athanasius # +#--------------------------------------# + +use strict; +use warnings; +use autodie; +use Const::Fast; + +const my $DICT_DIR => '.'; + +# From https://github.com/dwyl/english-words +const my $IN_FILE => "$DICT_DIR/words_alpha.txt"; + +const my $DICTIONARY => "$DICT_DIR/dict_by_length.tmp"; + +const my $USAGE => +"Usage: + perl $0 [<file>] + + [<file>] Name of the input dictionary file (optional)\n"; + +#------------------------------------------------------------------------------ +BEGIN +#------------------------------------------------------------------------------ +{ + $| = 1; + print "\nChallenge 111, Task #2: Ordered Letters (Perl)\n\n"; +} + +#============================================================================== +MAIN: +#============================================================================== +{ + my $in_file = parse_command_line(); + + print "Dictionary: $in_file\n\n"; + + order_dictionary( $in_file ); + + open( my $fh, '<', $DICTIONARY ); + + my @solutions; + + while (my $word = <$fh>) + { + chomp $word; + + last if scalar @solutions > 0 && + length $word < length $solutions[ -1 ]; + + my $lc_word = lc $word; + my @letters = split //, $lc_word; + my $ordered = join '', sort @letters; + + push @solutions, $word if $ordered eq $lc_word; + } + + close $fh; + unlink $DICTIONARY; + + display_solutions( \@solutions ); +} + +#------------------------------------------------------------------------------ +sub order_dictionary +#------------------------------------------------------------------------------ +{ + my ($in_file) = @_; + my %out_fh; + + open( my $in, '<', $in_file ); + + while (my $line = <$in>) + { + chomp $line; + + next if $line =~ /[^A-Za-z]/; + + my $len = length $line; + my $out_fh; + + if (exists $out_fh{ $len }) + { + $out_fh = $out_fh{ $len }; + } + else + { + my $out_file = "$DICT_DIR/dict_$len.tmp"; + + open( $out_fh, '+>', $out_file ); + + $out_fh{ $len } = $out_fh; + } + + print $out_fh "$line\n"; + } + + close $in; + + open( my $out, '>', $DICTIONARY ); + + for my $len (sort { $b <=> $a } keys %out_fh) + { + my $fh = $out_fh{ $len }; + + seek $fh, 0, 0; + + while (my $line = <$fh>) + { + print $out $line; + } + } + + close $out; + + for my $len (keys %out_fh) + { + my $fh = $out_fh{ $len }; + close $fh; + + my $filename = "$DICT_DIR/dict_$len.tmp"; + unlink $filename; + } +} + +#------------------------------------------------------------------------------ +sub display_solutions +#------------------------------------------------------------------------------ +{ + my ($solutions) = @_; + + if ((my $count = scalar @$solutions) == 0) + { + print "No solutions found\n"; + } + else + { + my $soln_len = length $solutions->[ 0 ]; + + if ($count == 1) + { + printf "One solution found (%d letters in length): %s\n", + $soln_len, $solutions->[ 0 ]; + } + else + { + printf "%d solutions found (each %d letters in length):\n", + $count, $soln_len; + print " $_\n" for @$solutions; + } + } +} + +#------------------------------------------------------------------------------ +sub parse_command_line +#------------------------------------------------------------------------------ +{ + my $args = scalar @ARGV; + + $args <= 1 + or error( "Expected 0 or 1 command line arguments, found $args" ); + + my $file = ($args == 1) ? $ARGV[0] : $IN_FILE; + $file =~ s{ \\ }{/}gx; + -e $file or error( qq[File "$file" not found] ); + -s $file or error( qq[File "$file" is empty] ); + -f $file or error( qq[File "$file" is not a plain file] ); + + return $file; +} + +#------------------------------------------------------------------------------ +sub error +#------------------------------------------------------------------------------ +{ + my ($message) = @_; + + die "ERROR: $message\n$USAGE"; +} + +############################################################################### diff --git a/challenge-111/athanasius/perl/words_alpha.txt b/challenge-111/athanasius/perl/words_alpha.txt new file mode 100644 index 0000000000..5a8ba77e18 --- /dev/null +++ b/challenge-111/athanasius/perl/words_alpha.txt @@ -0,0 +1,370103 @@ +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 +acceleratory +accelerators +accelerograph +accelerometer +accelerometers +accend +accendibility +accendible +accensed +accension +accensor |
