Rotonyms 2のリストを作成する


11

ロトニムス2

「Rotonym」は、ROT13が別の単語(同じ言語)に変換される単語です。

この課題のために、別の定義を使用します。「Rotonym」とは、同じ言語の別の単語に循環シフト/回転する単語です。

例えば:

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

チャレンジ

辞書/単語リストを受け入れ、rotonymsの完全なリストを出力または返すプログラムまたは関数を作成します。

  1. 順序は関係ありません。
  2. 比較では大文字と小文字を区別しないため、入力は小文字のみの辞書として渡されると想定できます。
  3. 結果は(ペアではなく)単一の単語として表現される必要があり、重複は含まれないため、入力に重複がないと想定できます。
  4. これはです。

例

与えられた

ablest
abort
green
irk
stable
tables
tabor
tata
terra
vex
you

戻る

ablest
abort
stable
tables
tabor

実際のテスト

与えられた

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

戻る

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

入力語は一意であると想定できますか?
— ngn

はい、システム辞書を実行したときに、一意のフィルターを使用して入力を事前に実行したと思います。
— 傘

この例ではいくつかの回答が機能しましたが、完全な辞書では機能しませんでした。些細な例に合格する一部の回答で失敗する単語を含めるのに十分な大きさの辞書のサブセットである、より大きなテストセットを追加しました。
— 傘

@Umbrella無効な回答についてコメントしてユーザーに警告し、ユーザーが回答を修正/削除できるようにする必要があります
— -H.PWiz

abdominovaginal、そこに奇妙な言葉がありました。
— 魔法のタコ

回答:


5

ゼリー、8バイト

ṙ1$ƬfḊɗƇ

オンラインでお試しください!

代替バージョン、7バイト

ṙƬ1fḊʋƇ

ダイアディックƬはかつて奇妙なことをしていたので、チャレンジが投稿されたときにこれは機能しませんでした。

オンラインでお試しください!

使い方

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

新しいクイックキャラクターですか?すぐにそれらを使用するタイミングを学習する必要があります...(同じことですが、現在は1バイトであるため、2バイトのときよりも多く使用できます)
— -HyperNeutrino

に相当しṙ1$ÐĿfḊɗÐfます。
— デニス

4

APL(Dyalog)、20バイト

が必要です ⎕io←0

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

オンラインでお試しください!

(1↓∘∪⍳∘≢⌽¨⊂)¨ 辞書内の各文字列の一意の回転(文字列自体を除く)を取得します

≢ ベクトルの長さを取ります

⍳∘≢ 0から長さまでの範囲を作成します

⌽ ベクトルを数回回転させます。例:2⌽'abort '->' ortab '

⍳∘≢⌽¨⊂ その後、ベクトルのすべての回転を与えます

∪ 重複を削除します

1↓ 最初の要素(元の文字列)を削除します

,/ すべての回転を1つのリストにまとめる

⊂∩¨ 辞書と回転の交差を取ります


結果は同封されますが、大丈夫だと思います。@Adámは⊂∩¨さらに-1のためにあなたのトリックを盗む(またはその逆)ことができます
— ngn

4

APL(Dyalog Unicode)、25 23 22 17 16 バイトSBCS

ngnのngn / kソリューションからアイデアを借用します。そして、-6に感謝します。また、-1を返すことによってH.PWizなどの囲まれたリストを。

匿名の暗黙の接頭辞関数。

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

オンラインでお試しください!

(… )¨ 次の暗黙関数を各単語に適用します。

 ,⍨ 単語をそれ自体に連結します

 ≢,/ すべての語長の部分文字列(つまり、すべての回転)

∪ それらの回転の一意の要素(tata2回出現するような単語を防ぐため)

1,.↓ 各リストのドロップファースト(元の単語)の連結

⊂∩¨ その内容と元の単語リスト全体の共通部分


古いソリューション

-2 ngnに感謝します。

匿名プレフィックスラムダ。

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

オンラインでお試しください!

{… } 関数⍵は単語リストです:

 (… )¨ 次の暗黙関数を各単語に適用します。

  ,⍨ 単語をそれ自体に連結します

  ≢,/ すべての語長の部分文字列(つまり、すべての回転)

  ∪ それらの回転の一意の要素(tata2回出現するような単語を防ぐため)

 ↑ リストのリストを単一のマトリックス(すべてスペースの文字列で埋める)に混在させる

 ⍵∊⍨ マトリックスのどの要素が元のリストのメンバーであるかを示します

 +/ 行を合計します(元の各単語の出現回数をカウントします)

 2≤ 重複しているものを示します(つまり、元に戻す場合以外に発生します)

 ⍵/⍨ それを使用して元のリストをフィルタリングします


