ALTERNATYWNOŚĆ

42

W dzisiejszym wyzwaniu musisz napisać program lub funkcję, które naprzemiennie rozróżniają wielkość liter. Należy jednak zignorować znaki niealfabetyczne. Oznacza to, że każdy znak alfabetu musi mieć inną wielkość liter niż poprzedni i następujący po nim znak alfabetu. Jest to nieco bardziej skomplikowane niż na przykład pisanie dużymi literami. Jeśli weźmiesz ciąg taki jak

hello world

i przekonwertuj każdą inną postać na wielkie litery, otrzymasz:

hElLo wOrLd

Jak widać, po małych literach onastępuje mała w. To jest nieprawidłowe Zamiast tego musisz zignorować przestrzeń, dając nam następujący wynik:

hElLo WoRlD

Wszystkie znaki niealfabetyczne muszą pozostać takie same. Wyjście może rozpoczynać się od dużej lub małej litery, o ile stale się zmienia. Oznacza to, że następujące wyniki byłyby również do przyjęcia:

HeLlO wOrLd

Twój program powinien działać bez względu na przypadek wejścia.

Łańcuch wejściowy zawsze będzie zawierał tylko drukowalny kod ASCII , więc nie musisz się martwić o niedrukowalne znaki, znaki nowej linii lub Unicode. Twoje zgłoszenie może być pełnym programem lub funkcją, a dane wejściowe i wyjściowe można pobrać w dowolnym rozsądnym formacie. Na przykład argumenty funkcji / wartość zwracana, STDIN / STDOUT, odczyt / zapis pliku itp.

Przykłady:

ASCII                                   ->  AsCiI
42                                      ->  42
#include <iostream>                     ->  #InClUdE <iOsTrEaM>
LEAVE_my_symbols#!#&^%_ALONE!!!         ->  lEaVe_My_SyMbOlS#!#&^%_aLoNe!!!
PPCG Rocks!!! For realz.                ->  PpCg RoCkS!!! fOr ReAlZ.
This example will start with lowercase  ->  tHiS eXaMpLe WiLl StArT wItH lOwErCaSe
This example will start with uppercase  ->  ThIs ExAmPlE wIlL sTaRt WiTh UpPeRcAsE
A1B2                                    ->  A1b2

Ponieważ jest to , obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach!

DJMcMayhem
źródło
33
Ugh, dopiero co zdałem sobie sprawę, że to był ten mem xD
Beta Decay
@BetaDecay Hahaha, to nie było moim zamiarem. Więcej po prostu niefortunnego momentu. Myślałem o tym jako o mini-wyzwaniu na czacie i podoba mi się ten pomysł, ponieważ jest subtelnie trudniejszy niż się wydaje.
DJMcMayhem
4
Kolejnym wyzwaniem jest wydrukowanie ascii spongebob à lacowsay
Frambot
1
Cholera! Ja tylko napisałem CJam scenariusz ten (jak wczoraj) i usunął go.
Esolanging Fruit
2
W tytule lub w niektórych przykładach wykorzystano pingwina zagłady lub sporków.
Ian

Odpowiedzi:

19

JavaScript (ES6), 66 63 bajtów

Zaczyna się od wielkich liter.

s=>s.replace(/[a-z]/gi,c=>c[`to${(s=!s)?'Low':'Upp'}erCase`]())

Przypadki testowe

Arnauld
źródło
Dokładnie jak zamierzałem to zrobić. Myślę, że widzę, gdzie można zaoszczędzić kilka bajtów, ale jestem na telefonie, więc nie mogę poprawnie przetestować.
Kudłaty
Tak, skorzystanie z trójki jest tym, co zamierzałem zasugerować.
Kudłaty
1
Jak działa s=!ssztuczka?
Kritixi Lithos
7
@KritixiLithos Ponieważ sjest to łańcuch wejściowy, !snajpierw ocenia na false(chyba, że ​​łańcuch wejściowy jest pusty, w którym to przypadku byłby oceniany true- ale pusty łańcuch i tak nie wygeneruje żadnego dopasowania). Następnie staje się standardową operacją logiczną, na przemian z falsei true. Ponadto nie mamy nic przeciwko utracie zawartości sw tym momencie, ponieważ była już używana do karmienia .replace().
Arnauld
3
@MayorMonty Niestety, pasowałoby to do kilku symboli. Dane wejściowe takie jak "A[I"zawiodłyby.
Arnauld
12

