Membalik string sambil mempertahankan huruf besar di tempat yang sama

28

Tujuannya di sini adalah membalikkan string, dengan satu putaran:
Simpan huruf besar di tempat yang sama.

Contoh Input 1: Hello, Midnightas
Contoh Output 1:SathginDim ,olleh

Contoh Input 2: .Q
Keluaran Exmaple 2:q.

Aturan :

  • Output ke STDOUT, masukan dari STDIN
  • Pemenang akan dipilih 13 Juli pada GMT + 3 12:00 (Satu minggu)
  • Input hanya dapat terdiri dari simbol ASCII, membuatnya lebih mudah untuk program yang tidak menggunakan pengkodean apa pun yang berisi karakter non-ASCII.
  • Tanda baca apa pun yang berakhir pada posisi di mana ada huruf besar harus diabaikan.

sumber
Apakah itu dengan atau tanpa cetakan? Apakah itu dengan atau tanpa tali?
"Tanda baca apa pun yang berakhir pada posisi di mana ada huruf besar harus diabaikan." , bukankah contoh kedua tidak konsisten dengan aturan ini?
Stefano Sanfilippo
Ini konsisten dengan aturan karena tanda baca tidak memiliki variasi huruf besar.

Jawaban:

7

TCC - 4 byte

<>ci

Cobalah online!

Penjelasan:

     - output is implicit in TCC
<>   - reverse string
  c  - preserve capitalization
   i - get input
brianush1
sumber
9
Apakah ini berfungsi dengan versi tcc.luasebelum tantangan diposting? Mengingat bahwa Anda baru saja menambahkan perintah untuk menyelesaikan tiga tantangan lain, saya menganggap itu tidak. Jika jawaban Anda memerlukan versi bahasa yang mengunggah tantangan, Anda harus menandainya sebagai tidak bersaing di header. Saya akan menghapus downvote saya ketika Anda menambahkan label atau memberikan bukti bahwa kode Anda berfungsi di versi sebelumnya.
Dennis
16

Python, 71 byte

lambda s:''.join((z*2).title()[c.isupper()-1]for c,z in zip(s,s[::-1]))

Cobalah online

-3 byte dari Ruud, ditambah inspirasi untuk 2 lebih.

-4 byte lagi dari FryAmTheEggman

Mego
sumber
lambda s:''.join([z.lower(),z.upper()][c.isupper()]for c,z in zip(s,s[::-1]))lebih pendek tiga byte
Arfie
1
@Ruud Terima kasih! Memindahkan panggilan fungsi ke luar daftar pilihan menghemat 2 lagi!
Mego 6-16
2
(z*2).title()[c.isupper()-1]harus bekerja.
FryAmTheEggman
6
Anda bisa memenangkan byte lain dengan ~c.isupper()bukanc.isupper()-1
Lulhum
Ini tidak mendapatkan input dari stdin atau output ke stdout ...
ArtOfWarfare
13

Python 2, 73 byte

Karena aturan menentukan inputnya adalah ascii:

lambda s:''.join([z.lower,z.upper]['@'<c<'[']()for c,z in zip(s,s[::-1]))

Semua kredit jatuh ke @Mego, tapi saya tidak punya reputasi untuk hanya mengomentari jawabannya.

Lulhum
sumber
Bisakah Anda menggunakan nilai ascii '@' dan '[' untuk mendapatkan 2 byte?
aloisdg berkata Reinstate Monica
Sayangnya tidak, saya harus menggunakan ord (c), integer dan perbandingan string tidak dapat mengatasi dengan sangat baik di Python
Lulhum
Cukup banyak apa yang saya dapatkan, tetapi Anda pertama kali diberi +1
orlp
13

Perl, 31 + 2 ( -lp) = 33 byte

Solusi ini dari @Ton Hospel (13 byte lebih pendek dari milik saya).

s%.%(lc$&gt$&?u:l)."c chop"%eeg

