Hasilkan Daftar Rotonim 2

11

Rotonim 2

"Rotonim" adalah kata yang ROT13 menjadi kata lain (dalam bahasa yang sama).

Untuk tantangan ini, kami akan menggunakan definisi alternatif: "Rotonim" adalah kata yang digulirkan / dirotasi menjadi kata lain (dalam bahasa yang sama).

Sebagai contoh:

'stable' < 'tables' < 'ablest'
'abort' > 'tabor'
'tada' >> 'data'

Tantangan

Tulis program atau fungsi yang menerima kamus / daftar kata dan cetak atau kembalikan daftar lengkap dari kata-kata kebalikan.

  1. Urutan tidak masalah.
  2. Perbandingan harus peka huruf besar kecil, sehingga Anda dapat mengasumsikan input akan diteruskan sebagai kamus kecil saja.
  3. Hasil harus dinyatakan sebagai kata tunggal (bukan pasangan) dan tidak mengandung duplikat, sehingga Anda dapat menganggap input tidak memiliki duplikat.
  4. Ini adalah .

Contoh

Diberikan

ablest
abort
green
irk
stable
tables
tabor
tata
terra
vex
you

Kembali

ablest
abort
stable
tables
tabor

Tes Nyata

Diberikan

a aa aal aalii aam aani aardvark aardwolf aaron aaronic aaronical aaronite aaronitic aaru ab aba ababdeh ababua abac abaca abacate abacay abacinate abacination abaciscus abacist aback abactinal abactinally abaction abactor abaculus abacus abadite abaff abaft abaisance abaiser abaissed abalienate abalienation abalone abama abampere abandon abandonable abandoned abandonedly abandonee abandoner abandonment abanic abantes abaptiston abarambo abaris abarthrosis abarticular abarticulation abas abase abased abasedly abasedness abasement abaser abasgi abash abashed abashedly abashedness abashless abashlessly abashment abasia abasic abask abassin abastardize abatable abate abatement abater abatis abatised abaton abator abattoir abatua abature abave abaxial abaxile abaze abb abba abbacomes abbacy abbadide abbas abbasi abbassi abbasside abbatial abbatical abbess abbey abbeystede abbie abbot abbotcy abbotnullius abbotship abbreviate abbreviately abbreviation abbreviator abbreviatory abbreviature abby abcoulomb abdal abdat abderian abderite abdest abdicable abdicant abdicate abdication abdicative abdicator abdiel abditive abditory abdomen abdominal abdominales abdominalian abdominally abdominoanterior abdominocardiac abdominocentesis abdominocystic abdominogenital abdominohysterectomy abdominohysterotomy abdominoposterior abdominoscope abdominoscopy abdominothoracic abdominous abdominovaginal abdominovesical abduce abducens abducent abduct abduction abductor abe abeam abear abearance abecedarian abecedarium abecedary abed abeigh abel abele abelia abelian abelicea abelite abelmoschus abelmosk abelonian abeltree abencerrages abenteric abepithymia aberdeen aberdevine aberdonian aberia aberrance aberrancy aberrant aberrate aberration aberrational aberrator aberrometer aberroscope aberuncator abet abetment ablest abort abut ach ache acher achete achill achor acor acre acyl ad adad adat add addlings adet ala ama baa bafta balonea batea beta caba cha chilla cora crea da dad dada data each lacy orach rache saddling stable tables tabor tabu tade teache zoquean zoraptera zorgite zoril zorilla zorillinae zorillo zoroastrian zoroastrianism zoroastrism zorotypus zorrillo zorro zosma zoster zostera zosteraceae zosteriform zosteropinae zosterops zouave zounds zowie zoysia zubeneschamali zuccarino zucchetto zucchini zudda zugtierlast zugtierlaster zuisin zuleika zulhijjah zulinde zulkadah zulu zuludom zuluize zumatic zumbooruk zuni zunian zunyite zupanate zutugil zuurveldt zuza zwanziger zwieback zwinglian zwinglianism zwinglianist zwitter zwitterion zwitterionic zyga zygadenine zygadenus zygaena zygaenid zygaenidae zygal zygantra zygantrum zygapophyseal zygapophysis zygion zygite zygnema zygnemaceae zygnemales zygnemataceae zygnemataceous zygnematales zygobranch zygobranchia zygobranchiata zygobranchiate zygocactus zygodactyl zygodactylae zygodactyli zygodactylic zygodactylism zygodactylous zygodont zygolabialis zygoma zygomata zygomatic zygomaticoauricular zygomaticoauricularis zygomaticofacial zygomaticofrontal zygomaticomaxillary zygomaticoorbital zygomaticosphenoid zygomaticotemporal zygomaticum zygomaticus zygomaxillare zygomaxillary zygomorphic zygomorphism zygomorphous zygomycete zygomycetes zygomycetous zygon zygoneure zygophore zygophoric zygophyceae zygophyceous zygophyllaceae zygophyllaceous zygophyllum zygophyte zygopleural zygoptera zygopteraceae zygopteran zygopterid zygopterides zygopteris zygopteron zygopterous zygosaccharomyces zygose zygosis zygosperm zygosphenal zygosphene zygosphere zygosporange zygosporangium zygospore zygosporic zygosporophore zygostyle zygotactic zygotaxis zygote zygotene zygotic zygotoblast zygotoid zygotomere zygous zygozoospore zymase zyme zymic zymin zymite zymogen zymogene zymogenesis zymogenic zymogenous zymoid zymologic zymological zymologist zymology zymolyis zymolysis zymolytic zymome zymometer zymomin zymophore zymophoric zymophosphate zymophyte zymoplastic zymoscope zymosimeter zymosis zymosterol zymosthenic zymotechnic zymotechnical zymotechnics zymotechny zymotic zymotically zymotize zymotoxic zymurgy zyrenian zyrian zyryan zythem zythia zythum zyzomys zyzzogeton

