ลบอักขระที่ดัชนีที่ระบุ


33

(แรงบันดาลใจอย่างมากจากองค์ประกอบของสตริงที่ดัชนีที่ระบุ )

กำหนดสตริงsและจำนวนเต็มnแทนดัชนีในsเอาท์พุทที่sมีตัวละครที่nตำแหน่ง -th ลบออก

0-indexing และ 1-indexing ได้รับอนุญาต

  • 0 การจัดทำดัชนี, จะไม่เป็นลบและน้อยกว่าความยาวของns
  • สำหรับ 1 การจัดทำดัชนีจะเป็นบวกและน้อยกว่าหรือเท่ากับความยาวของns

sจะประกอบด้วยอักขระ ASCII ที่พิมพ์ได้เท่านั้น ( \x20-\x7Eหรือ ผ่าน~)

อนุญาตอินพุต / เอาท์พุตที่สมเหตุสมผล ช่องโหว่มาตรฐานใช้

ทดสอบ (ดัชนี 0):

n s        output
0 "abcde"  "bcde"
1 "abcde"  "acde"
2 "a != b" "a = b"
3 "+-*/"   "+-*"
4 "1234.5" "12345"
3 "314151" "31451"

ทดสอบ (1 ดัชนี):

n s        output
1 "abcde"  "bcde"
2 "abcde"  "acde"
3 "a != b" "a = b"
4 "+-*/"   "+-*"
5 "1234.5" "12345"
4 "314151" "31451"

นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ


9
ไม่มีใครตอบว่า C # ชนะ ... สายเกินไป :(
TheLethalCoder

เราสามารถสมมติได้ว่าถ่านที่ idx นั้นปรากฏเพียงครั้งเดียวหรือไม่?
programmer5000

1
@ programmer5000 กรณีทดสอบล่าสุด3, ->314151 31451ฉันจะไม่คิด
TheLethalCoder

@ programmer5000 ไม่ดูกรณีทดสอบล่าสุด
ETHproductions

2
บางทีกระดานแต้มนำอาจมีประโยชน์ แต่ก็มีคำตอบให้ค้นหามากมายอยู่แล้ว
Mr. Xcoder

คำตอบ:



13

อลิซ , 13 12 ไบต์

ขอบคุณ Leo ที่ช่วยประหยัด 1 ไบต์

/oI\!e]&
@ q

ลองออนไลน์!

บรรทัดแรกของอินพุตคือสตริงบรรทัดที่สองคือดัชนีที่ใช้ 0

คำอธิบาย

/    Reflect to SE. Switch to Ordinal. While in Ordinal mode, the IP bounces
     diagonally up and down through the code.
I    Read the first line of input (the string).
!    Store the string on the tape, which writes the characters' code points to 
     consecutive cells (the tape is initialised to all -1s).
]    Move the tape head right. This moves it by an entire string, i.e. to the
     cell after the -1 that terminates the current string.
     The IP bounces off the bottom right corner and turns around.
]    Move the tape head right by another cell.
!    Store an implicit empty string on the tape, does nothing. It's actually
     important that we moved the tape head before this, because otherwise it
     would override the first input code point with a -1.
I    Read the second line of input (the index) as a string.
/    Reflect to W. Switch to Cardinal.
     The IP wraps around to the last column.
&]   Implicitly convert the first input to the integer value it contains
     (the index) and move the tape head that many cells to the right, i.e.
     onto the character we want to delete. Note that Ordinal and Cardinal mode
     have two independent tape heads on the same tape, so the Cardinal tape
     head is still on the first cell of the string input before we do this.
e!   Store a -1 in the cell we want to delete.
\    Reflect to SW. Switch to Ordinal.
q    Push the entire tape contents as a single string. This basically takes
     all cells which hold valid code points from left to right on the tape 
     and concatenates the corresponding characters into a single string. Since
     we wrote a -1 (which is not a valid code point) over the target character,
     this will simply push the entire input string without that character.
