Tìm những từ xoáy!


41

Đừng hỏi tôi làm thế nào hoặc tại sao nhưng trong khi viết mã cho một dự án tôi nhận thấy rằng các ký tự của một vài từ có một mẫu cụ thể được gọi trong bảng chữ cái, tôi đã kết nối từng ký tự của các từ với bút chì trên bảng chữ cái và tôi đã có được hai xoắn ốc, sau đó tôi nhận thấy rằng xoắn ốc đầu tiên là theo chiều kim đồng hồ và cái kia là ngược chiều kim đồng hồ, và các đặc điểm khác ... vì vậy tôi đặt tên cho chúng là các từ xoáy !

Một từ xoáy có thể là:

  1. chiều kim đồng hồ hoặc ngược chiều kim đồng hồ
  2. ly tâm hoặc ly tâm

Dưới đây là một số ví dụ về từ xoáy :

Sơ đồ từ xoáy

Nhiệm vụ 1:

Viết một chương trình hoặc chức năng đầy đủ sẽ lấy một từ từ đầu vào tiêu chuẩn và sẽ xuất ra nếu đó là một từ xoáy và đặc điểm của nó, ở định dạng có thể đọc được, văn bản mở rộng, 3 ký tự, cờ, v.v.

Các trường hợp kiểm tra và kết quả đầu ra cho các từ khác nhau (nhưng bạn có thể quyết định cách trình bày kết quả):

EARTH, GROUP            > NO        // NOT A SWIRLING WORD
OPERA, STAY, IRIS       > SW,CF,CW  // SWIRLING WORD, CENTRIFUGAL, CLOCKWISE
MINER, TAX, PLUG, META  > SW,CF,CC  // SWIRLING WORD, CENTRIFUGAL, COUNTERCLOCKWISE
AXIOM, AXIS, COOK       > SW,CP,CW  // SWIRLING WORD, CENTRIPETAL, CLOCKWISE
WATCH, YETI, PILL       > SW,CP,CC  // SWIRLING WORD, CENTRIPETAL, COUNTERCLOCKWISE

MORE EXAMPLES OF FALSE TEST CASES (NOT SWIRLING WORDS): 
EARTH, GROUP, OUTPUT, WORD, CONNECTION, ODD, MOM, DAD, 
CHARACTER, EXAMPLE, QUESTION, NEWSLETTER, OTHER

Quy tắc:

  1. Kết nối giữa hai ký tự đầu tiên phải được tăng (như trong đồ họa), tất cả các kết nối chẵn phải xuống , tất cả các kết nối lẻ phải được lên .
  2. Bạn có thể bỏ qua chữ hoa / chữ thường hoặc xem xét / chuyển đổi tất cả sang chữ hoa hoặc tất cả sang chữ thường.
  3. Các từ đầu vào chỉ là các ký tự trong phạm vi bảng chữ cái của AZ, không có dấu cách, không có dấu chấm câu, v.v.
  4. Nếu một từ có hai ký tự, như "GROOVE", bạn phải thu gọn các nhân đôi thành một ký tự: "GROOVE"> "GRISE".
  5. Các từ đầu vào sẽ chứa ít nhất 3 ký tự riêng biệt. Những từ như "MOM", "DAD", "LOL" không phải là những từ hợp lệ.
  6. Có thể vượt qua nhiều lần trong cùng một ký tự, như "IRIS".
  7. Mã ngắn nhất sẽ thắng.

Nhiệm vụ 2:

Để có được danh tiếng nhiều hơn, hãy tìm những từ xoáy dài nhất và đặc điểm của nó, mà bạn có thể tìm thấy trong từ điển tiếng Anh, theo các quy tắc trên. Bạn có thể lấy ví dụ như tham khảo danh sách đầy đủ các từ tiếng Anh ở đây .

Chúc mừng mã hóa!


15
Sơ đồ đẹp! :) (Và cũng là một thử thách thú vị .;))
Martin Ender

Sẽ bỏ qua "Swirling" là một định dạng đầu ra hợp lệ, vì nó ngụ ý khi đầu vào không "không xoáy"?
Martin Ender

