Đảo ngược một chuỗi trong khi duy trì viết hoa ở cùng một nơi


28

Mục tiêu ở đây chỉ đơn giản là đảo ngược một chuỗi, với một
nút thắt: Giữ chữ viết hoa ở cùng một nơi.

Ví dụ Nhập 1: Hello, Midnightas
Ví dụ Đầu ra 1:SathginDim ,olleh

Ví dụ Đầu vào 2: .Q
Đầu ra Exmaple 2:q.

Quy tắc :

  • Đầu ra cho STDOUT, đầu vào từ STDIN
  • Người chiến thắng sẽ được chọn vào ngày 13 tháng 7 vào GMT + 3 12:00 (Một tuần)
  • Đầu vào chỉ có thể bao gồm các ký hiệu ASCII, giúp các chương trình không sử dụng bất kỳ mã hóa nào có chứa các ký tự không phải ASCII dễ dàng hơn.
  • Bất kỳ dấu chấm câu nào kết thúc ở vị trí có chữ in hoa đều phải bỏ qua.

Đó có phải là có hoặc không có dấu vết? Là có hoặc không có chuỗi?

"Bất kỳ dấu chấm câu nào kết thúc ở vị trí có chữ in hoa đều phải bỏ qua." , không phải là ví dụ thứ hai không phù hợp với quy tắc này sao?
Stefano Sanfilippo

Nó phù hợp với quy tắc vì dấu chấm câu không có biến thể chữ hoa.

Câu trả lời:


7

TCC - 4 byte

<>ci

Hãy thử trực tuyến!

Giải trình:

     - output is implicit in TCC
<>   - reverse string
  c  - preserve capitalization
   i - get input

9
Điều này có hoạt động với một phiên bản tcc.luatrước khi thử thách được đăng không? Cho rằng gần đây bạn đã thêm các lệnh để giải quyết ba thách thức khác, tôi cho rằng không. Nếu câu trả lời của bạn yêu cầu một phiên bản ngôn ngữ trì hoãn thử thách, bạn phải gắn nhãn đó là không cạnh tranh trong tiêu đề. Tôi sẽ xóa downvote của tôi khi bạn thêm nhãn hoặc cung cấp bằng chứng rằng mã của bạn đã hoạt động trong phiên bản cũ hơn.
Dennis

16

Python, 71 byte

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

Dùng thử trực tuyến

-3 byte từ Ruud, cộng với nguồn cảm hứng cho 2 người nữa.

-4 byte nữa từ FryAmTheEggman


lambda s:''.join([z.lower(),z.upper()][c.isupper()]for c,z in zip(s,s[::-1]))ngắn hơn ba byte
Arfie 6/07/2016

1
@Ruud Cảm ơn! Di chuyển chức năng gọi ra bên ngoài lựa chọn danh sách giúp tiết kiệm thêm 2!
Mego

2
(z*2).title()[c.isupper()-1]nên làm việc.
FryAmTheEggman

6
Bạn có thể giành được một byte khác ~c.isupper()thay vìc.isupper()-1
Lulhum

Điều này không nhận được đầu vào từ stdin hoặc đầu ra cho thiết bị xuất chuẩn ...
ArtOfWarfare 7/07/2016

13

Python 2, 73 byte

Vì các quy tắc chỉ định đầu vào là ascii:

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

Tất cả tín dụng đều thuộc về @Mego, nhưng tôi không có tiếng chỉ nhận xét về câu trả lời của anh ấy.


Bạn có thể sử dụng giá trị ascii của '@' và '[' để đạt được 2 byte không?
aloisdg nói Phục hồi lại

Thật không may, tôi phải sử dụng ord (c), so sánh số nguyên và chuỗi không đối phó tốt trong Python
Lulhum

Gần như những gì tôi nhận được, nhưng bạn là +1 đầu tiên
orlp

13

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

Giải pháp này là từ @TonMedel (mỏ ngắn hơn 13 byte).

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

Nhưng bạn sẽ cần lpbật. Để chạy nó:

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

5
Xin chào, và chào mừng đến với PPCG! Điều đó thật tuyệt!
NoOneIsHãy

Thực sự rất tốt đẹp! Tôi chưa bao giờ sử dụng -aautosplit, tôi cảm thấy tôi có thể đã sử dụng điều này nhiều lần trong quá khứ! Tôi cần phải nhớ điều đó! Tôi nghĩ rằng bạn có thể lưu một byte khác bằng cách sử dụng map...,...thay vì map{...}...như bạn có $Flúc bắt đầu! :)
Dom Hastings

Mã ngắn hơn (31 + 2 byte):perl -lpe 's%.%(lc$&gt$&?u:l)."c chop"%eeg
TonMedel 17/8/2016

Lưu ý rằng -ađược ngụ ý bởi-F
TonMedel 17/8/2016

