Tukar, hapus, dan ulangi

24

pengantar

Mari kita amati string berikut:

ABCDEFGHIJKLMNOP

Jika kita menukar ujung string , yaitu:

ABCDEFGHIJKLMNOP
^^            ^^

Kami mendapatkan hasil sebagai berikut:

BACDEFGHIJKLMNPO

Setelah itu, kami menghapus ujung string, yang dalam hal ini adalah Bdan O. Hasilnya adalah:

ACDEFGHIJKLMNP

Jika kami mengulangi prosesnya, kami mendapatkan daftar berikut:

N     Result

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

Anda dapat melihat bahwa untuk N = 5 , hasilnya adalah AGHIJP. Pada N = 7 , panjang string lebih kecil dari 3 , sehingga N> 7 dianggap tidak valid dalam kasus ini.

Tugas

Diberikan string S dengan panjang setidaknya 4 dan jumlah pengulangan N > 0, menghasilkan hasil akhir. Anda dapat mengasumsikan bahwa N selalu valid .

Uji kasus

Input                               >  Output

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

Ini adalah , jadi pengiriman dengan jumlah byte paling sedikit menang! Untuk kesederhanaan, Anda dapat mengasumsikan bahwa string hanya akan berisi karakter alfanumerik .

Adnan
sumber
Pertanyaan: Apakah saya tetap bisa mengambil N di unary dengan sesuatu seperti 'sebagai karakter penghitungan? Sebagai contoh: ''123321?
daavko
@daavko Ya, standar unary dapat diterima secara default
Adnan
@Adnan Unary format dapat digunakan untuk N, tetapi bisakah itu string, dengan tanda kutip? Maksud saya, untuk N=3menerima '111'(berlawanan dengan 111)
Luis Mendo
@LuisMendo Ya, Anda dapat menggunakannya
Adnan
Sepertinya saya seperti kita lewati 1 dan menghapus N - apakah ini diizinkan sebagai jawaban atau apakah kode perlu menukar hapus dan ulangi?
Alex Carlsen

Jawaban:

5

MATL , 8 9 12 13 byte

th"P[]2(

Inputnya adalah: pertama Nsebagai string unary dengan tanda kutip (diizinkan oleh tantangan); kedua Ssebagai string dengan tanda kutip (tanda kutip dalam string diizinkan secara default); dipisahkan oleh linebreak.

Ini berfungsi dengan membalik string, menghapus elemen keduanya, dan mengulangi untuk total 2*Nkali.

Cobalah online!

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
Luis Mendo
sumber
Penjelasan? : P
Addison Crump
@VoteToClose Sure :-) Saya harus menjalankan. Saya baru saja menambahkannya
Luis Mendo
18

Retina , 44 20 byte

Dicoret 44 masih teratur 44 :(

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

Mengasumsikan input dalam format berikut (dalam karakter penghitungan unary:) ':
{number of repeats}{string}
Misalnya: '''''''ABCDEFGHIJKLMNOP
Tidak ada ruang antara jumlah pengulangan dan string.

Terima kasih @ MartinBüttner untuk mencukur 24 byte!

Cobalah online!

daavko
sumber
7
Terkait .
Addison Crump
@ MartinBüttner Aha! Jadi ini adalah rencana induk psikologis Anda: p
Adnan
9
@Adnan ¯ \ _ (ツ) _ / ¯
Martin Ender
Dicoret 44 sepertinya dicoret 11 ...
CocoaBean
11

Python 2, 31 byte

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

Saya pikir ini berhasil?

Sp3000
sumber
Ya, sepertinya berhasil :)
Adnan
Ini juga berlaku python 3.
Chiel ten Brinke
9

Mathematica, 29 byte

Jawaban pertamaku!

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

Inti dari Mathematica tanpa bracket! Input fungsi adalah daftar (karakter, atau apa pun) dan angka.

CalculatorFeline
sumber
1
Selamat datang di PPCG! : D Jawaban pertama yang bagus.
Addison Crump
9

Labirin , 40 byte

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

Input Ndiikuti oleh string, dipisahkan oleh karakter non-numerik.

Cobalah online!

Ini ditulis bekerja sama dengan Sp3000 (yang berarti saya tidak bisa diganggu untuk mencari tahu algoritma, jadi dia mulai bekerja pada itu, datang dengan solusi 118 byte tetapi tidak dapat diganggu golf itu, jadi saya melakukan golf. .. yay untuk kerja tim).

Penjelasan

