สลับลบและทำซ้ำ


24

บทนำ

ลองสังเกตสตริงต่อไปนี้:

ABCDEFGHIJKLMNOP

หากเราสลับส่วนท้ายของสตริงซึ่งคือ:

ABCDEFGHIJKLMNOP
^^            ^^

เราได้ผลลัพธ์ดังนี้:

BACDEFGHIJKLMNPO

หลังจากนั้นเราจะลบสิ้นสุดของสตริงซึ่งในกรณีนี้และB Oผลลัพธ์คือ:

ACDEFGHIJKLMNP

หากเราทำซ้ำขั้นตอนนี้เราจะได้รับรายการต่อไปนี้:

N     Result

2     ADEFGHIJKLMP
3     AEFGHIJKLP
4     AFGHIJKP
5     AGHIJP
6     AHIP
7     AP

คุณจะเห็นว่าสำหรับN = 5AGHIJPผลที่ได้คือ ที่N = 7ความยาวของสตริงจะน้อยกว่า3ดังนั้น N> 7 ถือว่าไม่ถูกต้องในกรณีนี้

งาน

รับสตริงS ที่มีความยาวอย่างน้อย 4 และจำนวนการทำซ้ำN > 0 ให้ผลลัพธ์สุดท้าย คุณสามารถสรุปได้ว่าไม่มีอยู่เสมอที่ถูกต้อง

กรณีทดสอบ

Input                               >  Output

N = 3, S = ABCDEFGHIJKLMNOP         >  AEFGHIJKLP
N = 1, S = Hello                    >  Hlo
N = 2, S = 123321                   >  11

นี่คือดังนั้นการส่งที่มีจำนวนไบต์น้อยที่สุดจะชนะ! เพื่อความง่ายคุณสามารถสันนิษฐานได้ว่าสตริงจะมีตัวอักษรและตัวเลขเท่านั้น


คำถาม: การที่จะรับ N เข้าร่วมกับสิ่งที่เหมือน'ตัวละครนับเป็นเรื่องปกติหรือไม่? ตัวอย่างเช่น: ''123321?
daavko


@Adnan สามารถใช้รูปแบบ Unary ได้Nแต่สามารถเป็นสตริงด้วยเครื่องหมายคำพูดได้หรือไม่ ฉันหมายถึงการN=3รับ'111'(ตรงข้ามกับ111)
Luis Mendo

@LuisMendo ใช่คุณสามารถใช้มันได้
Adnan

ดูเหมือนว่าฉันจะข้าม 1 และลบ N - นี้อนุญาตให้เป็นคำตอบหรือรหัสจำเป็นต้องสลับลบและทำซ้ำ?
Alex Carlsen

คำตอบ:


5

MATL , 8 9 12 13ไบต์

th"P[]2(

อินพุตคือ: อันดับแรกNเป็นสตริง unary พร้อมเครื่องหมายคำพูด (อนุญาตโดยการท้าทาย); ที่สองSเป็นสตริงที่มีเครื่องหมายคำพูด (อนุญาตให้ใช้เครื่องหมายคำพูดในสตริงโดยค่าเริ่มต้น); คั่นด้วย linebreak

สิ่งนี้ทำงานได้โดยการพลิกสตริงลบองค์ประกอบที่สองและทำซ้ำรวมเป็น2*Nครั้ง

ลองออนไลน์!

th       % implicitly take first input (N) as a unary string. Concatenate horizontally
         % with itself: gives a string of 2*N ones
"        % for each (i.e., repeat 2*N times)
  P      %   flip string. Take S implicitly as input the first time
  []     %   empty array (used as new contents)
  2      %   2 (used as index)
  (      %   assign [] to position 2 of string; that is, remove second element
         % implicitly end for each
         % implicitly display

คำอธิบาย? : P
Addison Crump

@VoteToClose แน่นอน :-) ฉันต้องวิ่ง ฉันเพิ่งเพิ่มเข้ามา
Luis Mendo

18

เรติน่า44 44ไบต์

