Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
Conversion
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Vladislav Kiselev
Conversion
Commits
99ae99fe
Commit
99ae99fe
authored
Aug 05, 2019
by
Vladislav Kiselev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Добавлены аннотации к операциям из решения.
parent
fed0aba4
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
142 additions
and
9 deletions
+142
-9
src/inport/ConversionUtils/Utils.java
src/inport/ConversionUtils/Utils.java
+14
-0
src/inport/Operation.java
src/inport/Operation.java
+117
-3
src/inport/TaskCase.java
src/inport/TaskCase.java
+11
-6
No files found.
src/inport/ConversionUtils/Utils.java
View file @
99ae99fe
...
@@ -2,8 +2,22 @@ package inport.ConversionUtils;
...
@@ -2,8 +2,22 @@ package inport.ConversionUtils;
import
inport.*
;
import
inport.*
;
import
java.util.*
;
import
java.util.*
;
import
java.util.function.Function
;
public
class
Utils
{
public
class
Utils
{
public
static
<
A
,
B
>
Collection
<
B
>
map
(
Collection
<
A
>
as
,
Function
<
A
,
B
>
f
)
{
Collection
<
B
>
b
;
try
{
b
=
as
.
getClass
().
newInstance
();
}
catch
(
Exception
e
)
{
throw
new
IllegalArgumentException
(
"Type "
+
as
.
getClass
()
+
" needs a parameterless constructor"
);
}
for
(
A
x
:
as
)
{
b
.
add
(
f
.
apply
(
x
));
}
return
b
;
}
static
class
PairComparator
<
T
extends
Comparable
<
T
>,
U
extends
Comparable
<
U
>>
implements
Comparator
<
Pair
<
T
,
U
>>
{
static
class
PairComparator
<
T
extends
Comparable
<
T
>,
U
extends
Comparable
<
U
>>
implements
Comparator
<
Pair
<
T
,
U
>>
{
public
int
compare
(
Pair
<
T
,
U
>
p1
,
Pair
<
T
,
U
>
p2
)
{
public
int
compare
(
Pair
<
T
,
U
>
p1
,
Pair
<
T
,
U
>
p2
)
{
int
res
=
p1
.
getKey
().
compareTo
(
p2
.
getKey
());
int
res
=
p1
.
getKey
().
compareTo
(
p2
.
getKey
());
...
...
src/inport/Operation.java
View file @
99ae99fe
...
@@ -117,8 +117,57 @@ public class Operation {
...
@@ -117,8 +117,57 @@ public class Operation {
public
Operation
()
{
public
Operation
()
{
}
}
private
static
String
getTransportName
(
MovingObject
obj
)
{
if
(
obj
instanceof
TransportShip
)
{
return
"судно "
+
obj
.
getId
();
}
if
(
obj
instanceof
Bunker
)
{
return
"бункеровщик "
+
obj
.
getId
();
}
if
(
obj
instanceof
Tow
)
{
return
"буксир "
+
obj
.
getId
();
}
return
(
obj
.
getName
().
isEmpty
())
?
"оборудование "
+
obj
.
getId
()
:
obj
.
getName
();
}
private
static
String
getShortTransportName
(
MovingObject
obj
)
{
if
((
obj
instanceof
TransportShip
)
||
(
obj
instanceof
Bunker
)
||
(
obj
instanceof
Tow
))
{
return
Integer
.
toString
(
obj
.
getId
());
}
return
(
obj
.
getName
().
isEmpty
())
?
Integer
.
toString
(
obj
.
getId
())
:
obj
.
getName
();
}
private
static
String
firstCharToUppercase
(
String
s
)
{
return
s
.
substring
(
0
,
1
).
toUpperCase
()
+
s
.
substring
(
1
);
}
private
static
String
resourcesToString
(
List
<
MovingObject
>
resources
)
{
return
"{"
+
String
.
join
(
", "
,
Utils
.
map
(
resources
,
Operation:
:
getShortTransportName
))
+
"}"
;
}
@Override
@Override
public
String
toString
()
{
public
String
toString
()
{
return
toString
(
false
,
null
);
}
public
String
toString
(
boolean
includeAnnotations
,
ArrayList
<
Integer
>
maxSizes
)
{
ArrayList
<
String
>
components
=
getComponentsOfStringValue
(
includeAnnotations
);
StringBuilder
sb
=
new
StringBuilder
();
for
(
int
compNo
=
0
;
compNo
<
components
.
size
();
compNo
++)
{
sb
.
append
(
components
.
get
(
compNo
));
if
(
maxSizes
!=
null
)
{
for
(
int
delta
=
maxSizes
.
get
(
compNo
)
-
components
.
get
(
compNo
).
length
();
delta
>
0
;
delta
--)
{
sb
.
append
(
" "
);
}
}
}
return
sb
.
toString
();
}
public
ArrayList
<
String
>
getComponentsOfStringValue
(
boolean
includeAnnotations
)
{
ArrayList
<
String
>
res
=
new
ArrayList
<>();
if
(
executor
==
null
)
{
if
(
executor
==
null
)
{
executor
=
Utils
.
getExecutor
(
template
);
executor
=
Utils
.
getExecutor
(
template
);
}
}
...
@@ -126,8 +175,12 @@ public class Operation {
...
@@ -126,8 +175,12 @@ public class Operation {
resources
=
Utils
.
getResources
(
template
);
resources
=
Utils
.
getResources
(
template
);
}
}
StringBuilder
sb
=
new
StringBuilder
();
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
template
.
getId
()).
append
(
"; "
);
sb
.
append
(
fixation
?
"F"
:
"R"
).
append
(
"; "
).
append
(
start
).
append
(
"; "
).
append
(
duration
);
res
.
add
(
Integer
.
toString
(
template
.
getId
()));
res
.
add
(
"; "
+
(
fixation
?
"F"
:
"R"
));
res
.
add
(
"; "
+
start
);
res
.
add
(
"; "
+
duration
);
sb
.
append
(
" ("
).
append
(
executor
.
getId
()).
append
(
" "
);
sb
.
append
(
" ("
).
append
(
executor
.
getId
()).
append
(
" "
);
sb
.
append
(
bunker
.
map
(
b
->
b
.
getId
()
+
" "
).
orElse
(
""
)).
append
(
"["
);
sb
.
append
(
bunker
.
map
(
b
->
b
.
getId
()
+
" "
).
orElse
(
""
)).
append
(
"["
);
boolean
isFirst
=
true
;
boolean
isFirst
=
true
;
...
@@ -142,7 +195,68 @@ public class Operation {
...
@@ -142,7 +195,68 @@ public class Operation {
sb
.
append
(
"]"
);
sb
.
append
(
"]"
);
sb
.
append
(
intensity
.
map
(
i
->
" "
+
i
).
orElse
(
""
));
sb
.
append
(
intensity
.
map
(
i
->
" "
+
i
).
orElse
(
""
));
sb
.
append
(
")"
);
sb
.
append
(
")"
);
return
sb
.
toString
();
res
.
add
(
sb
.
toString
());
sb
=
new
StringBuilder
();
if
(
includeAnnotations
)
{
sb
.
append
(
" \\* "
);
if
(
template
instanceof
MovingTemplate
)
{
MovingTemplate
o
=
(
MovingTemplate
)
template
;
sb
.
append
(
firstCharToUppercase
(
getTransportName
(
executor
))
+
" идёт к причалу "
+
o
.
getDestination
().
getId
()
+
" от причала "
+
o
.
getStartLocation
().
getId
());
if
(!
resources
.
isEmpty
())
{
sb
.
append
(
" используя буксиры "
+
resourcesToString
(
resources
));
}
sb
.
append
(
"."
);
}
else
if
(
template
instanceof
LoadingTemplate
)
{
LoadingTemplate
o
=
(
LoadingTemplate
)
template
;
sb
.
append
(
firstCharToUppercase
(
getTransportName
(
executor
)));
sb
.
append
(
" принимает груз "
+
o
.
getCargo
().
getId
());
if
(
bunker
.
isPresent
())
{
sb
.
append
(
" из бункеровщика "
+
bunker
.
get
().
getId
());
}
else
{
sb
.
append
(
" из хранилища "
+
o
.
getStorage
().
getId
());
}
sb
.
append
(
" с интенсивностью "
+
o
.
getIntensity
());
sb
.
append
(
" у причала "
+
o
.
getStartLocation
().
getId
());
if
(!
resources
.
isEmpty
())
{
sb
.
append
(
" используя оборудование "
+
resourcesToString
(
resources
));
}
sb
.
append
(
"."
);
}
else
if
(
template
instanceof
MooringTemplate
)
{
MooringTemplate
o
=
(
MooringTemplate
)
template
;
sb
.
append
(
firstCharToUppercase
(
getTransportName
(
executor
)));
if
(
o
.
isDirect
())
{
sb
.
append
(
" швартуется к причалу "
);
}
else
{
sb
.
append
(
" отшвартовывается от причала "
);
}
sb
.
append
(
o
.
getStartLocation
().
getId
());
if
(!
resources
.
isEmpty
())
{
sb
.
append
(
" используя буксиры "
+
resourcesToString
(
resources
));
}
sb
.
append
(
"."
);
}
}
res
.
add
(
sb
.
toString
());
return
res
;
}
public
static
ArrayList
<
Integer
>
getMaxSizesOfComponents
(
Collection
<
Operation
>
operations
,
boolean
includeAnnotations
)
{
ArrayList
<
Integer
>
res
=
new
ArrayList
<>();
for
(
Operation
operation
:
operations
)
{
ArrayList
<
String
>
components
=
operation
.
getComponentsOfStringValue
(
includeAnnotations
);
for
(
int
i
=
0
;
i
<
components
.
size
();
i
++)
{
if
(
i
>=
res
.
size
())
{
res
.
add
(
0
);
}
res
.
set
(
i
,
Math
.
max
(
res
.
get
(
i
),
components
.
get
(
i
).
length
()));
}
}
return
res
;
}
}
public
Operation
(
String
str
,
public
Operation
(
String
str
,
...
...
src/inport/TaskCase.java
View file @
99ae99fe
...
@@ -812,19 +812,24 @@ public class TaskCase {
...
@@ -812,19 +812,24 @@ public class TaskCase {
writer
.
write
(
"\n"
);
writer
.
write
(
"\n"
);
writer
.
write
(
"\nTask Properties"
+
"\n"
);
writer
.
write
(
"\nTask Properties"
+
"\n"
);
writer
.
write
(
planningInterval
+
"; "
+
criterionType
+
"\n"
);
writer
.
write
(
planningInterval
+
"; "
+
criterionType
+
"\n"
);
{
ArrayList
<
Integer
>
maxSizes
=
Operation
.
getMaxSizesOfComponents
(
fixedOperations
,
true
);
writer
.
write
(
"\n"
+
Tag
.
Fixed_Operations
.
text
+
"\n"
);
writer
.
write
(
"\n"
+
Tag
.
Fixed_Operations
.
text
+
"\n"
);
for
(
Operation
op
:
fixedOperations
)
{
for
(
Operation
op
:
fixedOperations
)
{
writer
.
write
(
op
.
toString
()
+
"\n"
);
writer
.
write
(
op
.
toString
(
true
,
maxSizes
)
+
"\n"
);
}
}
}
writer
.
write
(
"\n"
);
writer
.
write
(
"\n"
);
writer
.
write
(
"\nSolution"
+
"\n"
);
writer
.
write
(
"\nSolution"
+
"\n"
);
writer
.
write
(
solution_result
+
"\n"
);
writer
.
write
(
solution_result
+
"\n"
);
solution
.
sort
(
new
OperationsComparator
());
solution
.
sort
(
new
OperationsComparator
());
{
for
(
Operation
c
:
solution
)
ArrayList
<
Integer
>
maxSizes
=
Operation
.
getMaxSizesOfComponents
(
solution
,
true
);
writer
.
write
(
c
.
toString
()+
"\n"
);
for
(
Operation
c
:
solution
)
writer
.
write
(
c
.
toString
(
true
,
maxSizes
)
+
"\n"
);
}
writer
.
flush
();
writer
.
flush
();
}
}
catch
(
IOException
ex
)
{
catch
(
IOException
ex
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment