Tạo một danh sách các từ đồng nghĩa 2


11

Từ đồng nghĩa 2

"Từ đồng nghĩa" là một từ mà ROT13 chuyển thành một từ khác (trong cùng một ngôn ngữ).

Đối với thử thách này, chúng tôi sẽ sử dụng một định nghĩa thay thế: "Từ đồng nghĩa" là một từ mà dịch chuyển / xoay tròn thành một từ khác (trong cùng một ngôn ngữ).

Ví dụ:

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

Các thách thức

Viết chương trình hoặc chức năng chấp nhận danh sách từ điển / từ và in hoặc trả về danh sách đầy đủ các từ đồng nghĩa.

  1. Đặt hàng không thành vấn đề.
  2. Việc so sánh phải không phân biệt chữ hoa chữ thường, vì vậy bạn có thể giả sử đầu vào sẽ được chuyển dưới dạng từ điển chỉ viết thường.
  3. Kết quả phải được thể hiện dưới dạng các từ đơn (không phải các cặp) và không chứa các từ trùng lặp, vì vậy bạn có thể giả sử đầu vào không có trùng lặp.
  4. Đây là .

Thí dụ

Được

ablest
abort
green
irk
stable
tables
tabor
tata
terra
vex
you

Trở về

ablest
abort
stable
tables
tabor

Một thử nghiệm thực sự

Được

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

Trở về

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

chúng ta có thể giả sử từ đầu vào là duy nhất?
ngn

Có, tôi nghĩ rằng tôi đã chạy trước đầu vào của mình thông qua một bộ lọc duy nhất khi tôi chạy từ điển hệ thống.
Ô

Tôi nhận thấy một số câu trả lời làm việc cho ví dụ, nhưng không phải cho một từ điển đầy đủ. Tôi đã thêm một bộ kiểm tra lớn hơn là một tập hợp con của từ điển đủ lớn để chứa các từ không thành công cho một số câu trả lời vượt qua ví dụ tầm thường.
Ô

@Umhima bạn nên bình luận về bất kỳ câu trả lời không hợp lệ nào để cảnh báo người dùng, để họ có thể sửa / xóa câu trả lời của họ
H.PWiz

abdominovaginal, bạn có một số từ kỳ lạ ở đó.
Bạch tuộc ma thuật Urn

Câu trả lời:


5

Thạch , 8 byte

ṙ1$ƬfḊɗƇ

Hãy thử trực tuyến!

Phiên bản thay thế, 7 byte

ṙƬ1fḊʋƇ

Dyadic đã Ƭtừng làm điều gì đó kỳ lạ, vì vậy điều này không hiệu quả khi thử thách được đăng.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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

Oh nhân vật mới nhanh? Tôi phải học khi nào nên sử dụng chúng ngay bây giờ ... (những thứ tương tự nhưng bây giờ là 1-byters để tôi có thể sử dụng chúng nhiều hơn trở lại khi chúng là 2-byters)
HyperNeutrino

Nó tương đương với ṙ1$ÐĿfḊɗÐf.
Dennis

4

APL (Dyalog) , 20 byte

Đòi hỏi ⎕io←0

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

Hãy thử trực tuyến!

(1↓∘∪⍳∘≢⌽¨⊂)¨ có các phép quay duy nhất (không bao gồm chính chuỗi) của mỗi chuỗi trong từ điển

lấy chiều dài của một vectơ

⍳∘≢ tạo phạm vi từ 0 đến chiều dài

xoay một vectơ một số lần, ví dụ 2⌽'abort '->' ortab '

⍳∘≢⌽¨⊂ sau đó sẽ cho tất cả các phép quay của một vectơ

loại bỏ các bản sao

1↓ xóa phần tử đầu tiên (chuỗi gốc)

,/ làm phẳng tất cả các phép quay thành một danh sách

⊂∩¨ lấy giao điểm của từ điển với các phép quay


kết quả của bạn được đưa ra kèm theo, nhưng tôi đoán điều đó sẽ ổn và @ Adám có thể đánh cắp ⊂∩¨mánh khóe của bạn (hoặc ngược lại) để có thêm -1
ngn

4

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

Mượn ý tưởng từ giải pháp ngn / k của ngn . Và sau đó -6 cảm ơn anh. Cũng -1 bằng cách trả về một danh sách kèm theo như H.PWiz .

Chức năng tiền tố ẩn danh.

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

Hãy thử trực tuyến!

