ลบช่องว่างการดูแลรักษาการใช้อักษรตัวพิมพ์ใหญ่


27

ข้อมูลที่คุณป้อนจะเป็นประโยควลีหรือคำภาษาอังกฤษ a-zA-Z' -,.!?มันจะมี งานของคุณคือการป้อนข้อมูลลบช่องว่างแล้วกระจายการใช้อักษรตัวพิมพ์ใหญ่เช่นตัวอักษรที่ดัชนีที่เป็นตัวพิมพ์ใหญ่ก่อน

ตัวอย่างเช่นถ้าใส่เป็นA Quick Brown Fox Jumped Over The Lazy Dogที่ (0-based) 0, 2, 8, 14, 18, 25, 30, 34, 39ดัชนีของตัวอักษรที่มี AQuickBrownFoxJumpedOverTheLazyDogถัดไปลบช่องว่างจากการป้อนข้อมูล: ถัดไปพิมพ์เล็กตัวอักษรทั้งหมด แต่พิมพ์ใหญ่ที่0, 2, 8, 14, 18, 25, 30, 34, 39: AqUickbrOwnfoxJumpEdovertHelazYdogซึ่งเป็นผลลัพธ์ของคุณ

อินพุต

ข้อมูลที่คุณป้อนจะเป็นประโยควลีหรือคำภาษาอังกฤษ มันสามารถมีตัวอักษรตัวพิมพ์เล็กตัวอักษรตัวพิมพ์ใหญ่เครื่องหมายยัติภังค์, เครื่องหมายจุลภาค, เครื่องหมายจุลภาค, จุด, เครื่องหมายคำถามเครื่องหมายอัศเจรีย์และช่องว่าง

เอาท์พุต

อินพุตที่มีช่องว่างถูกลบออกเป็นตัวพิมพ์เล็ก -d พร้อมตัวอักษรที่ดัชนีของตัวพิมพ์ใหญ่ในอินพุตตัวพิมพ์ใหญ่ -d

หมายเหตุ: โปรแกรมของคุณไม่สามารถผิดพลาดได้ (ข้อผิดพลาดการดำเนินการดังกล่าวสิ้นสุดลง) พร้อมกับ IndexOutOfRange หรือข้อผิดพลาดที่คล้ายกัน

กรณีทดสอบ

Hi! Test!
Hi!tEst!

A Quick Brown Fox Jumped Over The Lazy Dog
AqUickbrOwnfoxJumpEdovertHelazYdog

testing TESTing TeStING testing testing TESTING
testingtESTIngteStInGTEstingtestingtestiNG

TESTING... ... ... success! EUREKA???!!! maybe, don't, NOOOOO
TESTING.........success!eureKA???!!!maybe,don't,nooooo

Enter        PASSWORD ---------
Enterpassword---------

A a B b C c D d E e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Z z
AabbCcddEeffGghhIijjKkllMmnnOoppQqrrSsttUuvvWwxxZz

  TEST
teST


'ตัวอย่างเช่นหากอินพุตคือ "สุนัขจิ้งจอกสีน้ำตาลด่วนกระโดดข้ามสุนัขขี้เกียจ" ดัชนี (ตาม 0) ของตัวอักษรพิมพ์ใหญ่คือ0, 2, 8, 14, 18, 23, 27, 32' พวกเขาคือ0, 2, 8, 14, 18, 25, 30, 34, 39
ลุค Sawczak

@LukeSawczak ขอบคุณมากฉันแย่มาก
Stephen

ไม่อนุญาตให้ใช้ช่องว่างของการรวบรวมข้อมูล
Luis Mendo

@ LuisMendo สมมติฐานของคุณถูกต้อง นี่คือโค้ดกอล์ฟใช่ไหม? : P
Stephen

คำตอบ:


7

เยลลี่ , 14 13 ไบต์

nŒlTɓḲFŒlŒuṛ¦

ลองออนไลน์!

มันทำงานอย่างไร

