Dönen Kelimeleri Bulun!


41

Bana nedenini veya nedenini sorma ama bir projeye kod yazarken, birkaç kelimenin karakterlerinin alfabeye özgü bir desene sahip olduğunu fark ettim, kelimelerin her karakterini alfabedeki kalemle bağladım ve iki tane aldım. spiraller, sonra ilk spiralin saat yönünde olduğunu ve diğerinin saat yönünün tersine olduğunu ve diğer özelliklerin ... bu yüzden onları Swirling Words ! diye adlandırdım .

Bir Dönen Kelime olabilir:

  1. saat yönünde veya saat yönünün tersine
  2. merkezcil veya merkezkaç

İşte bazı Swirling Words örnekleri :

Dönen Kelimeler Diyagramı

Görev 1:

Standart girişten bir sözcük alacak ve Swirling Word ise okunaklı bir formatta, genişletilmiş metin, 3 karakter, bayrak vb.

Farklı sözcükler için test durumları ve örnek çıktılar (ancak sonuçların nasıl gösterileceğine karar verebilirsiniz):

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

Kurallar:

  1. İlk iki karakter arasındaki bağlantı yukarı olmalı (grafiklerdeki gibi), tüm çift bağlantı aşağı olmalı , tüm tek bağlantılar yukarı olmalıdır .
  2. Büyük / küçük harfleri görmezden gelebilir veya tümünü büyük harfe veya küçük harfe dönüştürebilir / dönüştürebilirsiniz.
  3. Giriş sözcükleri yalnızca AZ alfabe aralığında, boşluk yok, noktalama işareti vb.
  4. Bir kelimenin "GROOVE" gibi çift karakterleri varsa, çiftleri bir karaktere daraltmanız gerekir: "GROOVE"> "GROVE".
  5. Giriş kelimeleri en az 3 ayrı karakter içerecektir. "MOM", "DAD", "LOL" gibi kelimeler geçerli kelimeler değildir.
  6. Aynı karakterde, "IRIS" gibi birden çok kez geçmek mümkündür.
  7. En kısa kod kazanır.

Görev 2:

Daha fazla itibar kazanmak için, yukarıdaki kuralları izleyerek, İngilizce sözlüğünde bulabileceğiniz en uzun Swirling Kelimelerini ve özelliklerini bulun. Sen referans olarak örneğin ingilizce kelimelerin tam listesi alabilir burada .

Mutlu kodlama!


15
Güzel diyagramlar! :) (Ayrıca güzel meydan okuma.;))
Martin Ender

"Döndürme" atlamak, girişin "dönmediği" olmadığı zaman olduğu için geçerli bir çıktı biçimi olur mu?
Martin Ender

Buna dönen ya da değil ne zaman anlaşılabilir beri Evet @MartinEnder, "değil" ve boş olabilir "1" "evet" vb (Sevindim :) şemaları ve meydan sevdim!) İçin
Mario

1
@TimmyD Ama engebeli kelimelerin hepsi dönen değil. :)
Martin Ender

2
@Lynn Takdir ve önerileriniz için teşekkürler, gelecek için geliştirmeye çalışacağım. İnsanların bana "çiftler varken ne yaparız?" Diye sormasını beklemek için "çifte kaldır" kuralını ekledim. > “L” den “L” ye gitmek sıfır mesafeli olduğu için çiftleri 1 tek karakter olarak düşünebilirsiniz.
Mario,

Yanıtlar:


11

Matl , 33 31 , 30 bayt

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

Giriş, büyük harflerle (veya küçük harflerle, ancak karışık değil) yapılır.