o    Output the result.
@    Terminate the program.


10

K (Kona), 1 ไบต์

_

ต้องสร้างความรัก การทำดัชนีแบบ 0 การใช้งาน:

k)"abcdef" _ 3
"abcef"

ให้ความหมายใหม่ทั้งหมดในการ 'ใช้เครื่องมือที่เหมาะสมสำหรับงาน'
MD XF

1
ฮา - คุณต้องการเห็นเครื่องมือที่เหมาะสมสำหรับงานหรือไม่ codegolf.stackexchange.com/a/121700/49493
Simon Major

ฉันได้ค้นพบวิธีการทำสิ่งนี้ด้วยโปรแกรมที่สั้นกว่านี้ น่าเสียดายที่มีที่ว่างไม่เพียงพอในกล่องความคิดเห็นนี้เพื่ออธิบาย ;-)
Mawg

8

Haskell , 28 24 ไบต์

-4 ไบต์ขอบคุณ Laikoni เวอร์ชันนี้มีการจัดทำดัชนี 1

s#n=take(n-1)s++drop n s

คำตอบเก่า:

f(s:t)0=t;f(s:t)n=s:f t(n-1)

ฟังก์ชันเรียกซ้ำง่าย ๆ ที่รับค่ามันคือ 0 ดัชนี

ครั้งแรกที่ฉันตีกอล์ฟดังนั้นอาจไม่ใช่วิธีที่ดีที่สุด โอ้ดี


2
ยินดีต้อนรับสู่ PPCG!
Martin Ender

1
นอกจากนี้คุณอาจจะสนใจในคอลเลกชันของเคล็ดลับสำหรับการเล่นกอล์ฟใน Haskell
Laikoni

7

Mathematica ขนาด 18 ไบต์

1 การจัดทำดัชนี

#2~StringDrop~{#}&

อินพุต

[1, "abcde"]

ขอบคุณ Martin Ender


4
ในความเห็นของฉัน "อนุญาตอินพุต / เอาท์พุตใด ๆ ที่สมเหตุสมผล" อนุญาตให้อินพุตถูกนำมาใช้["abcde", {1}]ซึ่งในกรณีนี้StringDropจะใช้กลอุบายเพียงอย่างเดียว คุณคิดอย่างไร? (คุณอาจต้องการที่จะพูดถึงอย่างชัดเจนว่ามันเป็น 1 การจัดทำดัชนีเช่นกัน.) ฉันมักจะมีความสุขที่จะเห็นคนโพสต์คำตอบ :) มาติกา
เกร็กมาร์ติน



5

ฟังก์ชั่น GCC c, 25

การจัดทำดัชนีแบบ 1

f(n,s){strcpy(s-1,s+=n);}

มีพฤติกรรมที่ไม่ได้กำหนดจำนวนมากที่นี่ดังนั้นระวังศาสนศาสตร์จรจัด :

  • strcpy()หน้าคนพูดว่าถ้าคัดลอกที่เกิดขึ้นระหว่างวัตถุที่ทับซ้อนพฤติกรรมจะไม่ได้กำหนด ที่นี่มีอย่างชัดเจนทับซ้อนของsrcและปลายทางสตริง แต่ดูเหมือนว่าจะทำงานดังนั้น glibc ทั้งระมัดระวังมากขึ้นหรือฉันโชคดี
  • คำตอบคือพึ่งพาความจริงที่ว่าเกิดขึ้นก่อนs+=n มาตรฐานไม่ให้การค้ำประกันดังกล่าวและในความเป็นจริงโทรออกนี้เป็นพฤติกรรมที่ไม่ได้กำหนด ดูเหมือนว่าจะทำงานได้ตามต้องการกับคอมไพเลอร์ gcc บน x86_64 Linuxs-1

ลองมันออนไลน์


