SELURUHNYA SAAT INI

42

Untuk tantangan hari ini, Anda harus menulis sebuah program atau fungsi yang mengganti huruf string. Namun, Anda harus mengabaikan karakter non-alfabet. Ini berarti bahwa setiap karakter alfabet harus memiliki huruf yang berbeda dari karakter alfabet sebelumnya dan berikutnya. Ini sedikit lebih kompleks daripada melipatgandakan setiap huruf lainnya misalnya. Jika Anda mengambil string seperti

hello world

dan mengonversi setiap karakter lain menjadi huruf besar, Anda akan mendapatkan:

hElLo wOrLd

Seperti yang Anda lihat, huruf kecil odiikuti oleh huruf kecil w. Ini tidak valid. Sebagai gantinya, Anda harus mengabaikan ruang, memberi kami hasil ini:

hElLo WoRlD

Semua karakter non-alfabet harus dibiarkan sama. Output dapat mulai dengan huruf besar atau kecil, asalkan secara konsisten bergantian. Ini berarti yang berikut ini juga akan menjadi output yang dapat diterima:

HeLlO wOrLd

Program Anda harus bekerja terlepas dari kasus input.

String input hanya akan berisi ASCII yang dapat dicetak , jadi Anda tidak perlu khawatir tentang karakter yang tidak diinginkan, baris baru atau unicode. Kiriman Anda dapat berupa program lengkap atau fungsi, dan Anda dapat mengambil input dan output dalam format yang masuk akal. Misalnya, argumen fungsi / nilai pengembalian, STDIN / STDOUT, membaca / menulis file, dll.

Contoh:

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

Karena ini adalah , celah standar berlaku dan jawaban terpendek dalam byte menang!

DJMcMayhem
sumber
33
Ugh, aku baru saja menyadari ini adalah bahwa meme xD
Beta Decay
@BetaDecay Hahaha, itu bukan maksud saya. Lebih tepatnya waktu yang tidak menguntungkan. Saya menganggapnya sebagai obrolan-tantangan mini , dan saya menyukai ide di baliknya karena ini agak lebih sulit daripada yang terlihat.
DJMcMayhem
4
Tantangan selanjutnya adalah mencetak spongebob ascii à lacowsay
Frambot
1
Sial! Saya baru saja menulis skrip CJam untuk ini (seperti kemarin) dan menghapusnya.
Buah Esolanging
2
Ada beberapa potensi yang terlewatkan untuk judul atau setidaknya contoh menggunakan penguin malapetaka atau sporks.
Ian

Jawaban:

19

JavaScript (ES6), 66 63 byte

Mulai dengan huruf besar.

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

Uji kasus

Arnauld
sumber
Persis bagaimana aku akan melakukannya. Saya pikir saya bisa melihat di mana Anda dapat menyimpan beberapa byte tetapi saya di ponsel saya sehingga tidak dapat menguji dengan benar.
Shaggy
Yup, menggunakan terner adalah apa yang akan saya sarankan.
Shaggy
1
Bagaimana cara s=!skerjanya?
Kritixi Lithos
7
@KritixiLithos Karena sadalah string input, !spertama-tama mengevaluasi ke false(kecuali string input kosong, dalam hal ini akan dievaluasi ke true- tetapi string kosong tidak akan menghasilkan kecocokan apa pun). Setelah itu, itu hanya menjadi operasi boolean standar, bergantian antara falsedan true. Juga, kami tidak keberatan kehilangan konten pada ssaat ini karena sudah digunakan untuk memberi makan .replace().
Arnauld
3
@ MayorMonty Sayangnya, itu akan cocok dengan beberapa simbol. Input seperti "A[I"akan gagal.
Arnauld
12

05AB1E , 11 8 byte

Kode:

lvyJ¤aiš

Menggunakan penyandian 05AB1E . Cobalah online!

Penjelasan:

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
sumber
Saya suka bagaimana saya mencoba menjadi buta, tahu saya harus mengalahkan 11-byte; kemudian perlahan-lahan beralih dari 17 ke 11 byte dan sadari lvy¾Fš}Da½Japa yang sudah Anda miliki ._.
Magic Gurita Guci
1
@carusocomputing Ada solusi 8 byte yang jauh lebih mudah: p
Adnan
4
oh ya, super mudah haha.
Magic Gurita Guci
2
@Octopus Ada beberapa diskusi tentang ini, tapi saya menggunakan 'osable' dan 'osabie'.
Adnan
1
@octopus Saya benar-benar mengatakan Oh-Five-Ay-Bee-One-Eee, saya bukan orang yang kreatif.
Magic Gurita Guci
11