05AB1E , 11 8 bajtów

Kod:

lvyJ¤aiš

Wykorzystuje kodowanie 05AB1E . Wypróbuj online!

Wyjaśnienie:

l           # Lowercase the input
 vy         # For each element..
   J        #   Join the entire stack into a single string
    ¤a      #   Check if the last character is alphabetic
      iš    #   If true, swapcase the entire string
Adnan
źródło
Uwielbiam to, jak próbuję wejść na ślepo, wiedząc, że muszę pobić 11 bajtów; następnie powoli przechodź z 17 do 11 bajtów i zdaj sobie sprawę lvy¾Fš}Da½J, że masz dokładnie to, co już masz.
Magic Octopus Urn
1
@carusocomputing Jest o wiele łatwiejsze rozwiązanie 8-bajtowe: p
Adnan
4
o tak, super łatwa haha.
Magic Octopus Urn
2
@Octopus Trwa dyskusja na ten temat, ale używam zarówno „osable”, jak i „osabie”.
Adnan
1
@octopus Dosłownie mówię Oh-Five-Ay-Bee-One-Eee, że nie jestem człowiekiem kreatywnym.
Magic Octopus Urn
11

GNU Sed, 33

  • 5 bajtów zapisanych dzięki @TobySpeight

Wynik obejmuje +1 za -rflagę do sed.

s/([a-z])([^a-z]*.?)/\U\1\L\2/gi

Wypróbuj online .

Cyfrowa trauma
źródło
8

Galaretka , 13 bajtów

nŒsTm2
ŒlŒuǦ

Wypróbuj online!

Jak to działa

ŒlŒsǦ  Main link. Argument: s (string)

Œl      Cast to lowercase.
    Ǧ  At indices returned by the helper link...
  Œu        apply uppercase.


nŒsTm2      Helper link. Argument: s (string)

 Œs         Apply swapcase to s.
n           Perform vectorizing not-equal comparison.
   T        Compute the truthy indices.
    m2      Select every other one, starting with the first.
Dennis
źródło
7

Japt , 16 14 bajtów

r"%l"_m"uv"gT°

Wypróbuj online!

Wyjaśnienie

r              // RegEx replace input
 "%l"          // [A-Za-z] as first arg to replace
     _         // created function Z=>Z as second arg to replace
       "uv"gT° // alternates "u" & "v"
      m        // map Z to either "u" upper or "v" lower
powelles
źródło
Bardzo dobrze! Możesz usunąć ,. Chyba że jest to liczba (tj. [12]), Japt wie, że są to różne przedmioty. Wierzę, że możesz również usunąć &1.
Oliver,
Dzięki @obarakon. Dokumentacja Japt jest trochę rzadka.
powelles
Dzięki za skorzystanie z Japt. Możesz zadawać pytania, sugestie itp. W pokoju rozmów Japt . Istnieją również porady dotyczące wątku Japt . :)
Oliver,
_m"uv"gT°Miły. Właśnie miałem to zasugerować.
Oliver,
@obarakon Tak, widziałem, gdzie ETH odpowiedział na twoje pytanie na czacie i sprawiło, że próbowałem.
powelles
5

Alice , 18 bajtów

/olZlYuN
@iy.u..//

Wypróbuj online!

Wyjaśnienie

Ten program działa według mniej znanego szablonu dla programów o nieparzystej długości, które działają całkowicie w trybie porządkowym. Zlinearyzowana wersja tego kodu to:

il.l.uN.YuZyo@

Objaśnienie kodu:

i - push input onto stack            ["Hello world!"]
l - convert to lowercase             ["hello world!"]
. - duplicate                        ["hello world!", "hello world!"]
l - convert to lowercase (should be no-op, but avoids what seems to be a bug in the TIO implementation)
. - duplicate again                  ["hello world!", "hello world!", "hello world!"]
u - convert to uppercase             ["hello world!", "hello world!", "HELLO WORLD!"]
N - difference between sets          ["hello world!", "helloworld"]
. - duplicate reduced string         ["hello world!", "helloworld", "helloworld"]
Y - unzip (extract even positions)   ["hello world!", "helloworld", "hlool", "elwrd"]
u - convert to uppercase             ["hello world!", "helloworld", "hlool", "ELWRD"]
Z - zip evens back into string       ["hello world!", "helloworld", "hElLoWoRlD"]
y - perform substitution             ["hElLo WoRlD!"]
o - output                           []
@ - terminate

Bez użycia lna duplikacie stos po Nbędzie ["helloworld", "helloworld"]. Podejrzewam, że to błąd.

Nitrodon
źródło
5

C (tcc) , 60 57 56 bajtów

Dzięki DigitalTrauma zauważenie bitu 5 jest jedyną różnicą dla wielkich / małych liter ASCII.

Specjalne podziękowania dla ZCH za grę w golfa jeszcze trzy bajty.

Oszczędź jeszcze jeden bajt od pomysłu RJHuntera

l;f(char*s){for(;*s=isalpha(*s)?*s&95|++l%2<<5:*s;s++);}

Wypróbuj online!

cleblanc
źródło
Grałem trochę w golfa i zmodyfikowałem, aby działał na wszystkich gcc, tcc, clang. FWIW, gcc umieszcza literały łańcuchowe w pamięci tylko do odczytu, więc uzywałem strdup()wskaźników do odczytu i zapisu w kodzie sterownika testowego.
Cyfrowa trauma
1
@DigitalTrauma dzięki za to. Powinienem był wiedzieć, że bit 5 był różnicą między górną a dolną. Miły !
cleblanc
I starał się, aby ta wersja rekurencyjna też, ale nie mógł dostać każdy krótszy.
Cyfrowa trauma
Możesz zamienić warunek wewnętrzny na, *s&~32|++l%2<<5aby zapisać 3 bajty.
zch
Ponieważ dane wejściowe zapowiadają się do wydruku w formacie ASCII, możesz zastąpić &~33je, &95aby zapisać kolejny bajt.
RJHunter
4

Java 8, 99 bajtów

a->{String r="";int i=0;for(int c:a)r+=(char)(c>64&c<91|c>96&c<123?i++%2<1?c|32:c&~32:c);return r;}

Wyjaśnienie:

Wypróbuj tutaj.

a->{                          // Lambda with char-array parameter and String return-type
  String r="";                //  Result-String
  int i=0;                    //  Flag for alteration
  for(int c:a)                //  Loop over the characters of the input
    r+=(char)                 //   And append the result-String with the following (converted to char):
      (c>64&c<91|c>96&c<123?  //    If it's a letter:
       i++%2<1?               //     And the flag states it should be lowercase:
        (c|32)                //      Convert it to lowercase
       :                      //     Else (should be uppercase):
        (c&~32)               //      Convert it to uppercase
      :                       //    Else:
       c);                    //     Simply append the non-letter character as is
                              //  End of loop (implicit / single-line body)
  return r;                   //  Return result-String
}                             // End of method
Kevin Cruijssen
źródło
Nie mogłem go skrócić, ale możesz użyć (c+"").matches("[A-Za-z]")lub Character.isLetter(c)zapisać bajty.
TheLethalCoder
@TheLethalCoder Oba są dłuższe niż c>64&c<91|c>96&c<123chociaż. A ponieważ używam inti tak dla Character.toUpperCase(...)i Character.toLowerCase(...)golfed części (te: (char)(c&~32)a (char)(c|32)), wątpię mogłem zrobić to krótsze z jednej z nich.
Kevin Cruijssen
1
Myślałem, że nie będziesz w stanie, ale warto opublikować, aby sprawdzić, czy i tak możesz z nich skorzystać
TheLethalCoder
@TheLethalCoder Ah ok. :) W niektórych przypadkach pierwszy może pomóc w nieco innym podejściu do innych wyzwań, ale w przypadku tego wyzwania jest on krótszy. W każdym razie dzięki.
Kevin Cruijssen
a->{String r="";int i=0,f=32;for(int c:a)r+=(char)(c>64&c<91|c>96&c<123?(f=~f):c);return r;} ??
Roman Gräf
4

