Trao đổi, xóa và lặp lại


24

Giới thiệu

Hãy quan sát chuỗi sau:

ABCDEFGHIJKLMNOP

Nếu chúng ta trao đổi các đầu của chuỗi , đó là:

ABCDEFGHIJKLMNOP
^^            ^^

Chúng tôi nhận được kết quả sau:

BACDEFGHIJKLMNPO

Sau đó, chúng tôi xóa các đầu của chuỗi, trong trường hợp này là BO. Kết quả là:

ACDEFGHIJKLMNP

Nếu chúng tôi lặp lại quy trình, chúng tôi nhận được danh sách sau:

N     Result

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

Bạn có thể thấy rằng với N = 5 , kết quả là AGHIJP. Tại N = 7 , độ dài của chuỗi nhỏ hơn 3 , vì vậy N> 7 được coi là không hợp lệ trong trường hợp này.

Nhiệm vụ

Cho một chuỗi S có độ dài ít nhất là 4 và số lần lặp lại N > 0, đưa ra kết quả cuối cùng. Bạn có thể cho rằng N luôn hợp lệ .

Các trường hợp thử nghiệm

Input                               >  Output

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

Đây là , vì vậy bài nộp có số byte ít nhất sẽ thắng! Để đơn giản, bạn có thể giả sử rằng chuỗi sẽ chỉ chứa các ký tự chữ và số .


Câu hỏi: Có ổn không khi lấy N trong unary với một cái gì đó giống 'như ký tự đếm? Ví dụ : ''123321?
daavko


@Adnan Định dạng unary có thể được sử dụng cho N, nhưng nó có thể là một chuỗi, có dấu ngoặc kép không? Ý tôi là, vì đã N=3lấy '111'(trái ngược với 111)
Luis Mendo

@LuisMendo Vâng, bạn có thể sử dụng nó
Adnan

Có vẻ như chúng ta bỏ qua 1 và loại bỏ N - điều này có được phép như một câu trả lời hay mã cần phải hoán đổi xóa và lặp lại?
Alex Carlsen

Câu trả lời:


5

MATL , 8 9 12 13 byte

th"P[]2(

Các đầu vào là: đầu tiên Nlà một chuỗi unary có dấu ngoặc kép (được cho phép bởi thử thách); thứ hai Slà một chuỗi có dấu ngoặc kép (dấu ngoặc kép trong chuỗi được cho phép theo mặc định); cách nhau bởi một đường kẻ.

Điều này hoạt động bằng cách lật chuỗi, loại bỏ phần tử thứ hai của nó và lặp lại trong tổng số 2*Nlần.

Hãy thử trực tuyế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

Giải trình? : P
Addison Crump

@VoteToC Đóng Chắc chắn :-) Tôi phải chạy. Tôi vừa mới thêm nó
Luis Mendo

18

Võng mạc , 44 20 byte

