ความท้าทายการเปลี่ยนตัวอักษร


17

ความคิดนั้นง่าย คุณต้องสร้างการแทนที่ตัวอักษร "visualized" โดยการให้ 3 สตริง (สามารถคั่นด้วยเครื่องหมายจุลภาค, อินพุตแยกต่างหากหรือเป็นอาร์เรย์) ส่วนแรกคือคำที่คุณต้องการแก้ไขและส่วนที่สองคือตัวอักษรที่คุณต้องการแทนที่และส่วนที่สามคือการแทนที่ตัวอักษรในส่วนที่ 2

ตัวอย่างเช่น:

|    | Input                       | Starting Word | Output      |
|----|-----------------------------|---------------|-------------|
| #1 | Hello world -wo -ld +Ea +th | Hello world   | Hello Earth |
| #2 | Hello World -wo -ld +Ea +th | Hello World   | Hello Worth |
| #3 | Hello -llo +y               | Hello         | Hey         |
| #4 | Red -R -d +Gr +en           | Red           | Green       |
| #5 | mississippi -is -i +lz +p   | mississippi   | mlzslzspppp |
| #6 | Football -o -a +a +i        | Football      | Fiitbill    |
| #7 | mississippi -is -i +iz +p   | mississippi   | mpzspzspppp |

คำอธิบาย

