import
java.util.*;
class
GFG
{
static
char
[]buffer =
new
char
[
50
];
static
int
gap_size =
10
;
static
int
gap_left =
0
;
static
int
gap_right = gap_size - gap_left -
1
;
static
int
size =
10
;
static
void
grow(
int
k,
int
position)
{
char
[]a =
new
char
[size];
for
(
int
i = position; i < size; i++)
{
a[i - position] = buffer[i];
}
for
(
int
i =
0
; i < k; i++)
{
buffer[i + position] =
'_'
;
}
for
(
int
i =
0
; i < k; i++)
{
buffer[position + k + i] = a[i];
}
size += k;
gap_right += k;
}
static
void
left(
int
position)
{
while
(position < gap_left)
{
gap_left--;
gap_right--;
buffer[gap_right +
1
] = buffer[gap_left];
buffer[gap_left]=
'_'
;
}
}
static
void
right(
int
position)
{
while
(position > gap_left)
{
gap_left++;
gap_right++;
buffer[gap_left -
1
] = buffer[gap_right];
buffer[gap_right]=
'_'
;
}
}
static
void
move_cursor(
int
position)
{
if
(position < gap_left)
{
left(position);
}
else
{
right(position);
}
}
static
void
insert(String input,
int
position)
{
int
len = input.length();
int
i =
0
;
if
(position != gap_left)
{
move_cursor(position);
}
while
(i < len)
{
if
(gap_right == gap_left)
{
int
k =
10
;
grow(k, position);
}
buffer[gap_left] = input.charAt(i);
gap_left++;
i++;
position++;
}
}
public
static
void
main(String[] args)
{
for
(
int
i =
0
; i <
10
; i++)
{
buffer[i] =
'_'
;
}
System.out.println(
"Initializing the gap"
+
" buffer with size 10"
);
for
(
int
i =
0
; i < size; i++)
{
System.out.print(buffer[i] +
" "
);
}
System.out.println();
String input =
"GEEKSGEEKS"
;
int
position =
0
;
insert(input, position);
System.out.println();
System.out.println(
"Inserting a string "
+
"to buffer: GEEKSGEEKS"
);
System.out.print(
"Output: "
);
for
(
int
i =
0
; i < size; i++)
{
System.out.print(buffer[i] +
" "
);
}
input =
"FOR"
;
position =
5
;
insert(input, position);
System.out.println();
System.out.println();
System.out.println(
"Inserting a string"
+
" to buffer: FOR"
);
System.out.print(
"Output: "
);
for
(
int
i =
0
; i < size; i++)
{
System.out.print(buffer[i] +
" "
);
}
}
}