2
ใน ABI แบบกองซ้อนเช่น x86 strcpyต้องมีการผลักดันอาร์กิวเมนต์จากซ้ายไปขวาตามลำดับซึ่งจะอธิบายพฤติกรรม แต่คุณบอกว่าคุณกำลังใช้x86_64ซึ่งใช้รีจิสเตอร์ ... บางทีคอมไพเลอร์ตัดสินใจตีกอล์ฟ รหัสที่สร้างขึ้นและตัดสินใจว่าการคำนวณ s + = n ก่อนคือ golfier!
Neil

5
ฉันชอบเมื่อคำตอบของ C ไป "นี่ไม่มีเหตุผลเป็นทางการที่จะทำงาน แต่มันก็ทำเช่นนั้นดังนั้น ... เอ๊ะ"
เควนติน

อึศักดิ์สิทธิ์ นี่จะระเบิดออกมาจากน้ำ ที่น่าประทับใจมาก!
MD XF

1
@Quentin เป็นหนึ่งในสิ่งที่สนุกเกี่ยวกับcode-golf - คุณได้รับอนุญาต - สนับสนุนแม้ - เขียนรหัสที่แย่ที่สุดและไม่ปลอดภัยซึ่งปกติจะเป็นการยิงที่ผิด ;-)
Digital Trauma

ฉันชอบที่จะทราบเหตุผลของการโหวต ...
Digital Trauma

4

MATL , 3 ไบต์

&)&

ใช้การจัดทำดัชนีแบบอิง 1

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

&    % Specify secondary default number of inputs/outputs for next function
)    % Implicitly input string and number. Index: with & it pushes the char
     % defined by the index and the rest of the string
&    % Specify secondary default number of inputs/outputs for next function
     % Implicitly display (XD): with & it only displays the top of the stack

