Rotonymların bir listesini üretin 2


11

Rotonymlar 2

Bir "Rotonym", ROT13'ün başka bir kelimeye (aynı dilde) girdiği bir kelimedir.

Bu meydan okuma için alternatif bir tanım kullanacağız: "Rotonym", dairesel başka bir kelimeye (aynı dilde) kayan / dönen bir kelimedir.

Örneğin:

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

Meydan okuma

Sözlük / kelime listesini kabul eden ve tam bir rotoni listesi basan veya döndüren bir program veya işlev yazın.

  1. Düzen önemli değil.
  2. Karşılaştırmalar büyük / küçük harfe duyarsız olmalıdır, bu nedenle girdinin yalnızca küçük harfli bir sözlük olarak aktarılacağını varsayabilirsiniz.
  3. Sonuç tek sözcükler (çiftler değil) olarak ifade edilmeli ve yineleme içermemelidir, böylece girişin yineleme olmadığını varsayabilirsiniz.
  4. Bu .

Misal

verilmiş

ablest
abort
green
irk
stable
tables
tabor
tata
terra
vex
you

Dönüş

ablest
abort
stable
tables
tabor

Gerçek Bir Test

verilmiş

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

Dönüş

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

giriş kelimelerinin benzersiz olduğunu varsayabilir miyiz?
ngn

Evet, sistem sözlüğünü çalıştırdığımda girişimi benzersiz bir filtreden geçirdiğimi düşünüyorum.
Şemsiye

Bazı cevapların örnek için çalıştığını fark ettim, ancak tam bir sözlük için değil. Önemsiz örneği geçen bazı cevaplar için başarısız olan kelimeleri içerecek kadar büyük bir sözlük alt kümesi olan daha büyük bir test seti ekledim.
Şemsiye

@ Kullanıcıyı uyarmak için geçersiz cevaplar hakkında yorum yapmalısınız, böylece cevaplarını düzeltebilir / silebilirler
H.PWiz

abdominovaginal, orada garip sözler var.
Sihirli Ahtapot Urn

Yanıtlar:


5

Jöle , 8 bayt

ṙ1$ƬfḊɗƇ

Çevrimiçi deneyin!

Alternatif sürüm, 7 bayt

ṙƬ1fḊʋƇ

Dyadic Ƭtuhaf bir şey yapardı, bu yüzden meydan okuma yayınlandığında işe yaramadı.

Çevrimiçi deneyin!

Nasıl çalışır

ṙƬ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.

Yeni hızlı karakterler mi? Hm bunları şimdi ne zaman kullanacağını öğrenmeliyiz ... (aynı şeyler ama 1-byters şimdi 2-byters olduklarında daha fazla kullanabiliyorum)
HyperNeutrino

Eşdeğerdir ṙ1$ÐĿfḊɗÐf.
Dennis

4

APL (Dyalog) , 20 bayt

gerektirir ⎕io←0

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

Çevrimiçi deneyin!

(1↓∘∪⍳∘≢⌽¨⊂)¨ sözlükteki her bir dizenin benzersiz rotasyonlarını (dizenin kendisi hariç) alır

bir vektörün uzunluğunu alır

⍳∘≢ 0 ile uzunluk arasında bir aralık oluşturur

bir vektörü birkaç kez döndürür, örneğin 2⌽'abort '->' ortab '

⍳∘≢⌽¨⊂ daha sonra bir vektörün tüm rotasyonlarını verecektir

kopyaları kaldırır

1↓ ilk öğeyi (orijinal dize) kaldırır

,/ tüm dönüşleri tek bir listede düzleştirir

⊂∩¨ sözlüğün rotasyonlarla kesişimini alır


sonucunuz ekte ortaya çıkıyor, ancak sanırım bu iyi olmalı ve @ Adám, ⊂∩¨başka bir -1
ngn

4

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

Ngn'in ngn / k çözümünden fikirler alır . Ve sonra -6 onun sayesinde. Ayrıca -1 gibi H.PWiz gibi kapalı bir liste döndürerek .

Anonim zımni önek fonksiyonu.

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

Çevrimiçi deneyin!