Primer biasa Sp (seperti biasa sedikit dimodifikasi):

  • Labyrinth adalah bahasa 2D berbasis stack dengan dua tumpukan, utama dan tambahan. Hampir semua yang terjadi pada tumpukan utama, tetapi Anda dapat menggeser nilainya ke yang lain, misalnya untuk membalikkan atau menyimpannya untuk nanti.
  • Tumpukan tidak berdasar dan diisi dengan nol, sehingga muncul dari tumpukan kosong bukanlah kesalahan.
  • Eksekusi dimulai dari karakter valid pertama (di sini kiri atas). Di setiap persimpangan, di mana ada dua atau lebih jalur yang mungkin untuk mengambil penunjuk instruksi (IP), bagian atas tumpukan diperiksa untuk menentukan ke mana harus pergi berikutnya. Negatif belok kiri, nol maju dan positif belok kanan. Meskipun ini dimaksudkan untuk membuat kode terlihat seperti lilitan, bagian yang berkelok-kelok, tidak ada yang menghentikan Anda dari membuat "kamar" di mana kondisi ini diperiksa di setiap sel. Itu bisa menghasilkan perilaku yang tidak terduga, tetapi bagus untuk bermain golf.
  • Kode sumber (dan karenanya tata letak labirin) dapat dimodifikasi pada saat runtime menggunakan <>^vyang secara siklis menggeser baris atau kolom atau kisi.
  • " adalah no-ops.

Kita mulai.

Kode dimulai pada <, yang merupakan trik golf yang saya gunakan beberapa kali ketika mulai dengan sepotong kode linier yang panjang. Ini menggeser baris pertama secara siklis ke kiri, dengan IP di atasnya , sehingga sumbernya akan terlihat seperti ini:

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

Tapi sekarang IP tidak bisa bergerak kemana-mana, jadi dieksekusi <lagi. Ini berlanjut sampai kita mencapai keadaan ini:

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

Pada titik ini, IP dapat meninggalkan sel dan mulai menjalankan baris kedua mulai dari ?. Jadi, inilah kode liniernya:

?   # 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 sekarang memasuki ruangan 3x2 ini, yang sebenarnya adalah dua loop 2x searah jarum jam terkompresi (tumpang tindih). Loop pertama membaca dan membuang N-1karakter dari 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.

Sekarang kita memasuki loop kedua yang membaca sisa dari string input. Kami dapat mendeteksi EOF karena ,akan kembali -1dalam kasus itu, membuat IP berbelok ke kiri.

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

Penurunan itu sebenarnya tidak berguna, tetapi kita dapat membatalkannya nanti secara gratis dan di sini memungkinkan kita untuk tumpang tindih dua loop.

Jika kita mengambil 5 ABCDEFGHIJKLMNOPinput sebagai contoh, tumpukan terlihat seperti ini:

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

Perhatikan bahwa ini benar-benar sesuai dengan karakter input FGHIJKLMNOP(karena kami menurunkannya), dan bahwa kami sebenarnya tidak ingin mencetak yang pertama (kami hanya membuang N-1karakter, tetapi ingin melompati N).

Sekarang ada bit linear pendek yang menyiapkan stack untuk loop berikutnya:

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

Tumpukan sekarang terlihat seperti:

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

Kami memasukkan loop 2x2 searah jarum jam. Ini membuang Nkarakter teratas dari tumpukan utama:

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

Ketika kita keluar dari loop, =swap itu 0dan karakter terakhir dari string input lagi. Sekarang tumpukannya terlihat seperti ini:

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

Kami ingin mencetak isi tumpukan utama (kecuali elemen bawah dan semuanya bertambah 1), dari kiri . Itu berarti kita harus membawanya ke tumpukan tambahan. Itulah yang dilakukan loop 2x2 (searah jarum jam) berikutnya:

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

Tumpukan sekarang:

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

Kami memindahkan yang pertama (yang tidak ingin kita cetak) kembali ke tumpukan utama {. Dan sekarang kita memasuki loop 2x2 akhir ( berlawanan arah jarum jam ), yang mencetak sisanya:

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

Akhirnya kami mengakhiri program dengan @.

Martin Ender
sumber
6

JavaScript (ES6), 39 byte

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

Ternyata saya baru saja menemukan kembali jawaban @ Sp3000.

Neil
sumber
6

Jelly, 8 byte

Ḣ1¦UðḤ}¡

Cobalah online!

Bagaimana itu bekerja

Ḣ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.
Dennis
sumber
5

Jelly , 10 byte

Ḣ;ṪjḊṖ$Ɠ¡F

Masukkan nomor melalui STDIN, dan string melalui arg baris perintah . Terima kasih kepada @Dennis untuk banyak petunjuk / bantuan agar ini berfungsi (Jelly masih menghindari saya).

Cobalah online!