ข้ามออก 44 ยังคงเป็นปกติ 44 :(

+`'(\w).(.*).\B
$1$2

ถือว่าอินพุตในรูปแบบต่อไปนี้ (ในตัวอักษร unary - การนับ:) ':
{number of repeats}{string}
ตัวอย่าง: '''''''ABCDEFGHIJKLMNOP
ไม่มีช่องว่างระหว่างจำนวนการซ้ำและสตริง

ขอบคุณ@ MartinBüttnerสำหรับการตัดออก 24 ไบต์!

ลองออนไลน์!


7
ที่เกี่ยวข้อง
Addison Crump

@ MartinBüttner Aha! นี่คือแผนแม่บททางจิตวิทยาของคุณ: p
Adnan

9
@Adnan ¯ \ _ (ツ) _ / ¯
Martin Ender

ข้ามไป 44 ดูเหมือนกับ 11 คน ...
CocoaBean

11

Python 2, 31 ไบต์

lambda s,n:s[0]+s[n+1:~n]+s[-1]

ฉันคิดว่ามันใช้ได้เหรอ


ใช่ดูเหมือนว่าจะทำงาน :)
Adnan

เป็นงูหลามที่ใช้ได้จริง 3
Chiel ten Brinke

9

Mathematica, 29 ไบต์

คำตอบแรกของฉัน!

#~Delete~{{2},{-2}}&~Nest~##&

ปมของ Mathematica bracketless! อินพุตฟังก์ชั่นเป็นรายการ (ของตัวละครหรืออะไรก็ตาม) และตัวเลข


1
ยินดีต้อนรับสู่ PPCG! : D คำตอบแรกที่ดี
Addison Crump

9

เขาวงกต 40 ไบต์

<
,,}:?
.
;("   {(={}{".
,",;=};} }) "{@

อินพุตNตามด้วยสตริงคั่นด้วยอักขระที่ไม่ใช่ตัวเลขใด ๆ

ลองออนไลน์!

สิ่งนี้เขียนขึ้นโดยความร่วมมือกับ Sp3000 (ซึ่งหมายความว่าฉันไม่ต้องกังวลกับการหาอัลกอริทึมดังนั้นเขาจึงเริ่มทำงานกับมันขึ้นมาด้วยวิธีแก้ปัญหา 118 ไบต์ แต่ไม่สามารถตีกอล์ฟได้ดังนั้นฉันจึงตีกอล์ฟ .. ใช่สำหรับการทำงานเป็นทีม)

คำอธิบาย

ไพรเมอร์ปกติของ Sp (ตามปกติแก้ไขเล็กน้อย):

  • Labyrinth เป็นภาษา 2D แบบกองซ้อนที่มีสองกองหลักและเสริม แทบทุกอย่างเกิดขึ้นบนสแต็กหลัก แต่คุณสามารถเลื่อนค่าไปที่อีกอันหนึ่งได้เช่นเพื่อย้อนกลับหรือบันทึกในภายหลัง
  • สแต็กไม่มีก้นลึกและเต็มไปด้วยเลขศูนย์ดังนั้นการ popping จากสแต็กเปล่าจึงไม่ใช่ข้อผิดพลาด
  • การดำเนินการเริ่มต้นจากอักขระที่ถูกต้องตัวแรก ที่ทางแยกแต่ละแห่งที่มีเส้นทางที่เป็นไปได้สองทางขึ้นไปสำหรับตัวชี้คำสั่ง (IP) ที่จะใช้ด้านบนของสแต็กจะถูกตรวจสอบเพื่อกำหนดตำแหน่งที่จะไปต่อไป ลบคือเลี้ยวซ้ายศูนย์จะไปข้างหน้าและบวกจะเลี้ยวขวา ขณะที่สิ่งนี้ถูกสร้างขึ้นเพื่อให้โค้ดดูเหมือนข้อความที่คดเคี้ยวและคดเคี้ยว แต่ก็ไม่มีอะไรหยุดคุณจากการสร้าง "ห้อง" ซึ่งมีการตรวจสอบเงื่อนไขเหล่านี้ในทุกเซลล์ สิ่งเหล่านี้สามารถสร้างพฤติกรรมที่คาดเดาไม่ได้ แต่ยอดเยี่ยมสำหรับการเล่นกอล์ฟ
  • ซอร์สโค้ด (และเลย์เอาต์ของเขาวงกต) สามารถแก้ไขได้ที่รันไทม์โดยใช้<>^vการเลื่อนแถวหรือคอลัมน์หรือกริดแบบวนรอบ
  • " ไม่มีใครรู้

ไปเลย.

รหัสเริ่มต้นขึ้นใน<ซึ่งเป็นเคล็ดลับการเล่นกอล์ฟที่ฉันได้ใช้สองสามครั้งเมื่อเริ่มต้นด้วยรหัสเชิงเส้นยาว ๆ มันเลื่อนแถวแรกไปทางซ้ายเป็นวงกลมด้วย IP บนดังนั้นแหล่งที่มาจึงมีลักษณะดังนี้:

              <
,,}:?
.
;("   {(={}{".
,",;=};} }) "{@

แต่ตอนนี้ IP ไม่สามารถเคลื่อนย้ายไปได้ทุกที่ดังนั้นจึงดำเนินการ<อีกครั้ง สิ่งนี้จะดำเนินต่อไปจนกว่าเราจะถึงสถานะนี้:

    <
,,}:?
.
;("   {(={}{".
,",;=};} }) "{@

ณ จุดนี้ IP ?สามารถออกจากเซลล์และเริ่มดำเนินการบรรทัดที่สองเริ่มต้นจาก ดังนั้นนี่คือรหัสเชิงเส้นที่แบ่งย่อย:

?   # Read the first integer on STDIN, i.e. N.
:}  # Duplicate it and move one copy over to the auxiliary stack.
,   # Read the separator character.
,.  # Read the first character of the input string and directly print it.

ตอนนี้ IP เข้าสู่ห้อง 3x2 ซึ่งจริงๆแล้วเป็นการบีบอัดสองวง (ซ้อนทับ) 2x2 วนตามเข็มนาฬิกา การวนซ้ำครั้งแรกจะอ่านและทิ้งN-1อักขระจาก STDIN

;   # Discard the top of the stack. On the first iteration, this is the
    # separator we've already read. On subsequent iterations this will be
    # one of the N-1 characters from the input string.
(   # Decrement N. If this hits zero, we leave the loop, otherwise we continue.
,   # Read the next character from STDIN to be discarded.

ตอนนี้เราเข้าสู่วงที่สองซึ่งอ่านส่วนที่เหลือของสายป้อน เราสามารถตรวจพบ EOF เพราะ,จะกลับมา-1ในกรณีนั้นทำให้ IP เลี้ยวไปทางซ้าย

,   # Read a character. Exit the loop if EOF.
(   # Decrement it.

การลดลงนั้นไม่มีประโยชน์จริง ๆ แต่เราสามารถยกเลิกได้ฟรีในภายหลังและที่นี่ช่วยให้เราซ้อนทับสองลูป

หากเรารับ5 ABCDEFGHIJKLMNOPอินพุตเป็นตัวอย่างสแต็กจะมีลักษณะดังนี้:

Main [ ... 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' -1  |  5 ... ] Auxiliary

โปรดทราบว่าสิ่งเหล่านี้สอดคล้องกับอักขระอินพุตFGHIJKLMNOP(เพราะเราทำให้มันลดลง) และเราไม่ต้องการที่จะพิมพ์ตัวแรกของN-1ตัวอักษรเหล่านั้น (เรามีเพียงอักขระที่ถูกละทิ้งแต่ต้องการข้ามN)

ขณะนี้มีบิตเชิงเส้นสั้น ๆ ที่เตรียมสแต็กสำหรับลูปถัดไป:

;   # Discard the -1.
=   # Swap the tops of the stacks, i.e. N with the last character. 
    # By putting the last character on the auxiliary stack, we ensure that
    # it doesn't get discarded in the next loop.
}   # Move N over to the auxiliary stack as well.

กองตอนนี้ดูเหมือนว่า:

Main [ ... 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N'  |  5 'O' ... ] Auxiliary

เราเข้าไปอีกห่วง 2x2 ตามเข็มนาฬิกา ซึ่งจะละทิ้งNอักขระตัวบนจากสแต็กหลัก:

;   # Discard the top of the main stack.
{   # Pull N over from the auxiliary stack.
(   # Decrement it. It it's 0 we leave the loop.
}   # Push N back to the auxiliary stack.

เมื่อเราออกจากการวนซ้ำ=แลกเปลี่ยนนั้น0และตัวอักษรสุดท้ายของสายป้อนอีกครั้ง ตอนนี้กองหน้าจะเป็นแบบนี้:

Main [ ... 'E' 'F' 'G' 'H' 'I' 'O'  |  ... ] Auxiliary

เราต้องการที่จะพิมพ์เนื้อหาของกองหลัก (ยกเว้นองค์ประกอบด้านล่างและเพิ่มขึ้นทีละ 1) จากทางด้านซ้าย นั่นหมายความว่าเราต้องนำมันไปที่สแต็คเสริม นั่นคือสิ่งที่ลูป 2x2 (ตามเข็มนาฬิกา) ถัดไปทำ:

{   # Pull an element over from the auxiliary stack. This is necessary so we
    # have a 0 on top of the stack when entering the loop, to prevent the IP
    # from turning right immediately.
}   # Move the top of the main stack back to the auxiliary stack. If this was the
    # bottom of the stack, exit the loop.
)   # Increment the current character.
}   # Move it over to the auxiliary stack.

สแต็คตอนนี้:

Main [ ...  |  'F' 'G' 'H' 'I' 'J' 'P] ... ] Auxiliary

เราย้ายครั้งแรกของเหล่านั้น (คนที่เราไม่ต้องการที่จะพิมพ์) {กลับไปที่กองหลัก และตอนนี้เราเข้าสู่วง 2x2 สุดท้าย ( ทวนเข็มนาฬิกา ) ซึ่งพิมพ์ส่วนที่เหลือ:

{   # Pull another character over from the auxiliary stack. Exit the loop
    # if that's the zero at the bottom of the stack.
.   # Print the character.

@ในที่สุดเรายุติการโปรแกรมด้วย


6

JavaScript (ES6), 39 ไบต์

(s,n)=>s[0]+s.slice(++n,-n)+s.slice(-1)

ปรากฎว่าฉันเพิ่งสร้างใหม่คำตอบของ @ Sp3000


6

เยลลี่ขนาด 8 ไบต์

Ḣ1¦UðḤ}¡

ลองออนไลน์!

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

Ḣ1¦UðḤ}¡  Main link. Left input: S (string). Right input: N (deletions)

Ḣ         Pop the first element of S.
          This return the element and modifies S.
 1¦       Apply the result to the first index.
          This replaces the first character of the popped S with the popped char.
   U      Upend/reverse the resulting string.
    ð     Convert the preceding chain into a (dyadic) link.
     Ḥ}   Apply double to the right input.
          This yields 2N.
       ¡  Repeat the link 2N times.

5

เยลลี่ 10 ไบต์

Ḣ;ṪjḊṖ$Ɠ¡F

การป้อนข้อมูลจำนวนผ่าน STDIN และสตริงผ่าน args ขอบคุณ @Dennis สำหรับคำแนะนำมากมาย / ช่วยให้เรื่องนี้ทำงาน (Jelly ยังคงหลบเลี่ยงฉัน)

ลองออนไลน์!

Ḣ;Ṫ               Pop first and last chars of string and concatenate
   j              Join by...
       Ɠ¡           Execute n times...
    ḊṖ$               Drop first, drop last of string ($ combines the two monadically)
         F        Flatten to filter out empty lists, since Jelly's j is weird

คำถามที่ซื่อสัตย์ 10 ไบต์ทำงานอย่างไร ไม่ใช่สิ่งนี้ใน UTF-8 (และไม่ควรมีอย่างน้อย 16 ไบต์เพราะḢṪḊṖƓ¡ทั้งหมดใช้มากกว่า 1 ไบต์) หรือคุณใช้ตารางรหัสอักขระบางชนิดเพื่อให้สามารถอ่านได้
AutomatedChaos

1
@AutomatedChaos ส่วนหลัง :) (คลิกที่ลิงก์ที่มีคำว่า "bytes" อยู่ในส่วนหัว) เยลลี่ใช้หน้ารหัสที่กำหนดเองคล้ายกับภาษาเช่น APL
Sp3000


4

Vitsy, 12 9 (รหัส) + 1 (ขึ้นบรรทัดใหม่สำหรับการประกาศฟังก์ชัน) = 10 ไบต์

\ O /

ต้องการอินพุตในสแต็กเป็นสตริงตามด้วยหมายเลข

2*\[vXvr]
2*         Multiply by 2.
  \[    ]  Do the stuff in the brackets that many times. (input num * 2)
    v      Take the top item off the stack and save it as a local variable.
     X     Remove the top item of the stack.
      v    Push the temporary variable back onto the stack.
       r   Reverse the stack.

ซึ่งคุณสามารถโทรด้วย:

'String' r <number> 1m Z
2*\[vXvr]

นี่คือฟังก์ชันที่ปล่อยสตริงผลลัพธ์ไว้บนสแต็ก ฉันได้จัดให้เป็นโปรแกรมในลิงค์ TryItOnline

TryItOnline!


@Adnan Fixed - นั่นทำให้ฉันอยู่ใกล้กับ Pyth D:
Addison Crump

แต่ยังคงมีหนึ่งไบต์ข้างหน้า: D
Adnan

@Adnan ฉันจะไปด้วยการบอกว่ามันคาดว่ารายการในกองมากกว่าใส่? หรือว่าเป็น no-no?
Addison Crump

ผมไม่แน่ใจว่าสิ่งที่เป็นนโยบายสำหรับว่า แต่ถ้าคุณสามารถหาโพสต์เมตาเกี่ยวกับรายการที่อยู่ในกองก็ปรับ :)
Adnan

@Adnan มีเมตาโพสต์เกี่ยวกับรายการที่อยู่ในเทปสำหรับภาษาต่างๆเช่น brainfuck แล้ว ฉันจะถามเกี่ยวกับมันในเมตาดาต้า (เพราะจริง ๆ แล้วมันสำคัญมากสำหรับ Vitsy: D)
Addison Crump

4

Python 2, 49 48 ไบต์

g=lambda s,n:n and g(s[0]+s[2:-2]+s[-1],n-1)or s

ลองที่นี่ด้วย testcase!

โซลูชันแบบเรียกซ้ำง่าย ๆ เอาที่สองและองค์ประกอบที่สองที่ผ่านมาจากสายป้อนและเรียกตัวเองกับเรื่องนี้และจนถึงn-1n=0

แก้ไข:รู้สึกโง่นะมองไปที่การแก้ปัญหาหลามอื่นเดาว่าฉันชอบท่องเที่ยวซ้ำมากเกินไป ...


4

C, 96 ไบต์

i;main(c,v,p)char**v,*p;{i=atoi(v[2])+1;c=strlen(p=v[1]);printf("%c%.*s%s",*p,c-2*i,p+i,p+c-1);}

Ungolfed

i; /* Param 2, the number of chars to remove */

main(c,v,p)char**v,*p;
{
    i=atoi(v[2])+1; /* convert param 2 to integer */
    c=strlen(p=v[1]); /* Length of the input */
    printf("%c%.*s%s",*p, /* Print the first char... */
        c-2*i, /* a number of characters equal to the length minus twice the input... */
        p+i, /* skip the "removed" chars... */
        p+c-1); /* Print the last character of the string */
}

3

Ruby, 29 ไบต์

->s,n{s[0]+s[n+1...~n]+s[-1]}

ตรงไปตรงมามาก

~เคล็ดลับที่ถูกขโมยมาจากคำตอบของ Sps[n+1..-2-n]ซึ่งจะช่วยประหยัดไบต์มากกว่า (ใช้งานได้เพราะ~nอยู่-1-nในสองส่วนและจากนั้น...เป็นช่วงพิเศษ)


3

Perl, 36 32 + 1 = 33 ไบต์

for$i(1..<>){s;\B.(.+).(.);$1$2;}

ต้องการ-pแฟล็กและรับอินพุตสองบรรทัดด้วยจำนวนการวนซ้ำที่ส่วนท้าย:

$ perl -pe'for$i(1..<>){s;\B.(.+).(.);$1$2;}' <<< $'ABCDEFGHIJKLMNOP\n4'
AFGHIJKP

Ungolfed?

for $i ( 1..<> ) {
  s;
  \B.(.+).(.);$1$2;x
}

3

CJam, 12 ไบต์

q~{VW@)t(t}*

ลองออนไลน์!

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

q~            Read and evaluate all input. This pushes S (string) and N (integer).
  {       }*  Do the following N times:
   VW           Push 0 and -1.
     @          Rotate S on top of them.
      )         Pop the last character of S.
       t        Set the item at index -1 to that character.
        (       Pop the first character of S.
         t      Set the item at index 0 to that character.

3

อ็อกเทฟ 28 ไบต์

@(S,N)S([1,N+2:end-N-1,end])

จัดทำดัชนีสตริงโดยละเว้นS(2:N+1)และS(end-N:end-1)และ

เรียกใช้ตัวอย่างในideone


3

สนิม 135 ไบต์

นั่นคือความยาวที่แย่มาก

fn f(s:&str,n:usize)->String{let s=s.as_bytes();s[..1].iter().chain(&s[n+1..s.len()-n-1]).chain(s.last()).map(|d|*d as char).collect()}

พริตตี้ที่พิมพ์:

fn f(s: &str, n: usize) -> String {
    let s = s.as_bytes();
    s[..1].iter()
          .chain(&s[n+1..s.len()-n-1])
          .chain(s.last())
          .map(|d| *d as char)
          .collect()
}

คุณสามารถรับได้ถึง104ไบต์ถ้าเราอนุญาตให้ทดสอบแทนสตริงที่เหมาะสม

fn f(s:&[u8],n:usize)->Vec<u8>{let mut r=vec![s[0]];r.extend(&s[n+1..s.len()-n-1]);r.extend(s.last());r}

พริตตี้ที่พิมพ์:

fn f(s: &[u8], n: usize) -> Vec<u8> {
    let mut r = vec![s[0]];
    r.extend(&s[n+1..s.len()-n-1]);
    r.extend(s.last());
    r
 }

อยากรู้อยากเห็นถ้าใครสามารถทำได้ดีกว่า


3

mSL - 137 ไบต์

c {
%l = $len($1)
return $mid($+($mid($1,2,1),$left($1,1),$right($left($1,-2),-2),$right($1,1),$mid($1,$calc(%l -1),1)),2,$calc(%l -2))
}

คำอธิบาย:

%l = $len($1) จะได้รับความยาวของสายป้อนและบันทึกไว้ในตัวแปรที่เรียกว่า l

$right(<input>,<length>) และ $left(<input>,<length>สามารถใช้เพื่อส่งคืนส่วนซ้ายหรือขวาส่วนใหญ่ของสตริงต้นฉบับได้อย่างน่านับถือ $ left จะแสดงข้อความเริ่มต้นจากด้านซ้ายสุดเสมอในขณะที่ $ right จะแสดงข้อความที่เริ่มต้นจากด้านขวาเสมอ หากความยาวที่ระบุเป็นตัวเลขติดลบ $ left และ $ right ส่งคืนข้อความทั้งหมดลบด้วยอักขระจำนวนมากจากด้านที่เกี่ยวข้อง

$mid(<string>,<start>,[length])ถูกใช้เพื่อรับสายอักขระย่อยจากตรงกลางของสายอักขระ Start คือจุดเริ่มต้นของสตริงย่อยจากด้านซ้าย ค่าลบหมายถึงการเริ่มต้นจากด้านขวา ในทั้งสองกรณีสามารถระบุความยาวเสริมได้ ความยาวเชิงลบสามารถใช้เพื่อลบอักขระจำนวนมากออกจากจุดสิ้นสุด ดังนั้นฉันจึงใช้มันเพื่อดึงอักขระที่สองและอักขระตัวสุดท้ายที่สองโดยใช้ความยาวของสตริงป้อนข้อมูล

$calc(<input>) ใช้ในการคำนวณทางคณิตศาสตร์


1
ยินดีต้อนรับสู่ PPCG! โดยทั่วไปแล้วควรเพิ่มคำอธิบายประกอบหรือคำอธิบายรหัสของคุณ
Zach Gates

@ZachGates ขอบคุณ! จะจดจำสิ่งนี้ในครั้งต่อไป!
Denny

2

ในฐานะของภาษาที่ยังไม่มีชื่อ (noncompetitive ใหม่), 9 ไบต์

hD_RQ:Q|J

คุณสามารถค้นหาซอร์สโค้ดได้ที่นี่ภาษาไม่เสถียรอย่างสมบูรณ์ (การทดสอบครั้งแรกสำหรับมัน) ดังนั้นอย่าคาดหวังว่ามันจะทำงานได้ในอนาคต (ส่ง 7)

นี่คือภาษาที่ใช้สแต็กพร้อมกับฟังก์ชันที่เพิ่มและลบวัตถุออกจากสแต็ก ขณะนี้มีคำสั่งการจัดการสแต็ก 2 แบบ: D(ทำซ้ำด้านบนของสแต็ก N ครั้ง) และR(หมุนรายการด้านบน N บนสแต็ก)

คำอธิบาย:

          - autoassign Q = eval_or_not(input()) (string)
h         - imp_eval_input()+1
 D        - duplicate(^)
  _       - neg(^)
   R      - rotate(^)
    Q:    - Q[^:^]
      Q|  - Q[0], Q[-1]
        J - "".join(all)

2

CJam, 14 ไบต์

l(o)\l~_W*@<>o

ทดสอบที่นี่

คำอธิบาย

l   e# Read the input string.
(o  e# Pull off the first character and print it.
)\  e# Pull off the last character and swap with the rest of the string.
l~  e# Read the second line of the input and evaluate it (N).
_   e# Duplicate.
W*  e# Multiply by -1 to get -N.
@   e# Pull up the string.
<   e# Discard the last N characters.
>   e# Discard the first N characters.
o   e# Output what's left. The last character of the input is now still on the
    e# stack and is automatically printed at the end of the program.

2

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

o0lxehx <ESC>"ay0ddA@a<ESC>B"bdWx@b

การป้อนข้อมูลคาดว่าจะอยู่ในรูปแบบSTRING Nของบรรทัดแรกโดยไม่มีอักขระอื่น

คำอธิบาย:

#Write a macro to do one round of the swap and delete and save to register a
o0lxehx <ESC>"ay0dd

#Append register a to N and save in register B so it will run @a N times.
A@a<ESC>B"bdWx

# Actually run the macro
@b

2

Brainfuck, 130 ไบต์

รายการ PPCG แรกของฉัน!

เห็นได้ชัดว่าจะไม่ชนะ แต่เฮ้

รับอินพุตเช่น: 4ABCDEFGHIJKL โดยมีอักขระตัวแรกเป็น N

,>+++++++[<------->-]<+>>+[>,]<[<]>-<<[>>>[<+>-]>[<+>-]<<[>>+<<-]>[>]<[>+<-]<[>+<-]>>[<<+>>-]<[-]<[<]>[-]>[[<+>-]>]<<[<]<<-]>>>[.>]

ทดสอบบนนี้เว็บไซต์ที่ยอดเยี่ยม

จำกัด อยู่ที่ N น้อยกว่าหรือเท่ากับ 9 เพราะตัวเลขสองหลักเป็นความเจ็บปวดในก้น

แก้ไข: ฉันดูดมันและเพิ่มการสนับสนุนสำหรับตัวเลขสองหลัก แผ่นที่มีศูนย์สำหรับตัวเลขหลักเดียว

,>+++++++[<------->-]<+ [>++++++++++<-]>[<+>-],>+++++++[<------->-]<+ [<+>-]>+[>,]<[<]>-<<[>>>[<+>-]>[<+>-]<<[>>+<<-]>[>]<[>+<-]<[>+<-]>>[<<+>>-]<[-]<[<]>[-]>[[<+>-]>]<<[<]<<-]>>>[.>]

ยินดีต้อนรับสู่ PPCG! นี่เป็นคำตอบแรกที่ดีมาก! :)
Adnan

@ Anand ขอบคุณ! ฉันกำลังมองหาสิ่งที่ท้าทายที่สามารถแก้ไขได้อย่างง่ายดายใน BF ซึ่งเป็นหนึ่งในภาษาที่ฉันโปรดปรานใหม่: D
vasilescur

2

Perl, 27 ไบต์

รวม +1 สำหรับ -p

เรียกใช้เป็น perl -p sdr.pl

อินพุตที่ให้ไว้บน STDIN บรรทัดแรกของสตริงและบรรทัดที่สองนับถือว่าสตริงมีอักขระ "คำ" เท่านั้น

sdr.pl:

eval's%\B.(.*).\B%$1%;'x<>

1

PHP, 60 ไบต์

วิธีการแก้ปัญหานี้ตั้งค่าตัวละครจากสตริงอินพุตเป็นสตริงว่างเปล่าโดยดัชนี returnฉันจัดการกับสายป้อนโดยตรงเพื่อป้องกันไม่ให้ยาว

function(&$w,$i){for(;$i;)$w[$i--]=$w[strlen($w)-$i-2]="";};

โดยทั่วไปในหน่วยความจำ$wจะมีลักษณะดังนี้เมื่อเสร็จสิ้น:

Addr 0 1 2 3 4
     H   l   o
     ^   ^   ^
>Result: Hlo

ทำงานแบบนี้:

php -r '$f = function(&$w,$i){for(;$i;)$w[$i--]=$w[strlen($w)-$i-2]="";}; $f($argv[1],$argv[2]);echo"$argv[1]\n";' Hello 1

PHP 4.1 (50 <?for(;$I;)$W[$I--]=$W[strlen($W)-$I-2]="";echo$W;ไบต์): มันคาดว่าค่าในคีย์WและIมากกว่า POST / GET / COOKIE ... ตัวอย่างจะเป็นhttp://example.com/a.php?W=MyString&I=5
Ismael Miguel

1
ใช่ฉันไม่ต้องการทำคำตอบที่ต้องการregister globalsอีกต่อไป ขอบคุณสำหรับข้อเสนอแนะแม้ว่า :)
aross

1

เสาใหญ่ 16 ไบต์

i:At,{\,v\,v,A}c

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

i    # Get command line input.
:At  # Set A equal to the top of the stack.
,    # Pop the stack.
{    # Start a for loop.
 \   # Swap the top two elements of the stack.
  ,  # Pop the stack.
   v # Reverse the stack.
 \   # Swap the top two elements of the stack.
  ,  # Pop the stack.
   v # Reverse the stack.
 ,   # Switch to loop iterations.
 A   # Iterate A times.
}    # End the for loop.
c    # Print the stack as a string


1

Jolf, 13 ไบต์

ΆFi liγhj_γgi

การแปลคำตอบจาวาสคริปต์

คำอธิบาย:

ΆFi liγhj_γgi
Ά             ternary add
 Fi            i[0],
   `li         i sliced
      γhj       γ = j + 1
         _γ     to -γ
           gi  and the last of i

ลองที่นี่!

รุ่นโพสต์คำถามที่น่าสนใจมากขึ้น:

 ΆFi]ihjYgi