การเปลี่ยนจะต้องทำทีละขั้นตอนกับคู่ที่เกี่ยวข้อง นี่คือภาพประกอบพร้อมอินพุตmississippi -is -i +iz +pเพื่อให้เอาต์พุตmpzspzsppp(ดูตัวอย่าง#7ด้านบน)

| Step  | Input                         | Output        |
|------ |---------------------------    |-------------  |
| #1    | mississippi -is -i +iz +p     |               |
| #2    | mississippi -is +iz           | mizsizsippi   |
| #3    | mizsizsippi -i +p             | mpzspzspppp   |

กฎระเบียบ

  • อินพุตอยู่ในลำดับนี้<starting_string> <list_of_letters_to_replace> <replacement_letters>เสมอ
  • ตัวอักษรสำหรับการแทนที่และการแทนที่กลุ่มจะไม่ถูกนำมาผสมกัน (เช่น: จะไม่มี-a +i -e +o)
  • ตัวอักษรที่จะแทนที่นั้นจะนำหน้าด้วยเสมอ-และตัวอักษรที่จะนำมาแทนที่นั้นจะนำหน้าด้วยเสมอ+ตัวอักษรและการเปลี่ยนจะมีคำนำหน้าเสมอกับ(คำนำหน้ามีผลบังคับใช้)
  • อาจมีตัวอักษรมากกว่าหนึ่งชุดที่จะแทนที่ดังนั้นคุณต้องดูคำนำหน้า
  • สมมติว่าจำนวนกลุ่มตัวอักษรที่จะแทนที่และจำนวนของกลุ่มตัวอักษรทดแทนนั้นเท่ากันเสมอ (เช่น: จะไม่มี -a -e +i )
  • การเปลี่ยนจะต้องคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (ดูตัวอย่าง#1และ#2 )
  • การเปลี่ยนจะทำตามลำดับที่ได้รับในอินพุต
  • การแทนที่ตัวอักษรสามารถแทนที่ด้วยการแทนที่อื่น ๆ ดูตัวอย่าง#6ดูตัวอย่าง
  • ส่วนแรก (คำเริ่มต้น) จะไม่รวม-หรือ+อักขระ
  • นี่คือโค้ดกอล์ฟที่สั้นที่สุดเพื่อที่จะชนะ

ลีดเดอร์

นี่คือตัวอย่างข้อมูลเพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

# Ruby, <s>104</s> <s>101</s> 96 bytes

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของสองไฟล์หรือคุณต้องการแสดงรายการการลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

# Perl, 43 + 2 (-p flag) = 45 bytes

นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

var QUESTION_ID=96473,OVERRIDE_USER=38505;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


1
ตามกฎที่ 2 และ 5 คุณไม่จำเป็นต้องดูคำนำหน้า ด้วยอินพุต n อินพุต 0 คือสตริงฐานอินพุต 1 ถึง int (n / 2) คือletter to replace(พร้อมคำนำหน้า-) และอินพุต int (n / 2) +1 ถึง n-1 คือreplacement(พร้อมคำนำหน้า+)
edc65

@ edc65 100% จริงแม้ว่าความท้าทายได้รับการออกแบบให้มีคำนำหน้า (และฉันสามารถอธิบายได้แปลก ๆ ว่าฉันเป็นเอเลี่ยนที่ไม่สามารถดำเนินการแทนจดหมายโดยไม่มีคำนำหน้า) แต่ในความเป็นจริงมันเป็นอุปสรรคอีกอย่างที่จะหยุดสิ่งนี้ เป็นเรื่องไม่สำคัญเกินไป - แม้ว่าการดูคำตอบในปัจจุบัน (ทุกอย่างยอดเยี่ยมมาก) มันไม่ใช่อุปสรรคที่ซับซ้อน ที่จริงแล้วความสนุกความคิดเบื้องหลังความท้าทายนี้เกิดขึ้นจากเพื่อนของฉันในการแชทผ่าน Skype เขาต้องการผิดพลาดการสะกดคำ ( gello) แล้วส่งฉันเปลี่ยนตัวอักษร ( -g +h) hello*เพราะเขาต้องการที่จะเป็นที่น่ารำคาญแทนการส่ง
59

1
อินพุตอยู่ในลำดับนี้ทำไมจึงเข้มงวด?
Luis Mendo

@ LuisMendo ฉันคิดว่ามันไม่สำคัญ - แต่เป็นวิธีที่เพื่อนของฉันและฉันจัดรูปแบบ แต่เนื่องจากคำตอบถูกโพสต์ไปยังข้อกำหนดนี้ฉันไม่สามารถเปลี่ยนแปลงกฎได้จริงๆ มันไม่ได้ถูกถามในกล่องทรายดังนั้นฉันจึงไม่คิดว่ามันเป็นเชิงลบ
ʰᵈˑ

1
@udioica นั้นถูกต้องสมบูรณ์และจริง ๆ แล้วมันสนับสนุนกฎ "การแทนที่เป็นแบบตรงตามตัวพิมพ์ใหญ่ - เล็ก" เรียกใช้ตัวอย่างในคำตอบ JavaScript เพื่อดูการใช้งาน (# 1 w orld` เทียบกับ # 2 W orld)
edc65

คำตอบ:


6

05AB1E , 15 17 ไบต์

IIð¡€áIð¡€á‚øvy`:

ลองออนไลน์!

คำอธิบาย

I                   # read starting string
 I                  # read letters to be replaced
  ð¡                # split on space
    ۇ              # and remove "-"
      I             # read replacement letters
       ð¡           # split on space
         ۇ         # and remove "+"
           ‚ø       # zip to produce pairs of [letters to replace, replacement letters]
             vy`:   # for each pair, replace in starting string

หรือด้วยรูปแบบอินพุตที่เข้มงวดน้อยกว่า

vy`:

ลองออนไลน์


6

JavaScript (ES6), 85 83 ไบต์

f=(s,n=1,l=s.split(/ \W/))=>(r=l[n+l.length/2|0])?f(s.split(l[n]).join(r),n+1):l[0]

กรณีทดสอบ


5

Pyke, 13 11 ไบต์

z[zdcmt)[.:

ลองที่นี่!

z           - input()
 [zdcmt)    - def func():
  zdc       -  input().split(" ")
     mt     -  map(>[1:], ^)
            - func()
        [   - func()
         .: - translate()

หรือ 2 ไบต์หากอยู่ในรูปแบบอินพุตอื่น:

.:

ลองที่นี่!


ที่ทำงาน catbus.co.uk ถูกบล็อค คุณสามารถลิงค์ชุดทดสอบทางเลือกได้ไหม
2559

2
@ ʰᵈˑฉันไม่เชื่อว่าการปฏิบัติตามการตั้งค่าไฟร์วอลล์งาน (โดยพลการ) ของคุณนั้นสมเหตุสมผล
orlp

1
@orlp - ฉันเห็นด้วยมันน่ารังเกียจ แต่ฉันไม่ได้ตั้งค่าไฟร์วอลล์ ฉันแค่ต้องการทดสอบมัน
ʰᵈˑ

2
@hd คุณสามารถดาวน์โหลด Pyke ได้ที่ github.com/muddyfish/pyke
Blue

4

Perl, 58 ไบต์

57 รหัสไบต์ + 1 -pสำหรับ

ต้องการไอเท็มแรกในหนึ่งบรรทัดจากนั้นเปลี่ยนในถัดไป ขอบคุณมากสำหรับ@Dadaที่มาพร้อมกับแนวทางที่แตกต่างเพื่อช่วยลด 4 ไบต์!

$a=<>;1while$a=~s%-(\S*)(.*?)\+(\S*)%"s/$1/$3/g;q{$2}"%ee

การใช้

perl -pe '$a=<>;1while$a=~s%-(\S*)(.*?)\+(\S*)%"s/$1/$3/g;q{$2}"%ee' <<< 'Football
-o -a +a +i'
Fiitbill
perl -pe '$a=<>;1while$a=~s%-(\S*)(.*?)\+(\S*)%"s/$1/$3/g;q{$2}"%ee' <<< 'mississippi
-is -i +iz +p'
mpzspzspppp
perl -pe '$a=<>;1while$a=~s%-(\S*)(.*?)\+(\S*)%"s/$1/$3/g;q{$2}"%ee' <<< 'mississippi
-ippi -i -mess +ee +e +tenn'
tennessee

4 perl -pE 's/(.*?) -(\S*)(.*?)\+(\S*)/"(\$1=~s%$2%$4%gr).\"$3\""/ee&&redo'ไบต์นานมี ฉันไม่สามารถจัดการให้สั้นลงได้ แต่บางทีคุณสามารถทำได้ :)
Dada

1
Gotcha! 58 perl -pE '$a=<>;1while$a=~s%-(\S*)(.*?)\+(\S*)%"s/$1/$3/g;q{$2}"%ee'ไบต์: (ใช้สตริงในหนึ่งบรรทัดและ "ตั้งค่าสถานะ" ในบรรทัดถัดไป)
Dada

1
! น่ากลัว ฉันไม่ได้อยู่ที่คอมพิวเตอร์ แต่ฉันจะอัปเดตในวันพรุ่งนี้! ขอบคุณ!
Dom Hastings

คุณแน่ใจเกี่ยวกับการลบ q {} รอบ ๆ $ 2 หรือไม่ นี่จะไม่ล้มเหลวหรือไม่เมื่อมีสวิตช์ 3 - และ 3 + (ฉันไม่สามารถทดสอบได้ในตอนนี้ดังนั้นบางทีคุณอาจจะถูกต้องแล้วเอาออกไป))
Dada

@ Dada ahhh ฉันสงสัยว่าทำไมคุณเพิ่มมันฉันทดสอบทุกกรณีในชุดทดสอบ แต่ไม่ได้คิดว่าจะเปลี่ยน 3 สำหรับ 3 ...
Dom Hastings


3

PHP, 98 97 ไบต์

for($s=$argv[$i=1];$v=$argv[++$i];)$r[$v[0]>'+'][]=substr($v,1);echo str_replace($r[1],$r[0],$s);

ความท้าทายนี้อธิบายถึงพฤติกรรมที่แน่นอนของ str_replace ดังนั้นสำหรับ PHP มันคือทั้งหมดที่เกี่ยวกับการสร้างอาร์เรย์ของการแทนที่ ฉันพยายามทำโดยใช้ "substring" เพียงอันเดียว แต่นั่นอาจไม่ใช่วิธีที่ดีที่สุด ใช้เช่น:

php -r "for($s=$argv[$i=1];$v=$argv[++$i];)$r[$v[0]>'+'][]=substr($v,1);echo str_replace($r[1],$r[0],$s);" "mississippi" "-is" "-i" "+iz" "+p"

แก้ไข: บันทึก 1 ไบต์ขอบคุณ Titus


นี่อาจเป็นสิ่งที่สั้นที่สุด แต่จะช่วยประหยัดมากกว่าหนึ่งไบต์$v[0]>'+' $v[0]=='-'คุณสามารถใช้ord($v)&4แทน
ติตัส

2

Java 7, 153 133 ไบต์

String c(String[]a){String r=a[0],z[]=a[1].split(" ?-");for(int i=0;i<z.length;r=r.replace(z[i],a[2].split(" ?[+]")[i++]));return r;}

Ungolfed & รหัสการทดสอบ:

ลองที่นี่

class M{
  static String c(String[] a){
    String r = a[0],
           z[] = a[1].split(" ?-");
    for(int i = 0; i < z.length; r = r.replace(z[i], a[2].split(" ?[+]")[i++]));
    return r;
  }

  public static void main(String[] a){
    System.out.println(c(new String[]{ "Hello world", "-wo -ld", "+Ea +th" }));
    System.out.println(c(new String[]{ "Hello World", "-wo -ld", "+Ea +th" }));
    System.out.println(c(new String[]{ "Hello", "-llo", "+y" }));
    System.out.println(c(new String[]{ "Red", "-R -d", "+Gr +en" }));
    System.out.println(c(new String[]{ "mississippi", "-is -i", "+lz +p" }));
    System.out.println(c(new String[]{ "Football", "-o -a", "+a +i" }));
    System.out.println(c(new String[]{ "mississippi", "-is -i", "+iz +p" }));
  }
}

เอาท์พุท:

Hello Earth
Hello Worth
Hey
Green
mlzslzspppp
Fiitbill
mpzspzspppp

มันใช้งานได้กับอินพุตnew String[]{'Rom Ro. Rom", "-Ro." , "+No."}หรือไม่ เพียงแค่เขียนสิ่งที่ (หวังว่า) ตรงกับ regex ผิด
Roman Gräf

@ Rom No. RomRomanGräfใช่การทำงานและเอาท์พุท Btw คุณสามารถลองด้วยตัวคุณเองโดยคลิกที่Try it here.ลิงก์ในโพสต์แล้วแยกออก :)
Kevin Cruijssen

ฉันรู้ แต่ตอนนี้ฉันอยู่ในมือถือ :(
Roman Gräf

2

PHP, 164 ไบต์

preg_match_all("#^[^-+]+|-[\S]+|[+][\S]+#",$argv[1],$t);for($s=($a=$t[0])[0];++$i<$c=count($a)/2;)$s=str_replace(trim($a[+$i],"-"),trim($a[$i+$c^0],"+"),$s);echo$s;

2

เป็นกลุ่ม 25 ไบต์

qq+dE+r-PdiW:1s<C-R>"-g<CR>@qq@q

ถือว่าอินพุตในรูปแบบนี้:

mississippi
-is -i
+lz +p
  • +dE+r-PdiW: รวม-และ+ลงในทะเบียนเดียวกับ+กลายเป็น-กลายเป็น
  • :1s<C-R>"-g: ใช้รีจิสเตอร์เป็นข้อมูลโค้ดแทรกลงใน:sคำสั่งโดยตรงโดยใช้-เป็นตัวคั่น


2

R, 98 94 ไบต์

แก้ไข: บันทึกแล้ว 4 ไบต์ด้วย @rturnbull

i=scan(,"");s=i[1];i=gsub("\\+|-","",i[-1]);l=length(i)/2;for(j in 1:l)s=gsub(i[j],i[l+j],s);s

กรณี Ungolfed และการทดสอบ

เพราะscan(อ่านอินพุตจาก stdin) ไม่ทำงานอย่างถูกต้องในซอ - ฉันแสดงโปรแกรมโดยห่อมันในฟังก์ชั่นแทน โปรดทราบว่าฟังก์ชั่นใช้เวกเตอร์เป็นอินพุตและสามารถเรียกใช้โดยเช่น: f(c("Hello world", "-wo", "-ld", "+Ea", "+th")). โปรแกรม gofled ด้านบนจะแจ้งให้ผู้ใช้ป้อนโดยใช้ stdin โดยพิมพ์"Hello world" -wo -ld -Ea +thในคอนโซลจะให้ผลลัพธ์เดียวกัน

เรียกใช้รหัสบนซอ

f=function(i){
    s=i[1]                                   # Separate first element
    i=gsub("\\+|-","",i[-1])                 # Remove + and - from all elements except first, store as vector i
    l=length(i)/2                            # calculate the length of the vector i (should always be even)
    for(j in 1:l)s=gsub(i[j],i[l+j],s)       # iteratively match element j in i and substitute with element l+j in i
    s                                        # print to stdout
}

คุณสามารถให้ลิงค์ชุดทดสอบด้วยได้ไหม
2559

@ ʰᵈˑเพิ่มชุดทดสอบ R-fiddle โปรดทราบว่าชุดทดสอบใช้ฟังก์ชั่นแทนการอ่านอินพุตจาก stdin ตามที่อธิบายไว้ในคำตอบที่แก้ไข
Billywob

คำตอบนี้ใช้ได้เนื่องจากคุณต้องใช้"รอบสตริงป้อน?
rturnbull

@rtbull ฉันไม่เห็นว่าทำไม การห่อทุกรายการด้วยเครื่องหมายคำพูดและการกด Enter จะให้ผลลัพธ์ที่เทียบเท่า (เช่น:) "Hello world" => enter => "-wo" => enter => "-ld" => enter => "+Ea" => enter =>"+th"ซึ่งโดยปกติแล้วจะเป็นวิธีการอ่านสตริงอย่างไรก็ตาม
Billywob

1
ใช่มันขึ้นอยู่กับ OP จริง ๆ ! ฉันชอบคำตอบของคุณเป็นการส่วนตัว แต่ฉันกังวลว่ามันอาจไม่ถูกต้อง มองหาคำตอบสำหรับภาษาอื่น ๆ ดูเหมือนว่าคำพูดจะได้รับการยอมรับ ในขณะที่ผมมีความสนใจของคุณผมคิดว่าคุณสามารถปิดกอล์ฟ 4 ไบต์โดยการเปลี่ยนl=length(i)ไปและการปรับปรุงการอ้างอิงในภายหลังเพื่อl=length(i)/2 l
rturnbull

2

Haskell, 85 78 ไบต์

import Data.Lists
g=map tail.words
a#b=foldl(flip$uncurry replace)a.zip(g b).g

ตัวอย่างการใช้: ("mississippi" # "-is -i") "+lz +p"->"mlzslzspppp" ->

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

g=map tail.words              -- helper function that splits a string into a
                              -- list of words (at spaces) and drops the first
                              -- char of each word

                zip(g b).g    -- make pairs of strings to be replaced and its
                              -- replacement
foldl(flip$uncurry replace)a  -- execute each replacement, starting with the
                              -- original string
                              -- -> "flip" flips the arguments of "uncurry replace"
                              --           i.e. string before pair of replacements
                              -- "uncurry" turns a function that expects two
                              --           lists into one that expects a list of pairs

แก้ไข: @BlackCap พบ 6 ไบต์เพื่อบันทึกและฉันเองอีกหนึ่ง


6 ไบต์: import Data.Lists;a#b=foldl(uncurry replaceflip)a.zip(g b).g;g=map tail.words
BlackCap

@ BlackCap: ดีขอบคุณ! ไม่จำเป็นต้องทำflipมัด คำนำหน้ามาตรฐานสั้นลงหนึ่งไบต์
nimi

1

Python 3, 93 ไบต์

def f(s):
  s,m,p=s
  for n,o in zip(m.split(),p.split()):s=s.replace(n[1:],o[1:])
  return s

ลองออนไลน์!

อินพุตเป็นรายการที่มีสตริงสตริงการแทนที่จะถูกคั่นด้วยช่องว่าง

อินพุตตัวอย่าง: ['mississippi','-is -i','+iz +p']


คุณสามารถเพิ่มลิงค์ชุดทดสอบได้ไหม
2559

ลิงก์ที่ให้ไว้และยังลดขนาดลงอีกเล็กน้อย
Gábor Fekete

1

PowerShell v2 +, 90 ไบต์

param($a,$b,$c)-split$b|%{$a=$a-creplace($_-replace'-'),((-split$c)[$i++]-replace'\+')};$a

รับอินพุตเป็นสามอาร์กิวเมนต์ด้วย-และ+สตริงคั่นด้วยช่องว่าง ดำเนินการ-splitเกี่ยวกับ$b(คน-splitเมื่อทำหน้าที่ในแยกแฟชั่นเอกในช่องว่าง) แล้ว loops |%{...}ผ่านแต่ละคน การวนซ้ำทุกครั้งที่เราลบการ-ค้นหา[$i++]สตริงการแทนที่ถัดไปและการลบออก+จากมันและการใช้-creplace(การทดแทนตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) เพื่อฝานและลูกเต๋า$aและเก็บไว้ใน$aนั้น จากนั้น$aจะถูกทิ้งไว้บนไพพ์ไลน์และเอาท์พุทก็เป็นนัย

PS C:\Tools\Scripts\golfing> .\letter-replacement-challenge.ps1 'mississippi' '-is -i' '+iz +p'
mpzspzspppp

PS C:\Tools\Scripts\golfing> .\letter-replacement-challenge.ps1 'Hello world' '-wo -ld' '+Ea +th'
Hello Earth

PS C:\Tools\Scripts\golfing> .\letter-replacement-challenge.ps1 'Hello World' '-wo -ld' '+Ea +th'
Hello Worth

1

PHP, 106 ไบต์

for($s=($v=$argv)[$i=1];$i++<$n=$argc/2;)$s=str_replace(substr($v[$i],1),substr($v[$n+$i-1],1),$s);echo$s;

วิธีการตรงไปข้างหน้า php -r '<code> <arguments>ทำงานด้วย

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