ในเวอร์ชันที่ปรับเปลี่ยนพร้อมกับกรณีทดสอบทั้งหมดรหัสจะอยู่ในลูปไม่สิ้นสุด`...Tจนกว่าจะไม่พบอินพุต ในตอนท้ายของการวนซ้ำแต่ละครั้งฟังก์ชันการแสดงผล ( XD) จะถูกเรียกอย่างชัดเจนและสแต็กจะถูกล้าง ( x) เพื่อเตรียมพร้อมสำหรับการทำซ้ำครั้งถัดไป


ฉันชอบแนวคิดของตัวดัดแปลงคำสั่งทั่วไปพวกเขาอาจมีประโยชน์ในภาษากอล์ฟอื่น ๆ
ETHproductions

2
@ETHproductions ถ้าคุณต้องการชื่อที่ผมเรียกพวกเขาmeta-ฟังก์ชั่นที่พวกเขาปรับเปลี่ยนฟังก์ชั่น
หลุยส์ Mendo

@ LuisMendo ฉันคิดว่าชื่ออย่างเป็นทางการจะเป็นตัวดำเนินการตัวดำเนินการทางคณิตศาสตร์ la (หรือฟังก์ชันลำดับสูงกว่า)
Mego

4

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

jDk@"|x

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

มันคาดว่าสองบรรทัด; หนึ่งที่มีสตริงและหนึ่งที่มีจำนวน

  1. ไปที่บรรทัดที่สองคัดลอกหมายเลขลงทะเบียน
  2. ไปที่บรรทัดแรกจากนั้นไปที่คอลัมน์ในการลงทะเบียนด้วย @ "|
  3. ลบอักขระใต้เคอร์เซอร์

ทางออกที่สนุกอีกอย่างที่เกือบเหมือนกันคือjD@"gox
DJMcMayhem

การตั้งค่าสถานะ -> การปิด -> ซ้ำกันของcodegolf.stackexchange.com/a/121581/61563 : การล้อเล่น P แต่มีความคล้ายคลึงกันอย่างน่าทึ่ง
MD XF

พวกเขาเป็น! มีรางวัลอะไรบ้างสำหรับการลงถึง 7 ตัวอักษรก่อน? :-P
jmriego

4

Java 8, 39 ไบต์

s->n->s.substring(0,n)+s.substring(n+1)

ลองที่นี่

Java 7, 67 ไบต์

String c(int n,String s){return s.substring(0,n)+s.substring(n+1);}

ลองที่นี่


สมมติว่าใช้งานได้ "ในตัว" ขนาด 46 ไบต์s->n->new StringBuilder(s).deleteCharAt(n)+"";แม้ว่าจะยาวกว่าก็ตาม
TheLethalCoder

@TheLethalCoder ใช้งานได้จริง แต่แน่นอนอีกต่อไป โอ้และมักจะใช้StringBufferแทนStringBuildercodegolf ;)
Kevin Cruijssen

เคล็ดลับดีอาในบัฟเฟอร์ฉันใช้มันในคำตอบของฉัน :)
TheLethalCoder


4

Haskellขนาด 15 ไบต์

สิ่งนี้ต้องการ GHC ที่ออกใหม่เมื่อเร็ว ๆ นี้ 8.4.1 (หรือสูงกว่า) ตอนนี้ <>ในฐานะที่เป็นฟังก์ชั่นในกลุ่ม Semig อยู่ในโหมโรง มันมีประโยชน์อย่างยิ่งในฟังก์ชั่น Semigroup

take<>drop.succ

ลองออนไลน์!
เนื่องจาก tio ใช้ GHC รุ่นเก่ากว่าฉันจึงนำเข้า<>ในส่วนหัว


4

R, 40 ไบต์

เพียงไปเพื่อแสดงความหลากหลายของวิธีการซึ่งไม่มีขนาดกะทัดรัดโดยเฉพาะอย่างยิ่งคุณสามารถซอกับสตริงในอาร์

function(s,n)intToUtf8(utf8ToInt(s)[-n])





3

JS (ES6), 41 32 31 ไบต์

y=>i=>y.slice(0,i++)+y.slice(i)

จากนี้นี้รับอินพุตผ่านการแก้ปัญหาอันดับแรกคือสตริงที่สองคือดัชนี

-9 ขอบคุณ @JohanKarlsson

-1 ต้องขอบคุณ @ETHproductions


3

เยลลี่ 3 ไบต์

Ṭœp

โปรแกรมเต็มรูปแบบรับดัชนี (ตาม 1) และสตริง (ตามลำดับ) และพิมพ์ผลลัพธ์

ในฐานะที่เป็นฟังก์ชัน dyadic จะส่งคืนรายการของสองส่วน

ในความเป็นจริงดัชนีอาจเป็นรายการดัชนีnซึ่งในกรณีนี้จะส่งคืนรายการของชิ้นส่วนn-1

ลองออนไลน์! หรือดูชุดทดสอบชุดทดสอบ

อย่างไร?

Ṭœp - Main link: number i, string s                   e.g. "fish 'n chips", 6
Ṭ   - untruth - get a list with 1s at the indexes of i      000001 <-- i.e. [0,0,0,0,0,1]
 œp - partition s at truthy indexes without borders       ["fish ","n chips"]
    - implicit print                                        fish n chips

เป็นตัวอย่างของการใช้หลายดัชนี:

      "fish and chips", [6,8]
Ṭ      00000101 <- i.e. [0,0,0,0,0,1,0,1]
 œp  ["fish ","n"," chips"] 
       fish n chips

3

เป็นกลุ่ม10 7

DgJ@"|x

รับอินพุต 1 ดัชนีในรูปแบบต่อไปนี้:

2
abcde
D      delete the number on the first line into register "
gJ     remove the newline while preserving whitespace on line 2
@"     run the " register as a macro - input is used as a count for...
|      the "go to nth column" command
x      delete the character at the cursor

ขอบคุณ@DJMcMayhem เป็นเวลา 3 ไบต์!


3

Java 8, 45 41 ไบต์

s->n->new StringBuffer(s).deleteCharAt(n)

บันทึกแล้ว 4 ไบต์ขอบคุณ @ OlivierGrégoire

คำตอบกอล์ฟรหัสแรกของฉันในสิ่งอื่นที่ไม่ใช่ C # แม้ว่ามันจะไม่สั้นที่สุดสำหรับ Java


1
1. คุณไม่ต้องการรอบชิงชนะเลิศเป็น;แลมบ์ดา (-1 ไบต์) 2. Stringในสายตาของฉันคุณจะได้ไม่ต้องกลับมา ฉันคิดว่าการคืนค่าที่StringBufferไม่มีนั้น+""จะใช้ได้อย่างสมบูรณ์ (-3 ไบต์) ตัวอย่าง? BigIntegerเป็นตัวแทนของไม่ จำกัดintในกรณีนี้StringBuffer/ StringBuilderเป็นตัวแทนของStrings ไม่แน่นอน
Olivier Grégoire

@ OlivierGrégoireขอบคุณ :) ฉันไม่เคยใช้ Java มาก่อนดังนั้นจึงยินดีรับการปรับปรุงทั้งหมด
TheLethalCoder





2

PHP, 41 ไบต์, 35 ไบต์ไม่รวม? php

<?php $argv[1][$argv[2]]='';echo$argv[1];

0 การจัดทำดัชนี

TIO


อันที่จริงฉันประหลาดใจจริงๆงานนี้; เป็น[$argv[2]]ดัชนีโดยปริยายสร้างช่วง? นอกจากนี้ IIRC คุณยังสามารถออก<?php ไปได้เนื่องจากล่าม PHP มีโหมดที่ไม่ต้องการและเพราะปกติเราไม่ลงโทษสำหรับการบ่งชี้ประเภทนั้นในไฟล์ของภาษาที่เป็น

@ ais523 โดยพื้นฐานแล้วใช่ จากเอกสาร: "ตัวละครในสายอักขระสามารถเข้าถึงและแก้ไขได้โดยการระบุออฟเซ็ตแบบ zero-based ของตัวอักษรที่ต้องการหลังจากสตริงที่ใช้วงเล็บเหลี่ยมอาร์เรย์เช่นเดียวกับใน $ str [42] คิดว่าสตริงเป็นอาร์เรย์ของอักขระสำหรับสิ่งนี้ วัตถุประสงค์." php.net/manual/en/language.types.string.php
ME


2

R, 48 47 ไบต์

(บันทึก 1 ไบต์ผ่านการใช้el()ต้องขอบคุณ Giuseppe)

function(s,n)cat(el(strsplit(s,""))[-n],sep="")

แยกสตริงออกเป็นอักขระแต่ละตัวแล้วลบ nth แล้วเชื่อมต่ออีกครั้ง

อาจจะมีวิธีแก้ปัญหาที่ดีกว่า strsplit () ค่อนข้างเทอะทะเพราะจะส่งคืนรายการ


จะไม่ทำงานกับ TIO: pryr::f([function body])บันทึกสองสามไบต์และใช้el(strsplit(s,""))บันทึกเป็นไบต์ แต่ก็ใช้ไม่ได้กับ TIO ด้วยเหตุผลบางประการ
Giuseppe

@iuseppe ขอบคุณ! ฉันจะรู้สึกสกปรกนิดหน่อยเมื่อใช้ pryr :: f เพราะแน่นอนว่ามันควรจะนำหน้าด้วยinstall.packages("pryr")แต่บางทีนั่นอาจเป็นเพราะฉันมีค่ามากเกินไป!
user2390246

function(s,n)intToUtf8(utf8ToInt(s)[-n])สำหรับ 40 ไบต์
J.Doe

@ J.Doe จุดที่ดี! นั่นเป็นวิธีที่แตกต่างกันมากดังนั้นคุณควรโพสต์มันเป็นคำตอบของคุณเอง
2390246

ส่วนย่อยอีก 47 function(s,n)sub(sub(0,n,"(.{0})."),"\\1",s)สำหรับ 44
J.Doe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.