소용돌이 치는 단어를 찾아라!


41

방법 또는 이유를 묻지 않지만 프로젝트를 코딩하는 동안 두 단어의 문자가 알파벳과 관련된 특정 패턴을 가지고 있음을 알았고 단어의 각 문자를 알파벳의 연필과 연결하여 두 개를 얻었습니다. 나선, 그때 내가 처음 나선 시계 방향 것을 발견하고 다른 하나는 반 시계 방향으로, 그리고 다른 특성 ... 내가 그들을라는 이름 때문에 단어 소용돌이 !

소용돌이 말씀은 할 수 있습니다 :

  1. 시계 방향 또는 시계 반대 방향
  2. 구심 또는 원심

소용돌이 치는 단어의 예가 있습니다 .

소용돌이 치는 단어 다이어그램

작업 1 :

표준 입력에서 단어를 가져 와서 소용돌이 단어 인 경우 특성을 읽을 수있는 형식, 확장 텍스트, 3 문자, 플래그 등으로 출력하는 전체 프로그램 또는 함수를 작성하십시오 .

다른 단어에 대한 테스트 사례 및 예제 출력 (결과 표시 방법을 결정할 수 있음) :

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

규칙 :

  1. 처음 두 문자 사이의 연결이 켜져 있어야 하고 (그림에서와 같이) 모든 짝수 연결이 작동 중지 되고 모든 홀수 연결이 작동해야 합니다 .
  2. 대문자 / 소문자를 무시하거나 모두 대문자 또는 모두 소문자로 간주 / 변환 할 수 있습니다.
  3. 입력 단어는 알파벳 범위 AZ, 공백 없음, 문장 부호 없음 등의 문자입니다.
  4. 단어에 "GROOVE"와 같이 이중 문자가있는 경우 이중 문자를 "GROOVE"> "GROVE"로 축소해야합니다.
  5. 입력 단어는 3 개 이상의 고유 문자를 포함합니다. "MOM", "DAD", "LOL"과 같은 단어는 유효한 단어가 아닙니다.
  6. "IRIS"와 같은 동일한 문자로 여러 번 전달할 수 있습니다.
  7. 가장 짧은 코드가 승리합니다.

작업 2 :

평판을 높이려면 가장 긴 소용돌이 단어 를 찾으십시오. 위의 규칙에 따라 영어 사전에서 찾을 수 있습니다. 당신은 참조로 예를 들면 영어 단어의 목록을 취할 수 있습니다 여기에 .

행복한 코딩!


15
좋은 다이어그램! :) (그리고 좋은 도전도 있습니다.;))
Martin Ender

"Swirling"을 생략하면 입력이 "Swirling"이 아닐 때 암시되므로 유효한 출력 형식입니까?
Martin Ender

그것은 소용돌이 여부를 때 이해할 수 있기 때문에 예 @MartinEnder, "없음"과 빈 될 수 있습니다 "1" "예", 등 (다행 당신은 : 다이어그램과 도전을 좋아했다!)에 대한
마리오

1
@TimmyD 그러나 모든 울퉁불퉁 한 단어가 소용돌이 치는 것은 아닙니다. :)
Martin Ender

2
@Lynn 감사의 말과 제안에 감사드립니다. 저는 미래를 개선하기 위해 노력할 것입니다. "더블 제거"규칙을 추가하여 사람들이 "더블이있을 때 어떻게해야합니까?" > "L"에서 "L"로 이동하는 거리가 0이므로 두 배를 하나의 단일 문자로 간주 할 수 있습니다.
Mario

답변:


11

MATL , 33 31 30 바이트

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

입력은 대문자 (또는 소문자이지만 혼합되지 않음)입니다.