Vượt qua 44 vẫn là thường xuyên 44 :(

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

Giả sử đầu vào ở định dạng sau (theo ký tự unary - đếm ':):
{number of repeats}{string}
Ví dụ: '''''''ABCDEFGHIJKLMNOP
Không có khoảng cách giữa số lần lặp và chuỗi.

Cảm ơn @ MartinBüttner đã cạo sạch 24 byte!

Hãy thử trực tuyến!



@ MartinBüttner Aha! Vì vậy, đây là kế hoạch tổng thể tâm lý của bạn: p
Adnan

9
@Ad Nam \ _ (ツ) _ / ¯
Martin Ender

Vượt qua 44 hình như bị gạch bỏ 11 ...
Cốc Cốc

11

Python 2, 31 byte

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

Tôi nghĩ rằng điều này làm việc?


Vâng, nó có vẻ hoạt động :)
Adnan

Đó cũng là con trăn hợp lệ 3.
Chiel ten Brinke

9

Toán học, 29 byte

Câu trả lời đầu tiên của tôi!

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

Mấu chốt của Mathicala không khung! Các đầu vào chức năng là một danh sách (gồm các ký tự, hoặc bất cứ thứ gì) và một số.


1
Chào mừng đến với PPCG! : D Câu trả lời đầu tiên tốt đẹp.
Addison Crump

9

Mê cung , 40 byte

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

Đầu vào được Ntheo sau bởi chuỗi, được phân tách bằng bất kỳ ký tự không phải là số.

Hãy thử trực tuyến!

Điều này được viết với sự hợp tác của Sp3000 (có nghĩa là tôi không thể bận tâm tìm ra thuật toán, vì vậy anh ấy bắt đầu làm việc với nó, đưa ra giải pháp 118 byte nhưng không thể chơi golf được, vì vậy tôi đã chơi golf. .. yay cho tinh thần đồng đội).

Giải trình

Sơn lót thông thường của Sp (như thường được sửa đổi một chút):

  • Labyrinth là một ngôn ngữ 2D dựa trên ngăn xếp với hai ngăn xếp, chính và phụ. Khá nhiều thứ xảy ra trên ngăn xếp chính, nhưng bạn có thể chuyển các giá trị sang ngăn khác, ví dụ để đảo ngược chúng hoặc lưu chúng cho lần sau.
  • Các ngăn xếp là không đáy và chứa đầy số không, vì vậy xuất hiện từ một ngăn xếp trống không phải là một lỗi.
  • Thực thi bắt đầu từ ký tự hợp lệ đầu tiên (ở đây trên cùng bên trái). Tại mỗi ngã ba, nơi có hai hoặc nhiều đường dẫn có thể cho con trỏ lệnh (IP) đi, đỉnh của ngăn xếp được kiểm tra để xác định nơi tiếp theo. Tiêu cực là rẽ trái, không là đi tiếp và tích cực là rẽ phải. Mặc dù điều này có nghĩa là làm cho mã trông giống như những đoạn quanh co, khúc khuỷu, nhưng không có gì ngăn bạn làm "phòng" nơi những điều kiện này được kiểm tra trong mỗi ô. Những người có thể mang lại hành vi khá khó lường, nhưng là tuyệt vời cho chơi golf.
  • Mã nguồn (và do đó bố cục của mê cung) có thể được sửa đổi trong thời gian chạy bằng cách sử dụng <>^vtheo chu kỳ một hàng hoặc cột hoặc lưới.
  • " là không-ops.

Ở đây chúng tôi đi.

Mã bắt đầu trên <, đó là một mẹo chơi gôn mà tôi đã sử dụng một vài lần khi bắt đầu với một đoạn mã tuyến tính dài. Nó dịch chuyển hàng đầu tiên theo chu kỳ sang trái, với IP trên đó , vì vậy nguồn sẽ trông như thế này:

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

Nhưng bây giờ IP không thể di chuyển bất cứ nơi nào, vì vậy nó thực hiện <lại. Điều này tiếp tục cho đến khi chúng ta đạt đến trạng thái này:

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

Tại thời điểm này, IP có thể rời khỏi ô và bắt đầu thực hiện dòng thứ hai bắt đầu từ ?. Vì vậy, đây là mã tuyến tính được chia nhỏ:

?   # 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 bây giờ đi vào phòng 3x2 này, thực sự là hai vòng lặp 2x2 được nén chặt (chồng chéo) theo chiều kim đồng hồ. Vòng lặp đầu tiên đọc và loại bỏ các N-1ký tự khỏi 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.

Bây giờ chúng ta nhập vòng lặp thứ hai đọc phần còn lại của chuỗi đầu vào. Chúng tôi có thể phát hiện EOF vì ,sẽ quay trở lại -1trong trường hợp đó, làm cho IP rẽ trái.

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

Sự giảm giá đó không thực sự hữu ích, nhưng chúng ta có thể hoàn tác miễn phí sau đó và ở đây nó cho phép chúng ta chồng chéo hai vòng.

Nếu chúng ta lấy 5 ABCDEFGHIJKLMNOPđầu vào làm ví dụ, ngăn xếp trông như thế này:

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

Lưu ý rằng những cái này thực sự tương ứng với các ký tự đầu vào FGHIJKLMNOP(vì chúng tôi đã giảm chúng) và chúng tôi thực sự không muốn in những ký tự đầu tiên (chúng tôi chỉ loại bỏ các N-1ký tự, nhưng muốn bỏ qua N).

Bây giờ có một bit tuyến tính ngắn chuẩn bị ngăn xếp cho vòng lặp tiếp theo:

;   # 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.

Các ngăn xếp bây giờ trông giống như:

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

Chúng tôi nhập một vòng lặp 2x2 theo chiều kim đồng hồ. Điều này loại bỏ các Nký tự hàng đầu từ ngăn xếp chính:

;   # 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.

Khi chúng ta thoát khỏi vòng lặp =hoán đổi đó 0và ký tự cuối cùng của chuỗi đầu vào một lần nữa. Bây giờ các ngăn xếp trông như thế này:

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

Chúng tôi muốn in nội dung của ngăn xếp chính (ngoại trừ phần tử dưới cùng và tất cả tăng thêm 1), từ bên trái . Điều đó có nghĩa là chúng ta cần đưa nó vào ngăn xếp phụ trợ. Đó là những gì vòng lặp 2x2 (theo chiều kim đồng hồ) tiếp theo làm:

{   # 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.

Ngăn xếp ngay bây giờ:

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

Chúng tôi di chuyển cái đầu tiên (cái mà chúng tôi không muốn in) trở lại ngăn xếp chính với {. Và bây giờ chúng ta nhập vòng lặp 2x2 ( ngược chiều kim đồng hồ ) cuối cùng , in phần còn lại:

{   # 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.

Cuối cùng chúng tôi chấm dứt chương trình với @.


6

JavaScript (ES6), 39 byte

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

Hóa ra tôi vừa phát minh lại câu trả lời của @ Sp3000.


6

Thạch, 8 byte

Ḣ1¦UðḤ}¡

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Ḣ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

Thạch , 10 byte

Ḣ;ṪjḊṖ$Ɠ¡F

Nhập số qua STDIN và chuỗi thông qua dòng lệnh args . Cảm ơn @Dennis vì rất nhiều gợi ý / giúp tôi làm việc này (Jelly vẫn còn trốn tránh tôi).

Hãy thử trực tuyến!

Ḣ;Ṫ               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

Câu hỏi trung thực, làm thế nào để 10 byte hoạt động? Đây không phải là trong UTF-8 (và không nên có ít nhất 16 byte vì ḢṪḊṖƓ¡tất cả đều sử dụng nhiều hơn 1 byte) hay bạn có sử dụng một số loại bảng mã ký tự để dễ đọc không?
AutomatedChaos

1
@AutomatedChaos Cái sau :) (nhấp vào liên kết có từ "byte" trong tiêu đề). Jelly sử dụng trang mã tùy chỉnh, gần giống với các ngôn ngữ như APL.
Sp3000


4

Vitsy, 12 9 (mã) + 1 (dòng mới để khai báo hàm) = 10 byte

\ o /

Yêu cầu đầu vào trên ngăn xếp dưới dạng chuỗi theo sau là số.

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.

Mà bạn có thể gọi với:

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

Đây là một hàm để lại chuỗi kết quả trên ngăn xếp. Tôi đã cung cấp nó như một chương trình trong liên kết TryItOnline.

Dùng thử trực tuyến!


@Adnan Đã sửa - điều đó đặt tôi rất gần với Pyth. D:
Addison Crump

Nhưng vẫn còn một byte phía trước: D
Adnan

@Adnan Tôi có thể thoát khỏi việc nói rằng nó mong đợi các mục trên ngăn xếp hơn là đầu vào không? Hay đó là không-không?
Addison Crump

Tôi không chắc chính sách dành cho việc đó là gì, nhưng nếu bạn có thể tìm thấy một bài đăng meta về các vật phẩm đã có trong ngăn xếp thì không sao :)
Adnan

@Adnan Có một bài đăng meta về các mục đã có trên băng cho các ngôn ngữ như brainfuck. Tôi sẽ hỏi về nó trong meta (vì điều đó thực sự rất quan trọng đối với Vitsy .: D)
Addison Crump

4

Python 2, 49 48 byte

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

Hãy thử nó ở đây với testcase!

Giải pháp đệ quy đơn giản. Loại bỏ phần tử thứ hai và thứ hai cuối cùng khỏi chuỗi đầu vào và tự gọi nó bằng cái này và n-1cho đến khi n=0.

chỉnh sửa: Cảm thấy hơi ngu ngốc, nhìn vào giải pháp trăn khác . Đoán tôi chỉ thích đệ quy quá nhiều ...


4

C, 96 byte

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);}