@TonHosp wow, cảm ơn bạn rất nhiều và hoàn thành tốt, đó là một số mã khá hay! Về -a(và -n) được ngụ ý bởi -F, tôi đã đọc nó một lúc trước trên perlrun, đã thử nó, nhưng nó không hoạt động; Nhưng tôi đã thử lại bây giờ và nó hoạt động tốt vì vậy tôi đoán rằng tôi đã làm gì đó sai sau đó. Cảm ơn.
Dada

9

Pyth, 13 11 10 9 byte

Cảm ơn @FryAmTheEggman đã nhắc nhở tôi Vvà @LeakyNun cho một byte khác.

srV_Qm!/G

Hãy thử trực tuyến! Bây giờ trên điện thoại di động, cập nhật liên kết trong một chút


srV_Qm!rId0là 11, nhưng tôi nghĩ có thể rút ngắn bản đồ đó ...
FryAmTheEggman

@FryAmTheEggman Xóa dvà bạn đã lưu một byte.
Rò rỉ Nun

srV_Qm!/Gnên lưu một 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)

Truy xuất thông qua các chỉ số i, lấy nhân vật s[~i]từ phía sau và trường hợp s[i]từ phía trước. Là vốn được kiểm tra là nằm trong phạm vi tiếp giáp @ABC...XYZ[. Tín dụng cho FryAmTheEggman từ (_*2).title()thủ thuật.


5

Võng mạc , 75 67 65 byte

Số lượng byte giả định mã hóa ISO 8859-1.

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

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

±(.)
$1±
·.
·

Hãy thử trực tuyến! (Dòng đầu tiên cho phép một bộ thử nghiệm có nhiều trường hợp thử nghiệm được phân tách bằng dòng.)


5

JavaScript (ES6), 95 83 byte

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

Chỉnh sửa: Đã lưu 12 byte lớn nhờ @ edc65.


s => r = [... l = s.toLowerCase ()]. ​​Reverse (). map ((c, i) => s [i]! = l [i]? c.toUpperCase (): c) .join`` -10
edc65

@ edc65 Cảm ơn! (Lưu ý: r=không cần thiết.)
Neil

5

Pyke, 11 10 9 byte

_FQo@UhAl

Hãy thử nó ở đây!

_         -   reversed(input)
 F        -  for i in ^
   o      -      o+=1
  Q @     -     input[^]
     Uh   -    ^.is_upper()+1
       Al -   [len, str.lower, str.upper, ...][^](i)
          - "".join(^)

Đầu tiên nó cho tôi một lỗi, sau đó đồng thời trả lời đúng. i.imgur.com/uTcH27F.png

Điều đó luôn xảy ra, bạn có thể nhấp vào vô hiệu hóa các cảnh báo để tắt nó đi.
Màu xanh

Được thôi. Xin lỗi, tôi không tốt với Pyke

Có thể là vì tôi là người duy nhất sử dụng nó
Blue

4

05AB1E , 19 16 15 13 byte

Cảm ơn Emigna vì đã tiết kiệm được 3 byte!

Có lẽ sẽ bị đánh bại bởi Jelly ... Code:

Âuvy¹Nè.lil}?

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến! .


S.l_v¹lRNèyiu}?ngắn hơn 1 byte
Emigna

@Emigna Wow cảm ơn! Điều đó rất thông minh.
Ad Nam

Âuvy¹Nè.lilë}?là 14. Chỉ cần hạnh phúc tôi có thể giúp bạn một lần :)
Emigna

@Emigna Thật tuyệt vời! Sử dụng rất tốt của bifurcate :).
Ad Nam

Ruvy¹Nè.lil}?thực ra. Tôi đã không sử dụng phân chia và quên loại bỏ cái khác. Vì vậy, 13.
Emigna

4

MATL , 13 byte