Rubin, 57 55 47 41 bajtów

Liczba bajtów obejmuje dwa bajty dla opcji wiersza poleceń.
Uruchom na przykład tak:$ ruby -p0 alternate_case.rb <<< "some input"

gsub(/\p{L}/){($&.ord&95|32*$.^=1).chr}

Dzięki tej p0opcji całe wejście jest zużywane za jednym razem, a magiczny glob $.jest zwiększany do 1. Jest on następnie przełączany między 0 a 1 i używany do utrzymania stanu.

Działa z wejściem wieloliniowym; Wypróbuj online!

Dzięki Ventero za niesamowity wkład - sprawdź komentarze, aby poznać szczegóły.

daniero
źródło
1
Człowieku, gdyby nie fakt, że $.auto-inkrementacja przy każdym getspołączeniu, pełny program z -pflagą byłby krótszy ...
Atrament wartości
1
1&$.+=1pozwala upuścić nawiasy. I kompletności boską, nie ma innej globalna liczba całkowita - to niestety tylko read-only: $$.
Ventero
1
Kolejna rzecz związana z flagą wiersza poleceń: -p0sprawia, że ​​interpreter odczytuje wszystkie dostępne dane wejściowe za jednym razem - więc twój kod jest wywoływany tylko raz, co pozwala ci swobodnie korzystać $.. W połączeniu z faktem, że gsubdomyślnie działa tak, jak $_.gsub!podczas określania, -ppełny program jest znacznie krótszy: 48 znaków dla gsub(/[a-z]/i){[$&.upcase,$&.downcase][1&$.+=1]}i 2 dla p0flagi.
Ventero,
1
Uwaga końcowa, obiecuję :) Gdy już użyjesz -p0, możesz w rzeczywistości zapisać kilka dodatkowych znaków w sposobie przewijania w $.przód i w tył: ponieważ teraz jest gwarantowane, że 1kiedy twój kod zostanie wywołany, możesz po prostu użyć $.^=1.
Ventero
2
Okazuje się, że skłamałem, mam inny komentarz: D Ponieważ dane wejściowe zawsze zawierają tylko drukowalne ASCII, możemy używać wsparcia Ruby dla kategorii Unicode w wyrażeniach regularnych: /\p{L}/( Litera kategorii Unicode ) jest o jeden znak krótsza niż /[a-z|/i.
Ventero
3

Brachylog , 25 bajtów

{ḷ|ụ}ᵐ.{ḷ∈Ạ&}ˢ¬{s₂{∈Ạ}ᵐ}∧

Wypróbuj online!

Jest to zarówno długie, jak i powolne.

Wyjaśnienie

{   }ᵐ.                       The Output is the result of mapping on each char of the Input:
 ḷ                              Lowecase the char
  |                             Or
   ụ                            Uppercase the char
       {    }ˢ                In the Ouput, select the chars that:
        ḷ∈Ạ&                    when lowercased are in "abc...xyz" (ie are letters)
              ¬{       }∧     In that new string, it is impossible to find:
                s₂              a substring of 2 consecutive chars
                  {∈Ạ}ᵐ         where both of them are in the lowercase alphabet
Fatalizować
źródło
3

MATL , 16 15 bajtów

Xktkyy-f2L))5M(

Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie

Zastanów się nad wprowadzeniem „hello world”

Xk    % To upper case
      % STACK: 'HELLO WORLD'
t     % Duplicate top element
      % STACK: 'HELLO WORLD', 'HELLO WORLD'
k     % To lower case
      % STACK: 'HELLO WORLD', 'hello word'
yy    % Duplicate top two elements
      % STACK: 'HELLO WORLD', 'hello word', 'HELLO WORLD', 'hello word'
-     % Difference (of code points; element-wise)
      % STACK: 'HELLO WORLD', 'hello word', [-32 -32 -32 -32 -32 0 -32 -32 -32 -32 -32]
f     % Indices of nonzeros
      % STACK: 'HELLO WORLD', 'hello word', [1 2 3 4 5 7 8 9 10 11]
2L)   % Keep only even-indexed values (*)
      % STACK: 'HELLO WORLD', 'hello word', [2 4 7 9 11]
)     % Reference indexing (get values at indices)
      % STACK: 'HELLO WORLD', 'elwrd'