{∪⌽∘⍵¨⍳≢⍵}-> (∪≢,/,⍨); ご使用は∊賢いです
— NGN

@ngnありがとう。私はモーテンからトリックを学びました。
— アダム

これらの列車は私の脳を傷つけます... dfnのように簡単です:{⍵∩⊃,/1↓¨(∪≢,/,⍨)¨⍵}
— ngn

@ngnそれは私が電車にしたものの、回転のためのトリックなしで持っているものです
— -H.PWiz

1
申し訳ありませんが、最後の変更点は次の⊢∩∘⊃1,.↓(∪≢,/,⍨)¨
— とおりです。– ngn

4

Brachylog、26バイト

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

オンラインでお試しください!

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バイト

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

オンラインでお試しください!

{ } 引数付きの関数です x

0 1_インデックス0および1で文字列をカットします。例"abcd"->(,"a";"bcd")

| 2つのスライスを反転します。 ("bcd";,"a")

,/ それらに参加します: "bcda"

(,/|0 1_)\ 文字列のすべての回転を返します

(,/|0 1_)\'x の各文字列の回転です x

1_' それぞれの最初の「回転」、つまり各自明な同一回転を削除します

,/ 参加する

x^yリストのx要素のないリストですy

x^x^y交点であるxとは、y


賢い。交差部分を使用して別のバイトを保存することができました。
— アダム

2

05AB1E、14バイト

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

オンラインでお試しください!

説明

ε           }    # 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バイト

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

オンラインでお試しください!

これは、PynTreeが関数を使用して変数を割り当てて式に代入できるようにするため、PynTreeがリストの内包表記を構築する方法に大きな欠陥があることを明らかにしましたが、その後、条件は評価されてから変数の値を持たなくなり、メインブロックが評価されました。これは簡単に修正できるように見えますが、私はこれに早く気づかなかったので、この答えは恐ろしく長いです。

実際、私がそれを修正したとしても、それはまだひどく長いかもしれないと思います。


2

Perl 6、65バイト

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

それを試してみてください

拡張:

{  # 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バイト

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

ゴルフをしていない:

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
     )

オンラインでお試しください!


PPCGへようこそ!JavaScriptに精通していませんが、JavaScriptヒントスレッドをチェックして、ここに当てはまるものがあるかどうかを確認してください。
— AdmBorkBork

ヒントをありがとう。JSとES6の両方の回答を読みましたが、これに関連するすべてのヒントをすでに適用したようです。少なくとも私には明らかだったもの。
— -bubens

1

網膜0.8.2、71の 62バイト

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

オンラインでお試しください!説明:

%+)

単語ごとに繰り返します。

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

単語の次のローテーションの末尾に!。

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

しかし、それが元の単語である場合は、再度削除します。

O`

単語を並べ替えます。

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

重複を見つけます。


1

パイソン2、66の 55 70バイト

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

オンラインでお試しください!

チェーンアプローチを使用するには、デニスに11バイトを送信しますx in y in z。

一連の単語を取りますd。Rotonymsのセットを返します。


チェックが弱すぎる。{ab、abab}は合格します。
— xnor

@xnor:これらのエッジ条件をダング!簡単な修正...
— チャスブラウン


0

Japt、17バイト

非常に遅いですが、動作します。TIOはタイムアウトしますが、言語ソースの反復回数を手動で減らすことで機能することを確認しました。

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.

オンラインでお試しください!


なぜ非常に多くの繰り返しですか?最初に文字列の長さの反復を行いましたが、テストにより、MacOS dictファイル内のすべてのケースを検出するには、単語ごとに10回の左回転で十分であることがわかりました。
— 傘

@Umbrella書くのが短いからです。問題はコードゴルフであり、最速のコードではありません。
— Nit

そうですか。私はJaptに慣れていないので、繰り返しを少なくするとより多くのキャラクターが必要になることは明らかではありませんでした。
— 傘

0

Javascript、129文字

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

非ゴルフ

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

オンラインでお試しください!



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.