สลับคำโดยไม่เปลี่ยนเมืองหลวงหรือเครื่องหมายวรรคตอน


13

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

โดย "ลำดับของคำว่า" ฉันหมายความว่าแต่ละคำจะถูกแยกด้วยช่องว่าง ("") ดังนั้นการหดตัวและคำดังกล่าวจะถือว่าเป็นคำเดียว อะพอสโทรฟีในการหดตัวควรอยู่ในที่เดียวกัน ("ไม่" => "Tno'd")

(เครื่องหมายวรรคตอนหมายถึงอักขระใด ๆ ที่ไม่ใช่ az, AZ หรือช่องว่าง *)

  • ตัวเลขถูกลบออกจากรายการนี้เนื่องจากคุณไม่สามารถมีทุนได้ ตัวเลขจะถูกใช้เป็นเครื่องหมายวรรคตอน

ตัวอย่างเช่นสำหรับอินพุต:

Hello, I am a fish.

มันควรจะออก:

Olleh, I ma a hsif.

โปรดสังเกตว่า O ซึ่งเป็นตัวอักษรตัวแรกในคำแรกตอนนี้เป็นตัวพิมพ์ใหญ่เนื่องจาก H เป็นตัวพิมพ์ใหญ่มาก่อนในตำแหน่งเดียวกัน

เครื่องหมายจุลภาคและระยะเวลายังอยู่ในสถานที่เดียวกัน

ตัวอย่างเพิ่มเติม:

This; Is Some Text!

จะส่งออก

Siht; Si Emos Txet!

สามารถใช้ภาษาใดก็ได้ โปรแกรมที่มีจำนวนอักขระต่ำสุดชนะ


3
การหดเกร็งควรทำอย่างไร? นั่นคือDon't touch that!แผนที่ไปt'noD hcuot taht!หรือไปnoD't hcuot taht!?
dmckee --- ผู้ดูแลอดีตลูกแมว

2
@dmckee "(เครื่องหมายวรรคตอนหมายถึงอักขระใด ๆ ที่ไม่ใช่ az, AZ, 1-9 หรือช่องว่าง)"
John Dvorak

1
@dmckee ดังนั้นจึงควรจับคู่กับNod't hcuot tath!
John Dvorak

1
การย้อนกลับแต่ละคำนั้นง่าย การย้อนกลับแต่ละคำและการใช้อักษรตัวพิมพ์ใหญ่ไม่ใช่
John Dvorak

1
ใช่นั่นคือความท้าทาย;) เพียงแค่ย้อนกลับพวกเขาจะง่ายเกินไปและมีแนวโน้มที่จะเกิดขึ้นกับภาษาที่ใช้ นี่หมายถึงทำให้คุณคิด
nasonfish

คำตอบ:


7

GolfScript, 58 54 48 ตัวอักษร

" "/{.{65- 223&26<}:A,\{.A{96&\)31&@+}*}%+}%" "*

นี่เป็นวิธีการแก้ปัญหา GolfScript ซึ่งค่อนข้างนาน รหัสจำนวนมากกำลังค้นหาว่าอักขระอยู่ใน a-zA-Z หรือไม่ บางทีบางคนอาจหาวิธีทดสอบที่สั้นกว่านี้ก็ได้

คุณสามารถลองรหัสออนไลน์ ตัวอย่าง:

> Hello, I am fish.
Olleh, I ma hsif.

> This; Is Some Text!
Siht; Si Emos Txet!

> Don't try this at home.
Tno'd yrt siht ta emoh.

โปรแกรมแก้ไข golfscript ออนไลน์นั้นมีประโยชน์ บุ๊คมาร์คขอบคุณ
John Dvorak

คุณสามารถดึงรอบสุดท้าย" "ภายใน%เพื่อบันทึกหนึ่ง ฉันพบวิธีอื่นในการทดสอบ a-zA-Z เป็นเวลา 11 chars แล้ว แต่ยังไม่มีสำหรับ 10.
Peter Taylor

4

APL 69

ใช้อินพุตหน้าจอผ่าน: t ← t

⎕av[1↓∊(↑¨v),¨((¯1×⌽¨z)+z←¯32×~1↓¨v>97)+¨⌽¨1↓¨v←(+\v<66)⊂v←0,⎕av⍳t←⍞]

ไม่ควรนับ APL เป็น UTF-8 ไบต์? :-)
John Dvorak

@JanDvorak ชุดอักขระ APL + Win V5 เป็นไบต์เดียว ฉันต้องแปลงเป็น UTF-8 เพื่อโพสต์ที่นี่เพื่อให้ตัวละครแสดงผลได้อย่างถูกต้อง ⎕av⍳tด้านบนส่งคืนดัชนีเป็นชุดอักขระจาก 0-255 สำหรับอักขระในเวกเตอร์ t
เกรแฮม