Bị đánh cắp

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 byte

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

Rất đơn giản.

~lừa bị đánh cắp từ câu trả lời của Sp , giúp tiết kiệm một byte s[n+1..-2-n]. (Nó hoạt động vì ~n-1-nbổ sung của hai, và sau đó ...là một phạm vi độc quyền.)


3

Perl, 36 32 + 1 = 33 byte

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

Yêu cầu -pcờ và nhận đầu vào trên hai dòng, với số lần lặp ở cuối:

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

Ung dung?

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

3

CJam, 12 byte

q~{VW@)t(t}*

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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

Octave, 28 byte

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

Lập chỉ mục chuỗi, bỏ qua S(2:N+1)S(end-N:end-1) .

Mẫu chạy trên ideone .


3

Rust, 135 byte

Chà, đó là một chiều dài khá khủng khiếp.

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()}

In đẹp

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()
}

Bạn có thể giảm xuống còn 104 byte nếu chúng tôi cho phép các chuỗi phụ thay vì các chuỗi thích hợp.

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}

In đẹp

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
 }

Tò mò nếu ai có thể làm tốt hơn.


3

mSL - 137 byte

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))
}

Giải trình:

%l = $len($1) sẽ lấy độ dài của chuỗi đầu vào và lưu nó trong biến gọi là l