(...  áp dụng các chức năng ngầm sau đây để mỗi từ:

,⍨ nối từ với chính nó

≢,/ tất cả các chuỗi con có độ dài từ (nghĩa là tất cả các phép quay)

 các yếu tố độc đáo của các phép quay đó (để ngăn các từ như tataxuất hiện hai lần)

1,.↓ sự kết hợp của các từ đầu tiên (các từ gốc) của mỗi danh sách

⊂∩¨ giao điểm của nội dung đó và toàn bộ danh sách từ gốc


Giải pháp cũ

-2 nhờ ngn.

Tiền tố nặc danh lambda.

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

Hãy thử trực tuyến!

{... } chức năng nơi đây là danh sách từ:

(...  áp dụng các chức năng ngầm sau đây để mỗi từ:

  ,⍨ nối từ với chính nó

  ≢,/ tất cả các chuỗi con có độ dài từ (nghĩa là tất cả các phép quay)

   các yếu tố độc đáo của các phép quay đó (để ngăn các từ như tataxuất hiện hai lần)

 trộn danh sách các danh sách thành một ma trận đơn (các miếng đệm với các chuỗi không gian)

⍵∊⍨ cho biết phần tử nào của ma trận là thành viên của danh sách gốc

+/ tính tổng các hàng (số lần xuất hiện của từng từ gốc)

2≤ chỉ ra cái nào có trùng lặp (nghĩa là xảy ra khác với khi quay trở lại ban đầu)

⍵/⍨ sử dụng để lọc danh sách gốc


{∪⌽∘⍵¨⍳≢⍵}-> (∪≢,/,⍨); việc sử dụng của bạn rất thông minh
ngn

@ngn Cảm ơn. Tôi đã học được mẹo từ Morten.
Adám

những chuyến tàu đó làm cho não tôi bị tổn thương ... nó đơn giản như một dfn:{⍵∩⊃,/1↓¨(∪≢,/,⍨)¨⍵}
ngn

@ngn Đó là những gì tôi có mặc dù đã được tạo thành một chuyến tàu và không có mánh khóe để quay
H.PWiz

1
xin lỗi, một thay đổi cuối cùng của tâm trí:⊢∩∘⊃1,.↓(∪≢,/,⍨)¨
ngn

4

Brachylog , 26 byte

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

Hãy thử trực tuyến!

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

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]

Hãy thử trực tuyến!

Lấy một tập hợp các từ (chữ thường) và trả về một danh sách các từ đồng nghĩa.


Đã lưu

  • -2 byte, nhờ có lò nướng


3

K (ngn / k) , 23 byte

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

Hãy thử trực tuyến!

{ } là một hàm với đối số x

0 1_cắt một chuỗi tại các chỉ số 0 và 1, ví dụ "abcd"->(,"a";"bcd")

| đảo ngược hai lát: ("bcd";,"a")

,/ tham gia cùng họ: "bcda"

(,/|0 1_)\ trả về tất cả các phép quay của chuỗi

(,/|0 1_)\'x là các phép quay của mỗi chuỗi trong x

1_' giảm "vòng quay" đầu tiên của mỗi vòng, tức là mỗi vòng quay nhận dạng tầm thường

,/ tham gia

x^ylà danh sách xkhông có các yếu tố của danh sáchy

x^x^ylà giao điểm của xy


Tài giỏi. Tôi đã có thể sử dụng phần giao nhau để lưu một byte khác.
Adám

2

05AB1E , 14 byte

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

Hãy thử trực tuyến!

Giải trình

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

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

Hãy thử trực tuyến!

Điều này hóa ra lại cho thấy một lỗ hổng lớn trong cách PynTree xây dựng sự hiểu biết danh sách vì nó sử dụng các hàm để gán biến để phép gán có thể đi theo biểu thức, nhưng sau đó các điều kiện cuối cùng không có giá trị của biến cho đến khi nó được đánh giá và khối chính đã được đánh giá. Điều này dường như có thể dễ dàng sửa chữa nhưng tôi đã không nhận thấy điều này sớm hơn và vì vậy câu trả lời này rất dài.

Trên thực tế ngay cả khi tôi đã sửa mà tôi nghĩ nó vẫn có thể rất dài.


2

Perl 6 , 65 byte

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

Thử nó

Mở rộng:

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

Ung dung:

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
     )

Hãy thử trực tuyến!


Chào mừng đến với PPCG! Tôi không rành về JavaScript, nhưng hãy chắc chắn kiểm tra chuỗi Mẹo JavaScript để xem có gì áp dụng ở đây không.
admBorkBork

Cảm ơn đã gợi ý. Tôi đã đọc các câu trả lời cho cả JS và ES6 nhưng có vẻ như tôi đã áp dụng tất cả các mẹo có liên quan cho việc này rồi. Ít nhất là những người rõ ràng với tôi.
sủi bọt

1

Võng mạc 0.8.2 , 71 62 byte

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

Hãy thử trực tuyến! Giải trình:

%+)

Lặp lại cho mỗi từ.

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

Chuẩn bị vòng xoay tiếp theo của từ bằng dấu !.

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

Nhưng nếu đó là từ gốc, thì hãy xóa nó lại.

O`

Sắp xếp các từ.

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

Tìm các bản sao.


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}

Hãy thử trực tuyến!

11 byte thx đến Dennis để sử dụng x in y in zphương pháp xích .

Có một bộ từ d; trả về một tập hợp các từ đồng nghĩa.


Kiểm tra quá yếu; {ab, abab} sẽ vượt qua nó.
xnor

@xnor: Đăng những điều kiện cạnh đó! Khắc phục nhanh ...
Chas Brown


0

Japt , 17 byte

Vô cùng chậm, nhưng hoạt động. TIO hết thời gian, nhưng tôi xác nhận nó hoạt động bằng cách giảm thủ công số lần lặp trong nguồn ngôn ngữ.

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.

Hãy thử trực tuyến!


Tại sao nhiều lần lặp lại? Ban đầu tôi đã thực hiện các bước lặp cho độ dài chuỗi, nhưng qua thử nghiệm đã nhận ra mười phép quay trái cho mỗi từ là đủ để tìm tất cả các trường hợp trong tệp chính tả MacOS.
Ô

@Umhima Bởi vì nó ngắn để viết. Câu hỏi là mã golf, không phải mã nhanh nhất.
Nit

Tôi hiểu rồi. Tôi không quen thuộc với Japt, vì vậy tôi không rõ ràng rằng lặp đi lặp lại ít hơn sẽ có nhiều nhân vật hơn.
Ô dù

0

Javascript, 129 ký tự

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

Ung dung

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

Hãy thử trực tuyến!



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.