Kembali

aal aam aba abac abaft abalone abate abet ablest abort abut ach ache acher achete achill achor acor acre acyl ad adad adat add addlings adet ala ama baa bafta balonea batea beta caba cha chilla cora crea da dad dada data each lacy orach rache saddling stable tables tabor tabu tade teache
Payung
sumber
dapatkah kita menganggap kata-kata input unik?
ngn
Ya, saya pikir saya menjalankan input saya melalui filter unik ketika saya menjalankan kamus sistem.
Payung
Saya perhatikan beberapa jawaban berfungsi sebagai contoh, tetapi tidak untuk kamus lengkap. Saya menambahkan set tes yang lebih besar yang merupakan bagian dari kamus yang cukup besar untuk memuat kata-kata yang gagal untuk beberapa jawaban yang lulus contoh sepele.
Payung
@Umbrella Anda harus mengomentari jawaban yang tidak valid untuk mengingatkan pengguna, sehingga mereka dapat memperbaiki / menghapus jawaban mereka
H.PWiz
abdominovaginal, Anda punya beberapa kata aneh di sana.
Magic Gurita Guci

Jawaban:

5

Jelly , 8 byte

ṙ1$ƬfḊɗƇ

Cobalah online!

Versi alternatif, 7 byte

ṙƬ1fḊʋƇ

Dyadic Ƭdigunakan untuk melakukan sesuatu yang aneh, jadi ini tidak berhasil ketika tantangan diposting.

Cobalah online!

Bagaimana itu bekerja

ṙƬ1fḊʋƇ  Main link. Argument: A (array of strings)

     ʋ   Vier; combine the 4 preceding links into a dyadic chain.
      Ƈ  Comb; for each string s in A, call the chain with left argument s and
         right argument A. Keep s iff the chain returned a truthy value.
 Ƭ           'Til; keep calling the link to the left, until the results are no
             longer unique. Return the array of unique results.
ṙ 1          Rotate the previous result (initially s) one unit to the left.
   f         Filter; keep only rotations that belong to A.
             s is a rotonym iff there are at least two rotations of s in A.
    Ḋ        Deque; remove the first string (s) of the result.
             The resulting array is non-empty / truthy iff s is a rotonym.
Dennis
sumber
Oh karakter cepat baru? Hm harus belajar kapan harus menggunakan itu sekarang ... (hal yang sama tetapi 1-byters sekarang jadi saya bisa menggunakannya lebih dari dulu ketika mereka 2-byters)
HyperNeutrino
Ini setara dengan ṙ1$ÐĿfḊɗÐf.
Dennis
4