Tetapi Anda harus ldan paktif. Untuk menjalankannya:

perl -lpe 's%.%(lc$&gt$&?u:l)."c chop"%eeg'
Dada
sumber
5
Halo, dan selamat datang di PPCG! Ini bagus!
NoOneIsHere
Memang sangat bagus! Saya tidak pernah menggunakan -aautosplit, saya merasa bisa menggunakan ini berkali-kali di masa lalu! Saya harus ingat itu! Saya pikir Anda dapat menyimpan byte lain menggunakan map...,...daripada yang map{...}...Anda miliki $Fdi awal! :)
Dom Hastings
Kode lebih pendek (31 + 2 byte):perl -lpe 's%.%(lc$&gt$&?u:l)."c chop"%eeg
Ton Hospel
Perhatikan bahwa -aini tersirat oleh-F
Ton Hospel
@TonHospel wow, terima kasih banyak dan dilakukan dengan baik, itu kode yang cukup bagus! Tentang -a(dan -n) tersirat oleh -F, saya membacanya beberapa waktu lalu di perlrun, mencobanya, tetapi tidak berhasil; tapi saya mencobanya lagi sekarang dan itu berfungsi dengan baik jadi saya kira saya melakukan sesuatu yang salah saat itu. Terima kasih.
Dada
9

Pyth, 13 11 10 9 byte

Terima kasih kepada @FryAmTheEggman untuk mengingatkan saya tentang Vdan @LeakyNun untuk byte lain.

srV_Qm!/G

Cobalah online! sekarang di ponsel, memperbarui tautan sedikit

PurkkaKoodari
sumber
srV_Qm!rId0adalah 11, tapi saya pikir mungkin untuk memperpendek peta itu ...
FryAmTheEggman
@FryAmTheEggman Hapus ddan Anda menyimpan byte.
Leaky Nun
srV_Qm!/Gharus menyimpan byte
Leaky Nun
8

Python, 66 byte

f=lambda s,i=0:s[i:]and(s[~i]*2).title()[~('@'<s[i]<'[')]+f(s,i+1)

Berulang melalui indeks i, mengambil karakter s[~i]dari belakang dan kasing s[i]dari depan. Menjadi modal diperiksa sebagai berbohong dalam kisaran yang berdekatan @ABC...XYZ[. Penghargaan untuk FryAmTheEggman dari (_*2).title()triknya.

Tidak
sumber
5

Retina , 75 67 65 byte

Hitungan byte mengasumsikan penyandian ISO 8859-1.

$
±·$`
O$^`\G[^·]

s{T`L`l`±.
T01`l`L`±.*·[A-Z]
±·

±(.)
$1±
·.
·

Cobalah online! (Baris pertama memungkinkan suite uji dengan beberapa test case yang dipisahkan linefeed.)

Martin Ender
sumber
5

JavaScript (ES6), 95 83 byte

s=>[...t=s.toLowerCase()].reverse().map((c,i)=>s[i]==t[i]?c:c.toUpperCase()).join``

Sunting: Menyimpan 12 byte besar berkat @ edc65.

Neil
sumber
s => r = [... l = s.toLowerCase ()]. ​​reverse (). map ((c, i) => s [i]! = l [i]? c.toUpperCase (): c) .join`` -10
edc65
@ edc65 Terima kasih! (Catatan: r=tidak perlu.)
Neil
5

Pyke, 11 10 9 byte

_FQo@UhAl

Coba di sini!

_         -   reversed(input)
 F        -  for i in ^
   o      -      o+=1
  Q @     -     input[^]
     Uh   -    ^.is_upper()+1
       Al -   [len, str.lower, str.upper, ...][^](i)
          - "".join(^)
Biru
sumber
Pertama memberi saya kesalahan, kemudian pada saat yang sama jawaban yang benar. i.imgur.com/uTcH27F.png
Itu selalu terjadi, Anda dapat mengklik menonaktifkan peringatan untuk mematikannya.
Biru
Aha, oke. Maaf, saya tidak pandai menggunakan Pyke
Mungkin karena saya satu-satunya pria yang menggunakannya
Biru
4

05AB1E , 19 16 15 13 byte

Terima kasih kepada Emigna karena menyimpan 3 byte!

Mungkin akan dikalahkan oleh Jelly ... Kode:

Âuvy¹Nè.lil}?

Menggunakan pengkodean CP-1252 . Cobalah online! .

Adnan
sumber
S.l_v¹lRNèyiu}?lebih pendek 1 byte
Emigna
@Emigna Wow terima kasih! Itu sangat pintar.
Adnan
Âuvy¹Nè.lilë}?adalah 14. Hanya senang saya bisa membantu Anda sekali :)
Emigna
@ Emigna Itu luar biasa! Penggunaan bifurcate yang sangat bagus :).
Adnan
Ruvy¹Nè.lil}?sebenarnya. Saya tidak menggunakan bifurkasi dan lupa untuk menghapus yang lain. Jadi 13.
Emigna
4