GNU Sed, 33

  • 5 byte disimpan berkat @TobySpeight

Skor termasuk +1 untuk -rflag to sed.

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

Cobalah online .

Trauma Digital
sumber
8

Jelly , 13 byte

nŒsTm2
ŒlŒuǦ

Cobalah online!

Bagaimana itu bekerja

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

Japt , 16 14 byte

r"%l"_m"uv"gT°

Cobalah online!

Penjelasan

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
sumber
Sangat bagus! Anda dapat menghapus ,. Kecuali itu angka (yaitu [12]), Japt tahu mereka item yang berbeda. Saya yakin Anda bisa menghapusnya &1juga.
Oliver
Terima kasih @obarakon. Dokumentasi Japt sedikit jarang.
powelles
Terima kasih telah menggunakan Japt. Jangan ragu untuk mengajukan pertanyaan, saran, dll. Di ruang obrolan Japt . Ada juga tip untuk Japt thread . :)
Oliver
_m"uv"gT°Bagus. Saya baru saja akan menyarankan itu.
Oliver
@obarakon Ya saya melihat di mana ETH menanggapi pertanyaan Anda dalam obrolan dan itu membuat saya mencoba berbagai hal.
powelles
6

Python 3 , 86 76 68 66 63 byte

-2 bytes berkat DJMcMayhem
-3 bytes berkat Cyoce

x=0
for i in input():print(end=(2*i).title()[x]);x^=i.isalpha()

Cobalah online! atau Coba semua test case

tongkat
sumber
Dua byte lebih pendek dalam python 3: Cobalah online!
DJMcMayhem
1
ada alasan yang tidak bisa kamu lakukan print(end=(2*i).title()[x])?
Cyoce
5

Alice , 18 byte

/olZlYuN
@iy.u..//

Cobalah online!

Penjelasan

Program ini mengikuti templat yang kurang dikenal untuk program ganjil yang berjalan seluruhnya dalam mode ordinal. Versi linear dari kode ini adalah:

il.l.uN.YuZyo@

Penjelasan kode:

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

Tanpa menggunakan lduplikat, tumpukan setelahnya Nakan menjadi ["helloworld", "helloworld"]. Saya sangat curiga ini adalah bug.

Nitrodon
sumber
5

C (tcc) , 60 57 56 byte

Berkat DigitalTrauma untuk memperhatikan bit 5 adalah satu-satunya perbedaan untuk huruf besar / kecil ASCII.

Terima kasih khusus kepada zch untuk bermain golf tiga byte lagi.

Simpan satu byte lagi dari ide RJHunter

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

Cobalah online!

Cleblanc
sumber
Saya bermain golf sedikit lebih , dan dimodifikasi sehingga berfungsi pada semua gcc, tcc, dentang. FWIW, gcc menempatkan string literal ke dalam memori read-only, jadi saya biasa strdup()mendapatkan pointer untuk membaca-menulis memori dalam kode test-driver.
Trauma Digital
1
@DigitalTrauma terima kasih untuk itu. Saya seharusnya mengakui bit 5 adalah perbedaan antara atas dan bawah. Bagus!
cleblanc
Saya mencoba membuat versi ini rekursif juga, tetapi tidak bisa membuatnya lebih pendek.
Trauma Digital
Anda dapat mengganti kondisi dalam dengan *s&~32|++l%2<<5untuk menghemat 3 byte.
zch
Karena input tersebut berjanji untuk dapat dicetak ASCII, Anda dapat menggantinya &~33dengan &95untuk menyimpan byte lebih lanjut.
RJHunter
4

Java 8, 99 byte

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

Penjelasan:

Coba di sini.

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
sumber
Saya tidak bisa membuatnya lebih pendek tetapi Anda mungkin dapat menggunakan (c+"").matches("[A-Za-z]")atau Character.isLetter(c)menyimpan byte.
TheLethalCoder
@TheLethalCoder Keduanya lebih panjang dari itu c>64&c<91|c>96&c<123. Dan karena saya inttetap menggunakan untuk bagian Character.toUpperCase(...)dan Character.toLowerCase(...)golf (ini: (char)(c&~32)dan (char)(c|32)), saya ragu saya bisa membuatnya lebih pendek dengan salah satu dari mereka.
Kevin Cruijssen
1
Saya pikir Anda tidak akan bisa tetapi layak memposting untuk melihat apakah Anda dapat memanfaatkannya
TheLethalCoder
@TheLethalCoder Ah ok. :) Dalam beberapa kasus, yang pertama mungkin membantu dengan pendekatan yang sedikit berbeda untuk tantangan lain, tetapi untuk tantangan ini lebih pendek. Bagaimanapun, terima kasih.
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