@MartinEnder Vâng, vì nó dễ hiểu khi nó xoáy hay không, có thể để trống cho "không" và "1" cho "có", vv (Vui mừng bạn thích sơ đồ và thách thức :)!)
Mario

1
@TimmyD Nhưng không phải tất cả các từ gập ghềnh đều bị xoáy. :)
Martin Ender

2
@Lynn Cảm ơn sự đánh giá cao và đề xuất, tôi sẽ cố gắng cải thiện cho tương lai. Tôi đã thêm quy tắc "xóa hai lần" để dự đoán mọi người hỏi tôi những câu như "chúng ta làm gì khi có đôi?" > bạn có thể coi nhân đôi là 1 ký tự đơn vì từ "L" đến "L" là khoảng cách bằng không :) Không phải tôi muốn thêm khó khăn khó khăn cho riêng mình.
Mario

Câu trả lời:


11

MATL , 33 31 30 byte

lydhg)dt|dZSXz&=wZSdh?4M1)3M1)

Đầu vào là chữ in hoa (hoặc bằng chữ in thường, nhưng không trộn lẫn).

Đầu ra là:

  • Nếu từ không xoáy: không có đầu ra nào được tạo ra
  • Nếu nó xoáy: hai số được tạo thành các dòng khác nhau:
    • Số đầu tiên 1/ -1 chỉ ra ly tâm / ly tâm.
    • Số thứ hai 1/ `-1 'biểu thị theo chiều kim đồng hồ / ngược chiều kim đồng hồ.

Hãy thử trực tuyến! Hoặc xác minh tất cả các trường hợp kiểm tra (mã được sửa đổi để lấy tất cả các đầu vào và để tạo ra hai số đầu ra trên cùng một dòng)

Giải trình

Hãy lấy đầu vào 'OPERAA'làm ví dụ.

Phần đầu tiên của mã loại bỏ các chữ cái kép:

l     % Push 1
      %   STACK: 1
y     % Take input implicitly from below, and duplicate
      %   STACK: 'OPERAA', 1, 'OPERAA'
d     % Convert to code points and compute differences
      %   STACK: 'OPERAA', 1, [1 -11  13 -17 0]
h     % Concatenate horizontally
      %   STACK: 'OPERAA', [1 1 -11  13 -17 0]
g     % Convert to logical
      %   STACK: 'OPERAA', [true true true true true false]
)     % Index
      %   STACK: 'OPERA'

Bây giờ chúng tôi kiểm tra xem khoảng cách giữa các chữ cái có giảm không (điều kiện cần thiết để từ bị xoáy):

d     % Convert to code points and compute differences
      %   STACK: [1 -11  13 -17]
t|    % Duplicate and take absolute value
      %   STACK: [1 -11  13 -17], [1 11  13 17]
d     % Differences
      %   STACK: [1 -11  13 -17], [10 2 4]
ZS    % Signum
      %   STACK: [1 -11  13 -17], [1 1 1]
Xz    % Remove zeros (gives a vertical vector). Needed for words like 'IRIS',
      % where some consecutive distances are equal
      %   STACK: [1 -11  13 -17], [1; 1; 1]
&=    % All pairwise equality comparisons. Gives a matrix. If all the signs 
      % were equal the matrix will contain all ones
      %   STACK: [1 -11  13 -17], [1 1 1; 1 1 1; 1 1 1]

Sau đó, chúng tôi sẽ kiểm tra xem các chữ cái có qua lại không (đây là điều kiện khác để từ bị xoáy):

w     % Swap
      %   STACK: [1 1 1; 1 1 1; 1 1 1], [1 -11  13 -17]
ZS    % Signum
      %   STACK: [1 1 1; 1 1 1; 1 1 1], [1 -1 1 -1]
d     % Differences
      %   STACK: [1 1 1; 1 1 1; 1 1 1], [-2 2 -2]

Cuối cùng, chúng tôi kiểm tra xem hai điều kiện có giữ không, và trong trường hợp đó tạo ra đầu ra:

h     % Concatenate horizontally
      %   STACK: [1 1 1 1 1 1 1 1 1 -2 2 -2]
?     % If all elements are nonzero
  4M  %   Push first signum array without zeros, from the automatic clipboard
      %     STACK: [1; 1; 1]
  1)  %   Get first element (tells if first difference was positive or negative)
      %     STACK: 1
  3M  %   Push second signum array, from the automatic clipboard
      %     STACK: 1, [1 -1 1 -1]
  1)  %   Get first element (tells if first movement was right or left)
      %     STACK: 1, 1
      %   Implicitly end if
      % Implicitly display

6

Toán học, 117 111 byte

Cảm ơn JHM vì đã lưu 6 byte và làm cho nó không phân biệt chữ hoa chữ thường để khởi động!

 {o=OrderedQ/@{a=Abs[d=Differences[#&@@@Split@LetterNumber@#]],Reverse@a},d[[1]]>0,Or@@o&&Max[Most[d]Rest@d]<0}&

Hàm không tên lấy một chuỗi và trả về một danh sách booleans lồng nhau trong biểu mẫu {{B1,B2},B3,B4}. B4 ghi lại xem từ đó có bị xoáy hay không (và nếu không, phần còn lại của đầu ra là rác). Nếu từ bị xoáy, thì B1 ghi lại xem từ đó có ly tâm hay không, B2 ghi lại xem từ đó có hướng tâm hay không, và B3 ghi lại xem từ đó theo chiều kim đồng hồ (Đúng) hay ngược chiều kim đồng hồ (Sai).

Dưới đây là một phiên bản dài hơn sau quá trình (dòng đầu tiên) các chức năng trên (cách nhau qua đường dây 2-thứ 5) để làm cho nó giống với OP: NOnếu từ đó không xoáy, và sự lựa chọn thích hợp {SW,CF,CW}, {SW,CF,CC}, {SW,CP,CW}, hoặc {SW,CP,CC}nếu từ đang xoáy:

If[#3, {SW, If[#[[1]], CF, CP], If[#2, CW, CC]}, NO] & @@
  {o = OrderedQ /@
    {a = Abs[d = Differences[# & @@@ Split@LetterNumber@#]], Reverse@a},
  d[[1]] > 0,
  Or @@ o && Max[Most[d] Rest@d] < 0} &

Lời giải thích giống như trong câu trả lời CJam của Martin Ender, với một lưu ý bổ sung: danh sách các khác biệt liên tiếp phải thay thế dấu hiệu cho từ bị xoáy và có thể được phát hiện bằng cách đảm bảo tất cả các sản phẩm của các cặp khác biệt liên tiếp đều âm (đó là những gì Max[Most[d]Rest@d]<0làm).

Chạy chức năng trên tất cả hơn 40.000 từ của Mathicala WordList[], chúng tôi tìm thấy các từ xoáy 8 chữ cái sau đây, đây là những từ dài nhất trong số các loại xoáy tương ứng của chúng:

operetta    {SW, CF, CW}
opposite    {SW, CF, CW}
stowaway    {SW, CF, CW}
assassin    {SW, CP, CW}
assessor    {SW, CP, CW}
baccarat    {SW, CF, CC}
keenness    {SW, CF, CC}
positive    {SW, CF, CC}

(Brownie chỉ đến positiveviệc không có chữ cái kép và ít chữ cái lặp lại hơn stowaway.)

Nhưng nhà vô địch tuyệt đối là 9 chữ cái ngược chiều kim đồng hồ vassalage!


1
Bạn có thể lưu 3 byte bằng cách sử dụng LetterNumberthay vì ToCharacterCodevà 3 byte khác bằng cách sử dụng Most[d]thay vì Drop[d,-1].
JungHwan tối

5

Scala, 110 byte

def/(s:String)={val ? =s.sliding(2).map(t=>(t(0)-t(1)).abs).toSeq
(Seq(?,?reverse)indexOf(?sorted),s(0)<s(1))}

Trả về một tuple (a,b)với

  • a == 1 nếu s là hướng tâm
  • a == 0 nếu s là ly tâm
  • a == -1 nếu s không xoáy

  • b == true nếu s là chiều kim đồng hồ
  • b == false nếu s ngược chiều kim đồng hồ
  • b có thể đúng hoặc sai nếu s không xoáy

Giải trình:

def/(s:String)={      //define a method called / with a String argument
  val ? =s            //define ? as...
    .sliding(2)       //an iterator for each two consecutive elements
    .map(t=>          //foreach 2 chars
      (t(0)-t(1)).abs //get the absolute value of their difference
    ) 
    .toSeq            //and convert the iterator to a Seq, because iterator doesn't have reverse and sorted methods
  (                   //return a tuple of
    Seq(?,?reverse)     //a Seq of ? and reversed ?
    .indexOf(?sorted)   //and check which of them is sorted ?
  ,                   //and
   s(0)< s(1)          //the difference bewteen the first two elements of the string.
  )
}

5

Thạch , 30 byte

3Ŀḟ0ṠE
ÑṠḟ0Ṃ
ÑAI
OIḟ0
ÇṠḢ;2Ŀ;Ñ

TryItOnline
Hoặc xem các trường hợp thử nghiệm (với một chút thay đổi là lần cuối cùngÑsẽ trỏ đến liên kết chính mới)

(Thiếu kỹ năng xâu chuỗi của tôi có lẽ tốn một vài byte ở đây)
Tất cả trên hoặc dưới đều.
Trả về danh sách cờ [D, F, S]:
S: spin = 1 / không quay = 0
F: ly tâm = 1 (tròn = 0) ly tâm = -1
D: clockwise = 1 / ngược chiều kim đồng hồ = -1
- nếu S = 0 các cờ khác vẫn được đánh giá mặc dù chúng không mang thông tin hữu ích.

Làm sao?

3Ŀḟ0ṠE      - Link 1, isSpinning: s
3Ŀ          - call link 3 as a monad with s
  ḟ0        - filter out zeros
    Ṡ       - sign
     E      - all equal?

ÑṠḟ0Ṃ       - Link 2, centrifugal(-1), circular(0) or centripetal(1): s
Ñ           - call next link (3) as a monad with s
 Ṡ          - sign (+1 for positive changes, -1 for negative changes, 0 for no change)
  ḟ0        - filter out zeros (ignore these for cases like "IRIS")
    Ṃ       - minimum (will be the only value for spinning words)
            -    (circular words like "DAD", now excluded, yield min([])=0)

ÑAI         - Link 3, absolute change of moves over alphabet: s
Ñ           - call next link (4) as a monad with s
 A          - absolute
  I         - differences

OIḟ0        - Link 4, non-zero moves over alphabet: s
O           - ordinal cast
 I          - differences
  ḟ0        - filter out zeros

ÇṠḢ;2Ŀ;Ñ    - Main link: s
Ç           - call last link (4) as a monad with s
 Ṡ          - sign
  Ḣ         - head (clockwise / anticlockwise: 1 / -1)
   ;  ;     - concatenate
    2Ŀ      - call link (2) as a monad with s
       Ñ    - call next link (1) as a monad with s

1
Tôi nghĩ rằng bạn đang trải nghiệm cái mà tôi gọi là "hội chứng người mới" ở đây. Tôi cảm thấy giống hệt như bạn. Có lẽ Dennis có thể là một số trợ giúp ở đây. Nhưng, tôi đã 1, chỉ vì tôi thấy nó có thể có trong Jelly. Ngoài ra, bạn có thể loại bỏ các trường hợp tròn; nó không còn tồn tại
Erik the Outgolfer 7/10/2016

Cảm ơn bạn đã chọc vào các từ tròn - vì hóa ra 6 byte để phục vụ cho chúng thực sự không cần thiết vì tối thiểu của một danh sách trống là 0do đó, điều này vẫn còn hiệu quả với những từ đó!
Jonathan Allan

Vì vậy, nó phải làm việc cho họ? Tôi thấy bạn vẫn còn circular(0)lời giải thích bên trong, có lẽ đã đến lúc xóa nó đi.
Erik the Outgolfer 7/10/2016

Không bắt buộc, không - nhưng mã này vẫn thực hiện sau khi xóa những gì tôi đã sử dụng để làm cho nó rõ ràng, do thực tế là min([])=0 thạch.tryitonline.net/#code=W13huYI&input= - Lưu ý rằng vì các từ tròn không bao giờ tồn tại đầu vào dự kiến, không có vấn đề trong việc phục vụ cho họ.
Jonathan Allan

Tôi chỉ yêu cầu bạn kiểm tra lại. Và, tôi hiểu ý của bạn min([])==0, nhưng tôi nghĩ đây vẫn là môn đánh gôn.
Erik the Outgolfer 7/10/2016

3

CJam , 39 byte

r{2ew::-V}:D~-_:g_0=\D#)!@:zD-:g_0=\(-!

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

Đầu vào có thể là chữ hoa hoặc chữ thường, nhưng không trộn lẫn.

Chương trình vô tình chỉ ra những từ không nhất thiết phải ly tâm hoặc hướng tâm, nhưng mặt khác đáp ứng các yêu cầu của hình xoắn ốc. Chúng được mô tả là "thông tư" trong biểu đồ dưới đây.

Để giải thích đầu ra sử dụng biểu đồ này:

SPIRAL (output contains four 1s)
-11-11 : Clockwise Centrifugal
-1111  : Clockwise Centripetal
11-11  : Counter-clockwise Centrifugal
1111   : Counter-clockwise Centripetal

CIRCULAR (output contains two 1s)
-11    : Clockwise Circular
11     : Counter-clockwise Circular

NONSPIRAL (output contains a 0)


Giải trình:

Chương trình thực sự đánh giá xem chuỗi các khác biệt khác không giữa các ký tự bắt đầu dương hay âm, nếu nó thay thế trong dấu hiệu, nếu cường độ bắt đầu tăng hay giảm và nếu nó tiếp tục như vậy. Nếu cường độ không tăng hoặc giảm thì chương trình sẽ phá vỡ bằng cách vận hành trên một mảng trống. Các bước chính được hiển thị bên dưới (mã này cũng sẽ hiển thị tiến trình của ngăn xếp):

r{2ew::-V}:D~-   e# take difference of overlapping pairs, removing 0s handles duplicates
               ede# store difference function plus 0 as D, it's multipurpose
_:g_0=\          e# compute signs differences, keep first to show starting direction
               ede# -1 = CLOCKWISE, 1 = COUNTERCLOCKWISE
D#)!@            e# difference of signs includes 0 if not alternating, keep in stack
               ede# 1 = ALTERNATING, 0 = NOT ALTERNATING
:zD-:g           e# signs of difference of absolute values, ignoring 0s (fixed magnitude)
_0=\             e# keep first sign in stack to indicate how the sequence starts
               ede# -1 = INCREASING, 1 = DECREASING
(-!              e# remove first item from entire list and see if nothing remains
               ede# 1 = EMPTY(MONOTONE), 0 = NONEMPTY

3

PHP, 322 byte

for(;++$i<strlen($z=preg_replace("#(.)\\1#","$1",$argv[1]));){$t[]=$z[$i-1]<=>$z[$i]?:0;$o[]=$z[0]<=>$z[$i];$i<2?:$k[]=$z[$i-2]<=>$z[$i];}$s=preg_match("#^1?(-11)*(-1)?$#",join($t))?($t[0]!=1?1:2):0;$s+=2*preg_match($r="#^(-1|0)?([01](-1|0))*[01]?$#",join($o));$s*=preg_match($r,join($k));count_chars($z,3)[2]?:$s=0;echo$s;

cho một đầu ra đẹp hơn echo["n","+P","-P","+F","-F"][$s];

Phiên bản mở rộng

for(;++$i<strlen($z=preg_replace("#(.)\\1#","$1",$argv[1]));){
    $t[]=$z[$i-1]<=>$z[$i]?:0;
    $o[]=$z[0]<=>$z[$i];
    $i<2?:$k[]=$z[$i-2]<=>$z[$i];
    }
$s=preg_match("#^1?(-11)*(-1)?$#",join($t))?($t[0]!=1?1:2):0; #Clockwise direction or not
$s+=2*preg_match($r="#^(-1|0)?([01](-1|0))*[01]?$#",join($o)); # True centrifugal
$s*=preg_match($r,join($k)); #true or false second test for not
count_chars($z,3)[2]?:$s=0; # word must have >2 different characters
echo$s;# short output
echo["n","+P","-P","+F","-F"][$s]; #long output alternative

Nhiệm vụ 2 giá trị thứ hai mà không có quy tắc nhân đôi ngắn

Sát thương 4 -F 11 byte tích cực hóa 10 byte

3 + F đối lập 10 Byte logogogue 9 Byte

2 -P chư hầu 9 Byte mỉa mai, sasarara 8 Byte

1 + P assession 9 Byte apanage, aramaic, argonon, đấu giá, avision, trao, crenele, exesion, exition, eyewink 7 Byte

Hình dung một từ

header('Content-Type: image/svg+xml; charset=UTF-8');
$w=$_GET["w"]??"OOPERRA";
$w=strtoupper($w);
echo '<?xml version="1.0" encoding="UTF-8"?>'
.'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'

.'<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 -100 420 400">'
.'<title>Swirl Word</title><desc>Viualize a Word</desc>';
echo '<text x="210" y="-50" text-anchor="middle" font-family="arial">'.$w.'</text>';

foreach(range("A","Z")as $x=>$c){
    echo '<text x="'.(15+$x*15).'" y="110" text-anchor="middle" font-family="arial">'.$c.'</text>';
    $r[$c]=15+$x*15;
}
for($i=0;++$i<strlen($w);){
    echo '<path d="M '.($r[$w[$i-1]]).',105 A '.($radius=abs($r[$w[$i]]-$r[$w[$i-1]])/2).' '.($radius).' 0 0 0 '.($r[$w[$i]]).',105" style="stroke:gold; stroke-width:1px;fill:none;" />';
}
echo '</svg>';  

trong đoạn trích là kết quả của SVG tôi đã tạo

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 -100 420 400"><title>Swirl Word</title><desc>Viualize a Word</desc><text x="210" y="-50"  text-anchor="middle" font-family="arial">KILLINGNESS</text><text x="15" y="110" text-anchor="middle" font-family="arial">A</text><text x="30" y="110" text-anchor="middle" font-family="arial">B</text><text x="45" y="110" text-anchor="middle" font-family="arial">C</text><text x="60" y="110" text-anchor="middle" font-family="arial">D</text><text x="75" y="110" text-anchor="middle" font-family="arial">E</text><text x="90" y="110" text-anchor="middle" font-family="arial">F</text><text x="105" y="110" text-anchor="middle" font-family="arial">G</text><text x="120" y="110" text-anchor="middle" font-family="arial">H</text><text x="135" y="110" text-anchor="middle" font-family="arial">I</text><text x="150" y="110" text-anchor="middle" font-family="arial">J</text><text x="165" y="110" text-anchor="middle" font-family="arial">K</text><text x="180" y="110" text-anchor="middle" font-family="arial">L</text><text x="195" y="110" text-anchor="middle" font-family="arial">M</text><text x="210" y="110" text-anchor="middle" font-family="arial">N</text><text x="225" y="110" text-anchor="middle" font-family="arial">O</text><text x="240" y="110" text-anchor="middle" font-family="arial">P</text><text x="255" y="110" text-anchor="middle" font-family="arial">Q</text><text x="270" y="110" text-anchor="middle" font-family="arial">R</text><text x="285" y="110" text-anchor="middle" font-family="arial">S</text><text x="300" y="110" text-anchor="middle" font-family="arial">T</text><text x="315" y="110" text-anchor="middle" font-family="arial">U</text><text x="330" y="110" text-anchor="middle" font-family="arial">V</text><text x="345" y="110" text-anchor="middle" font-family="arial">W</text><text x="360" y="110" text-anchor="middle" font-family="arial">X</text><text x="375" y="110" text-anchor="middle" font-family="arial">Y</text><text x="390" y="110" text-anchor="middle" font-family="arial">Z</text><path d="M 165,105 A 15 15 0 0 0 135,105" style="stroke:gold; stroke-width:1px;fill:none;" /><path d="M 135,105 A 22.5 22.5 0 0 0 180,105" style="stroke:gold; stroke-width:1px;fill:none;" /><path d="M 180,105 A 0 0 0 0 0 180,105" style="stroke:gold; stroke-width:1px;fill:none;" /><path d="M 180,105 A 22.5 22.5 0 0 0 135,105" style="stroke:gold; stroke-width:1px;fill:none;" /><path d="M 135,105 A 37.5 37.5 0 0 0 210,105" style="stroke:gold; stroke-width:1px;fill:none;" /><path d="M 210,105 A 52.5 52.5 0 0 0 105,105" style="stroke:gold; stroke-width:1px;fill:none;" /><path d="M 105,105 A 52.5 52.5 0 0 0 210,105" style="stroke:gold; stroke-width:1px;fill:none;" /><path d="M 210,105 A 67.5 67.5 0 0 0 75,105" style="stroke:gold; stroke-width:1px;fill:none;" /><path d="M 75,105 A 105 105 0 0 0 285,105" style="stroke:gold; stroke-width:1px;fill:none;" /><path d="M 285,105 A 0 0 0 0 0 285,105" style="stroke:gold; stroke-width:1px;fill:none;" /></svg>


Người xem từ tuyệt vời! :) Có lẽ bạn có thể thử kết nối các ký tự bằng một nửa hình elip thay vì một nửa hình tròn. Nó sẽ nhỏ gọn hơn và trông "dinamic" hơn. Nhưng dù sao trông cũng rất tuyệt!
Mario

@Mario nó chỉ cần một yếu tố '.(.8*$radius).'thay vì '.($radius).'và nếu bạn thay thế ($radius).' 0 0 0bằng ($radius).' 0 0 '.(($w[$i-1]<$w[$i]?1:0)^(($i-1)%2)).'chương trình không có hướng khắc phục
Jörg Hülsermann

2

Haskell, 148 byte

z f=tail>>=zipWith f
g c=and.z c.filter(/=0).map abs.z(-).map fromEnum
(a:b:r)%c|a==b=(b:r)%c|1<3=c a b
f s|a<-[g(>=)s,g(<=)s]=or a:a++[s%(<),s%(>)]

Hãy thử nó trên Ideone.

Đầu vào phải là al thường hoặc tất cả chữ hoa.
Đầu ra là một danh sách năm booleans : [SW?, CF?, CP?, CW?, CC?].

f "positive" -> [True,True,False,False,True]

Điều này hóa ra lâu hơn dự kiến, đặc biệt là việc thu gọn các ký tự lặp lại mất khoảng 40 byte.

Lúc đầu, tôi chỉ so sánh hai nhân vật đầu tiên mang lại CWhoặc CCtrước khi nhận thấy rằng các testcase thích bbahoặc bbccũng hợp lệ và đánh bại phương pháp này.


2

Python, 152 byte:

lambda C:[C[-1]in max(C)+min(C),C[1]>C[0]]*all([[i>g,i<g][[h%2>0,h%2<1][C[1]>C[0]]]for i,g,h in filter(lambda i:i[0]!=i[1],zip(C,C[1:],range(len(C))))])

Một chức năng lambda ẩn danh. Gọi như print(<Function Name>('<String>')).

Lấy đầu vào là tất cả chữ thường hoặc chữ hoa, nhưng không phải là trường hợp hỗn hợp.

Xuất ra một mảng không chứa gì ( []) nếu từ đó không xoáy hoặc một mảng theo định dạng sau:

  • Yếu tố thứ 1 là True/Falsecho Centrifugal/Centripetal.
  • Yếu tố thứ 2 là True/Falsecho Clockwise/Counterclockwise.

Dùng 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.