PktGtk<)Xk5M(

Hãy thử trực tuyến!

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

3

J , 30 byte

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

Không hỗ trợ phi ASCII


"toupper" "tolower" bạn không thể sử dụng các điểm mã để rút ngắn nó?
Rò rỉ Nun

@LeakyNun lẽ nhưng tôi thực sự không thể nói chắc chắn
dặm

3

Brachylog , 28 byte

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

Giải trình

  • Vị ngữ chính:

    @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
    
  • Vị ngữ 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
    

3

TSQL, 175 byte

Chơi gôn

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

Bị đánh cắp

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

Vĩ cầm


mã hóa đầu vào?
con mèo

@cat đó là cách duy nhất. Trong sql, không có STDIN hoặc lệnh đầu vào. Nếu bạn nhìn vào stackoverflow đó là cách giải quyết tất cả các câu hỏi - bạn cũng có thể xem các câu trả lời khác của tôi trên codegolf
t-clausen.dk

Ồ, vâng, tôi chắc chắn nhớ cuộc trò chuyện này với một người dùng SQL trước đây (bạn, có thể). Điều đó thật kỳ lạ, nhưng sẽ ổn thôi.
con mèo

1
@cat chúng tôi chưa có cuộc trò chuyện này trước đây, nhưng bạn đã giúp tôi đếm số byte trước đó
t-clausen.dk

3

Trên thực tế, 25 byte

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

Hãy thử trực tuyến!

Giải trình:

;`úí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

3

Haskell, 83 80 75 71 byte

Cách đơn giản nhất mà tôi có thể nghĩ ra.

import Data.Char
f a|isUpper a=toUpper|1>0=toLower
zipWith f<*>reverse

Nếu bạn trao đổi các tham số của (#), kcó thể được viết lại theo kiểu không có điểm : k=reverse>>=zipWith(#), giúp tiết kiệm một vài byte :)
Flonk

Dòng thứ hai có thể là điểm miễn phí trong bkhi f a|isUpper a=toUpper|1>0=toLower, mặc dù các cuộc xung đột này với sự cải thiện Flonk của.
xnor

Bạn có thể sử dụng phiên bản xnor của fvà viết lại Flonk's kthành zipWith f<*>reverse.
nimi

Bạn không cần phải loại bỏ tham số s?
Lynn

Có, và bạn cũng được phép cắt k=.
xnor

3

PowerShell, 154 , 152 , 99 , 86 byte

Cảm ơn bạn @TimmyD vì đã tiết kiệm cho tôi một con số khổng lồ 47 byte (tôi cũng đã lưu thêm 6)

Cảm ơn bạn @TessellatingHeckler vì đã lưu thêm 13 byte.

Muộn nhất:

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

Nguyên:

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

Định dạng bình thường:

Mới nhất (có vẻ tốt nhất là hai dòng theo ý kiến ​​của tôi):

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

Giải trình:

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

Nguyên:

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

Áp phích lần đầu tiên ở đây, được thúc đẩy bởi vì tôi hiếm khi thấy PowerShell, nhưng ở 154 152 byte trên cái này ... tôi có thể hiểu tại sao! Bất kỳ đề nghị đánh giá cao.

Tôi đã học được rằng tôi phải thay đổi hoàn toàn cách suy nghĩ của mình đối với môn đánh gôn và sự thú vị của nó!


Xin chào, và chào mừng đến với PPCG! Điều đó thật tuyệt!
NoOneIsHãy

Chào mừng đến với PPCG! Rất vui khi thấy một người dùng PowerShell khác ở đây. Bạn có thể cắt bỏ khá nhiều bằng cách thay thế .tostring()bằng dấu ngoặc kép và bằng cách sử dụng thao tác số nguyên ASCII thay vì regex. Hãy thử như sau, với 105 byte - param($a)-join($a[$a.length..0]|%{if(($x=$a[$i++])-le90-and$x-ge65){"$_".ToUpper()}else{"$_".ToLower()}}).
admBorkBork

Rực rỡ! Chúng ta có thể làm cho nó thậm chí ngắn hơn bằng cách sử dụng một phạm vi thay vì -le và -ge:param($a)-join($a[$a.length..0]|%{if(65..90-contains$a[$i++]){"$_".ToUpper()}else{"$_".ToLower()}})
ThePoShWolf

X-inYngắn hơn Y-containsX, và bạn có thể thay đổi của bạn ifcho các nhà điều hành giả ternary để có được 86 byte -param($a)-join($a[$a.length..0]|%{("$_".ToLower(),"$_".ToUpper())[$a[$i++]-in65..90]})
TessellatingHeckler

Man, tôi cảm thấy như tôi đã bỏ lỡ rất nhiều mánh khóe chưa từng chơi golf trước đây. Nó gần giống như học cách viết mã lại!
ThePoShWolf

2

APL Dyalog , 12 byte

⌽f¨⍨⊢≠f←819⌶

819⌶ là chức năng gấp trường hợp

f←bởi vì tên của nó dài, chúng tôi gán nó cho f

⊢≠f Boolean nơi văn bản khác với văn bản chữ thường

f¨⍨ sử dụng (1 có nghĩa là chữ hoa, 0 có nghĩa là chữ thường) để gấp mỗi chữ cái ...

... của văn bản đảo ngược

Xử lý phi ASCII theo quy tắc của Hiệp hội Unicode.



2

Vợt, 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)))))

Vợt là xấu ở toàn bộ điều "chơi golf" này.

Nhún vai như mọi khi, bất kỳ trợ giúp nào để rút ngắn điều này sẽ được đánh giá cao.



2

Jolf, 21 byte

Hãy thử nó ở đây!

Μid?&γ._pXiS=pxHHpxγγ

Giải trình

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

(d)is function... Hy sinh đánh vần vì lợi ích của golf!
Steven H.


2

C #, 86 85 byte

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

AC # lambda trong đó đầu vào và đầu ra là một chuỗi. Bạn có thể thử nó trên .NetFiddle .


Tôi đang đấu tranh để hiểu lý do tại sao tôi không thể đạt được để chuyển đổi char.ToLower(c)sang c+32. Tôi hy vọng sẽ sửa nó!

12 byte được lưu nhờ vào @PeterTaylor ( c|32để thêm 32 vào giá trị ascii của cc&~32để trừ 32). Kết quả sẽ là 72 byte (nhưng có thể thất bại trên non-char char).

s=>string.Join("",s.Reverse().Select((c,i)=>(char)(s[i]>96?c|32:c&~32)));

1
Nó sẽ c|32thay thế c+32, nhưng nó sẽ không hoạt động với các ký tự không phải alpha.
Peter Taylor

@PeterTaylor Nó hoạt động rất tốt! Cảm ơn bạn!
aloisdg nói Phục hồi lại

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

Tôi có thể cố gắng tối ưu hóa điều này hơn nữa nhưng tôi sẽ để nó như bây giờ.


1

Octave, 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))

1

VIM, 46 byte

Sẽ là ba byte g~Gnếu chúng ta không cần đọc từ stdin hoặc ghi vào thiết bị xuất chuẩn, nhưng ồ ...

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

Để kiểm tra điều này, hãy chạy

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

Đây là lần gửi đầu tiên của tôi ở đây, không chắc loại bài này có được chấp nhận hay không.


Đẹp, tôi thích chơi golf trong vim! Tuy nhiên, chương trình này không thực sự đảo ngược chuỗi, nó chỉ thay đổi cách viết hoa. Bạn có thể đảo ngược chuỗi với :se ri<cr>C<C-r>"nhưng sau đó bạn sẽ phải tìm cách viết hoa đúng chữ cái.
DJMcMayhem

@DrGreenEggsandIronMan Ôi trời, tôi hoàn toàn nhớ điều đó! Trở lại với bản vẽ!
DoYouEvenCodeBro

1

Javascript (sử dụng thư viện bên ngoài) (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()},"");}

Tuyên bố miễn trừ trách nhiệm: Sử dụng thư viện tôi đã viết để đưa LINQ của C # lên Javascript

Hình 1


Gọi người đã đánh giá thấp điều này mà không có lời giải thích. Bất kỳ lý do cho điều đó?
applejacks01

Có khả năng là họ cũng muốn bạn đếm thư viện, mặc dù việc sử dụng thư viện bên ngoài hoàn toàn nằm trong ranh giới của chính sách tiêu chuẩn.
Addison Crump

1
Tôi không downvoter, nhưng nếu bạn đang sử dụng một thư viện bên ngoài, ít nhất hãy đề cập đến tên trong câu trả lời của bạn và đối với một thư viện tối nghĩa, vui lòng cung cấp một liên kết đến kho lưu trữ.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1

Sed, 113 + 1 = 114 byte

Tại sao? Bởi vì thật thú vị khi sử dụng công cụ sai để làm việc: P

Cách sử dụng: Chạy sed -rf file, nhập văn bản và nhấn Ctrl+ D(gửi EOF).

Chơi gôn

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

Ung dung:

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

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

Tải các byte được lưu nhờ vào cách tiếp cận của @LeakuNun .

Các trường hợp bất ngờ & thử nghiệm:

Hãy thử nó ở đây.

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

Đầu ra:

SathginDim ,olleh
q.
TSET
tset
Tset
@!,,..,.
ZYXWvutSrqpoNMLKjihGfEDcba
321pOnMLKJIhgfedcba

Bạn có thể nhập và xuất char[].
Leaky Nun

@LeakyNun Thật ra tôi (tin rằng tôi) không thể có số lượng byte ít hơn. Nó sẽ cho phép loại bỏ String a="";và thay đổi o+=để 0[i]=lưu byte, nhưng Java không có ký tự .toUpperCase()/ .toLowerCase()phương thức và chuyển đổi từ char sang String, sử dụng phương thức trên / dưới và sau đó quay lại char sẽ yêu cầu (rất nhiều) byte. Nhưng hãy thoải mái rẽ nhánh ideone được liên kết và đưa ra một cái gì đó để làm cho char[]công việc trong ít byte hơn.
Kevin Cruijssen

1
180 byte có thể được đánh gôn thêm (bằng cách không sửa đổi nó tại chỗ).
Rò rỉ 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;
}

Đầu vào nên được lấy từ stdin.
Anmol Singh Jaggi

Vì đây là môn đánh gôn, vui lòng nhập số byte mà chương trình này sẽ có giá.

Tôi có thể giảm đáng kể tùy thuộc vào quy tắc, nhưng tôi không thể tìm thấy bất kỳ quy tắc nào.
dùng56095
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.