Teacup rim text

From Rosetta Code
Revision as of 12:26, 4 August 2019 by Thundergnat (talk | contribs) (→‎{{header|Perl 6}}: A little smarter about casing, don't assume first word found must be part of sequence)
Teacup rim text is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

On a set of coasters we have, there's a picture of a teacup. On the rim of the teacup the word "TEA" appears a number of times separated by bullet characters. It occurred to me that if the bullet were removed and the words run together, you could start at any letter and still end up with a meaningful three-letter word. So start at the "T" and read "TEA". Start at the "E" and read "EAT", or start at the "A" and read "ATE".

That got me thinking that maybe there are other words that could be used rather that "TEA". And that's just English. What about Italian or Greek or ... um ... Telugu.

So here's the task: from a web accessible or locally accessible word source, iterate through each word. With each word, peel off the first letter and put it at the end. Check if the word exists. If it does, keep going with the next letter, repeating the process for as many letters as there are minus one. If all of the words exist store the original word. List the words that survive the process at the end. Optionally list all their variants.

Factor

<lang factor>USING: combinators.short-circuit fry grouping hash-sets http.client kernel make math prettyprint sequences sequences.extras sets sorting splitting unicode ;

"https://raw.githubusercontent.com/dwyl/english-words/master/words.txt" http-get nip "\n" split harvest [ { [ length 2 > ] [ [ letter? ] all? ] [ all-equal? not ] } 1&& ] filter  ! we want lowercase words with > 2 [ >hash-set ] [ ] bi  ! letters which are not all the same. [ [ all-rotations members swap dupd '[ _ in? ] all? [ , ] [ drop ] if ] with each ] { } make [ natural-sort ] map members .</lang>

Output:
{
    { "arar" "rara" }
    { "ary" "rya" "yar" }
    { "ate" "eat" "tea" }
    { "eth" "het" "the" }
}


Julia

Using the MIT 10000 word list, and excluding words of less than three letters, to reduce output length. <lang julia>using HTTP

function getwords()

   req = HTTP.request("GET", "https://www.mit.edu/~ecprice/wordlist.10000")
   Dict{String, Int}((string(x), 1) for x in split(String(req.body), r"\s+"))

end

rotate(s, n) = String(circshift(Vector{UInt8}(s), n))

isliketea(w, d) = (n = length(w); n > 2 && all(i -> haskey(d, rotate(w, i)), 1:n-1))

function getteawords()

   wordlistdict = getwords()
   for word in collect(keys(wordlistdict))
       if isliketea(word, wordlistdict)
           println(word, ": ", [rotate(word, i) for i in 1:length(word)-1])
       end
   end

end

getteawords()

</lang>

Output:
pas: ["spa", "asp"]
xxx: ["xxx", "xxx"]
iii: ["iii", "iii"]
asp: ["pas", "spa"]
tea: ["ate", "eat"]
spa: ["asp", "pas"]
ate: ["eat", "tea"]
aim: ["mai", "ima"]
aaa: ["aaa", "aaa"]
car: ["rca", "arc"]
ooo: ["ooo", "ooo"]
sip: ["psi", "ips"]
arc: ["car", "rca"]
ips: ["sip", "psi"]
www: ["www", "www"]
mai: ["ima", "aim"]
rca: ["arc", "car"]
eat: ["tea", "ate"]
psi: ["ips", "sip"]
ima: ["aim", "mai"]

Perl 6

Works with: Rakudo version 2019.07.1

Using the same file as the reference implementation (Lychen), downloaded to a local file to give my connection a break.

There doesn't seem to be any restriction that the word needs to consist only of lowercase letters, so words of any case are included. Since the example code specifically shows the example words (TEA, EAT, ATE) in uppercase, I elected to uppercase the found words. Most of them are anyway, as this list seems to be full of abbreviations, acronyms and inialisms. Ah well. I didn't choose the word list.

<lang perl6>my %words; './words.txt'.IO.slurp.words.map: { %words{.uc.comb.sort.join}.push: $_.uc };

for %words.keys { %words{$_}:delete if %words{$_}.elems < 2 or $_.chars < 3 };

my @teacups;

for %words.values -> @these {

   MAYBE: for @these {
       my $maybe = $_;
       my @print;
       for ^$maybe.chars {
           if $maybe ∈ @these {
               @print.push: $maybe;
               $maybe = $maybe.comb.list.rotate.join;
           } else {
               @print = ();
               last
           }
       }
       if @print.elems {
           @teacups.push: @print;
       }
   }

}

say .unique.join(", ") if .elems for sort @teacups;</lang>

Output:
AAE, AEA, EAA
AAF, AFA, FAA
AAH, AHA, HAA
AAM, AMA, MAA
AAS, ASA, SAA
ABB, BBA, BAB
ABD, BDA, DAB
ABI, BIA, IAB
ABL, BLA, LAB
ABM, BMA, MAB
ABR, BRA, RAB
ABS, BSA, SAB
ABV, BVA, VAB
ACC, CCA, CAC
ACD, CDA, DAC
ACF, CFA, FAC
ACH, CHA, HAC
ACM, CMA, MAC
ACP, CPA, PAC
ACS, CSA, SAC
ACT, CTA, TAC
ACV, CVA, VAC
ACW, CWA, WAC
ADAD, DADA
ADAR, DARA, ARAD, RADA
ADB, DBA, BAD
ADC, DCA, CAD
ADD, DDA, DAD
ADE, DEA, EAD
ADF, DFA, FAD
ADI, DIA, IAD
ADM, DMA, MAD
ADN, DNA, NAD
ADO, DOA, OAD
ADP, DPA, PAD
ADS, DSA, SAD
AEA, EAA, AAE
AEC, ECA, CAE
AER, ERA, RAE
AES, ESA, SAE
AET, ETA, TAE
AFA, FAA, AAF
AFC, FCA, CAF
AFI, FIA, IAF
AFL, FLA, LAF
AFR, FRA, RAF
AGAG, GAGA
AGC, GCA, CAG
AGD, GDA, DAG
AGH, GHA, HAG
AGR, GRA, RAG
AGS, GSA, SAG
AGT, GTA, TAG
AHA, HAA, AAH
AHI, HIA, IAH
AIC, ICA, CAI
AIL, ILA, LAI
AIM, IMA, MAI
AIR, IRA, RAI
AIS, ISA, SAI
AIT, ITA, TAI
AKE, KEA, EAK
AKH, KHA, HAK
AKO, KOA, OAK
ALC, LCA, CAL
ALE, LEA, EAL
ALG, LGA, GAL
ALI, LIA, IAL
ALIT, LITA, ITAL, TALI
ALT, LTA, TAL
AMA, MAA, AAM
AMAN, MANA, ANAM, NAMA
AMAR, MARA, ARAM, RAMA
AMB, MBA, BAM
AMC, MCA, CAM
AME, MEA, EAM
AMEL, MELA, ELAM, LAME
AMEN, MENA, ENAM, NAME
AMI, MIA, IAM
AMO, MOA, OAM
AMOR, MORA, ORAM, RAMO
AMP, MPA, PAM
AMR, MRA, RAM
AMS, MSA, SAM
AMT, MTA, TAM
AMU, MUA, UAM
AMY, MYA, YAM
ANAM, NAMA, AMAN, MANA
ANAN, NANA
ANC, NCA, CAN
AND, NDA, DAN
ANE, NEA, EAN
ANG, NGA, GAN
ANH, NHA, HAN
ANI, NIA, IAN
ANIL, NILA, ILAN, LANI
ANS, NSA, SAN
ANY, NYA, YAN
AOB, OBA, BAO
AOL, OLA, LAO
AOP, OPA, PAO
AOR, ORA, RAO
AOS, OSA, SAO
APC, PCA, CAP
APG, PGA, GAP
APH, PHA, HAP
APL, PLA, LAP
APM, PMA, MAP
APO, POA, OAP
APP, PPA, PAP
APR, PRA, RAP
APS, PSA, SAP
APT, PTA, TAP
ARAD, RADA, ADAR, DARA
ARAM, RAMA, AMAR, MARA
ARAR, RARA
ARAS, RASA, ASAR, SARA
ARC, RCA, CAR
ARD, RDA, DAR
ARE, REA, EAR
ARF, RFA, FAR
ARIS, RISA, ISAR, SARI
ARM, RMA, MAR
ARN, RNA, NAR
ARO, ROA, OAR
ARS, RSA, SAR
ART, RTA, TAR
ARU, RUA, UAR
ARY, RYA, YAR
ASA, SAA, AAS
ASAR, SARA, ARAS, RASA
ASB, SBA, BAS
ASC, SCA, CAS
ASE, SEA, EAS
ASEL, SELA, ELAS, LASE
ASER, SERA, ERAS, RASE
ASH, SHA, HAS
ASI, SIA, IAS
ASK, SKA, KAS
ASM, SMA, MAS
ASN, SNA, NAS
ASP, SPA, PAS
ASR, SRA, RAS
ASS, SSA, SAS
AST, STA, TAS
ASW, SWA, WAS
ATB, TBA, BAT
ATC, TCA, CAT
ATE, TEA, EAT
ATH, THA, HAT
ATM, TMA, MAT
ATO, TOA, OAT
ATR, TRA, RAT
ATV, TVA, VAT
AUC, UCA, CAU
AUD, UDA, DAU
AUL, ULA, LAU
AUM, UMA, MAU
AUN, UNA, NAU
AUS, USA, SAU
AVG, VGA, GAV
AYH, YHA, HAY
AYM, YMA, MAY
BAB, ABB, BBA
BAD, ADB, DBA
BAM, AMB, MBA
BAO, AOB, OBA
BAS, ASB, SBA
BAT, ATB, TBA
BBA, BAB, ABB
BCR, CRB, RBC
BCS, CSB, SBC
BDA, DAB, ABD
BDC, DCB, CBD
BDT, DTB, TBD
BEC, ECB, CBE
BED, EDB, DBE
BER, ERB, RBE
BES, ESB, SBE
BIA, IAB, ABI
BID, IDB, DBI
BLA, LAB, ABL
BLL, LLB, LBL
BLO, LOB, OBL
BMA, MAB, ABM
BMG, MGB, GBM
BMI, MIB, IBM
BMP, MPB, PBM
BOM, OMB, MBO
BOO, OOB, OBO
BOT, OTB, TBO
BRA, RAB, ABR
BRC, RCB, CBR
BSA, SAB, ABS
BSC, SCB, CBS
BSD, SDB, DBS
BSO, SOB, OBS
BSS, SSB, SBS
BST, STB, TBS
BSW, SWB, WBS
BUS, USB, SBU
BVA, VAB, ABV
BYO, YOB, OBY
CAC, ACC, CCA
CAD, ADC, DCA
CAE, AEC, ECA
CAF, AFC, FCA
CAG, AGC, GCA
CAI, AIC, ICA
CAL, ALC, LCA
CAM, AMC, MCA
CAN, ANC, NCA
CAP, APC, PCA
CAR, ARC, RCA
CAS, ASC, SCA
CAT, ATC, TCA
CAU, AUC, UCA
CBD, BDC, DCB
CBE, BEC, ECB
CBR, BRC, RCB
CBS, BSC, SCB
CCA, CAC, ACC
CCD, CDC, DCC
CCF, CFC, FCC
CCI, CIC, ICC
CCM, CMC, MCC
CCP, CPC, PCC
CCR, CRC, RCC
CCS, CSC, SCC
CCT, CTC, TCC
CCW, CWC, WCC
CDA, DAC, ACD
CDC, DCC, CCD
CDI, DIC, ICD
CDN, DNC, NCD
CDO, DOC, OCD
CDS, DSC, SCD
CDU, DUC, UCD
CED, EDC, DCE
CEE, EEC, ECE
CEN, ENC, NCE
CFA, FAC, ACF
CFC, FCC, CCF
CFE, FEC, ECF
CFM, FMC, MCF
CFP, FPC, PCF
CFR, FRC, RCF
CGM, GMC, MCG
CHA, HAC, ACH
CHI, HIC, ICH
CHM, HMC, MCH
CHO, HOC, OCH
CHS, HSC, SCH
CIC, ICC, CCI
CID, IDC, DCI
CIM, IMC, MCI
CIO, IOC, OCI
CIP, IPC, PCI
CIR, IRC, RCI
CIS, ISC, SCI
CLE, LEC, ECL
CLR, LRC, RCL
CLU, LUC, UCL
CLY, LYC, YCL
CMA, MAC, ACM
CMC, MCC, CCM
CMD, MDC, DCM
CMI, MIC, ICM
CML, MLC, LCM
CMS, MSC, SCM
CMT, MTC, TCM
CNM, NMC, MCN
CNR, NRC, RCN
CON, ONC, NCO
COP, OPC, PCO
COR, ORC, RCO
COS, OSC, SCO
CPA, PAC, ACP
CPC, PCC, CCP
CPI, PIC, ICP
CPL, PLC, LCP
CPM, PMC, MCP
CPR, PRC, RCP
CPS, PSC, SCP
CRB, RBC, BCR
CRC, RCC, CCR
CRE, REC, ECR
CRL, RLC, LCR
CRO, ROC, OCR
CRS, RSC, SCR
CRT, RTC, TCR
CRU, RUC, UCR
CSA, SAC, ACS
CSB, SBC, BCS
CSC, SCC, CCS
CSE, SEC, ECS
CSF, SFC, FCS
CSI, SIC, ICS
CSL, SLC, LCS
CSM, SMC, MCS
CSO, SOC, OCS
CSP, SPC, PCS
CSR, SRC, RCS
CSS, SSC, SCS
CST, STC, TCS
CTA, TAC, ACT
CTC, TCC, CCT
CTD, TDC, DCT
CTE, TEC, ECT
CTF, TFC, FCT
CTG, TGC, GCT
CTO, TOC, OCT
CTT, TTC, TCT
CUE, UEC, ECU
CUR, URC, RCU
CVA, VAC, ACV
CWA, WAC, ACW
CWC, WCC, CCW
DAB, ABD, BDA
DAC, ACD, CDA
DAD, ADD, DDA
DADA, ADAD
DAG, AGD, GDA
DAN, AND, NDA
DAR, ARD, RDA
DARA, ARAD, RADA, ADAR
DAU, AUD, UDA
DBA, BAD, ADB
DBE, BED, EDB
DBI, BID, IDB
DBS, BSD, SDB
DCA, CAD, ADC
DCB, CBD, BDC
DCC, CCD, CDC
DCE, CED, EDC
DCI, CID, IDC
DCM, CMD, MDC
DCT, CTD, TDC
DDA, DAD, ADD
DDE, DED, EDD
DDS, DSD, SDD
DDT, DTD, TDD
DEA, EAD, ADE
DED, EDD, DDE
DEN, END, NDE
DENI, ENID, NIDE, IDEN
DEP, EPD, PDE
DET, ETD, TDE
DFA, FAD, ADF
DFE, FED, EDF
DFI, FID, IDF
DIA, IAD, ADI
DIC, ICD, CDI
DIM, IMD, MDI
DIN, IND, NDI
DIT, ITD, TDI
DIU, IUD, UDI
DLI, LID, IDL
DLL, LLD, LDL
DLS, LSD, SDL
DMA, MAD, ADM
DME, MED, EDM
DMI, MID, IDM
DMS, MSD, SDM
DMT, MTD, TDM
DMV, MVD, VDM
DNA, NAD, ADN
DNC, NCD, CDN
DNI, NID, IDN
DOA, OAD, ADO
DOC, OCD, CDO
DOE, OED, EDO
DOI, OID, IDO
DOLI, OLID, LIDO, IDOL
DOS, OSD, SDO
DOU, OUD, UDO
DPA, PAD, ADP
DPE, PED, EDP
DPI, PID, IDP
DPP, PPD, PDP
DRU, RUD, UDR
DSA, SAD, ADS
DSC, SCD, CDS
DSD, SDD, DDS
DSE, SED, EDS
DSI, SID, IDS
DSM, SMD, MDS
DSO, SOD, ODS
DSP, SPD, PDS
DSR, SRD, RDS
DSS, SSD, SDS
DSU, SUD, UDS
DTB, TBD, BDT
DTD, TDD, DDT
DTE, TED, EDT
DTP, TPD, PDT
DUC, UCD, CDU
DYE, YED, EDY
DZO, ZOD, ODZ
EAA, AAE, AEA
EAD, ADE, DEA
EAK, AKE, KEA
EAL, ALE, LEA
EAM, AME, MEA
EAN, ANE, NEA
EAR, ARE, REA
EAS, ASE, SEA
EAT, ATE, TEA
ECA, CAE, AEC
ECB, CBE, BEC
ECE, CEE, EEC
ECF, CFE, FEC
ECL, CLE, LEC
ECR, CRE, REC
ECS, CSE, SEC
ECT, CTE, TEC
ECU, CUE, UEC
EDB, DBE, BED
EDC, DCE, CED
EDD, DDE, DED
EDF, DFE, FED
EDM, DME, MED
EDO, DOE, OED
EDP, DPE, PED
EDS, DSE, SED
EDT, DTE, TED
EDY, DYE, YED
EEC, ECE, CEE
EEK, EKE, KEE
EEL, ELE, LEE
EEM, EME, MEE
EEN, ENE, NEE
EER, ERE, REE
EFT, FTE, TEF
EGOR, GORE, OREG, REGO
EGP, GPE, PEG
EHF, HFE, FEH
EHR, HRE, REH
EIN, INE, NEI
EIR, IRE, REI
EIS, ISE, SEI
EKE, KEE, EEK
ELAM, LAME, AMEL, MELA
ELAS, LASE, ASEL, SELA
ELE, LEE, EEL
ELM, LME, MEL
ELS, LSE, SEL
EME, MEE, EEM
EMM, MME, MEM
EMP, MPE, PEM
EMR, MRE, REM
EMS, MSE, SEM
ENAM, NAME, AMEN, MENA
ENC, NCE, CEN
END, NDE, DEN
ENE, NEE, EEN
ENID, NIDE, IDEN, DENI
ENOL, NOLE, OLEN, LENO
ENS, NSE, SEN
EOM, OME, MEO
EON, ONE, NEO
EPD, PDE, DEP
EPP, PPE, PEP
EPS, PSE, SEP
ERA, RAE, AER
ERAS, RASE, ASER, SERA
ERB, RBE, BER
ERE, REE, EER
ERF, RFE, FER
ERI, RIE, IER
ERL, RLE, LER
ERS, RSE, SER
ERT, RTE, TER
ERY, RYE, YER
ESA, SAE, AES
ESB, SBE, BES
ESH, SHE, HES
ESL, SLE, LES
ESM, SME, MES
ESO, SOE, OES
ESOP, SOPE, OPES, PESO
ESP, SPE, PES
ESS, SSE, SES
EST, STE, TES
ETA, TAE, AET
ETD, TDE, DET
ETH, THE, HET
ETS, TSE, SET
ETY, TYE, YET
EYN, YNE, NEY
FAA, AAF, AFA
FAC, ACF, CFA
FAD, ADF, DFA
FAR, ARF, RFA
FCA, CAF, AFC
FCC, CCF, CFC
FCS, CSF, SFC
FCT, CTF, TFC
FEC, ECF, CFE
FED, EDF, DFE
FEH, EHF, HFE
FER, ERF, RFE
FIA, IAF, AFI
FID, IDF, DFI
FLA, LAF, AFL
FMC, MCF, CFM
FMS, MSF, SFM
FOO, OOF, OFO
FOS, OSF, SFO
FOU, OUF, UFO
FPC, PCF, CFP
FRA, RAF, AFR
FRC, RCF, CFR
FRI, RIF, IFR
FRT, RTF, TFR
FSH, SHF, HFS
FSU, SUF, UFS
FTE, TEF, EFT
GAGA, AGAG
GAL, ALG, LGA
GAN, ANG, NGA
GAP, APG, PGA
GAV, AVG, VGA
GBM, BMG, MGB
GCA, CAG, AGC
GCT, CTG, TGC
GDA, DAG, AGD
GHA, HAG, AGH
GMC, MCG, CGM
GON, ONG, NGO
GORE, OREG, REGO, EGOR
GPE, PEG, EGP
GPI, PIG, IGP
GPS, PSG, SGP
GRA, RAG, AGR
GSA, SAG, AGS
GTA, TAG, AGT
GTO, TOG, OGT
HAA, AAH, AHA
HAC, ACH, CHA
HAG, AGH, GHA
HAK, AKH, KHA
HAN, ANH, NHA
HAP, APH, PHA
HAS, ASH, SHA
HAT, ATH, THA
HAY, AYH, YHA
HES, ESH, SHE
HET, ETH, THE
HFE, FEH, EHF
HFS, FSH, SHF
HIA, IAH, AHI
HIC, ICH, CHI
HIN, INH, NHI
HIP, IPH, PHI
HIS, ISH, SHI
HMC, MCH, CHM
HMP, MPH, PHM
HMS, MSH, SHM
HMT, MTH, THM
HOC, OCH, CHO
HOO, OOH, OHO
HOP, OPH, PHO
HPO, POH, OHP
HRE, REH, EHR
HRS, RSH, SHR
HSC, SCH, CHS
HSU, SUH, UHS
HTS, TSH, SHT
HUS, USH, SHU
IAB, ABI, BIA
IAD, ADI, DIA
IAF, AFI, FIA
IAH, AHI, HIA
IAL, ALI, LIA
IAM, AMI, MIA
IAN, ANI, NIA
IAS, ASI, SIA
IBM, BMI, MIB
ICA, CAI, AIC
ICC, CCI, CIC
ICD, CDI, DIC
ICH, CHI, HIC
ICM, CMI, MIC
ICP, CPI, PIC
ICS, CSI, SIC
IDB, DBI, BID
IDC, DCI, CID
IDEN, DENI, ENID, NIDE
IDF, DFI, FID
IDL, DLI, LID
IDM, DMI, MID
IDN, DNI, NID
IDO, DOI, OID
IDOL, DOLI, OLID, LIDO
IDP, DPI, PID
IDS, DSI, SID
IER, ERI, RIE
IFR, FRI, RIF
IGP, GPI, PIG
ILA, LAI, AIL
ILAN, LANI, ANIL, NILA
ILO, LOI, OIL
ILS, LSI, SIL
IMA, MAI, AIM
IMC, MCI, CIM
IMD, MDI, DIM
IMS, MSI, SIM
IMT, MTI, TIM
IND, NDI, DIN
INE, NEI, EIN
INH, NHI, HIN
IOC, OCI, CIO
IOR, ORI, RIO
IPC, PCI, CIP
IPH, PHI, HIP
IPL, PLI, LIP
IPR, PRI, RIP
IPS, PSI, SIP
IPT, PTI, TIP
IRA, RAI, AIR
IRC, RCI, CIR
IRE, REI, EIR
IRM, RMI, MIR
IRO, ROI, OIR
ISA, SAI, AIS
ISAR, SARI, ARIS, RISA
ISC, SCI, CIS
ISE, SEI, EIS
ISH, SHI, HIS
ISIS, SISI
ISM, SMI, MIS
ISS, SSI, SIS
IST, STI, TIS
ITA, TAI, AIT
ITAL, TALI, ALIT, LITA
ITD, TDI, DIT
ITO, TOI, OIT
ITS, TSI, SIT
ITU, TUI, UIT
IUD, UDI, DIU
IXM, XMI, MIX
KAS, ASK, SKA
KEA, EAK, AKE
KEE, EEK, EKE
KHA, HAK, AKH
KOA, OAK, AKO
KTS, TSK, SKT
KUS, USK, SKU
LAB, ABL, BLA
LAF, AFL, FLA
LAI, AIL, ILA
LAME, AMEL, MELA, ELAM
LANI, ANIL, NILA, ILAN
LAO, AOL, OLA
LAP, APL, PLA
LASE, ASEL, SELA, ELAS
LAU, AUL, ULA
LBL, BLL, LLB
LCA, CAL, ALC
LCM, CML, MLC
LCP, CPL, PLC
LCR, CRL, RLC
LCS, CSL, SLC
LDL, DLL, LLD
LEA, EAL, ALE
LEC, ECL, CLE
LEE, EEL, ELE
LENO, ENOL, NOLE, OLEN
LER, ERL, RLE
LES, ESL, SLE
LGA, GAL, ALG
LIA, IAL, ALI
LID, IDL, DLI
LIDO, IDOL, DOLI, OLID
LIP, IPL, PLI
LITA, ITAL, TALI, ALIT
LLB, LBL, BLL
LLD, LDL, DLL
LLP, LPL, PLL
LME, MEL, ELM
LOB, OBL, BLO
LOI, OIL, ILO
LOT, OTL, TLO
LPL, PLL, LLP
LPP, PPL, PLP
LPS, PSL, SLP
LRC, RCL, CLR
LRS, RSL, SLR
LSD, SDL, DLS
LSE, SEL, ELS
LSI, SIL, ILS
LSM, SML, MLS
LSP, SPL, PLS
LTA, TAL, ALT
LUC, UCL, CLU
LYC, YCL, CLY
MAA, AAM, AMA
MAB, ABM, BMA
MAC, ACM, CMA
MAD, ADM, DMA
MAI, AIM, IMA
MANA, ANAM, NAMA, AMAN
MAP, APM, PMA
MAR, ARM, RMA
MARA, ARAM, RAMA, AMAR
MAS, ASM, SMA
MAT, ATM, TMA
MAU, AUM, UMA
MAY, AYM, YMA
MBA, BAM, AMB
MBO, BOM, OMB
MCA, CAM, AMC
MCC, CCM, CMC
MCF, CFM, FMC
MCG, CGM, GMC
MCH, CHM, HMC
MCI, CIM, IMC
MCN, CNM, NMC
MCP, CPM, PMC
MCS, CSM, SMC
MDC, DCM, CMD
MDI, DIM, IMD
MDS, DSM, SMD
MEA, EAM, AME
MED, EDM, DME
MEE, EEM, EME
MEL, ELM, LME
MELA, ELAM, LAME, AMEL
MEM, EMM, MME
MENA, ENAM, NAME, AMEN
MEO, EOM, OME
MES, ESM, SME
MGB, GBM, BMG
MIA, IAM, AMI
MIB, IBM, BMI
MIC, ICM, CMI
MID, IDM, DMI
MIR, IRM, RMI
MIS, ISM, SMI
MIX, IXM, XMI
MLC, LCM, CML
MLS, LSM, SML
MME, MEM, EMM
MMS, MSM, SMM
MMU, MUM, UMM
MOA, OAM, AMO
MOP, OPM, PMO
MORA, ORAM, RAMO, AMOR
MORO, OROM, ROMO, OMOR
MOT, OTM, TMO
MPA, PAM, AMP
MPB, PBM, BMP
MPE, PEM, EMP
MPH, PHM, HMP
MPS, PSM, SMP
MRA, RAM, AMR
MRE, REM, EMR
MRS, RSM, SMR
MSA, SAM, AMS
MSC, SCM, CMS
MSD, SDM, DMS
MSE, SEM, EMS
MSF, SFM, FMS
MSH, SHM, HMS
MSI, SIM, IMS
MSM, SMM, MMS
MSN, SNM, NMS
MSO, SOM, OMS
MSR, SRM, RMS
MSS, SSM, SMS
MST, STM, TMS
MTA, TAM, AMT
MTC, TCM, CMT
MTD, TDM, DMT
MTH, THM, HMT
MTI, TIM, IMT
MTP, TPM, PMT
MTS, TSM, SMT
MTU, TUM, UMT
MUA, UAM, AMU
MUM, UMM, MMU
MVD, VDM, DMV
MVO, VOM, OMV
MYA, YAM, AMY
NAD, ADN, DNA
NAMA, AMAN, MANA, ANAM
NAME, AMEN, MENA, ENAM
NANA, ANAN
NAR, ARN, RNA
NAS, ASN, SNA
NAU, AUN, UNA
NCA, CAN, ANC
NCD, CDN, DNC
NCE, CEN, ENC
NCO, CON, ONC
NDA, DAN, AND
NDE, DEN, END
NDI, DIN, IND
NEA, EAN, ANE
NEE, EEN, ENE
NEI, EIN, INE
NEO, EON, ONE
NEY, EYN, YNE
NGA, GAN, ANG
NGO, GON, ONG
NHA, HAN, ANH
NHI, HIN, INH
NIA, IAN, ANI
NID, IDN, DNI
NIDE, IDEN, DENI, ENID
NILA, ILAN, LANI, ANIL
NMC, MCN, CNM
NMS, MSN, SNM
NOLE, OLEN, LENO, ENOL
NOO, OON, ONO
NPP, PPN, PNP
NRC, RCN, CNR
NRO, RON, ONR
NSA, SAN, ANS
NSE, SEN, ENS
NSO, SON, ONS
NSU, SUN, UNS
NTO, TON, ONT
NUS, USN, SNU
NYA, YAN, ANY
OAD, ADO, DOA
OAK, AKO, KOA
OAM, AMO, MOA
OAP, APO, POA
OAR, ARO, ROA
OAT, ATO, TOA
OBA, BAO, AOB
OBL, BLO, LOB
OBO, BOO, OOB
OBS, BSO, SOB
OBY, BYO, YOB
OCD, CDO, DOC
OCH, CHO, HOC
OCI, CIO, IOC
OCR, CRO, ROC
OCS, CSO, SOC
OCT, CTO, TOC
ODS, DSO, SOD
ODZ, DZO, ZOD
OED, EDO, DOE
OES, ESO, SOE
OFO, FOO, OOF
OGT, GTO, TOG
OHO, HOO, OOH
OHP, HPO, POH
OID, IDO, DOI
OIL, ILO, LOI
OIR, IRO, ROI
OIT, ITO, TOI
OLA, LAO, AOL
OLEN, LENO, ENOL, NOLE
OLID, LIDO, IDOL, DOLI
OMB, MBO, BOM
OME, MEO, EOM
OMOR, MORO, OROM, ROMO
OMS, MSO, SOM
OMV, MVO, VOM
ONC, NCO, CON
ONE, NEO, EON
ONG, NGO, GON
ONO, NOO, OON
ONR, NRO, RON
ONS, NSO, SON
ONT, NTO, TON
OOB, OBO, BOO
OOF, OFO, FOO
OOH, OHO, HOO
OON, ONO, NOO
OOS, OSO, SOO
OOT, OTO, TOO
OPA, PAO, AOP
OPC, PCO, COP
OPES, PESO, ESOP, SOPE
OPH, PHO, HOP
OPM, PMO, MOP
OPS, PSO, SOP
OPT, PTO, TOP
ORA, RAO, AOR
ORAM, RAMO, AMOR, MORA
ORC, RCO, COR
OREG, REGO, EGOR, GORE
ORI, RIO, IOR
OROM, ROMO, OMOR, MORO
OSA, SAO, AOS
OSC, SCO, COS
OSD, SDO, DOS
OSF, SFO, FOS
OSO, SOO, OOS
OSS, SSO, SOS
OTB, TBO, BOT
OTL, TLO, LOT
OTM, TMO, MOT
OTO, TOO, OOT
OTR, TRO, ROT
OTS, TSO, SOT
OUD, UDO, DOU
OUF, UFO, FOU
OUS, USO, SOU
OYS, YSO, SOY
PAC, ACP, CPA
PAD, ADP, DPA
PAM, AMP, MPA
PAO, AOP, OPA
PAP, APP, PPA
PAS, ASP, SPA
PBM, BMP, MPB
PCA, CAP, APC
PCC, CCP, CPC
PCF, CFP, FPC
PCI, CIP, IPC
PCO, COP, OPC
PCS, CSP, SPC
PDE, DEP, EPD
PDP, DPP, PPD
PDS, DSP, SPD
PDT, DTP, TPD
PED, EDP, DPE
PEG, EGP, GPE
PEM, EMP, MPE
PEP, EPP, PPE
PES, ESP, SPE
PESO, ESOP, SOPE, OPES
PGA, GAP, APG
PHA, HAP, APH
PHI, HIP, IPH
PHM, HMP, MPH
PHO, HOP, OPH
PIC, ICP, CPI
PID, IDP, DPI
PIG, IGP, GPI
PLA, LAP, APL
PLC, LCP, CPL
PLI, LIP, IPL
PLL, LLP, LPL
PLP, LPP, PPL
PLS, LSP, SPL
PMA, MAP, APM
PMC, MCP, CPM
PMO, MOP, OPM
PMT, MTP, TPM
PNP, NPP, PPN
POA, OAP, APO
POH, OHP, HPO
PPA, PAP, APP
PPD, PDP, DPP
PPE, PEP, EPP
PPL, PLP, LPP
PPN, PNP, NPP
PPS, PSP, SPP
PRA, RAP, APR
PRC, RCP, CPR
PRI, RIP, IPR
PSA, SAP, APS
PSC, SCP, CPS
PSE, SEP, EPS
PSG, SGP, GPS
PSI, SIP, IPS
PSL, SLP, LPS
PSM, SMP, MPS
PSO, SOP, OPS
PSP, SPP, PPS
PSR, SRP, RPS
PSS, SSP, SPS
PST, STP, TPS
PSU, SUP, UPS
PTA, TAP, APT
PTI, TIP, IPT
PTO, TOP, OPT
PTS, TSP, SPT
PTT, TTP, TPT
PUS, USP, SPU
RAB, ABR, BRA
RADA, ADAR, DARA, ARAD
RAE, AER, ERA
RAF, AFR, FRA
RAG, AGR, GRA
RAI, AIR, IRA
RAM, AMR, MRA
RAMA, AMAR, MARA, ARAM
RAMO, AMOR, MORA, ORAM
RAO, AOR, ORA
RAP, APR, PRA
RARA, ARAR
RAS, ASR, SRA
RASA, ASAR, SARA, ARAS
RASE, ASER, SERA, ERAS
RAT, ATR, TRA
RBC, BCR, CRB
RBE, BER, ERB
RCA, CAR, ARC
RCB, CBR, BRC
RCC, CCR, CRC
RCF, CFR, FRC
RCI, CIR, IRC
RCL, CLR, LRC
RCN, CNR, NRC
RCO, COR, ORC
RCP, CPR, PRC
RCS, CSR, SRC
RCU, CUR, URC
RDA, DAR, ARD
RDS, DSR, SRD
REA, EAR, ARE
REC, ECR, CRE
REE, EER, ERE
REGO, EGOR, GORE, OREG
REH, EHR, HRE
REI, EIR, IRE
REM, EMR, MRE
RFA, FAR, ARF
RFE, FER, ERF
RIE, IER, ERI
RIF, IFR, FRI
RIO, IOR, ORI
RIP, IPR, PRI
RISA, ISAR, SARI, ARIS
RLC, LCR, CRL
RLE, LER, ERL
RMA, MAR, ARM
RMI, MIR, IRM
RMS, MSR, SRM
RNA, NAR, ARN
ROA, OAR, ARO
ROC, OCR, CRO
ROI, OIR, IRO
ROMO, OMOR, MORO, OROM
RON, ONR, NRO
ROT, OTR, TRO
RPS, PSR, SRP
RSA, SAR, ARS
RSC, SCR, CRS
RSE, SER, ERS
RSH, SHR, HRS
RSL, SLR, LRS
RSM, SMR, MRS
RSS, SSR, SRS
RSU, SUR, URS
RSV, SVR, VRS
RTA, TAR, ART
RTC, TCR, CRT
RTE, TER, ERT
RTF, TFR, FRT
RUA, UAR, ARU
RUC, UCR, CRU
RUD, UDR, DRU
RYA, YAR, ARY
RYE, YER, ERY
SAA, AAS, ASA
SAB, ABS, BSA
SAC, ACS, CSA
SAD, ADS, DSA
SAE, AES, ESA
SAG, AGS, GSA
SAI, AIS, ISA
SAM, AMS, MSA
SAN, ANS, NSA
SAO, AOS, OSA
SAP, APS, PSA
SAR, ARS, RSA
SARA, ARAS, RASA, ASAR
SARI, ARIS, RISA, ISAR
SAS, ASS, SSA
SAU, AUS, USA
SBA, BAS, ASB
SBC, BCS, CSB
SBE, BES, ESB
SBS, BSS, SSB
SBU, BUS, USB
SCA, CAS, ASC
SCB, CBS, BSC
SCC, CCS, CSC
SCD, CDS, DSC
SCH, CHS, HSC
SCI, CIS, ISC
SCM, CMS, MSC
SCO, COS, OSC
SCP, CPS, PSC
SCR, CRS, RSC
SCS, CSS, SSC
SDB, DBS, BSD
SDD, DDS, DSD
SDL, DLS, LSD
SDM, DMS, MSD
SDO, DOS, OSD
SDS, DSS, SSD
SEA, EAS, ASE
SEC, ECS, CSE
SED, EDS, DSE
SEI, EIS, ISE
SEL, ELS, LSE
SELA, ELAS, LASE, ASEL
SEM, EMS, MSE
SEN, ENS, NSE
SEP, EPS, PSE
SER, ERS, RSE
SERA, ERAS, RASE, ASER
SES, ESS, SSE
SET, ETS, TSE
SFC, FCS, CSF
SFM, FMS, MSF
SFO, FOS, OSF
SGP, GPS, PSG
SHA, HAS, ASH
SHE, HES, ESH
SHF, HFS, FSH
SHI, HIS, ISH
SHM, HMS, MSH
SHR, HRS, RSH
SHT, HTS, TSH
SHU, HUS, USH
SIA, IAS, ASI
SIC, ICS, CSI
SID, IDS, DSI
SIL, ILS, LSI
SIM, IMS, MSI
SIP, IPS, PSI
SIS, ISS, SSI
SISI, ISIS
SIT, ITS, TSI
SKA, KAS, ASK
SKT, KTS, TSK
SKU, KUS, USK
SLC, LCS, CSL
SLE, LES, ESL
SLP, LPS, PSL
SLR, LRS, RSL
SMA, MAS, ASM
SMC, MCS, CSM
SMD, MDS, DSM
SME, MES, ESM
SMI, MIS, ISM
SML, MLS, LSM
SMM, MMS, MSM
SMP, MPS, PSM
SMR, MRS, RSM
SMS, MSS, SSM
SMT, MTS, TSM
SNA, NAS, ASN
SNM, NMS, MSN
SNU, NUS, USN
SOB, OBS, BSO
SOC, OCS, CSO
SOD, ODS, DSO
SOE, OES, ESO
SOM, OMS, MSO
SON, ONS, NSO
SOO, OOS, OSO
SOP, OPS, PSO
SOPE, OPES, PESO, ESOP
SOS, OSS, SSO
SOT, OTS, TSO
SOU, OUS, USO
SOY, OYS, YSO
SPA, PAS, ASP
SPC, PCS, CSP
SPD, PDS, DSP
SPE, PES, ESP
SPL, PLS, LSP
SPP, PPS, PSP
SPS, PSS, SSP
SPT, PTS, TSP
SPU, PUS, USP
SRA, RAS, ASR
SRC, RCS, CSR
SRD, RDS, DSR
SRM, RMS, MSR
SRP, RPS, PSR
SRS, RSS, SSR
SSA, SAS, ASS
SSB, SBS, BSS
SSC, SCS, CSS
SSD, SDS, DSS
SSE, SES, ESS
SSI, SIS, ISS
SSM, SMS, MSS
SSO, SOS, OSS
SSP, SPS, PSS
SSR, SRS, RSS
SST, STS, TSS
SSU, SUS, USS
STA, TAS, AST
STB, TBS, BST
STC, TCS, CST
STE, TES, EST
STI, TIS, IST
STM, TMS, MST
STP, TPS, PST
STS, TSS, SST
SUD, UDS, DSU
SUF, UFS, FSU
SUH, UHS, HSU
SUN, UNS, NSU
SUP, UPS, PSU
SUR, URS, RSU
SUS, USS, SSU
SVR, VRS, RSV
SWA, WAS, ASW
SWB, WBS, BSW
TAC, ACT, CTA
TAE, AET, ETA
TAG, AGT, GTA
TAI, AIT, ITA
TAL, ALT, LTA
TALI, ALIT, LITA, ITAL
TAM, AMT, MTA
TAP, APT, PTA
TAR, ART, RTA
TAS, AST, STA
TBA, BAT, ATB
TBD, BDT, DTB
TBO, BOT, OTB
TBS, BST, STB
TCA, CAT, ATC
TCC, CCT, CTC
TCM, CMT, MTC
TCR, CRT, RTC
TCS, CST, STC
TCT, CTT, TTC
TDC, DCT, CTD
TDD, DDT, DTD
TDE, DET, ETD
TDI, DIT, ITD
TDM, DMT, MTD
TEA, EAT, ATE
TEC, ECT, CTE
TED, EDT, DTE
TEF, EFT, FTE
TER, ERT, RTE
TES, EST, STE
TFC, FCT, CTF
TFR, FRT, RTF
TGC, GCT, CTG
THA, HAT, ATH
THE, HET, ETH
THE, HET, ETH
THM, HMT, MTH
TIM, IMT, MTI
TIP, IPT, PTI
TIS, IST, STI
TLO, LOT, OTL
TMA, MAT, ATM
TMO, MOT, OTM
TMS, MST, STM
TOA, OAT, ATO
TOC, OCT, CTO
TOG, OGT, GTO
TOI, OIT, ITO
TON, ONT, NTO
TOO, OOT, OTO
TOP, OPT, PTO
TPD, PDT, DTP
TPM, PMT, MTP
TPS, PST, STP
TPT, PTT, TTP
TRA, RAT, ATR
TRO, ROT, OTR
TSE, SET, ETS
TSH, SHT, HTS
TSI, SIT, ITS
TSK, SKT, KTS
TSM, SMT, MTS
TSO, SOT, OTS
TSP, SPT, PTS
TSS, SST, STS
TTC, TCT, CTT
TTP, TPT, PTT
TUI, UIT, ITU
TUM, UMT, MTU
TVA, VAT, ATV
TYE, YET, ETY
UAM, AMU, MUA
UAR, ARU, RUA
UCA, CAU, AUC
UCD, CDU, DUC
UCL, CLU, LUC
UCR, CRU, RUC
UDA, DAU, AUD
UDI, DIU, IUD
UDO, DOU, OUD
UDR, DRU, RUD
UDS, DSU, SUD
UEC, ECU, CUE
UFO, FOU, OUF
UFS, FSU, SUF
UHS, HSU, SUH
UIT, ITU, TUI
ULA, LAU, AUL
UMA, MAU, AUM
UMM, MMU, MUM
UMT, MTU, TUM
UNA, NAU, AUN
UNS, NSU, SUN
UPS, PSU, SUP
URC, RCU, CUR
URS, RSU, SUR
USA, SAU, AUS
USB, SBU, BUS
USH, SHU, HUS
USK, SKU, KUS
USN, SNU, NUS
USO, SOU, OUS
USP, SPU, PUS
USS, SSU, SUS
VAB, ABV, BVA
VAC, ACV, CVA
VAT, ATV, TVA
VDM, DMV, MVD
VGA, GAV, AVG
VOM, OMV, MVO
VRS, RSV, SVR
WAC, ACW, CWA
WAS, ASW, SWA
WBS, BSW, SWB
WCC, CCW, CWC
XMI, MIX, IXM
YAM, AMY, MYA
YAN, ANY, NYA
YAR, ARY, RYA
YCL, CLY, LYC
YED, EDY, DYE
YER, ERY, RYE
YET, ETY, TYE
YHA, HAY, AYH
YMA, MAY, AYM
YNE, NEY, EYN
YOB, OBY, BYO
YSO, SOY, OYS
ZOD, ODZ, DZO

Lychen

Lychen is V8 JavaScript wrapped in C#, exposing C# into JavaScript.

<lang javascript> const wc = new CS.System.Net.WebClient(); const lines = wc.DownloadString("https://raw.githubusercontent.com/dwyl/english-words/master/words.txt"); const words = lines.split(/\n/g); const collection = {}; words.filter(word => word.length > 2).forEach(word => {

 const theword = word.toLowerCase();
 let allok = true;
 let newword = theword;
 for (let i = 0; i < word.length - 1; i++) {
   newword = newword.substr(1) + newword.substr(0, 1);
   if (!words.includes(newword)) {
     allok = false;
     break;
   }
 }
 if (allok) {
   var key = theword.split("").sort().join("");
   if (!collection[key]) {
     collection[key] = [theword];
   } else {
     if (!collections[key].includes(theword)) {
       collection[key].push(theword);
     }
   }
 }

}); Object.keys(collection) .filter(key => collection[key].length > 1) .forEach(key => console.log("%s", collection[key].join(", "))); </lang>

arar, rara
ary, yar, rya
ate, eat, tea
eth, het, the, the