Anda harus menulis fungsi / program yang mengambil input melalui stdin
argumen / command-line argumen / fungsi, mencampur karakter dalam string, dan kemudian output string akhir melalui stdout
.
Input pertama-tama akan berisi string (bukan kosong atau null
), spasi, dan kemudian angka genap non-negatif semua dipisahkan oleh spasi. Jika input diambil melalui argumen fungsi, string akan menjadi salah satu argumen sementara bilangan bulat, yang dipisahkan oleh spasi, akan menjadi yang lain. Anda harus menukar karakter string pada indeks yang sesuai dengan pasangan angka berurutan.
Contohnya:
Hello_world! 0 6
harus menghasilkan
wello_Horld!
Asumsi
- Anda dapat memilih antara pengindeksan berbasis 0 dan 1, dan dapat mengasumsikan bahwa indeks yang diberikan akan selalu berada dalam kisaran.
- String tidak akan lebih dari 100 karakter dan hanya akan berisi karakter ASCII dalam rentang
!
hingga~
(kode karakter 0x21 hingga 0x7E, inklusif). Lihat tabel ASCII untuk referensi. - Dua indeks dalam pasangan mungkin identik (dalam hal ini, tidak ada yang ditukar pada langkah itu).
Mencetak gol
Ini adalah kode golf, jadi pengiriman terpendek (dalam byte) menang.
Uji Kasus
Hello_world! 0 6 => wello_Horld!
First 1 2 1 0 0 4 => tFisr
(Second!$$) 8 7 10 1 => ()econd$!$S
~Third~ 0 0 6 6 0 6 6 0 => ~Third~
Jawaban:
CJam, 11 byte
Bagaimana itu bekerja
Ini adalah pendekatan yang sedikit berbeda, di mana saya hanya menjalankan loop do-while sampai saya memiliki pasangan angka yang tersisa di input.
Cobalah online di sini
sumber
Python 3,
8986 byteBuka semua barang. (3 byte disimpan berkat @potato)
sumber
[*s],*L=input().split()
Anda kemudian dapat mengambil garis setelah itu. Saya sangat suka solusi Anda, tapi hampir elegan meskipun sangat golf.CJam, 13 byte
Uji di sini.
Penjelasan
sumber
C (137 b)
Penjelasan akan datang ...
Argumen
T = kata bertipe char * .
V = array jumlah elemen integer yang genap.
L = panjang V
Keluaran
string campuran
Bagaimana cara kerjanya ? :
menyapu jumlah array V sebaliknya, dan menempatkan elemen ke-n dari string setelah melacak semua kemajuannya hingga titik aktual. Contoh
input = T = "Pertama", V = {1,2,1,0,0,4}
V terbalik = {4,0,0,1,2,1}
Coba di sini
sumber
int
tidak diperlukan (dapat mengakibatkan perilaku tak terduga), danint
variabel yang merupakan parameter tidak memerlukanint
, variabel, alih-alih mendeklarasikan dalam loop dapat dideklarasikan di satu tempat di luar loop, gunakanputchar
bukanprintf
dll.Python 3 -
161149Golf lebih banyak dengan bertukar sekitar beberapa variabel, dan menggunakan
;
seperti dalam komentar Tim.Saya berharap itu keluar terlihat golf, hanya saja tidak sebanyak ini.
sumber
while
kewhile c<len(t):line1;line2;line3...
.c=c+2
pergi kec+=2
c
sebenarnya adalah pengindeksant
(input) untuk mendapatkan posisi yang kita butuhkan untuk bertukar. Tapi karenat[0]
string itu kita perlu bertukar,t[1]
dant[2]
tahan pasangan swap pertama.C,
109107102 byteCatatan:
s
dana
perlu dinyatakan sebagai array global.s
adalah string yang ingin Anda tukarkan dana
merupakan larikint
dengan semua nilai angka.Jika kode di atas tidak berfungsi, coba gunakan
void f(){...}
sebagai gantif(){...}
Kode tidak dikunci:
Uji di sini
sumber
Python 3, 135
Penjelasan:
sumber
C, 70 byte
Mengingat bahwa string input paling panjang 100 saya memutuskan untuk membuat byte 'NULL' yang mengindikasikan akhir array integer menjadi tidak ambigu
0xFF
. Agaknya ini tidak dihitung sebagai input tambahan, meskipun untuk biaya(paling banyak) 73 byte dapat dibuat menjadi pengindeksan berbasis 1 dan digunakan'\0'
sebagai akhir array.Cukup banyak melakukan pertukaran reguler dengan variabel tmp dan menggunakan bahwa operator koma memperkenalkan titik sekuens untuk memiliki perilaku yang didefinisikan (tidak seperti beberapa manifestasi dari x atau swap yang akan memiliki jumlah karakter yang lebih rendah tetapi mengarah pada perilaku yang tidak terdefinisi).
Sunting: Seperti yang diminta, Anda dapat mengujinya: http://rextester.com/OVOQ23313 .
sumber
Dart - 123
Mengasumsikan input pada baris perintah secara otomatis dibagi di spasi. Kalau tidak, diperlukan inisial
x=x[0].split(' ');
untuk membagi string menjadi teks dan indeks.Dengan lebih banyak ruang putih:
Jalankan / uji ini di dartpad.dartlang.org .
sumber
Rebol - 71
Tidak Disatukan:
sumber
input
Fungsi ini tidak akan dapat memanggil STDIN dari sana. Solusinya adalah dengan menetapkan sederhanainput
menjadi nilai yang ingin Anda uji. Inilah contoh lengkap dari tes pertama -input: "hello_World 1 7" s: take i: split input" "foreach[a b]i[swap at s do a at s do b]print s
dan klik Lakukan di Rebol 3 NB. Rebol menggunakan pengindeksan berbasis 1.C, 143 byte
Program di atas mengambil input dari argumen baris perintah, menyalin string ke dalam array, menukar karakter yang sesuai dan kemudian, menghasilkan string yang dimodifikasi.
Kode tidak dikunci:
sumber
10
salah satu indeks.JavaScript (ES6), 95
95 byte dengan input string tunggal (fungsi f di bawah)
75 byte dengan 2 parameter, string dan array angka (fungsi g di bawah)
(EcmaScript 6, khusus Firefox)
sumber