Çıktı:

  • Sözcük dönen değil ise: hiçbir çıktı üretilmez
  • Dönüyorsa: iki satır farklı satırlarda üretilir:
    • İlk sayı 1/ -1 merkezkaç / merkezcil gösterir.
    • İkinci sayı 1/ `-1 'saat yönünde / saat yönünün tersine gösterir.

Çevrimiçi deneyin! Veya tüm test durumlarını doğrulayın (tüm girişleri almak ve aynı satırda iki çıkış numarası üretmek için kod değiştirildi)

açıklama

'OPERAA'Örnek olarak girdi alalım.

Kodun ilk kısmı çift harfleri kaldırır:

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'

Şimdi harflerin arasındaki mesafelerin düşüp düşmediğini kontrol ediyoruz (kelimenin dönmesi için gerekli şart):

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]

Ardından harflerin ileri geri gidip gitmediğini kontrol ederiz (bu, kelimenin dönmesi için başka bir koşuldur):

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]

Son olarak, iki koşulun geçerli olup olmadığını kontrol ederiz ve bu durumda çıktıyı üretir:

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, 117 111 bayt

JHM'ye 6 byte tasarruf ettiğinden ve önyüklemede büyük / küçük harfe duyarlı olduğundan dolayı teşekkür ederiz!

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

Bir dize alan ve formdaki iç içe bir booleans listesini döndüren adsız işlev {{B1,B2},B3,B4}. B4, kelimenin dönen olup olmadığını (ve değilse, çıktının geri kalanının çöp olduğunu) kaydeder. Eğer kelime dönüyorsa, B1 kelimenin merkezkaç olup olmadığını, B2 ise kelimenin merkezcil olup olmadığını, B3 ise kelimenin saat yönünde (Doğru) veya saat yönünün tersinde (Yanlış) olduğunu kaydeder.

İşte sonrası süreçler (ilk satır) (2-5 hattı üzerinden aralıklı) Yukarıdaki fonksiyon OP o özdeş hale getirmek için bu daha uzun bir versiyonu var: NOkelime dönen ve uygun bir seçim değilse {SW,CF,CW}, {SW,CF,CC}, {SW,CP,CW}, veya {SW,CP,CC}eğer kelime dönen:

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

Açıklama, Martin Ender'in CJam cevabındakiyle aynıdır, ek bir notla: Birbirini izleyen farklılıklar listesi, dönen kelimenin kelimenin işaretini değiştirmeli ve ardışık farklılıklar çiftlerinin tüm ürünlerinin negatif olduğundan emin olarak tespit edilebilir. (ne Max[Most[d]Rest@d]<0yapar).

Fonksiyonu, 40.000'den fazla tüm Mathematica kelimesi üzerinde çalıştırarak, WordList[]kendi dönen türlerinden en uzun olan aşağıdaki 8 harflik dönen kelimeleri buluyoruz:

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, çift harfe sahip olmadığına ve ondan daha az tekrarlanan harfe işaret ettiğine işaret eder stowaway.)

Ancak mutlak şampiyon saat yönünün tersine dönen 9 harfli, merkezcil kelime vassalage!


1
Sen kullanarak 3 bayt kaydedebilirsiniz LetterNumberyerine ToCharacterCodekullanılarak ve başka 3 bayt Most[d]yerine Drop[d,-1].
JungHwan Min,

5

Scala, 110 bayt

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

Bir demet döndürür (a,b)ile

  • a == 1 eğer s merkezcil ise
  • a == 0 s santrifüj ise
  • a == -1 s dönmüyorsa

ve

  • b == true s saat yönünde ise
  • b == false s saat yönünün tersine ise
  • s dönen değilse b doğru veya yanlış olabilir

Açıklama:

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

Jöle , 30 bayt

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

TryItOnline
Veya test durumlarını görün (en son değişikliklerinÑyeni ana bağlantıya işaret edeceğigibi küçük bir değişiklikle)

(Zincirleme becerim eksikliğim muhtemelen burada birkaç byte'a mal oluyor)
Hepsi yukarı ya da hepsi daha düşük.
Bir bayrak listesi döndürür [D, F, S]:
S: dönüş = 1 / dönüş değil = 0
F: merkezkaç = 1 (dairesel = 0) merkezcil = -1
D: saat yönünde = 1 / saat yönünün tersine = -1
- eğer S = 0 diğer bayraklar yararlı bilgi içermese de hala değerlendirilmektedir.

Nasıl?

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
Sanırım burada "acemi sendromu" dediğim şeyi deneyimliyorsunuz. Ben de seninle aynı hissediyorum. Belki Dennis burada yardımcı olabilir. Ancak, Jelly'le mümkün olduğunu gördüğüm için + 1'ledim. Ayrıca, dairesel kasayı kaldırabilirsiniz; artık yok.
Outgolfer Erik,

Dairesel kelimeler hakkında dürtme için teşekkür ederiz - sonuçta onlar için yiyecek ve içecek sağlamak için 6 bayt aslında gereksizdi çünkü boş bir listenin minimum olması 0bu yüzden hala onlar için de işe yarıyor!
Jonathan Allan,

Yani, onlar için çalışması gerekir ? Gördüğün gibi hala circular(0)açıklamasının içindesin, belki de kaldırmanın zamanı gelmiştir.
Outgolfer Erik,

Gerek yok, hayır - ama bu kod min([])=0 jelly.tryitonline.net/#code=W13huYI&input= - dairesel kelimelerin artık hiçbir zaman olmadığına dikkat edin. Beklenen girdiler, yiyecek içecek tedarikinde sorun yok.
Jonathan Allan,

Sadece senden iki kez kontrol etmeni istedim. Ve bunu kastettiğini anladım min([])==0, ama bunun hala golf oynayabileceğini düşündüm.
Outgolfer Erik,

3

CJam , 39 bayt

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

Çevrimiçi deneyin!

Giriş büyük veya küçük olabilir, ancak karıştırılamaz.

Program istemeden santrifüj veya merkezcil olmayan, ancak aksi takdirde spiral olma gerekliliklerini karşılayan kelimeleri belirtir. Bunlar aşağıdaki tabloda "dairesel" olarak tanımlanmıştır.

Çıktıyı yorumlamak için bu çizelgeyi kullanın:

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)


Açıklama:

Program aslında karakterler arasındaki sıfır olmayan farklar dizisinin pozitif mi yoksa negatif mi başladığını, işarete göre değişip değişmediğini, büyüklüklerin artmaya veya azalmaya başladığını, ve böyle devam edip etmediğini değerlendirir. Büyüklükler artmaz veya azalmazsa, program boş bir dizi üzerinde çalışarak bozulur. Büyük adımlar aşağıda gösterilmiştir (bu kod yığının ilerlemesini de gösterecektir):

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 Bayt

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;

daha güzel bir çıktı için echo["n","+P","-P","+F","-F"][$s];

Genişletilmiş sürüm

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

Görev 2 saniye değeri kısa çift kural olmadan

4-F öldürme sayısı 11 Bayt, 10 Bayt pozitifleştirir

3 + F muhalif 10 Bayt logogogue 9 Bayt

2 -P vassalage 9 Bayt sarkol, sasarara 8 Bayt

1 + P assession 9 Bayt apanage, aramaic, argonon, açık artırma, avision, ödüllendirildi, crenele, exesion, exition, exing, eyewink 7 Bytes

Bir kelimeyi görselleştir

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

snippet'te yarattığım SVG'nin sonucudur

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


Büyük Dönen Kelimeler Görüntüleyici! :) Belki karakterleri yarım daire yerine yarım elips ile bağlamayı deneyebilirsiniz. Daha kompakt olacak ve daha "dinamik" görünecek. Ama yine de harika görünüyor!
Mario,

Bu sadece bir faktör ihtiyacı @Mario '.(.8*$radius).'yerine '.($radius).'ve değiştirirseniz ($radius).' 0 0 0ile ($radius).' 0 0 '.(($w[$i-1]<$w[$i]?1:0)^(($i-1)%2)).'programa bir düzeltme yönü değil sahiptir
Jörg Hülsermann

2

Haskell, 148 bayt

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'da dene.

Giriş, hem küçük hem de büyük harf olmalıdır.
Çıktı beş boole listesi: [SW?, CF?, CP?, CW?, CC?].

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

Bu beklenenden daha uzun sürdü, özellikle de tekrarlanan karakterlerin çöküşünü teslim etmek yaklaşık 40 byte sürüyor.

İlk başta , testislerin de geçerli ya da geçerli olduğunu fark etmeden önce CWya da CCvermeden önce sadece ilk iki karakteri karşılaştırdım ve bu yaklaşımı yendim.bbabbc


2

Python, 152 bayt:

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

Anonim bir lambda işlevi. Olarak arayın print(<Function Name>('<String>')).

Girişi tüm küçük harf veya büyük harf olarak alır, ancak büyük / küçük harf karışık değildir .

[]Sözcük girdap değilse hiçbir şey içeren bir diziyi ( ) veya aşağıdaki biçimde bir diziyi çıkarır:

  • 1. eleman True/Falseiçindir Centrifugal/Centripetal.
  • 2 element True/Falseiçindir Clockwise/Counterclockwise.

Çevrimiçi Deneyin! (Ideone)

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.