4

CoffeeScript, 134 133 ตัวอักษร

alert prompt().replace /\S+/g,(x)->c=x.match r=/[a-z]/gi;return x.replace r,(y)->return c.pop()[`(y<"a"?"toUpp":"toLow")`+"erCase"]()

Coffeescript คือ (สำหรับจุดประสงค์ของการเขียนโค้ด) javascript รุ่นที่หนาแน่นขึ้นเล็กน้อย มันไม่มีผู้ประกอบการที่สาม แต่มันมีทางหนีไปสู่จาวาสคริปต์

นี่คือเวอร์ชันของจาวาสคริปต์:

javascript, 152 151 ตัวอักษร

alert(prompt().replace(/\S+/g,function(x){c=x.match(r=/[a-z]/gi);return x.replace(r,function(y){return c.pop()[(y<"a"?"toUpp":"toLow")+"erCase"]()})}))

เยื้อง:

alert(prompt().replace(/\S+/g,function(x){
  c=x.match(r=/[a-z]/gi);
  return x.replace(r, function(y){
    return c.pop()[(y<"a"?"toUpp":"toLow")+"erCase"]()
  })
}))

2

Ruby: 89 ตัวอักษร (รวม 1 สำหรับ-pสวิตช์)

ไม่ได้คัดลอกโซลูชัน CoffeeScriptของJan Dvorakแต่หลังจากพยายามหลายครั้งรหัสของฉันสิ้นสุดลงดูเหมือนสำเนาที่ถูกต้อง เสียงจิตใต้สำนึกอาจกระซิบ“ ตามกระต่ายสีขาวแจนดวอแรค” ดังนั้น upvotes สำหรับอัลกอริธึมควรตอบไป

$_.gsub!(/\S+/){|m|l=m.scan r=/[a-z]/i;m.gsub(r){|c|l.pop.send c<?a?:upcase: :downcase}}

วิ่งตัวอย่าง:

bash-4.2$ ruby -p reverse-word.rb <<< "Hello, I am a fish.
This; Is Some Text!
Don't touch that!
S'm00ch1e"
Olleh, I ma a hsif.
Siht; Si Emos Txet!
Tno'd hcuot taht!
E'h00cm1s

0

ลัวะ, 143

print(((io.read"*l"):gsub("%w+",function(s)local r=""for i=1,#s do r=("")[s:byte(-i)>96 and"lower"or"upper"](s:sub(i,i))..r end return r end)))

ลองดี แต่ก็ควรใช้เครื่องหมายวรรคตอนในสถานที่: pastebin.com/X8QLf6fW
จัดการ

แก้ไข: โอ้ฉันเห็นตอนนี้
mniip

-1

EcmaScript 6 (112 ตัวอักษร)

sการป้อนข้อมูลที่ระบุไว้ใน

alert(s.replace(/\S+/g,x=>(_=x.match(X=/[a-z]/gi),x.replace(X,a=>_.pop()[(a<"a"?"toUpp":"toLow")+"erCase"]()))))

ตามคำตอบของ @Jan Dorvak


-2

C # (375)

 public static string rev(string s)
    {
        var r = new Regex("[^A-za-z]");

        var result = "";
        var token = "";
        foreach (var c in s)
        {
            if (!r.IsMatch(c + ""))
            {
                token += c;
            }
            else
            {
                result += new string(token.Reverse().ToArray());
                result += c;
                token = "";
            }
        }

        var arr = result.ToArray();
        int i = 0;
        foreach (var c in s)
        {
            arr[i] = char.IsUpper(c) ? char.ToUpper(arr[i]) : char.ToLower(arr[i]);
            i++;
        }

        result = new string(arr);
        return result;
    }

minified

public static string rev(string s){var r=new Regex("[^A-za-z]");var result="";var token="";foreach(var c in s){if(!r.IsMatch(c+"")){token+=c;}else{result+=new string(token.Reverse().ToArray());result+=c;token="";}}var arr=result.ToArray();int i=0;foreach(var c in s){arr[i]=char.IsUpper(c)?char.ToUpper(arr[i]):char.ToLower(arr[i]);i++;}result=new string(arr);return result;}

มันไม่ควรจะเป็นA-Za-z?
Cyoce

@Cyoce รายละเอียดเล็ก ๆ น้อย ๆ : ไม่[A-z] [A-Za-z]ข้อแรกคือข้อผิดพลาด (?) ทั่วไปเนื่องจากมีอักขระที่ไม่ใช่ตัวอักษร
Erik the Outgolfer

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