APL (Dyalog) , 20 byte

Membutuhkan ⎕io←0

⊂∩¨(,/(1↓∘∪⍳∘≢⌽¨⊂)¨)

Cobalah online!

(1↓∘∪⍳∘≢⌽¨⊂)¨ mendapat rotasi unik (tidak termasuk string itu sendiri) dari setiap string dalam kamus

membutuhkan panjang vektor

⍳∘≢ menciptakan rentang dari 0 hingga panjang

memutar vektor beberapa kali, mis. 2⌽'abort '->' ortab '

⍳∘≢⌽¨⊂ kemudian akan memberikan semua rotasi vektor

menghapus duplikat

1↓ menghapus elemen pertama (string asli)

,/ meratakan semua rotasi menjadi satu daftar

⊂∩¨ mengambil persimpangan kamus dengan rotasi

H.Piz
sumber
hasil Anda keluar terlampir, tapi saya kira itu harus baik-baik saja, dan @ Adám dapat mencuri ⊂∩¨trik Anda (atau sebaliknya) untuk -1 lebih lanjut
ngn
4

APL (Dyalog Unicode) , 25 23 22 17 16 byte SBCS

Pinjam ide dari solusi ngn / k ngn . Dan kemudian -6 terima kasih padanya. Juga -1 dengan mengembalikan daftar terlampir seperti H.PWiz .

Fungsi awalan diam-diam anonim.

⊂∩¨1,.↓(∪≢,/,⍨)¨

Cobalah online!

(...  terapkan fungsi diam-diam berikut untuk setiap kata:

,⍨ menyatukan kata untuk dirinya sendiri

≢,/ semua sub-string kata-panjang (yaitu semua rotasi)

 elemen unik dari rotasi tersebut (untuk mencegah kata-kata seperti tatatampil dua kali)

1,.↓ gabungan dari drop-first (kata-kata asli) dari setiap daftar

⊂∩¨ persimpangan isi itu dan seluruh daftar kata asli


Solusi lama

-2 Terima kasih kepada ngn.

Lambda awalan anonim.

{⍵/⍨2≤+/⍵∊⍨↑(∪≢,/,⍨)¨⍵}

Cobalah online!

{... } berfungsi di mana daftar kata:

(...  terapkan fungsi diam-diam berikut untuk setiap kata:

  ,⍨ menyatukan kata untuk dirinya sendiri

  ≢,/ semua sub-string kata-panjang (yaitu semua rotasi)

   elemen unik dari rotasi tersebut (untuk mencegah kata-kata seperti tatatampil dua kali)

 mencampur daftar daftar menjadi satu matriks (bantalan dengan string semua ruang)

⍵∊⍨ menunjukkan elemen matriks mana yang merupakan anggota dari daftar asli

+/ jumlah baris (jumlah kemunculan dari masing-masing kata aslinya)

2≤ menunjukkan yang memiliki duplikat (yaitu terjadi selain ketika diputar kembali ke aslinya)

⍵/⍨ gunakan itu untuk menyaring daftar asli

Adm
sumber
{∪⌽∘⍵¨⍳≢⍵}-> (∪≢,/,⍨); penggunaan Anda pintar
ngn
@ ngn Terima kasih. Saya belajar trik dari Morten.
Adám
kereta-kereta itu membuat otakku sakit ... itu lebih sederhana sebagai dfn:{⍵∩⊃,/1↓¨(∪≢,/,⍨)¨⍵}
ngn
@ Ngn Itulah yang saya miliki walaupun dibuat menjadi kereta api dan tanpa trik rotasi
H.PWiz
1
maaf, satu perubahan pikiran terakhir:⊢∩∘⊃1,.↓(∪≢,/,⍨)¨
ngn
4

Brachylog , 26 byte

g;?z{tWl⟧₆∋I;W↺₍R;W≠&h∋R}ˢ

Cobalah online!

g;?z                          % Zip the whole input with each word in it respectively
    {                   }ˢ    % Apply this predicate to each pair in the zip
                              %   and select the successful values
     tW                       % Let the current word be W
       l⟧₆∋I                  % There exists a number I from 1 to length(W)-1
            ;W↺₍R             % And R is the result of circularly shifting the 
                              %   current word I times 
                 ;W≠          % And R is not the current word itself (needed for words like "tata")
                    &h∋R      % And R is one of the input dictionary words
                              % (R is implicitly the output of the predicate, and 
                              %  successful R values are collected and output by the ˢ)
sundar - Pasang kembali Monica
sumber
3

Python 2 , 73 69 67 byte

lambda d:[w for w in d if{w[i:]+w[:i]for i in range(len(w))}-{w}&d]

Cobalah online!

Mengambil satu set kata (huruf kecil), dan mengembalikan daftar rotonim.


Diselamatkan

  • -2 byte, terima kasih atas ovs
TFeld
sumber
67 byte
ovs
3

K (ngn / k) , 23 byte

{x^x^,/1_'(,/|0 1_)\'x}

Cobalah online!

{ } adalah fungsi dengan argumen x

0 1_memotong string pada indeks 0 dan 1, misalnya "abcd"->(,"a";"bcd")

| membalikkan dua irisan: ("bcd";,"a")

,/ bergabung dengan mereka: "bcda"

(,/|0 1_)\ mengembalikan semua rotasi string

(,/|0 1_)\'x adalah rotasi dari setiap string x

1_' menjatuhkan "rotasi" pertama masing-masing, yaitu masing-masing rotasi identitas sepele

,/ Ikuti

x^yadalah daftar xtanpa elemen daftary

x^x^yadalah persimpangan dari xdany

ngn
sumber
Pintar. Saya dapat menggunakan bagian persimpangan untuk menyimpan byte lain.
Adám
2

05AB1E , 14 byte

εDvDÀ})ÙåO<Ā}Ï