1

อย่างจริงจัง 17 ไบต์

,#,`p@pXod@dXq`nΣ

s \n nจะเข้าเป็น

ลองออนไลน์!

คำอธิบาย:

,#,`p@pXod@dXq`nΣ
,#                 push a list of characters in s
  ,`          `n   do the following n times:
    p@pXo          pop 2 characters off the front, discard the second, put the first back
         d@dXq     pop 2 characters off the back, discard the second, put the first back
                Σ  join

1

C #, 129 ไบต์

เนื่องจากเราข้าม 1 และลบ N และสถานการณ์ที่กลับด้าน

string o(string i,int n){var s=i.ToList();int x=0;while(x<2){s.RemoveRange(1,n);s.Reverse();x++;}return new string(s.ToArray());}

ungolfed

string o(string i, int n)
{
    var s = i.ToList();
    int x = 0;
    while (x < 2) //Repeat the following twice
    {
        s.RemoveRange(1, n); //remove n at index 1
        s.Reverse(); //Reverse the list
        x++;
    }
    return new string(s.ToArray());
}

จะเป็นไปได้ไหมที่จะลดความยาวของสคริปต์โดยใช้สิ่งนี้สำหรับการวนซ้ำ: สำหรับ (int x = 0xi <2; i ++)
t-clausen.dk

1

Java, 144 ไบต์

static String y(int i,String s){return i==0?s:y(i-1,new StringBuffer(s).replace(1,2,"").replace(s.length()-3,s.length()-2,"").toString());}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.