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 B
dan 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 kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang! Untuk kesederhanaan, Anda dapat mengasumsikan bahwa string hanya akan berisi karakter alfanumerik .
'
sebagai karakter penghitungan? Sebagai contoh:''123321
?N
, tetapi bisakah itu string, dengan tanda kutip? Maksud saya, untukN=3
menerima'111'
(berlawanan dengan111
)Jawaban:
MATL , 8
91213byteInputnya adalah: pertama
N
sebagai string unary dengan tanda kutip (diizinkan oleh tantangan); keduaS
sebagai 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*N
kali.Cobalah online!
sumber
Retina ,
4420 byteDicoret 44 masih teratur 44 :(
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!
sumber
Python 2, 31 byte
Saya pikir ini berhasil?
sumber
Mathematica, 29 byte
Jawaban pertamaku!
Inti dari Mathematica tanpa bracket! Input fungsi adalah daftar (karakter, atau apa pun) dan angka.
sumber
Labirin , 40 byte
Input
N
diikuti 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):
<>^v
yang 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:IP sekarang memasuki ruangan 3x2 ini, yang sebenarnya adalah dua loop 2x searah jarum jam terkompresi (tumpang tindih). Loop pertama membaca dan membuang
N-1
karakter dari STDIN.Sekarang kita memasuki loop kedua yang membaca sisa dari string input. Kami dapat mendeteksi EOF karena
,
akan kembali-1
dalam kasus itu, membuat IP berbelok ke kiri.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 ABCDEFGHIJKLMNOP
input sebagai contoh, tumpukan terlihat seperti ini:Perhatikan bahwa ini benar-benar sesuai dengan karakter input
FGHIJKLMNOP
(karena kami menurunkannya), dan bahwa kami sebenarnya tidak ingin mencetak yang pertama (kami hanya membuangN-1
karakter, tetapi ingin melompatiN
).Sekarang ada bit linear pendek yang menyiapkan stack untuk loop berikutnya:
Tumpukan sekarang terlihat seperti:
Kami memasukkan loop 2x2 searah jarum jam. Ini membuang
N
karakter teratas dari tumpukan utama:Ketika kita keluar dari loop,
=
swap itu0
dan karakter terakhir dari string input lagi. Sekarang tumpukannya terlihat seperti ini: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:
Tumpukan sekarang:
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:Akhirnya kami mengakhiri program dengan
@
.sumber
JavaScript (ES6), 39 byte
Ternyata saya baru saja menemukan kembali jawaban @ Sp3000.
sumber
Jelly, 8 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Jelly , 10 byte
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!
sumber
ḢṪḊṖƓ¡
semua menggunakan lebih dari 1 byte) atau apakah Anda menggunakan beberapa jenis tabel kode karakter untuk dibaca?Pyth, 13 byte
Penjelasan:
Coba di sini
sumber
Vitsy,
129 (kode) + 1 (baris baru untuk deklarasi fungsi) = 10 byte\Hai/
Mengharapkan input pada stack sebagai string yang diikuti oleh nomor.
Yang dapat Anda hubungi dengan:
Ini adalah fungsi yang meninggalkan string yang dihasilkan pada stack. Saya telah menyediakannya sebagai program di tautan TryItOnline.
TryItOnline!
sumber
Python 2,
4948 byteCoba di sini dengan testcases!
Solusi rekursif sederhana. Menghapus kedua dan elemen kedua terakhir dari string input dan menyebut dirinya dengan ini dan
n-1
sampain=0
.sunting: Merasa agak bodoh, melihat solusi python lainnya . Kira saya terlalu suka rekursi ...
sumber
C, 96 byte
Tidak disatukan
sumber
Ruby, 29 byte
Sangat mudah.
~
Trik dicuri dari jawaban Sp , yang menyimpan byte lebihs[n+1..-2-n]
. (Ini bekerja karena~n
ada-1-n
dalam pelengkap dua, dan kemudian...
merupakan rentang eksklusif.)sumber
Perl,
3632 + 1 = 33 byteMembutuhkan
-p
tanda dan mengambil input pada dua baris, dengan jumlah iterasi di akhir:Tidak disatukan?
sumber
CJam, 12 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Oktaf, 28 byte
Buat indeks string, hilangkan
S(2:N+1)
danS(end-N:end-1)
.Sampel dijalankan pada ideone .
sumber
Rust, 135 byte
Yah, itu panjang yang cukup mengerikan.
Cukup dicetak:
Anda dapat menurunkannya hingga 104 byte jika kami mengizinkan bytestrings alih-alih string yang tepat.
Cukup dicetak:
Penasaran apakah ada yang bisa berbuat lebih baik.
sumber
mSL - 137 byte
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 matematikasumber
Pada bahasa yang belum berjudul (jadi baru yang tidak kompetitif), 9 byte
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) danR
(putar item N atas pada tumpukan)Penjelasan:
sumber
CJam, 14 byte
Uji di sini.
Penjelasan
sumber
Vim, 27 byte
Input diharapkan dalam bentuk
STRING N
di baris pertama tanpa karakter lain.Penjelasan:
sumber
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.
sumber
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
:sumber
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
.Pada dasarnya di memori
$w
terlihat seperti ini ketika dilakukan:Jalankan seperti ini:
sumber
<?for(;$I;)$W[$I--]=$W[strlen($W)-$I-2]="";echo$W;
. Ia mengharapkan nilai pada kunciW
danI
, melalui POST / GET / COOKIE ... Contohnya adalahhttp://example.com/a.php?W=MyString&I=5
register globals
lagi. Terima kasih atas sarannya :)Tiang , 16 Bytes.
Bagaimana itu bekerja:
sumber
CJam, 15 byte
Saya yakin mungkin untuk bermain golf ini lebih jauh ...
sumber
Jolf, 13 byte
Transpilasi jawaban JavaScript.
Penjelasan:
Coba di sini!
Versi post-question yang lebih menarik:
sumber
Serius, 17 byte
Mengambil input sebagai
s \n n
.Cobalah online!
Penjelasan:
sumber
C #, 129 byte
Karena pada dasarnya kita lewati 1 dan hapus N dan skenario terbalik
ungolfed
sumber
Java, 144 byte
sumber