Cobalah online!

Penjelasan

ε           }    # apply to each word in the input
 Dv  }           # for each letter in the word
   DÀ            # copy the previous word and rotate it left
      )Ù         # wrap the rotations in a list and remove duplicates
        å        # check each rotation for presence in the input
         O       # sum presences
          <Ā     # decrement the sum and truthify it (check if 1 or greater)
             Ï   # filter, keep words in input that are true in the resulting list
Emigna
sumber
2

PynTree , 44 byte

§y:f#x0€[x/|Ḟz&⁻xzėzḞw+#x`wLx#x`0wRLxy]y#\x1

Cobalah online!

Ini ternyata mengungkapkan kelemahan utama dalam cara PynTree membangun pemahaman daftar karena menggunakan fungsi untuk menetapkan variabel sehingga penugasan dapat berjalan dalam ekspresi, tetapi kemudian kondisi akhirnya tidak memiliki nilai variabel sampai setelah dievaluasi dan blok utama telah dievaluasi. Tampaknya ini mudah diperbaiki tetapi saya tidak menyadarinya lebih awal sehingga jawaban ini sangat panjang.

Sebenarnya bahkan jika saya memperbaikinya saya pikir itu masih sangat panjang.

HyperNeutrino
sumber
2

Perl 6 , 65 byte

{@^a.grep:{@aany(($/=[.comb]).rotate,*.rotate...^*eq$/).join}}

Cobalah

Diperluas:

{  # bare block lambda with placeholder parameter @a

  @^a     # declare and use placeholder parameter
  .grep:  # find the values that match
  {

    @a
                # Set contains operator

    any(         # create a junction of the following

      # generate a sequence
      (
        $/ =     # store into $/ (no declaration needed for this variable)
        [        # turn into an array instead of a one-time sequence
          .comb  # the input split into characters
        ]
      ).rotate,  # start the sequence on the first rotation

      *.rotate   # use this to generate the rest of the values in the sequence

      ...^       # keep generating values until: (and throw out last value)

      * eq $/    # one of them matches the cached array of the input

    ).join       # for each array in the junction join the strings (no spaces)
  }
}
Brad Gilbert b2gills
sumber
2

JavaScript (Node.js), 105 99 byte

f=l=>l.filter(w=>[...Array(k=w.length)].map((x,i)=>(w+w).substr(i,k)).some(r=>l.includes(r)&&r!=w))

Tidak Disatukan:

f = list =>
  list.filter( word =>
    // create a list of all rotonyms for the current word
    [ ...Array( len = word.length ) ]
      .map( (x,i) => 
         ( word+word ).substr(i, len)
      )
    // check if any of the rotonyms is in the initial dictionary/wordlist
     .some( rotonym =>
        list.includes( rotonym )
    // and is not the word itself
        && rotonym != word
     )

Cobalah online!

buben
sumber
Selamat datang di PPCG! Saya tidak berpengalaman dalam JavaScript, tetapi pastikan untuk memeriksa utas Tips JavaScript untuk melihat apakah ada sesuatu yang berlaku di sini.
AdmBorkBork
Terima kasih atas petunjuknya. Saya membaca jawaban untuk JS dan ES6 tetapi tampaknya saya sudah menerapkan semua tips yang relevan untuk ini. Setidaknya yang jelas bagiku.
bubens
1

Retina 0.8.2 , 71 62 byte

^(\w)(\w*)
$2$1!¶$&
%+)s`^(.+)(!.*¶\1)$
$2
O`
!`\b(.+)(?=¶\1!)

Cobalah online! Penjelasan:

%+)

Ulangi untuk setiap kata.

^(\w)(\w*)
$2$1!¶$&

Tambahkan rotasi kata berikutnya dengan trailing !.

s`^(.+)(!.*¶\1)$
$2

Tetapi jika itu kata aslinya, maka hapus lagi.

O`

Sortir kata-katanya.

!`\b(.+)(?=¶\1!)

Temukan duplikatnya.

Neil
sumber
1

Python 2 , 66 55 70 byte

lambda d:{w for w in d for v in d if v not in w not in v in w*2in v*3}

Cobalah online!

11 byte thx ke Dennis untuk menggunakan x in y in zpendekatan dirantai .

Mengambil satu set kata-kata d; mengembalikan seperangkat Rotonim.

Chas Brown
sumber
Ceknya terlalu lemah; {ab, abab} akan melewatinya.
xnor
@xnor: Ganggu kondisi tepi itu! Perbaikan cepat ...
Chas Brown
0

Japt , 17 byte

Sangat lambat, tetapi berhasil. TIO time out, tetapi saya mengonfirmasi itu bekerja dengan secara manual menurunkan jumlah iterasi dalam sumber bahasa.

f@_XéZ ÀX©UøXéZ}a
f@                // Filter the input array by
  _            }a // generating up to 1e8 rotations of each string
   XéZ ÀX         // and checking if the rotation is different than the original,
         ©UøXéZ   // yet still exists in the input array.

Cobalah online!

Nit
sumber
Mengapa begitu banyak iterasi? Saya awalnya melakukan iterasi untuk panjang string, tetapi melalui pengujian menyadari sepuluh rotasi kiri per kata sudah cukup untuk menemukan semua kasus dalam file dict MacOS.
Payung
@Umbrella Karena singkat untuk menulis. Pertanyaannya adalah kode golf, bukan kode tercepat.
Nit
Saya melihat. Saya tidak terbiasa dengan Japt, jadi bagi saya tidak terlihat bahwa iterasi yang lebih sedikit akan membutuhkan lebih banyak karakter.
Payung
0

Javascript, 129 Karakter

f=a=>{n={};r=w=>w.slice(1,w.length)+w[0];a.map(w=>{m=r(w);while(m!=w){if(-~a.indexOf(m))n[m]=1;m=r(m);}});return Object.keys(n);}

Tidak disatukan

f=a=>{
    n={};
    r=w=>w.slice(1,w.length)+w[0];
    a.map(w=>{
        m=r(w);
        while(m!=w){
            if(-~a.indexOf(m))n[m]=1;
            m=r(m);
        }
    });
    return Object.keys(n);
}

Cobalah online!

Tertidur
sumber
0

Java (JDK 10) , 144 byte

l->{for(var s:l){var r=s;for(int i=s.length();i-->1;){r=r.substring(1)+r.charAt(0);if(!r.equals(s)&l.contains(r)){System.out.println(s);i=0;}}}}

Cobalah online!

Olivier Grégoire
sumber
0

JavaScript (Node.js) , 66 byte

s=>s.filter(t=>s.some(u=>(t+t).match(u)&&t!=u&t.length==u.length))

Cobalah online!

jawaban yang membosankan

l4m2
sumber
Ini tidak berfungsi dengan benar. Uji terhadap set tes yang lebih besar yang saya tambahkan.
Payung