Ḣ;Ṫ               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
Sp3000
sumber
Pertanyaan jujur, bagaimana cara kerja 10 byte? Bukankah ini di UTF-8 (dan tidak boleh setidaknya 16 byte karena ḢṪḊṖƓ¡semua menggunakan lebih dari 1 byte) atau apakah Anda menggunakan beberapa jenis tabel kode karakter untuk dibaca?
AutomatedChaos
1
@ AutomatedChaos Yang terakhir :) (klik pada tautan di mana kata "bytes" ada di header). Jelly menggunakan halaman kode khusus, mirip dengan bahasa seperti APL.
Sp3000
4

Pyth, 13 byte

++hz:zhQ_hQez

Penjelasan:

              - autoassign z = input()
              - autoassign Q = eval(input())
    :zhQ_hQ   -  z[Q+1:-(Q+1)]
++hz       ez - z[0]+^+z[-1]

Coba di sini

Biru
sumber
4

Vitsy, 12 9 (kode) + 1 (baris baru untuk deklarasi fungsi) = 10 byte

\Hai/

Mengharapkan input pada stack sebagai string yang diikuti oleh nomor.

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.

Yang dapat Anda hubungi dengan:

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

Ini adalah fungsi yang meninggalkan string yang dihasilkan pada stack. Saya telah menyediakannya sebagai program di tautan TryItOnline.

TryItOnline!

Addison Crump
sumber
@ Adnan Tetap - yang menempatkan saya dekat dengan Pyth. D:
Addison Crump
Tapi masih satu byte di depan: D
Adnan
@ Adnan Bisakah saya lolos dengan mengatakan bahwa ia mengharapkan item di stack daripada input? Atau apakah itu tidak boleh?
Addison Crump
Saya tidak yakin apa kebijakannya untuk itu, tetapi jika Anda dapat menemukan posting meta tentang barang-barang yang sudah ada di tumpukan, tidak apa-apa :)
Adnan
@ Adnan Ada sebuah posting meta tentang item yang sudah ada di kaset untuk bahasa seperti brainfuck. Saya akan menanyakannya dalam meta (karena itu sebenarnya sangat penting untuk 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

Coba di sini dengan testcases!

Solusi rekursif sederhana. Menghapus kedua dan elemen kedua terakhir dari string input dan menyebut dirinya dengan ini dan n-1sampai n=0.

sunting: Merasa agak bodoh, melihat solusi python lainnya . Kira saya terlalu suka rekursi ...

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

Tidak disatukan

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 */
}
Cole Cameron
sumber
3

Ruby, 29 byte

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

Sangat mudah.

~Trik dicuri dari jawaban Sp , yang menyimpan byte lebih s[n+1..-2-n]. (Ini bekerja karena ~nada -1-ndalam pelengkap dua, dan kemudian ...merupakan rentang eksklusif.)

Gagang pintu
sumber
3

Perl, 36 32 + 1 = 33 byte

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

Membutuhkan -ptanda dan mengambil input pada dua baris, dengan jumlah iterasi di akhir:

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

Tidak disatukan?

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

CJam, 12 byte

q~{VW@)t(t}*

Cobalah online!

Bagaimana itu bekerja

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.
Dennis
sumber
3

Oktaf, 28 byte

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

Buat indeks string, hilangkan S(2:N+1)danS(end-N:end-1) .

Sampel dijalankan pada ideone .

gelas kimia
sumber
3

Rust, 135 byte

Yah, itu panjang yang cukup mengerikan.

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

Cukup dicetak:

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

Anda dapat menurunkannya hingga 104 byte jika kami mengizinkan bytestrings alih-alih string yang tepat.

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}

Cukup dicetak:

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
 }

Penasaran apakah ada yang bisa berbuat lebih baik.

Itai Bar-Natan
sumber
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))
}

Penjelasan:

%l = $len($1) akan mendapatkan panjang dari string input dan menyimpannya dalam variabel yang disebut l