5M    % Push (*) again
      % STACK: 'HELLO WORLD', 'elwrd', [2 4 7 9 11]
(     % Assignment indexing (write values at indices). Implicit display
      % STACK: 'HeLlO wOrLd

Luis Mendo
źródło
3

Perl 6 ,  32  30 bajtów

{S:g/<:L><-:L>*<:L>?/$/.tclc()/}

Spróbuj

{S:g{<:L><-:L>*<:L>?}=$/.tclc}

Spróbuj

Rozszerzony:

{  # bare block lambda with implicit parameter 「$_」

  S            # string replace (not in-place) implicitly against 「$_」

  :global

  {

    <+ :L >    # a letter
    <- :L >*   # any number of non-letters
    <+ :L >?   # an optional letter

  }

  =

  $/.tclc()    # uppercase the first letter, lowercase everything else
}
Brad Gilbert b2gills
źródło
3

q / kdb +, 51 42 38 bajtów

Rozwiązanie:

{@[x;;upper]1#'2 cut(&)x in .Q.a}lower

Przykład:

q){@[x;;upper]1#'2 cut(&)x in .Q.a}lower"hello world"
"HeLlO wOrLd"

Uwagi:

.Q.a        // abcde...xyz lowercase alphabet
(&) x in    // where, returns indices for where x (hello world) is an alpha
2 cut       // splits list into 2-item lists
1#'         // takes first item of each 2-item list; ie the indices to uppercase
@[x;;upper] // apply (@) upper to x at these indices
streetster
źródło
2

V , 17 , 13 bajtów

VUÍშáü$©/ì&

Wypróbuj online!

Lub Zweryfikuj wszystkie przypadki testowe!

HeXdUmP:

00000000: 5655 cde1 83a8 e1fc 24a9 2fec 26         VU......$./.&

Wyjaśnienie:

Używa to skompresowanego wyrażenia regularnego ️, więc przed wyjaśnieniem rozwiń wyrażenie regularne:

:%s/\v\a.{-}(\a|$)/\l&

VUKonwertuje wszystko na wielkie litery. Następnie uruchamiamy to:

:%                      " On every line:
  s/\v                  "   Substitute:
      \a                "     A letter
        .{-}            "     Followed by as few characters as possible
            (\a|$)      "     Followed by either another letter or an EOL
                  /     "   With:
                   \l   "     The next character is lowercased
                     &  "     The whole text we matched

Stara / bardziej interesująca odpowiedź:

:se nows
Vuò~h2/á
DJMcMayhem
źródło
2

PHP, 71 bajtów

for(;a&$c=$argn[$i++];)echo ctype_alpha($c)?(ul[$k++&1].cfirst)($c):$c;

Wypróbuj online!

Jörg Hülsermann
źródło
2

CJam , 26 24 bajtów

qeu{_'[,65>&,T^:T{el}&}%

Wypróbuj online!

Wyjaśnienie

q         e# Read all input.
eu        e# Uppercase it.
{         e# For each character:
 _        e#  Duplicate it.
 '[,65>&  e#  Set intersection with the uppercase alphabet.
 ,        e#  Length (either 0 or 1 in this case).
 T^:T     e#  XOR with T (T is initially 0), then store the result back in T.
 {el}&    e#  If The result of the XOR is true, lowercase the character.
}%        e# (end for)
Business Cat
źródło
2

Pyth, 11 bajtów

srR~xZ}dGrZ

Wypróbuj tutaj

Wyjaśnienie

              # Z = 0; Q = eval(input())
srR~xZ}dGrZQ  # Auto-fill variables
         rZQ  # lowercase the input
 rR           # Apply the r function to each letter of the input with
   ~xZ}dG     # ... this as the other argument
   ~          # use the old value of the variable Z, then update it with the value of ...
    xZ        # Z xor ...
      }dG     # the variable d is a lowercase letter
              # because of how mapping works in pyth, d will contain the current letter
              # This causes Z to flip between 0 and 1, alternately upper and lower casing
              # the current character if it is a letter