( Her kelimeye aşağıdaki tacit fonksiyonunu uygulayın:

,⍨ kelimeyi kendine bitiştir

≢,/ tüm kelime uzunluğu alt dizeleri (yani tüm dönüşler)

 bu rotasyonların benzersiz öğeleri (kelimelerin tataiki kez görünmesini önlemek için)

1,.↓ her listenin ilk (orijinal kelimeleri) bırakılması

⊂∩¨ bunun içeriğinin ve tüm orijinal kelime listesinin kesişimi


Eski çözüm

-2 sayesinde teşekkürler.

Anonim önek lambda.

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

Çevrimiçi deneyin!

{} Fonksiyonu kelime listesi nerede :

( Her kelimeye aşağıdaki tacit fonksiyonunu uygulayın:

  ,⍨ kelimeyi kendine bitiştir

  ≢,/ tüm kelime uzunluğu alt dizeleri (yani tüm dönüşler)

   bu rotasyonların benzersiz öğeleri (kelimelerin tataiki kez görünmesini önlemek için)

 liste listesini tek bir matrise karıştırın (tüm boşluk dizeli pedler)

⍵∊⍨ matrisin hangi öğelerinin orijinal listenin üyesi olduğunu belirtin

+/ satırları topla (orijinal kelimelerin her birinin oluşumunu sayar)

2≤ hangilerinin yinelemelere sahip olduğunu belirtin (örn. orijinal haline döndürüldüğünden farklı olarak ortaya çıkar)

⍵/⍨ orijinal listeyi filtrelemek için bunu kullanın


{∪⌽∘⍵¨⍳≢⍵}-> (∪≢,/,⍨); kullanımınız zeki
ngn

@ngn Teşekkürler. Hile Morten'den öğrendim.
Adam

Bu trenler beynimi incitiyor ... bir dfn olarak daha basit:{⍵∩⊃,/1↓¨(∪≢,/,⍨)¨⍵}
ngn

@ngn Her ne kadar bir trene girip dönüş hilesi olmadan yaptım
H.PWiz

1
üzgünüm, son bir zihin değişikliği:⊢∩∘⊃1,.↓(∪≢,/,⍨)¨
ngn

4

Brachylog , 26 bayt

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

Çevrimiçi deneyin!

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 ˢ)


3

K (ngn / k) , 23 bayt

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

Çevrimiçi deneyin!

{ } argümanlı bir işlevdir x

0 1_0 ve 1 dizinlerinde bir dize keser, örneğin "abcd"->(,"a";"bcd")

| iki dilimi tersine çevirir: ("bcd";,"a")

,/ onlara katılır: "bcda"

(,/|0 1_)\ bir dizenin tüm dönüşlerini döndürür

(,/|0 1_)\'x her dizenin dönüşleri x

1_' her birinin ilk "rotasyonunu", yani her önemsiz kimlik rotasyonunu

,/ katılmak

x^ylistenin xöğeleri olmayan listey

x^x^ykesişimi xvey


Zeki. Kesişim bölümünü başka bir bayt kurtarmak için kullanabildim.
Adam

2

05AB1E , 14 bayt

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

Çevrimiçi deneyin!

açıklama

ε           }    # 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

2

PynTree , 44 bayt

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

Çevrimiçi deneyin!

Bu, PynTree'nin liste kavrayışlarını oluşturma biçiminde büyük bir kusur olduğunu ortaya çıkardı, çünkü değişkenleri atamak için işlevler kullanır, böylece atama ifadelere gidebilir, ancak daha sonra koşullar, değerlendirilene kadar değişkenin değerine sahip olmaz ve ana blok değerlendirildi. Bu kolayca düzeltilebilir gibi görünüyor, ancak bunu daha önce fark etmedim ve bu yüzden bu cevap çok uzun.

Aslında, hala çok uzun olabileceğini düşündüğümü düzeltsem bile.


2

Perl 6 , 65 bayt

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

Dene

Expanded:

{  # 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)
  }
}

2

JavaScript (Node.js), 105 99 bayt

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

Ungolfed:

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
     )

Çevrimiçi deneyin!


PPCG'ye Hoşgeldiniz! JavaScript konusunda bilgili değilim, ancak burada geçerli bir şey olup olmadığını görmek için JavaScript İpuçları iş parçacığını kontrol ettiğinizden emin olun .
AdmBorkBork

İpucu için teşekkürler. Hem JS hem de ES6 için cevapları okudum ama bunun için tüm ilgili ipuçlarını zaten uyguladım. En azından benim için bariz olanlar.
bubens

1

Retina 0.8.2 , 71 62 bayt

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

Çevrimiçi deneyin! Açıklama:

%+)

Her kelime için tekrarlayın.

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

Kelimenin sonundaki rotasyonun başına bir boşluk ekler !.

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

Ancak orijinal kelime buysa, tekrar silin.

O`

Kelimeleri sıralayın.

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

Kopyaları bulun.


1

Python 2 , 66 55 70 bayt

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

Çevrimiçi deneyin!

Zincirleme yaklaşımı kullanmak için Dennis'e 11 byte x in y in z.

Bir dizi kelime alır d; bir dizi Rotonym döndürür.


Kontrol çok zayıf; {ab, abab} geçecekti.
xnor

@xnor: Bu uç koşulları tehlikeye at! Hızlı bir düzeltme ...
Chas Brown


0

Japt , 17 bayt

Son derece yavaş, ama çalışıyor. TIO zaman aşımına uğradı, ancak dil kaynağındaki yineleme sayısını manuel olarak azaltarak çalıştığını doğruladım.

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.

Çevrimiçi deneyin!


Neden bu kadar çok yineleme? Başlangıçta dize uzunluğu için yinelemeler yaptım, ancak test ederek kelime başına on sol dönüşün MacOS dict dosyasındaki tüm durumları bulmak için yeterli olduğunu fark ettim.
Şemsiye

@Umbrella Çünkü yazmak kısa. Soru, kod golf, en hızlı kod değil.
Nit

Anlıyorum. Japt'i bilmiyorum, bu yüzden daha az tekrarlamanın daha fazla karakter alacağı açık değildi.
Şemsiye

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);}

Ungolfed

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);
}

Çevrimiçi deneyin!



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.