Ruby, 57 55 47 41 byte

Hitungan byte mencakup dua byte untuk opsi baris perintah.
Jalankan misalnya seperti ini:$ ruby -p0 alternate_case.rb <<< "some input"

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

Dengan p0opsi ini, seluruh input dikonsumsi dalam sekali jalan, dan global magis $.bertambah menjadi 1. Ini kemudian beralih antara 0 dan 1 dan digunakan untuk menjaga status.

Bekerja dengan input multiline; Cobalah online!

Terima kasih kepada Ventero untuk input yang luar biasa - periksa komentar untuk detail.

daniero
sumber
1
Man, jika bukan karena fakta bahwa $.kenaikan otomatis dengan setiap getspanggilan, program lengkap dengan -pbendera akan lebih pendek ...
Value Ink
1
1&$.+=1memungkinkan Anda menjatuhkan tanda kurung. Dan untuk kelengkapan demi, ada bilangan bulat global yang lain - itu sayangnya hanya read-only: $$.
Ventero
1
Hal lain tentang flag baris perintah: -p0membuat penerjemah membaca semua input yang tersedia dalam sekali jalan - jadi kode Anda hanya dipanggil sekali, memungkinkan Anda untuk bebas menggunakan $.. Menggabungkannya dengan fakta yang gsubsecara implisit beroperasi seperti $_.gsub!ketika menentukan -pmembuat program lengkap secara signifikan lebih pendek: 48 karakter untuk gsub(/[a-z]/i){[$&.upcase,$&.downcase][1&$.+=1]}dan 2 untuk p0bendera.
Ventero
1
Komentar terakhir, saya janji :) Setelah Anda menggunakan -p0, Anda sebenarnya dapat menyimpan beberapa karakter lagi dalam cara Anda $.bolak-balik: Karena sekarang dijamin 1ketika kode Anda dipanggil, Anda dapat menggunakan $.^=1.
Ventero
2
Ternyata saya berbohong, saya punya komentar lain: D Karena input dijamin hanya mengandung ASCII yang dapat dicetak, kita dapat menggunakan dukungan Ruby untuk kategori Unicode dalam ekspresi reguler: /\p{L}/( Surat kategori Unicode ) adalah satu karakter lebih pendek daripada /[a-z|/i.
Ventero
3

Brachylog , 25 byte

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

Cobalah online!

Ini panjang dan lambat.

Penjelasan

{   }ᵐ.                       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
Fatalisasi
sumber
3

MATL , 16 15 byte

Xktkyy-f2L))5M(

Cobalah online! Atau verifikasi semua kasus uji .

Penjelasan

Pertimbangkan masukan 'halo dunia'

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

Perl 6 ,  32  30 byte

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

Cobalah

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

Cobalah

Diperluas:

{  # 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
sumber
3

q / kdb +, 51 42 38 bytes

Larutan:

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

Contoh:

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

Catatan:

.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
sumber
2

V , 17 , 13 byte

VUÍშáü$©/ì&

Cobalah online!

Atau Verifikasi semua test case!

HeXdUmP:

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

Penjelasan:

Ini menggunakan regex terkompresi ️, jadi sebelum menjelaskannya, mari rentangkan regex keluar:

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

The VUbertobat segalanya menjadi huruf besar. Lalu kita jalankan ini:

:%                      " 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

Jawaban lama / lebih menarik:

:se nows
Vuò~h2/á
DJMcMayhem
sumber
2

PHP, 71 Bytes

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

Cobalah online!

Jörg Hülsermann
sumber
2

CJam , 26 24 byte

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

Cobalah online!

Penjelasan

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)
Kucing Bisnis
sumber
2

Pyth, 11 byte

srR~xZ}dGrZ

Coba di sini

Penjelasan

              # 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
sumber
2

PowerShell, 86 byte

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

Masukan adalah a [char[]] array.

Komentar dalam kode untuk penjelasan

# 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()
        }
    })
Mat
sumber
2

Haskell, 105 83 + 2 4 + 1 byte pemisah = 108 86 88 Bytes

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