FryAmTheEggman
źródło
2

PowerShell, 86 bajtów

-join($args[0]|%{if($_-match"[a-z]"-and($i=!$i)){"$_".toupper()}else{"$_".tolower()}})

Dane wejściowe to [char[]]tablica.

Komentarze w kodzie dla wyjaśnienia

# Join the array of string and char back together.
-join
    # Take the first argument and pass each element ([char]) down the pipe. 
    ($args[0]|%{
        # Check if this is a letter. Second condition is a boolean that changes at every pass 
        # but only if the current element is a letter. If not the condition never fires
        if($_-match"[a-z]"-and($i=!$i)){
            # Change the character to uppercase
            "$_".toupper()
        }else{
            # Output the character to lowercase. 
            # Special characters are not affected by this method
            "$_".tolower()
        }
    })
Matt
źródło
2

Haskell, 105 83 + 2 4 + 1 bajt separatora = 108 86 88 bajtów

import Data.Char
f#(x:y)|isLetter x=([toUpper,toLower]!!f)x:(1-f)#y|1>0=x:f#y
_#l=l

Funkcja jest (1#), zaczyna małe litery. Wypróbuj online!

Smutne jest to, że jest on dłuższy niż odpowiedzi w Javie i C # Dzięki Ørjan Johansen za zaoszczędzenie 22 bajtów poprzez połączenie trzech linii w jeden!

Ogólna nazwa wyświetlana
źródło
2
Widziałem, że potrzebne są te długo importowane funkcje, więc nawet nie próbowałem ... ale to trochę za dużo, możesz połączyć kilka linii:f#(x:y)|isLetter x=([toUpper,toLower]!!f)x:(1-f)#y|1>0=x:f#y
Ørjan Johansen
Przepraszam za nitpicking, ale myślę, że 1#nie liczy się to jako anonimowa funkcja. W moim rozumieniu, powinieneś być w stanie powiązać anonimową funkcję z identyfikatorem, ale np. f=1#Nie zadziała. Zamiast tego potrzebujesz sekcji (1#)dla +2 bajtów. Jest to również domyślnie stwierdzone w naszych wspólnotowych wytycznych dotyczących gry w golfa w Haskell , chociaż być może należy je dostosować, aby wyraźnie wspominały ten przypadek.
Laikoni
@Laikoni ok, odpowiedź zaktualizowana
ogólna nazwa wyświetlana
2

Arkusze Google, 264 bajty

=ArrayFormula(JOIN("",IF(REGEXMATCH(MID(A1,ROW(OFFSET(A1,0,0,LEN(A1))),1),"[A-Za-z]"),CHAR(CODE(UPPER(MID(A1,ROW(OFFSET(A1,0,0,LEN(A1))),1)))+MOD(LEN(REGEXREPLACE(LEFT(A1,ROW(OFFSET(A1,0,0,LEN(A1)))),"[^A-Za-z]","")),2)*32),MID(A1,ROW(OFFSET(A1,0,0,LEN(A1))),1))))

To duży bałagan, ale trochę łatwiej jest go rozwinąć:

=ArrayFormula(
  JOIN(
    "",
    IF(REGEXMATCH(MID(A1,ROW(OFFSET(A1,0,0,LEN(A1))),1),"[A-Za-z]"),
      CHAR(
        CODE(UPPER(MID(A1,ROW(OFFSET(A1,0,0,LEN(A1))),1)))
        +
        MOD(LEN(REGEXREPLACE(LEFT(A1,ROW(OFFSET(A1,0,0,LEN(A1)))),"[^A-Za-z]","")),2)*32
      ),
      MID(A1,ROW(OFFSET(A1,0,0,LEN(A1))),1)
    )
  )
) 

Pseudo-logika wyglądałaby tak:

For each character {                                    // ArrayFormula()
  If (character is a letter) {                          // REGEXMATCH(MID())
    Return CHAR(                                        // CHAR()
      CODE(UPPER(letter))                               // CODE(UPPER(MID()))
      +
      If (nth letter found and n is odd) {32} else {0}  // MOD(LEN(REGEXREPLACE(LEFT())))
    )
  } else {
    Return character                                    // MID()
  }
}
Inżynier Toast
źródło
2

Perl 5 , 24 bajtów

23 bajty + 1 bajt na -p.

Dzięki @Dada za -2 bajty.

s/\pl/--$|?uc$&:lc$&/eg

Wypróbuj online!

Dom Hastings
źródło
Schludny. \plzamiast [a-z]do 2 bajtów tys.)
Dada
@Dada, naprawdę tego nie wiedziałem! Jak ja tego nie wiedziałem !! Dziękuję Ci!
Dom Hastings,
Myślę, że nauczyłem się tego od Ton Hospel i używam go od czasu do czasu (w rzeczywistości zbyt często o nim zapominam i [a-z]zamiast tego używam !). Jeśli się zastanawiasz, pochodzi od perlrecharclass ;)
Dada
1