nŒlTɓḲFŒlŒuṛ¦  Main link. Argument: s (string)

 Œl            Convert s to lowercase.
n              Perform character-wise "not equal" comparison.
   T           Get the indices of all truthy elements, i.e., the indices of all
               uppercase letters in s. Let's call the resulting array J.
    ɓ          Begin a dyadic chain with left argument s and right argument J.
     ḲF        Split s at spaces and flatten, removing the spaces.
       Œl      Convert s to lowercase.
            ¦  Sparse application:
         Œu        Convert s to uppercase.
           ṛ       Take the resulting items of the uppercased string at all indices
                   in J, the items of the lowercased string at all others.


7

Python 2 , 114 ไบต์

x=input()
X=x.replace(' ','')
print''.join([X[i].upper()if x[i].isupper()else X[i].lower()for i in range(len(X))])

ลองออนไลน์!

เท่า:

Python 2 , 114 ไบต์

lambda x:''.join([[str.lower,str.upper][x[i].isupper()](x.replace(' ','')[i])for i in range(len(x)-x.count(' '))])

ลองออนไลน์!


''.join([(X[i].lower,X[i].upper)[x[i].isupper()]()for i in range(len(X))])สำหรับ -5 ไบต์
ovs

5

Python 3 , 78 75 72 ไบต์

s=input()
for c in s:s=s[c>' '!=print(end=(c+c).title()[s<'@'or'['<s]):]

ขอบคุณ @xnor สำหรับการเล่นกอล์ฟขนาด 6 ไบต์!

ลองออนไลน์!


คุณสามารถเปรียบเทียบsแทนได้s[0]หรือไม่
xnor

ใช่แน่นอน ขอบคุณ!
Dennis

1
(c*2).title()คุณจะได้รับทั้งสองกรณีแม้ว่าจะเปลี่ยนไป
xnor

อีก 3 ไบต์ ขอบคุณอีกครั้ง!
เดนนิส

หากิน! เอาฉันในขณะที่จะคิดออกว่าจะเทียบเท่ากับc>' '!=f() (c>' ') and (' '!=f())
Chas Brown

5

05AB1E , 15 14 ไบต์

-1 ไบต์ต้องขอบคุณEmigna

ðKuvy¹Nè.lil}?

ลองออนไลน์!

ðK             # Remove spaces
  u            # Convert to uppercase
   vy          # For each character...
     ¹Nè       #   Get the character at the same index from the original input
        .lil}  #   If it was a lowercase letter change this one to lowercase
             ? # Print without a newline

คุณบันทึกไบต์ถ้าคุณเป็นตัวพิมพ์ใหญ่สตริงที่ลบช่องว่างและพิมพ์เล็กในเงื่อนไข
Emigna

5

Haskell , 98 95 89 88 81 ไบต์

ขอขอบคุณ @name, @nimi, @Zgarb และ @Laikoni ที่ช่วยให้โกนได้ทั้งหมด 14 ไบต์

import Data.Char
\s->zipWith(\p->last$toLower:[toUpper|isUpper p])s$filter(>' ')s

Ungolfed:

import Data.Char
\sentence -> zipWith (\oldChar newChar ->
                        if isUpper oldChar
                        then toUpper newChar
                        else toLower newChar)
                     sentence
                     (filter (/= ' ') sentence)

บนมือถือ แต่ดูเหมือนว่าคุณสามารถบันทึกไบต์ด้วยตัวกรอง (/ = '')
Henry

อ๋อสามารถทำได้อย่างแน่นอน พลาดส่วนของข้อมูลจำเพาะที่ระบุว่าช่องว่างเป็นช่องว่างเดียวที่จำเป็นต้องนำออก
Julian Wolf

1
filter(>' ')สำหรับหนึ่งไบต์น้อยกว่า
nimi

2
ฉันคิดว่าร่างของแลมบ์ดาสามารถย่อให้สั้นลงได้last(toLower:[toUpper|isUpper p])c
Zgarb