출력은 다음과 같습니다

  • 단어가 소용돌이 치지 않는 경우 : 출력이 생성되지 않습니다
  • 소용돌이 치는 경우 : 서로 다른 줄에 두 개의 숫자가 생성됩니다.
    • 첫 번째 숫자 1/ -1 는 원심 / 구심을 나타냅니다.
    • 두 번째 숫자 1/`-1 '은 시계 방향 / 시계 반대 방향을 나타냅니다.

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 (모든 입력을 취하고 동일한 라인에서 두 개의 출력 번호를 생성하도록 코드 수정)

설명

입력 'OPERAA'을 예로 들어 봅시다 .

코드의 첫 번째 부분은 이중 문자를 제거합니다.

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'

이제 글자 사이의 거리가 줄어드는 지 확인합니다 (단어가 소용돌이 치는 데 필요한 조건).

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]

그런 다음 글자가 앞뒤로 이동하는지 확인합니다 (단어가 소용돌이 치는 다른 조건).

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]

마지막으로 두 조건이 유지되는지 확인하고이 경우 출력을 생성합니다.

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

Mathematica, 117111 바이트

6 바이트를 절약하고 부팅시 대소 문자를 구분하지 않는 JHM 덕분에!

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

이름이없는 함수는 문자열을 가져 와서 중첩 된 부울 목록을 양식으로 리턴합니다 {{B1,B2},B3,B4}. B4는 단어가 소용돌이 치는지 여부를 기록합니다 (그렇지 않은 경우 나머지 출력은 가비지입니다). 단어가 소용돌이 치는 경우 B1은 단어가 원심인지, B2는 단어가 구심인지를 기록하고, B3은 단어가 시계 방향 (참)인지 반 시계 방향 (거짓)인지 기록합니다.

여기에 후 공정 (첫 번째 줄) (2-5 라인을 통해 간격) 위의 기능은 영업 이익이 동일하게하는 것을 더 긴 버전입니다 : NO단어가 소용돌이, 그리고 적절한 선택하지 않는 경우 {SW,CF,CW}, {SW,CF,CC}, {SW,CP,CW}, 또는 {SW,CP,CC}경우 낱말이 소용돌이 치고있다 :

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} &

설명은 Martin Ender의 CJam 답변과 동일하며 추가 메모가 하나 있습니다. (그것이하는 일입니다 Max[Most[d]Rest@d]<0).

Mathematica 's의 40,000 개 이상의 단어 모두에서 함수를 실행하면 WordList[]각각의 소용돌이 유형 중 가장 긴 다음 8 글자 소용돌이 단어가 있습니다.

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 positive는 이중 문자가없고 stowaway. 보다 적은 반복 문자가 있음을 나타 냅니다.)

그러나 절대 챔피언은 9 글자 반 시계 방향으로 구불 구불 한 구심 단어입니다 vassalage!


1
LetterNumber대신 ToCharacterCode3 바이트를 사용하고 Most[d]대신 3 바이트를 사용하여 다른 3 바이트를 저장할 수 있습니다 Drop[d,-1].
JungHwan Min 2016 년

5

스칼라, 110 바이트

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

튜플 (a,b)을 반환

  • a == 1 s가 구심 인 경우
  • a == 0 s가 원심 분리 인 경우
  • a == -1 s가 소용돌이 치지 않으면

  • b == true s가 시계 방향이면
  • b == false s가 시계 반대 방향 인 경우
  • s가 소용돌이 치지 않으면 b는 참 또는 거짓이 될 수 있습니다.

설명:

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

젤리 , 30 바이트

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

TryItOnline
또는 테스트 사례를 참조하십시오(마지막으로Ñ새 기본 링크를 가리 키므로 약간 변경됨)

(체인 기술이 부족하면 아마도 몇 바이트가 필요할 것입니다
. ) 모두 위 또는 모두 낮습니다.
플래그 목록 [D, F, S]를 반환합니다.
S : 회전 = 1 / 회전하지 않음 = 0
F : 원심 = 1 (원형 = 0) 구심 = -1
D : 시계 방향 = 1 / 반 시계 방향 = -1
-S = 인 경우 0 다른 플래그는 유용한 정보를 가지고 있지 않더라도 여전히 평가됩니다.

어떻게?

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
여기에서 "신비 증후군"이라고 불리는 것을 경험하고 있다고 생각합니다. 나는 당신과 똑같은 느낌입니다. 어쩌면 데니스가 여기서 도움이 될 수 있습니다. 그러나 젤리에서 가능하다는 것을 알았 기 때문에 +1했습니다. 또한 원형 케이스를 제거 할 수 있습니다. 더 이상 존재하지 않습니다.
Outgolfer Erik

원형 단어에 대한 찔림에 감사드립니다. 빈 목록의 최소값이 0너무 적기 때문에 실제로는 필요하지 않기 때문에 6 바이트가 실제로 필요하지 않은 것으로 나타났습니다 .
Jonathan Allan

그래서, 그것은 해야한다 그들을 위해 일? 나는 당신이 여전히 circular(0)당신의 설명 안에 있음을 알았습니다 . 아마도 그것을 제거해야 할 때입니다.
Outgolfer Erik

필요하지는 않습니다. 그러나이 코드는 min([])=0 jelly.tryitonline.net/#code=W13huYI&input=- 원형 단어는 절대로 사용되지 않으므로 예상 입력, 그들을 위해 음식에 문제가 없습니다.
Jonathan Allan

방금 확인을 요청했습니다. 그리고 나는 당신이 의미하는 것을 이해 min([])==0했지만 이것이 여전히 골프라고 생각합니다.
Outgolfer Erik

3

CJam , 39 바이트

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

온라인으로 사용해보십시오!

입력은 대문자 또는 소문자 일 수 있지만 혼합 할 수는 없습니다.

이 프로그램은 실수로 원심 또는 구심 일 필요는 없지만 나선형의 요구 사항을 충족시키는 단어를 부주의하게 지적합니다. 이들은 아래 차트에서 "원형"으로 설명됩니다.

출력을 해석하려면이 차트를 사용하십시오.

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)


설명:

프로그램은 실제로 문자 사이의 0이 아닌 차이의 순서가 양수인지 음수인지, 부호가 번갈아 가며, 크기가 증가 또는 감소하기 시작하고, 계속되는 경우 평가합니다. 크기가 증가하거나 감소하지 않으면 빈 배열에서 작동하여 프로그램이 중단됩니다. 주요 단계는 다음과 같습니다 (이 코드는 스택 진행률도 보여줍니다).

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 바이트

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;

더 예쁜 출력을 위해 echo["n","+P","-P","+F","-F"][$s];

확장 버전

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

짧은 복식 규칙이없는 작업 2 초 값

4 -F 살해 11 바이트 10 바이트 양성

3 + F 반대 10 바이트 logogogue 9 바이트

2-P vassalage 9 바이트 sarcocol, 사사 라라 8 바이트

1 + P assession 9 바이트 apanage, aramaic, argonon, 경매, avision, 수상, crenele, exesion, exit, eyewink 7 바이트

단어를 시각화

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>';  

스 니펫에는 내가 만든 SVG의 결과가 있습니다.

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


위대한 소용돌이 단어 뷰어! :) 아마도 반원 대신 반 타원으로 문자를 연결하려고 할 수 있습니다. 더 작고 "동적"으로 보입니다. 그러나 어쨌든 멋지게 보입니다!
Mario

그것은 단지 요인을 필요로 @Mario '.(.8*$radius).'대신 '.($radius).'하고 대체하는 경우 ($radius).' 0 0 0($radius).' 0 0 '.(($w[$i-1]<$w[$i]?1:0)^(($i-1)%2)).'프로그램 수정 방향을하지 않은
요 르그 Hülsermann을

2

하스켈, 148 바이트

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%(>)]

Ideone에서 사용해보십시오.

입력은 대문자 또는 모두 대문자 여야합니다.
출력은 5 개의 부울 목록입니다 [SW?, CF?, CP?, CW?, CC?].

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

예상보다 오래 걸리는 것으로 나타났습니다. 특히 반복되는 문자의 축소를 처리하는 데 약 40 바이트가 걸립니다.

처음 엔에서 얻을 그냥 처음 두 문자를 비교 CW하거나 CC좋아하는을 testcases 알았어 전에 bba또는 bbc너무 유효하며이 방법을 패배.


2

파이썬, 152 바이트 :

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

익명의 람다 함수. 로 전화하십시오 print(<Function Name>('<String>')).

입력을 모두 소문자 또는 대문자로 사용하지만 대소 문자를 혼합 하지는 않습니다 .

[]단어가 소용돌이 모양이 아닌 경우 아무것도 포함하지 않는 배열 ( )을 출력 하거나 그렇지 않으면 다음 형식의 배열을 출력합니다.

  • 첫 번째 요소는 True/False입니다 Centrifugal/Centripetal.
  • 두 번째 요소는 True/False입니다 Clockwise/Counterclockwise.

온라인으로 사용해보십시오! (아이디어)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.