C 64 bajty

B;R(char *s){for(;*s=isalpha(*s)?(B=!B)?*s|=32:*s&=~32:*s;s++);}

Wykorzystuje kodowanie ascii, w którym wielkie i małe litery są przesunięte o 0x20.

użytkownik230118
źródło
Nie potrzebujesz odstępu między chari*s
cleblanc
To wygląda bardzo podobne do @ cleblanc za odpowiedź .
Cyfrowa trauma
Opublikowałem go, gdy post @ cleblanc używał toUpper () i toLower ().
user230118
1
Mój komentarz sugerujący to podejście miał miejsce 18: 29: 34Z. Edycja Cleblanc, aby to uwzględnić, miała miejsce 18: 37: 36Z. Twoja odpowiedź została opublikowana o godzinie 18: 38: 21Z. Myślę, że odpowiedź Cleblanc była mniej niż minutę przed twoim postem. Twoja odpowiedź jest bardzo podobna do mojej sugestii, ale wydaje mi się, że taka jest natura golfa - często rozwiązania w tym samym języku będą zbieżne z tym samym - więc pozwolę, by się potoczyło :)
Digital Trauma
1

Siatkówka , 32 bajty

T`l`L
01T`L`l`[A-Z][^A-Z]*[A-Z]?

Wypróbuj online!

Najpierw konwertuje dane wejściowe na wielkie litery, a następnie grupuje dane wejściowe w dopasowania zawierające do dwóch dużych liter. Może zawierać tylko jedną literę, jeśli ostatnia litera nie zawiera pary. Następnie obniża wielkość pierwszej litery każdego z tych dopasowań.

01W drugim etapie przekłada grubsza: nie zmieniają zachowanie tego etapu na podstawie liczby meczu, ale zastosować zmiany tylko do pierwszego znaku każdego meczu.

FryAmTheEggman
źródło
1

PHP 5, 54 bajty

<?=preg_filter('/\pL/e','($0|" ")^a^aA[$i^=1]',$argn);
użytkownik63956
źródło
1

C #, 100 bajtów

s=>{var r="";int m=0;foreach(var c in s)r+=char.IsLetter(c)?(char)(++m%2>0?c|32:c&~32):c;return r;};
TheLethalCoder
źródło
1

Groovy, 79 bajtów

{x=0;it.toUpperCase().collect{(it==~/\w/)?x++%2?it:it.toLowerCase():it}.join()}
Urna Magicznej Ośmiornicy
źródło
1

Python 3 , 192 bajty

x=list(input())
s=[]
for i in x[1::2]:
 s.append(i)
 x.remove(i)
s.reverse()
while len(x)<len(s):
 x.append("")
while len(x)>len(s):
 s.append("")
for i in range(len(x)):
 print(end=x[i]+s[i])

Wypróbuj online!

Cairney Coheringaahing
źródło