$right(<input>,<length>) dan $left(<input>,<length> dapat digunakan untuk mengembalikan bagian kiri atau kanan string asli dengan terhormat. $ left selalu mengembalikan teks mulai dari sisi paling kiri sementara $ kanan selalu mengembalikan teks mulai dari sisi kanan. Jika panjang yang ditentukan adalah angka negatif, $ kiri dan $ kanan mengembalikan seluruh teks dikurangi banyak karakter dari sisi masing-masing.

$mid(<string>,<start>,[length])digunakan untuk mendapatkan substring dari tengah string. Mulai adalah awal dari substring dari kiri. Nilai negatif menunjukkan awal dari kanan. Dalam kedua kasus, panjang opsional dapat ditentukan. Panjang negatif dapat digunakan untuk menghapus banyak karakter dari akhir. Jadi saya menggunakannya untuk mengambil karakter kedua dan karakter terakhir kedua dengan menggunakan panjang string input.

$calc(<input>) digunakan untuk melakukan perhitungan matematika

Denny
sumber
1
Selamat datang di PPCG! Biasanya merupakan ide bagus untuk menambahkan beberapa penjelasan atau penjelasan kode Anda.
Zach Gates
@ZachGates Terima kasih! Akan mengingat ini untuk waktu berikutnya!
Denny
2

Pada bahasa yang belum berjudul (jadi baru yang tidak kompetitif), 9 byte

hD_RQ:Q|J

Anda dapat menemukan kode sumber di sini , bahasa benar-benar tidak stabil (tantangan tes pertama untuk itu) jadi jangan berharap itu berfungsi di masa depan (komit 7)

Ini adalah bahasa berbasis tumpukan dengan fungsi yang menambah dan menghapus objek dari tumpukan. Saat ini terdapat 2 perintah manipulasi tumpukan: D(duplikat bagian atas tumpukan N kali) dan R(putar item N atas pada tumpukan)

Penjelasan:

          - 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)
Biru
sumber
2

CJam, 14 byte

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

Uji di sini.

Penjelasan

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.
Martin Ender
sumber
2

Vim, 27 byte

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

Input diharapkan dalam bentuk STRING Ndi baris pertama tanpa karakter lain.

Penjelasan:

#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
Dominic A.
sumber
2

Brainfuck, 130 byte

Entri PPCG pertama saya!

Jelas tidak akan menang tapi hei.

Mengambil input seperti: 4ABCDEFGHIJKL, dengan karakter pertama menjadi N.

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

Uji di situs luar biasa ini .

Terbatas pada N kurang dari atau sama dengan 9, karena angka dua digit menyebalkan.

EDIT: Saya menyedotnya dan menambahkan dukungan untuk angka dua digit. Pad dengan nol untuk digit tunggal.

,>+++++++[<------->-]<+ [>++++++++++<-]>[<+>-],>+++++++[<------->-]<+ [<+>-]>+[>,]<[<]>-<<[>>>[<+>-]>[<+>-]<<[>>+<<-]>[>]<[>+<-]<[>+<-]>>[<<+>>-]<[-]<[<]>[-]>[[<+>-]>]<<[<]<<-]>>>[.>]
vasilescur
sumber
Selamat datang di PPCG! Ini jawaban pertama yang sangat bagus! :)
Adnan
@AndN terima kasih! Saya telah mencari beberapa saat untuk sebuah tantangan yang dapat dengan mudah diselesaikan di BF, yang merupakan salah satu bahasa favorit baru saya: D
vasilescur
2

Perl, 27 byte

Sertakan +1 untuk -p

Jalankan sebagai perl -p sdr.pl

Input diberikan pada STDIN, baris pertama string, baris kedua hitungan Mengasumsikan string hanya berisi karakter "kata"

sdr.pl:

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

PHP, 60 byte

Solusi ini secara iteratif menetapkan karakter dari string input ke string kosong berdasarkan indeks. Saya memanipulasi string input secara langsung untuk mencegah panjang return.

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

Pada dasarnya di memori $wterlihat seperti ini ketika dilakukan:

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

Jalankan seperti ini:

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
aross
sumber
PHP 4.1 (50 byte): <?for(;$I;)$W[$I--]=$W[strlen($W)-$I-2]="";echo$W;. Ia mengharapkan nilai pada kunci Wdan I, melalui POST / GET / COOKIE ... Contohnya adalahhttp://example.com/a.php?W=MyString&I=5
Ismael Miguel
1
Ya, saya tidak ingin melakukan jawaban yang membutuhkan register globalslagi. Terima kasih atas sarannya :)
aross
1

Tiang , 16 Bytes.

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

Bagaimana itu bekerja:

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
Morgan Thrapp
sumber
1

CJam, 15 byte

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

Saya yakin mungkin untuk bermain golf ini lebih jauh ...

A Simmons
sumber
1

Jolf, 13 byte

ΆFi liγhj_γgi

Transpilasi jawaban JavaScript.

Penjelasan:

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

Coba di sini!

Versi post-question yang lebih menarik:

 ΆFi]ihjYgi
Conor O'Brien
sumber
1

Serius, 17 byte

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

Mengambil input sebagai s \n n.

Cobalah online!

Penjelasan:

,#,`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
Mego
sumber
1

C #, 129 byte

Karena pada dasarnya kita lewati 1 dan hapus N dan skenario terbalik

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());
}
Alex Carlsen
sumber
Apakah mungkin untuk mengurangi panjang skrip dengan menggunakan ini untuk perulangan: untuk (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());}
pengguna902383
sumber