การสลับข้อโต้แย้งของควรบันทึกหนึ่งไบต์เพิ่มเติมได้ที่:zipWith f s=zipWith(\p->last$toLower:[toUpper|isUpper p])s$filter(>' ')s
Laikoni

4

V , 24 ไบต์

ÄVuÓó
ejlDò/¥2lõ
vuk~òGd

ลองออนไลน์!

ความท้าทายเหล่านี้เป็นสิ่งที่ V สร้างขึ้นมา :)

คำอธิบาย:

Ä           " Duplicate this line
 Vu         " Convert it to lowercase
   Óó       " Remove all spaces
e           " Move to the end of this line
 j          " Move down a line (to the original)
  l         " Move one char to the right
   D        " And delete the end of this line
    ò       " Recursively:
     /      "   Search for:
         õ  "     An uppercase character
      ¥2l   "     On line 2
            "     (This will break the loop when there are no uppercase characters left)
vu          "   Convert it to lowercase
  k         "   Move up a line
   ~        "   Convert this to uppercase also
    ò       " Endwhile
     G      " Move to the last line
      d     " And delete it

@DLosc คำถามที่ดี! การขึ้นบรรทัดใหม่ส่งสัญญาณการสิ้นสุดของคำสั่ง regex เช่นคำสั่งแทนที่ (ลบ) หรือคำสั่งค้นหา รายละเอียดเพิ่มเติมอยู่ในหน้านี้: github.com/DJMcMayhem/V/wiki/Regexes
DJMcMayhem


3

อลิซ 32 ไบต์

/..- ~l+u~mSloy
\ia''-y.'Qa.+a@/

ลองออนไลน์!

คำอธิบาย

นี่เป็นเทมเพลตมาตรฐานสำหรับโปรแกรมที่ทำงานในโหมดปกติทั้งหมด Unwrapped โปรแกรมจะเป็นดังนี้:

i.' -l.uQm.lay.a-'~y+'~aS+o@

i       take input as string
.       duplicate
' -     remove spaces from copy
l.u     create all-lowercase and all-uppercase versions
Q       reverse stack, so original string is on top
m       truncate original string to length of spaces-removed string
.lay    convert everything except uppercase characters to \n
.a-'~y  convert everything except \n (i.e., convert uppercase characters) to ~
+       superimpose with lowercase string
        \n becomes the corresponding lowercase character, and ~ remains as is
'~aS    convert ~ to \n
+       superimpose with uppercase string
        lowercase in existing string stays as is because it has a higher code point
        \n becomes corresponding uppercase character
o       output
@       terminate

3

JavaScript (ES6), 94 91 85 ไบต์

s=>s.replace(/./g,c=>c==" "?"":c[`to${"@"<s[x]&s[x++]<"["?"Upp":"Low"}erCase`](),x=0)
  • บันทึก 6 ไบต์ด้วยความช่วยเหลือจาก ETHproductions & Arnauld

ลองมัน

o.innerText=(f=

s=>s.replace(/./g,c=>c==" "?"":c[`to${"@"<s[x]&s[x++]<"["?"Upp":"Low"}erCase`](),x=0)

)(i.value="Hi! Test!");oninput=_=>o.innerText=f(i.value)
<input id=i><pre id=o>



คุณสามารถทำ'@'<s[i]&s[i]<'['?อะไร
ETHproductions

@ ขั้นตอนที่: อืมมนุษย์ไม่เห็นว่าเมื่อคืนนี้ในขณะที่ฉันกำลังทำงานนี้
Shaggy

@ ETHproductions: ฉันสงสัยว่ามันอาจจะสั้นกว่านี้ แต่ฉันขี้เกียจเกินกว่าที่จะค้นหาว่าตัวละครตัวไหนที่ฉันต้องใช้: D กลับกลายเป็นว่าช่วยประหยัดไบต์ได้ ขอบคุณ
Shaggy

3

เรติน่า , 77 71 ไบต์