$right(<input>,<length>)$left(<input>,<length> có thể được sử dụng để trả về phần bên trái hoặc bên phải của chuỗi gốc. $ left luôn trả về văn bản bắt đầu từ phía bên trái trong khi $ phải luôn trả lại văn bản bắt đầu từ phía bên phải. Nếu độ dài được chỉ định là một số âm, $ left và $ right trả về toàn bộ văn bản trừ đi nhiều ký tự từ các cạnh tương ứng của chúng.

$mid(<string>,<start>,[length])được sử dụng để có được một chuỗi con từ giữa chuỗi. Bắt đầu là bắt đầu của chuỗi con từ bên trái. Giá trị âm biểu thị điểm bắt đầu từ bên phải. Trong cả hai trường hợp, một độ dài tùy chọn có thể được chỉ định. Độ dài âm có thể được sử dụng để loại bỏ nhiều ký tự đó từ cuối. Vì vậy, tôi đã sử dụng nó để lấy ký tự thứ hai và ký tự cuối cùng thứ hai bằng cách sử dụng độ dài của chuỗi đầu vào.

$calc(<input>) được sử dụng để thực hiện các phép tính toán học


1
Chào mừng đến với PPCG! Nói chung nên thêm một số chú thích hoặc giải thích về mã của bạn.
Zach Gates

@ZachGates Cảm ơn! Sẽ nhớ điều này cho lần sau!
Denny

2

Là ngôn ngữ chưa có tiêu đề (mới không cạnh tranh), 9 byte

hD_RQ:Q|J

Bạn có thể tìm thấy mã nguồn ở đây , ngôn ngữ hoàn toàn không ổn định (thử thách đầu tiên cho nó) vì vậy đừng hy vọng nó sẽ hoạt động trong tương lai (cam kết 7)

Đây là một ngôn ngữ dựa trên ngăn xếp với các chức năng thêm và xóa các đối tượng khỏi ngăn xếp. Hiện tại có 2 lệnh thao tác ngăn xếp:D (nhân đôi đỉnh N của ngăn xếp) và R(xoay N mục trên cùng của ngăn xếp)

Giải trình:

          - 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 byte

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

Kiểm tra nó ở đây.

Giải trình

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

Vim, 27 byte

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

Đầu vào dự kiến ​​sẽ ở dạng STRING Ntrên dòng đầu tiên không có ký tự khác.

Giải trình:

#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 byte

Mục nhập PPCG đầu tiên của tôi!

Rõ ràng là sẽ không chiến thắng nhưng hey.

Có đầu vào như: 4ABCDEFGHIJKL, với ký tự đầu tiên là N.

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

Thử nghiệm nó trên này trang web tuyệt vời.

Giới hạn ở N nhỏ hơn hoặc bằng 9, vì số có hai chữ số là một nỗi đau ở mông.

EDIT: Tôi đã hút nó lên và thêm hỗ trợ cho các số có hai chữ số. Pad với số không cho các chữ số đơn.

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

Chào mừng đến với PPCG! Đây là một câu trả lời đầu tiên rất tốt đẹp! :)
Adnan