Fungsinya (1#), mulai huruf kecil. Cobalah online!

Yang menyedihkan adalah ini lebih panjang dari Java dan jawaban C # Terima kasih kepada Ørjan Johansen karena telah menghemat 22 byte dengan menggabungkan tiga baris menjadi satu!

Nama Tampilan Umum
sumber
2
Saya melihatnya membutuhkan fungsi-fungsi yang diimpor panjang itu sehingga saya bahkan tidak mencoba ... tapi itu agak banyak, Anda dapat menggabungkan beberapa baris:f#(x:y)|isLetter x=([toUpper,toLower]!!f)x:(1-f)#y|1>0=x:f#y
Ørjan Johansen
Maaf untuk melakukan nitpicking, tapi saya pikir 1#tidak dihitung sebagai fungsi anonim. Dalam pemahaman saya, seseorang harus dapat mengikat fungsi anonim ke pengidentifikasi, tetapi misalnya f=1#tidak akan berfungsi. Sebagai gantinya Anda membutuhkan bagian (1#)untuk +2 byte. Ini juga secara implisit dinyatakan dalam pedoman komunitas kami untuk bermain golf di Haskell , meskipun mungkin itu harus diadaptasi untuk secara eksplisit menyebutkan kasus ini.
Laikoni
@Laikoni ok, jawab diperbarui
Generic Display Name
2

Google Sheets, 264 byte

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

Ini berantakan besar tetapi sedikit lebih mudah jika Anda mengembangkannya:

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

Logika semu akan berjalan seperti ini:

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()
  }
}
Toast insinyur
sumber
2

Perl 5 , 24 byte

23 byte + 1 byte untuk -p.

Berkat @Dada untuk -2 byte.

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

Cobalah online!

Dom Hastings
sumber
Rapi. \plbukannya [a-z]2 byte tho :)
Dada
@Dada, saya benar-benar tidak tahu itu! Bagaimana saya tidak tahu itu !! Terima kasih!
Dom Hastings
Saya pikir saya mempelajarinya dari Ton Hospel, dan saya menggunakannya sekarang dan kemudian (sebenarnya saya cenderung melupakannya terlalu sering dan menggunakannya [a-z]sebagai gantinya!). Jika Anda bertanya-tanya, itu berasal dari perlrecharclass ;)
Dada
1

C 64 byte

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

Mengambil keuntungan dari pengkodean ascii di mana huruf besar dan kecil diimbangi dengan 0x20.

pengguna230118
sumber
Anda tidak perlu spasi antara chardan*s
cleblanc
Ini terlihat sangat mirip dengan jawaban @ cleblanc .
Digital Trauma
Saya mempostingnya ketika postingan @ cleblanc digunakan untukUpper () dan toLower ().
user230118
1
Komentar saya menyarankan pendekatan ini pada 18: 29: 34Z. Sunting cleblanc untuk memasukkan ini pada 18: 37: 36Z. Jawaban Anda diposting di 18: 38: 21Z. Jadi saya kira jawaban cleblanc kurang dari satu menit sebelum posting Anda. Jawaban Anda sangat mirip dengan saran saya, tetapi saya rasa itulah sifat kode-golf - seringkali solusi dalam bahasa yang sama akan menyatu dengan hal yang sama - jadi saya akan membiarkannya meluncur :)
Digital Trauma
1

Retina , 32 byte

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

Cobalah online!

Pertama mengonversi input menjadi huruf besar, dan kemudian mengelompokkan input ke dalam kecocokan yang berisi hingga dua huruf kapital. Satu-satunya waktu itu hanya akan berisi satu huruf adalah jika huruf terakhir tidak memiliki pasangan. Kemudian menurunkan huruf pertama dari setiap pertandingan ini.

Pada 01tahap kedua diterjemahkan secara kasar ke: jangan mengubah perilaku tahap ini berdasarkan nomor pertandingan, tetapi hanya menerapkan perubahan pada karakter pertama dari setiap pertandingan.

FryAmTheEggman
sumber
1

PHP 5, 54 byte

<?=preg_filter('/\pL/e','($0|" ")^a^aA[$i^=1]',$argn);
pengguna63956
sumber
1

C #, 100 byte

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

Groovy, 79 byte

{x=0;it.toUpperCase().collect{(it==~/\w/)?x++%2?it:it.toLowerCase():it}.join()}
Guci Gurita Ajaib
sumber
1

Python 3 , 192 byte

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

Cobalah online!

caird coinheringaahing
sumber