MATL , 13 byte

PktGtk<)Xk5M(

Cobalah online!

Pk      % Implicit inpput. Flip, lowercase
t       % Duplicate
Gtk<    % Logical index of uppercase letters in the input string
)       % Get letters at those positions in the flipped string
Xk      % Make them uppercase
5M(     % Assign them to the indicated positions. Implicit display
Luis Mendo
sumber
3

J , 30 byte

(={"_1 toupper@]|.@,.])tolower

Tidak mendukung non-ASCII

mil
sumber
"toupper" "tolower" tidak bisakah kamu menggunakan poin kode untuk mempersingkatnya?
Leaky Nun
@ LeakyNun Mungkin tapi saya tidak bisa mengatakannya
mil
3

Brachylog , 28 byte

@lr:?z:1ac.
h@u.,@A@um~t?|h.

Penjelasan

  • Predikat Utama:

    @lr                 Reverse the lowercase version of the Input
       :?z              Zip that reversed string with the Input
          :1a           Apply predicate 1 to each couple [char i of reverse, char i of Input]
             c.         Output is the concatenation of the result
    
  • Predikat 1:

    h@u.,               Output is the uppercase version of the first char of Input
         @A@um~t?       The second char of Input is an uppercase letter
                 |      Or
                  h.    Output is the first char of Input
    
Fatalisasi
sumber
3

TSQL, 175 byte

Golf:

DECLARE @ varchar(99)='Hello, Midnightas'

,@o varchar(99)='',@i INT=0WHILE @i<LEN(@)SELECT
@i+=1,@o+=IIF(ascii(x)=ascii(lower(x)),lower(y),upper(y))FROM(SELECT
SUBSTRING(@,@i+1,1)x,SUBSTRING(@,len(@)-@i,1)y)z
PRINT @o

Tidak disatukan

DECLARE @ varchar(99)='Hello, Midnightas'

,@o varchar(99)=''
,@i INT=0

WHILE @i<LEN(@)
  SELECT @i+=1,@o+=IIF(ascii(x)=ascii(lower(x)),lower(y),upper(y))
  FROM
    (SELECT SUBSTRING(@,@i+1,1)x,SUBSTRING(@,len(@)-@i,1)y)z

PRINT @o

Biola

t-clausen.dk
sumber
Hardcoding input?
kucing
@cat itu satu-satunya cara. Dalam sql, tidak ada STDIN atau perintah input. Jika Anda melihat stackoverflow itulah bagaimana semua pertanyaan diselesaikan - Anda juga dapat melihat jawaban saya yang lain pada codegolf
t-clausen.dk
Oh, ya, saya pasti ingat memiliki percakapan ini dengan pengguna SQL sebelumnya (Anda, mungkin). Itu aneh, tetapi harus baik-baik saja.
kucing
1
@cat, kami belum pernah melakukan percakapan ini sebelumnya, tetapi Anda memang membantu saya dengan hitungan byte sebelumnya
t-clausen.dk
3

Sebenarnya, 25 byte

;`úíuY"ùû"E£`M@ùRZ`i@ƒ`MΣ

Cobalah online!

Penjelasan:

;`úíuY"ùû"E£`M@ùRZ`i@ƒ`MΣ
;                          create a copy of the input
 `úíuY"ùû"E£`M             for each character in input:
  úíuY                       0-based index in lowercase English letters, or -1 if not found, increment, boolean negate (1 if uppercase else 0)
      "ùû"E£                 `û` if the character is lowercase else `ù` (str.lower vs str.upper)
              @ùRZ         make the other copy of the input lowercase, reverse it, and zip it with the map result
                  `i@ƒ`M   for each (string, function) pair:
                   i@ƒ       flatten, swap, apply (apply the function to the string)
                        Σ  concatenate the strings
Mego
sumber
3

Haskell, 83 80 75 71 byte

Cara paling mudah yang bisa saya pikirkan.

import Data.Char
f a|isUpper a=toUpper|1>0=toLower
zipWith f<*>reverse
cacat
sumber
Jika Anda menukar parameter (#), kdapat ditulis ulang dengan gaya point-free k=reverse>>=zipWith(#)
:,
Baris kedua dapat point-bebas dalam bseperti f a|isUpper a=toUpper|1>0=toLower, meskipun konflik ini dengan peningkatan Flonk ini.
xnor
Anda dapat menggunakan versi fxnor dan menulis ulang Flonk kke zipWith f<*>reverse.
nimi
Apakah Anda tidak perlu menghilangkan parameter s?
Lynn
Ya, dan Anda juga diizinkan untuk memotong k=.
xnor
3

PowerShell, 154 , 152 , 99 , 86 byte

Terima kasih @TimmyD karena telah menyelamatkan saya 47 byte kekalahan (saya juga menyimpan 6 tambahan)

Terima kasih @TessellatingHeckler karena telah menyimpan 13 byte tambahan.

Terbaru:

param($a)-join($a[$a.length..0]|%{("$_".ToLower(),"$_".ToUpper())[$a[$i++]-in65..90]})

Asli:

param($a);$x=0;(($a[-1..-$a.length])|%{$_=$_.tostring().tolower();if([regex]::matches($a,"[A-Z]").index-contains$x){$_.toupper()}else{$_};$x++})-join''

Pemformatan normal:

Terbaru (terlihat sebagai dua baris menurut saya):

param($a)
-join($a[$a.length..0] | %{("$_".ToLower(), "$_".ToUpper())[$a[$i++] -in 65..90]})

Penjelasan:

param($a)-join($a[$a.length..0]|%{("$_".ToLower(),"$_".ToUpper())[$a[$i++]-in65..90]})
param($a)
# Sets the first passed parameter to variable $a
         -join(                                                                      )
# Converts a char array to a string
               $a[$a.length..0]
# Reverses $a as a char array
                               |%{                                                  }
# Shorthand pipe to foreach loop
                                  ("$_".ToLower(),"$_".ToUpper())
# Creates an array of the looped char in lower and upper cases
                                                                 [$a[$i++]-in65..90]
# Resolves to 1 if the current index of $a is upper, which would output "$_".ToUpper() which is index 1 of the previous array

Asli:

param($a)
$x = 0
(($a[-1..-$a.length]) | %{
    $_ = $_.tostring().tolower()
    if([regex]::matches($a,"[A-Z]").index -contains $x){
            $_.toupper()
        }else{
            $_
        }
        $x++
    }
) -join ''

Poster pertama kali di sini, termotivasi karena saya jarang melihat PowerShell, tetapi pada 154 152 byte yang satu ini ... Saya bisa melihat mengapa!Ada saran yang dihargai.

Saya telah belajar bahwa saya harus benar-benar mengubah cara berpikir saya menjadi golf dalam kode dan kesenangannya!

ThePoShWolf
sumber
Halo, dan selamat datang di PPCG! Ini bagus!
NoOneIsHere
Selamat datang di PPCG! Senang melihat pengguna PowerShell lain di sekitar sini. Anda dapat memotong sedikit dengan mengganti .tostring()tanda kutip dengan, dan dengan menggunakan manipulasi integer ASCII daripada regex. Coba yang berikut ini, untuk 105 byte - param($a)-join($a[$a.length..0]|%{if(($x=$a[$i++])-le90-and$x-ge65){"$_".ToUpper()}else{"$_".ToLower()}}).
AdmBorkBork
Cemerlang! Kita bisa membuatnya lebih pendek dengan menggunakan rentang bukannya -le dan -ge:param($a)-join($a[$a.length..0]|%{if(65..90-contains$a[$i++]){"$_".ToUpper()}else{"$_".ToLower()}})
ThePoShWolf
X-inYlebih pendek dari Y-containsX, dan Anda dapat mengubah Anda ifuntuk Operator palsu terner untuk mendapatkan 86 byte -param($a)-join($a[$a.length..0]|%{("$_".ToLower(),"$_".ToUpper())[$a[$i++]-in65..90]})
TessellatingHeckler
Sobat, saya merasa seperti melewatkan banyak trik karena belum pernah kode golf sebelumnya. Ini hampir seperti belajar kode lagi!
ThePoShWolf
2

Dyalog APL , 12 byte

⌽f¨⍨⊢≠f←819⌶

819⌶ adalah fungsi lipat case

f←karena namanya panjang, kami menugaskannya ke f

⊢≠f Boolean di mana teks berbeda dari teks berhuruf rendah

f¨⍨ gunakan itu (1 berarti huruf besar, 0 berarti huruf kecil) untuk melipat setiap huruf ...

... dari teks yang terbalik

Menangani non-ASCII sesuai dengan aturan Konsorsium Unicode.

Adm
sumber
2

Racket, 146 byte

(λ(s)(build-string(string-length s)(λ(n)((if(char-upper-case?(string-ref s n))char-upcase char-downcase)(list-ref(reverse(string->list s))n)))))

Racket buruk untuk semua hal "golf" ini.

Mengangkat bahu Seperti biasa, bantuan apa pun untuk mempersingkat ini akan sangat dihargai.

Steven H.
sumber
2

Jolf, 21 byte

Coba di sini!

Μid?&γ._pXiS=pxHHpxγγ

Penjelasan

Μid?&γ._pXiS=pxHHpxγγ
Μid                   (Μ)ap (i)nput with (d)is fucntion:
   ?        =pxHH     (H is current element) if H = lowercase(H)
    &γ._pXiS          and set γ to the uppercase entity in the reversed string
                 pxγ  lowercase γ
                    γ else, return γ
Conor O'Brien
sumber
(d)is function... Pengejaan ejaan demi golf!
Steven H.
2

Perl 6 , 29 byte

$_=get;put .flip.samecase($_)
Brad Gilbert b2gills
sumber
2

C #, 86 85 byte

s=>string.Concat(s.Reverse().Select((c,i)=>s[i]>96?char.ToLower(c):char.ToUpper(c)));

AC # lambda di mana input dan output adalah string. Anda dapat mencobanya di .NetFiddle .


Aku berjuang untuk memahami mengapa aku tidak bisa mencapai untuk mengkonversi char.ToLower(c)kec+32 . Saya berharap memperbaikinya!

12 byte disimpan berkat @PeterTaylor ( c|32untuk menambahkan 32 ke nilai ascii cdan c&~32untuk mengurangi 32). Hasilnya akan menjadi 72 byte (tetapi bisa gagal pada char non alpha).

s=>string.Join("",s.Reverse().Select((c,i)=>(char)(s[i]>96?c|32:c&~32)));
aloisdg kata Reinstate Monica
sumber
1
Itu c|32bukan c+32, tetapi tidak akan bekerja dengan karakter non-alpha.
Peter Taylor
@PeterTaylor Berhasil! Terima kasih!
aloisdg mengatakan Reinstate Monica
1

PHP, 128 byte

$s=$argv[1];$l=strrev($s);for($i=0;$i<strlen($s);++$i){echo(strtolower($s[$i])!==$s[$i]?strtoupper($l[$i]):strtolower($l[$i]));}

Saya mungkin mencoba untuk mengoptimalkan ini lebih jauh tetapi saya hanya akan membiarkannya seperti sekarang.

MonkeyZeus
sumber
1

Oktaf, 51 50 byte

@(s)merge(isupper(s),b=flip(toupper(s)),tolower(b))

@(s)merge(s>64&s<91,b=flip(toupper(s)),tolower(b))
Marco
sumber
1

VIM, 46 byte

Ini akan menjadi tiga byte g~Gjika kita tidak perlu membaca dari stdin atau menulis ke stdout, tapi oh well ...

vim -es '+normal! g~G' '+%print|q!' /dev/stdin

Untuk menguji ini, jalankan

echo "testString" | vim -es '+normal! g~G' '+%print|q!' /dev/stdin

Ini adalah pengiriman pertama saya di sini, tidak yakin apakah pengiriman semacam ini dapat diterima.

DoYouEvenCodeBro
sumber
Bagus, saya suka bermain golf di vim! Namun, program ini tidak benar-benar membalikkan string, tetapi hanya mengubah kapitalisasi. Anda dapat membalikkan string dengan :se ri<cr>C<C-r>"tetapi kemudian Anda harus mencari cara bagaimana menggunakan huruf besar untuk huruf yang tepat.
DJMcMayhem
@DrGreenEggsandIronMan Oh man aku benar-benar merindukan itu! Kembali ke papan gambar!
DoYouEvenCodeBro
1

Javascript (menggunakan perpustakaan eksternal) (224 byte)

(s)=>{t=_.From(s);var cnt=t.Count();var caps=t.Select(x=>{return x.toUpperCase()===x&&x.toLowerCase()!==x}).ToArray(),i=-1;return t.AggregateRight((a,b)=>{i++;var c=caps[i];return c?a+b.toUpperCase():a+b.toLowerCase()},"");}

Penafian: Menggunakan perpustakaan yang saya tulis untuk membawa CQ's LINQ ke Javascript

Gambar 1

applejacks01
sumber
Memanggil orang yang menurunkan ini tanpa penjelasan. Ada alasan untuk itu?
applejacks01
Kemungkinan mereka ingin Anda menghitung perpustakaan juga, meskipun menggunakan perpustakaan eksternal sepenuhnya dalam batas-batas kebijakan standar.
Addison Crump
1
Saya tidak downvoter, tetapi Jika Anda menggunakan perpustakaan eksternal, setidaknya sebutkan nama dalam jawaban Anda, dan untuk perpustakaan yang tidak jelas, berikan tautan ke repositori.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
1

Sed, 113 + 1 = 114 byte

Mengapa? Karena menyenangkan menggunakan yang salah alat yang untuk melakukan sesuatu: P

Penggunaan: Jalankan sed -rf file, masukkan teks dan tekan Ctrl+D (kirim EOF).

Golf:

s/[A-Z]/\a\l&/g;s/^.*$/\f&\v/;:x;s/\f\a/\a\f/;s/\a\v/\v\a/;s/\f(.)(.*)(.)\v/\3\f\2\v\1/;tx;s/\f|\v//g;s/\a./\U&/g

Tidak Terkumpul:

s/[A-Z]/\a\l&/g #Prepend all upper-case letters with a 
                #BEL ASCII character and make them lowercase
s/^.*$/\f&\v/   #Wrap text between a from feed (\f) and a vertical tab (\v)
                #These are used as markers

:x #Define a label named x

s/\f\a/\a\f/;s/\a\v/\v\a/ #Move BEL characters outside of the boundary, so they're not moved later
s/\f(.)(.*)(.)\v/\3\2\1/  #This part does the switching itself
                          #It grabs a character preceded by a form feed and another 
                          #one followed by a vertical tab and swaps them, while keeping the text in-between
                          #and replaces the marker \f and \v

tx             #Conditional jump (t) to label x
               #Jumps to the label x if the last substitution (s command) was successful 
s/\f|\v//g     #Delete markers
s/\a(.)/\u\1/g #Make letters preceded by a BEL upper-case
seseorang dengan pc
sumber
1

Java 7, 221 217 180 byte

void c(char[]s){int x=0,y=s.length-1;for(char t;x<y;s[x]=s(t,s[y]),s[y]=s(s[y],t),x++,y--)t=s[x];}char s(char a,char b){return(char)(64<a&a<91?96<b&b<123?b-32:b:64<b&b<91?b+32:b);}

Banyak byte yang disimpan berkat pendekatan @LeakuNun .

Kasus yang tidak disatukan & uji:

Coba di sini.

class Main{
  void c(char[] s){
    int x = 0,
        y = s.length-1;
    for(char t; x < y; s[x] = s(t, s[y]),
                       s[y] = s(s[y], t),
                       x++,
                       y--){
       t = s[x];
    }
  }

  char s(char a, char b){
    return (char)(64 < a & a < 91
                    ? 96 < b & b < 123
                        ? b-32
                        : b
                    : 64 < b & b < 91
                        ? b+32
                        : b);
  }

  public static void main(String[] a){
    print("Hello, Midnightas");
    print("TEST");
    print("test");
    print("Test");
    print(".,..,,!@");
    print("ABCDefgHijklMNOPqrsTuVWxyz");
    print("AbCdEfGHIJKlmnop123");
  }

  static void print(String s){
    char[] t = s.toCharArray();
    c(t);
    System.out.println(t);
  }
}

Keluaran:

SathginDim ,olleh
q.
TSET
tset
Tset
@!,,..,.
ZYXWvutSrqpoNMLKjihGfEDcba
321pOnMLKJIhgfedcba
Kevin Cruijssen
sumber
Anda dapat input dan output char[].
Leaky Nun
@ LeakyNun Sebenarnya saya (percaya saya) tidak bisa dalam jumlah byte yang lebih sedikit. Itu akan memungkinkan penghapusan String a="";dan diubah o+=untuk 0[i]=menyimpan byte, tetapi Java tidak memiliki karakter .toUpperCase()/ .toLowerCase()metode, dan mengkonversi dari char ke String, menggunakan metode atas / bawah, dan kemudian kembali ke char lagi akan memerlukan (banyak) lebih banyak byte. Tetapi jangan ragu untuk memotong ideone yang ditautkan dan menghasilkan sesuatu untuk membuat char[]pekerjaan dalam byte lebih sedikit.
Kevin Cruijssen
1
180 byte yang dapat di-golf lebih lanjut (dengan tidak memodifikasinya).
Leaky Nun
0

C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char *a,*b,*c;

  a=c=strdup(argv[1]);
  b=&argv[1][strlen(a)-1];
  for(;*a;a++,b--){
    *a=(*a>='A'&&*a<='Z')?((*b>='a'&&*b<='z')?*b-32:*b):((*b>='A'&&*b<='Z')?*b+32:*b);
  }
  puts(c);
  free(c);
  return 0;
}
pengguna56095
sumber
Masukan harus diambil dari stdin.
Anmol Singh Jaggi
Karena ini adalah kode-golf, harap masukkan jumlah byte yang dibutuhkan oleh program ini.
Saya dapat mengurangi secara signifikan tergantung pada aturan, tetapi saya tidak dapat menemukan aturan.
user56095