@AandN cảm ơn! Tôi đã tìm kiếm một thử thách có thể giải quyết một cách hợp lý trong BF, đó là một trong những ngôn ngữ yêu thích mới của tôi: D
vasilescur 3/03/2016

2

Perl, 27 byte

Bao gồm +1 cho -p

Chạy như perl -p sdr.pl

Đầu vào được đưa ra trên STDIN, dòng đầu tiên là chuỗi, dòng thứ hai số đếm Giả sử chuỗi chỉ chứa các ký tự "từ"

sdr.pl:

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

1

PHP, 60 byte

Giải pháp này lặp lại đặt các ký tự từ chuỗi đầu vào thành một chuỗi trống theo chỉ mục. Tôi đang thao tác trực tiếp chuỗi đầu vào để ngăn chặn lâu return.

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

Về cơ bản trong bộ nhớ $wtrông như thế này khi thực hiện:

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

Chạy như thế này:

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 byte) : <?for(;$I;)$W[$I--]=$W[strlen($W)-$I-2]="";echo$W;. Nó hy vọng các giá trị trên các khóa WI, qua POST / GET / COOKIE ... Một ví dụ sẽ làhttp://example.com/a.php?W=MyString&I=5
Ismael Miguel

1
Vâng, tôi không muốn làm câu trả lời yêu cầu register globalsnữa. Thx cho đề xuất mặc dù :)
vào

1

Giá treo , 16 byte.

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

Làm thế nào nó hoạt động:

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

CJam, 15 byte

r(\)\{(;);}ri*\

Tôi chắc chắn rằng nó có thể chơi gôn này hơn nữa ...


1

Jolf, 13 byte

ΆFi liγhj_γgi

Một bản tóm tắt của câu trả lời JavaScript.

Giải trình:

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

Hãy thử nó ở đây!

Một phiên bản câu hỏi thú vị hơn:

 ΆFi]ihjYgi

1

Nghiêm túc, 17 byte

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

Đưa đầu vào là s \n n.

Hãy thử trực tuyến!

Giải trình:

,#,`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 byte

Vì về cơ bản chúng ta bỏ qua 1 và loại bỏ N và kịch bản đảo ngược

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());}

vô dụng

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());
}

Wóuld có thể giảm độ dài của tập lệnh bằng cách sử dụng điều này cho vòng lặp: for (int x = 0xi <2; i ++)
t-clausen.dk

1

Java, 144 byte

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());}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.