.+
$&¶$&
T`L `l_`.+$
+`((.)*)[A-Z].*(¶(?<-2>.)*)
$1$3 
.+¶

T`l `L_` .?

ลองออนไลน์! การเชื่อมโยงรวมถึงชุดทดสอบ คำอธิบาย: สเตจแรกทำซ้ำบรรทัดในขณะที่สเตจที่สองลดขนาดที่ซ้ำกันและลบช่องว่าง ขั้นตอนที่สามจะวนตัวอักษรตัวพิมพ์ใหญ่แต่ละตัวจากขวาไปซ้ายและพยายามเว้นช่องว่างก่อนอักขระที่สอดคล้องกันในบรรทัดที่สอง บรรทัดแรกจะถูกลบและช่องว่างจะถูกใช้เพื่อพิมพ์อักขระที่เกี่ยวข้องของผลลัพธ์ แก้ไข: บันทึกแล้ว 6 ไบต์ขอบคุณ @Kobi


คำถามเล็ก ๆ : (.?)และ$4ชิ้นส่วนจำเป็นหรือไม่? ดูเหมือนว่าการมีกลุ่มตัวเลือกในตอนท้ายจะไม่ทำอะไรเลย
Kobi

@Kobi ไม่มีอะไรเล็ก ๆ เกี่ยวกับคำถามนั้น! เดิมเป็นส่วนหนึ่งของความพยายามในการใช้ lookarounds เพื่อจับคู่อักขระที่จะเป็นตัวพิมพ์ใหญ่โดยตรงแทนที่จะต้องแปลเป็นขั้นตอนแยกต่างหาก
Neil

3

Perl, 95 94 + 1 = 95 ไบต์

บทลงโทษ +1 ไบต์สำหรับ -n

บันทึกหนึ่งไบต์โดยแทนที่จากs/\s//gเป็นs/ //g

$s=$_;s/ //g;$_=lc($_);while(/(.)/gs){$p=$&;$p=uc($p)if(substr($s,$-[0],1)=~/[A-Z]/);print$p;}

ลองออนไลน์!

คำอธิบาย:

  1. ทำสำเนาของสตริงอินพุต

  2. ลบช่องว่างทั้งหมดและแปลงสตริงเป็นตัวพิมพ์เล็ก

  3. จากนั้นเริ่มวนรอบตัวอักษรแต่ละตัว ทดสอบตัวอักษรในตำแหน่งเดียวกันในสตริงที่บันทึกไว้สำหรับตัวพิมพ์ใหญ่ ถ้ามันสูง - ทำตัวอักษรปัจจุบันให้เป็นภาพ พิมพ์จดหมาย

โปรดทราบว่าจะต้องเรียกใช้ Perl ด้วยสวิตช์บรรทัดคำสั่ง "-n"


ยินดีต้อนรับสู่ PPCG! หากคุณต้องการคุณสามารถเพิ่มลิงก์ไปยัง Try It Online: tio.run/# (ฉันต้องการเพิ่ม แต่ฉันไม่รู้ว่านี่คือ Perl 5 หรือ Perl 6)
Stephen

1
ฉันคิดว่าคุณต้องนับ+1ไบต์สำหรับ-nธง นอกจากนั้นมันดูดี! ยินดีต้อนรับสู่เว็บไซต์! :)
DJMcMayhem

@ ขั้นตอนมันคือ Perl 5 คุณต้องการเพิ่มลิงค์หรือไม่ ฉันล้มเหลวในการเรียกใช้รหัสของฉันที่นั่นในทางที่ผู้ผลิต
Veitcel

ยินดีที่ได้เห็นนักกอล์ฟ Perl คนใหม่! ฉันได้เพิ่มลิงก์ TIO ลงในคำตอบของคุณและปรับปรุงการจัดรูปแบบ
Dada


2

Python 3 , 117 ไบต์

s=input()
y=list(s.replace(' ','').lower())
i=0
for c in y:
 if s[i].isupper():y[i]=c.upper()
 i+=1
print(''.join(y))

ลองออนไลน์!

นี่เป็นครั้งแรกที่ฉันเล่นกอล์ฟรหัสดังนั้นจึงมีแนวโน้มที่จะแย่ลบความช่วยเหลือจากความคิดเห็นด้านล่าง!

ป.ล. ใช่มันเป็นใบ้ที่การกำหนดและการเพิ่มiบันทึกไบต์ในช่วง (len (y)) โอ้ดี


1
ยินดีต้อนรับสู่ PPCG! ส่งแรกที่ดี! อย่างไรก็ตามการปฏิบัติตามมาตรฐาน I / O ของเว็บไซต์ของเราการส่งของคุณต้องเป็นฟังก์ชันของสตริงหรือรับอินพุต คุณไม่สามารถสมมติว่าอินพุตอยู่ในตัวแปร หวังว่าคุณจะสนุกกับการเข้าพัก! :)
HyperNeutrino

ขอบคุณ; แก้ไขฟังก์ชั่นใน แต่ยังบันทึก 5 ไบต์ในร่างกาย: D
ลุค Sawczak

1
@LukeSawczak บันทึกข้อมูลจำนวนหนึ่งไบต์ด้วยการเปลี่ยนเป็นหนึ่งช่องว่างสำหรับการย่อหน้าและอาจเพิ่มลองแบบออนไลน์! ลิงก์ถ้าคุณต้องการ
Stephen

1
returnคุณสามารถลบพื้นที่หลัง
CalculatorFeline

@LukeSawczak เป็นไงบ้าง? tio.run/…
Stephen


2

ถ่าน 33 ไบต์

A⁰χFLθ¿⁼§θι A⁺¹χχ¿№α§θ⁻ιχ↥§θι↧§θι

ลองออนไลน์!

ในขณะที่ฉันยังไม่รู้วิธีส่งสตริงที่มีช่องว่างเป็นพารามิเตอร์อินพุตเดี่ยวในรหัส Charcoal ฉันเพิ่งกำหนดส่วนหัวของสตริงทดสอบให้กับตัวแปร Charcoal ซึ่งแทนสิ่งที่จะเป็นอินพุตแรก ( θ):

AA Quick Brown Fox Jumped Over The Lazy Dogθ

ดังนั้นรหัสจึงมีจำนวนไบต์เหมือนกันกับว่าสายอักขระถูกส่งผ่านเป็นอินพุตแรก

คุณสามารถดูรหัสเวอร์ชั่น verbose ได้ที่นี่


1
ฉันพูดในคำตอบอื่น แต่ในกรณีที่คุณลืมเพียงแค่ใส่อาเรย์หลามที่มีองค์ประกอบเดียว
ASCII- เท่านั้น

ฉันแค่ต้องการอินพุตเพื่อให้ขึ้นบรรทัดใหม่
Neil

2

PHP, 181 ไบต์

ฉันลองรับจำนวนน้อยไบต์นี่คือรหัสของฉัน:

<?php
$s=readline();
preg_match_all('/[A-Z]/',$s,$m,PREG_OFFSET_CAPTURE);
$s=strtolower(str_replace(' ','',$s));
while($d=each($m[0]))$s[$d[1][1]]=strtoupper($s[$d[1][1]]);
echo $s;

ลองออนไลน์!


แทนที่จะคงที่PREG_OFFSET_CAPTUREคุณสามารถใช้ค่า256, $argnเป็นตัวแปรที่สั้นลงreadline()สำหรับการป้อนข้อมูลและฉันคิดctype_upperและการใช้lcfirstและucfirstจะบันทึกจำนวนของไบต์กับหนึ่งวงและการใช้$$iและผู้ประกอบ ternary
JörgHülsermann

2

Java 8, 184 177 161 ไบต์

s->{String r="";for(int i=0,j=i,t,u;i<s.length;){t=s[i++];if(t>32){u=s[j++];r+=(char)(t<65|t>90&t<97|t>122?t:u>64&u<91?t&~32:u>96&u<123|u<33?t|32:t);}}return r;}

แน่นอนสามารถแข็งแรงเล่นกอล์ฟบางมากขึ้น ..
- 16 ไบต์ขอบคุณที่@ OlivierGrégoireโดยการป้อนข้อมูลที่เป็นแทนchar[]String

คำอธิบาย:

ลองที่นี่

s->{                           // Method with char-array parameter and String return-type
  String r="";                 //  Result-String
  for(int i=0,j=i,t,u;         //  Some temp integers and indices
      i<s.length;){            //  Loop over the String
    t=s[i++];                  //   Take the next character and save it in `t` (as integer)
                               //   and raise index `i` by 1
    if(t>32){                  //   If `t` is not a space:
     u=s[j++];                 //   Take `u` and raise index `j` by 1
     r+=                       //   Append the result-String with:
      (char)                   //    Integer to char conversion of:
       (t<65|t>90&t<97|t>122?  //     If `t` is not a letter:
        t                      //      Simply use `t` as is
       :u>64&u<91?             //     Else if `u` is uppercase:
        t&~32                  //      Take `t` as uppercase
       :u>96&u<123|u<33?       //     Else if `u` is lowercase or a space:
        t|32                   //      Take `t` as lowercase
       :                       //     Else:
        t);                    //      Take `t` as is
    }
  }                            //  End of loop
  return r;                    //  Return result-String
}                              // End of method

1
ใช้char[]สายอักขระแทนสำหรับสตริงนี้คุณจะประหยัดได้มากถึงไบต์!
Olivier Grégoire

ในทางกลับกันฉันก็ตอบด้วยอัลกอริทึมอื่นเช่นกัน และที่นี่ฉันรับข้อโต้แย้งที่ตรงกันข้าม: ใน = String, out = char[]:-)
Olivier Grégoire

2

เสียงกระเพื่อมสามัญ 104 ไบต์

(defun f(s)(map'string(lambda(x y)(if(upper-case-p x)(char-upcase y)(char-downcase y)))s(remove #\  s)))

ลองออนไลน์!

สั้นผิดปกติสำหรับเสียงกระเพื่อมสามัญสำนึก!

รหัสตรงไปตรงมา:

(defun f (s)                     ; receive the string as parameter
  (map 'string                   ; map the following function of two arguments
       (lambda (x y)             ; x from the original string, y from the string with removed spaces
         (if (upper-case-p x)    ; if x is uppercase
             (char-upcase y)     ; get y uppercase
             (char-downcase y))) ; else get y lowercase
       s
       (remove #\  s)))

2

Java (OpenJDK 8) , 150 117 113 97 ไบต์

s->{for(int i=0,j=0,c;i<s.length;)if((c=s[i++]&95)>0)System.out.printf("%c",c^(s[j++]|~c/2)&32);}

ลองออนไลน์!

ขณะเล่นกอล์ฟมากขึ้นฉันมาที่ 102 ไบต์:

s->{for(int i=0,j=0,c;i<s.length;)if((c=s[i++]&95)>0)System.out.printf("%c",c<64?c|32:c|s[j]&32,j++);}

ลองออนไลน์!

แต่ฉันจำได้ว่าสิ่งนี้กำลังเริ่มดูเหมือนคำตอบของเดนนิสดังนั้นฉันก็เลยพูดถึงการทำเสียงวิ๊ย ๆ ของเขาและ ... ความมหัศจรรย์ก็เกิดขึ้น กำไรขนาดใหญ่จากพอร์ตคือการลบสาขาและการทำซ้ำภายในพวกเขา


@ceilingcat ที่ไม่ได้ทำงาน: Hi! Test!ควรจะเป็นแต่มีวิธีการแก้ปัญหาของคุณมันจะกลายเป็นHi!tEst! Hi!Test
Olivier Grégoire

2

Google ชีตขนาด 213 ไบต์

=ArrayFormula(JOIN("",IF(REGEXMATCH(MID(A1,ROW(OFFSET(A1,0,0,LEN(A1))),1),"[A-Z]"),MID(UPPER(SUBSTITUTE(A1," ","")),ROW(OFFSET(A1,0,0,LEN(A1))),1),MID(LOWER(SUBSTITUTE(A1," ","")),ROW(OFFSET(A1,0,0,LEN(A1))),1))))

อินพุตอยู่ในเซลล์A1และสูตรแยกย่อยดังนี้:

  • ArrayFormula()ให้เราประเมินแต่ละเทอมROW()อย่างอิสระ
  • JOIN() เชื่อมผลลัพธ์ที่เป็นอิสระเหล่านั้นทั้งหมดให้เป็นสตริงเดียว
  • IF(REGEXMATCH(),UPPER(),LOWER() คือสิ่งที่ทำให้เป็นทางเลือกโดยใช้ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กขึ้นอยู่กับว่าตัวเรือนอยู่ที่ตำแหน่งนั้นในอินพุต
  • ROW(OFFSET())ส่งกลับอาร์เรย์ของค่า1เพื่อA1.lengthที่สามารถป้อนเข้าMID()ฟังก์ชั่นเพื่อให้เราสามารถประเมินตัวละครในการเปิดแต่ละ

ผลของกรณีทดสอบ: (อ่านได้ง่ายกว่าถ้าคุณคลิกเป็นรุ่นที่ใหญ่กว่า)

TestCases



2

Perl, 92 ไบต์

$p[$i++]=$-[0]while s/[A-Z]/lc($&)/e;s/\s//g;for$c(@p){substr($_,$c,1)=~tr[a-z][A-Z]};print;

คำอธิบาย:

$p[$i++]=$-[0]while s/[A-Z]/lc($&)/e;   #get locations of caps into an array at the same time converting letters to lowercase

s/\s//g;   #delete all spaces

for$c(@p){substr($_,$c,1)=~tr[a-z][A-Z]};   #convert lowercase letters to uppercase where uppercase letters were present

print;   # print (of course) :)

1
ยินดีต้อนรับสู่ PPCG! :)
Stephen

คุณต้องเพิ่มการ-nตั้งค่าสถานะเพื่อให้คำตอบของคุณถูกต้อง สิ่งกอล์ฟไม่กี่: s/ //gก็พอ (ไม่จำเป็น\s) y/a-z/A-Z/เป็นเช่นเดียวกับtr[a-z][A-Z]คุณสามารถใช้-pธงเพื่อให้คุณไม่จำเป็นต้องสุดท้ายprint, lc$&คุณไม่จำเป็นต้องวงเล็บใน
Dada



1

Python 2, 106 105 ไบต์

s=input()
print''.join(map(lambda(c,u):[c.lower,c.upper][u](),zip(s.replace(' ',''),map(str.isupper,s))))

แก้ไข: บันทึกหนึ่งไบต์ผ่าน=>print ''.joinprint''.join

รูปแบบแลมบ์ดา 99 ไบต์

lambda s:''.join(map(lambda(c,u):[c.lower,c.upper][u](),zip(s.replace(' ',''),map(str.isupper,s))))


1

q / kdb +, 49 ไบต์

วิธีการแก้:

{@[a;(&)#:[a:lower x except" "]#x in .Q.A;upper]}

ตัวอย่าง:

q){@[a;(&)#:[a:lower x except" "]#x in .Q.A;upper]}"Hi! Test!"
"Hi!tEst!"

q){@[a;(&)#:[a:lower x except" "]#x in .Q.A;upper]}"A Quick Brown Fox Jumped Over The Lazy Dog"
"AqUickbrOwnfoxJumpEdovertHelazYdog"

q){@[a;(&)#:[a:lower x except" "]#x in .Q.A;upper]}"testing TESTing TeStING testing testing TESTING"
"testingtESTIngteStInGTEstingtestingtestiNG"

q){@[a;(&)#:[a:lower x except" "]#x in .Q.A;upper]}"TESTING... ... ... success! EUREKA???!!! maybe, don't, NOOOOO"
"TESTING.........success!eureKA???!!!maybe,don't,nooooo"

q){@[a;(&)#:[a:lower x except" "]#x in .Q.A;upper]}"Enter        PASSWORD ---------"
"Enterpassword---------"

q){@[a;(&)(#:[a:lower x except" "]#x)in .Q.A;upper]}"A a B b C c D d E e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Z z"
"AabbCcddEeffGghhIijjKkllMmnnOoppQqrrSsttUuvvWwxxZz"

q){@[a;(&)#:[a:lower x except" "]#x in .Q.A;upper]}"  TEST"
"teST"

คำอธิบาย:

ค้นหาดัชนีที่อินพุตเป็นตัวพิมพ์ใหญ่จากนั้นใช้ฟังก์ชันupperกับดัชนีเหล่านั้นในเวอร์ชันสตริงตัวพิมพ์เล็กที่เว้นวรรคและลบออก โปรดทราบว่าเราไม่สามารถใช้ฟังก์ชั่นที่เกินความยาวของสตริงได้ดังนั้นให้ใช้ take ( #) เพื่อตัดทอนสตริงอินพุตให้มีความยาวของตัวพิมพ์เล็กเวอร์ชันเว้นวรรค

{@[a;where count[a:lower x except " "]#x in .Q.A;upper]} / ungolfed
{                                                      } / lambda function
 @[ ;                                           ;     ]  / apply FUNC to VAR at INDICES: @[VAR;INDICES;FUNC]
                                                 upper   / uppercase, upper["abc"] -> "ABC"
                                       x in .Q.A         / boolean list where input is in uppercase alphabet ABC..XYZ
                                      #                  / take this many elements from list on the right (ie truncate)
           count[                    ]                   / returns length of the stuff inside the brackets, count["ABC"] -> 3                                        
                         x except " "                    / remove " " from string
                   lower                                 / lowercase, lower["ABC"] -> "abc"
                 a:                                      / save in variable a
     where                                               / returns indices where true where[101b] -> 0 2
   a                                                     / our lowercased, space-stripped input

โบนัส:

หลังจากอ่านคำตอบแล้วฉันคิดว่าฉันจะลองใช้วิธีแก้ปัญหาซ้ำแล้วซ้ำอีกจนฉันได้จัดการ 53 ไบต์เท่านั้น:

{a{$[y in .Q.A;upper x;x]}'#:[a:lower x except" "]#x}


1

Perl 5 , 40 ไบต์

37 ไบต์ของรหัส + -Fธง (โปรดทราบว่าใน Perl รุ่นเก่าคุณอาจต้องเพิ่ม-anค่าสถานะ)

print$F[$i++]=~/[A-Z]/?uc:lc for/\S/g

ลองออนไลน์!

คำอธิบาย:
ขอขอบคุณที่-F, @Fมีรายชื่อของตัวละครของท่านทุกคน
for/\S/gวนซ้ำทุกอักขระที่ไม่ใช่ช่องว่างของอินพุต เราใช้$iในการนับว่าเราอยู่ที่ไหนซ้ำ หาก$F[$i++]เป็นตัวพิมพ์ใหญ่ ( /[A-Z]/) เราจะพิมพ์อักขระปัจจุบันเป็นตัวพิมพ์ใหญ่ ( uc) มิฉะนั้นเราจะพิมพ์ตัวพิมพ์เล็ก ( lc) ทราบว่าucและlcส่งคืนอาร์กิวเมนต์ของพวกเขาไม่เปลี่ยนแปลงหากไม่ใช่ตัวอักษร


รุ่นก่อนหน้า (ตีกอล์ฟน้อยกว่า: 47 ไบต์):

 s/ //g;s%.%$_=$&;$F[$i++]=~/[A-Z]/?uc:lc%ge

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.