Skip to content

Commit 9ad16cf

Browse files
committed
Add comments to tasks
1 parent c655ad4 commit 9ad16cf

File tree

6 files changed

+99
-56
lines changed

6 files changed

+99
-56
lines changed

services/app/apps/codebattle/lib/codebattle/task.ex

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,25 @@ defmodule Codebattle.Task do
1313

1414
@derive {Jason.Encoder,
1515
only: [
16+
:arguments_generator,
17+
:asserts,
18+
:asserts_examples,
19+
:comment,
20+
:creator_id,
21+
:description_en,
22+
:description_ru,
23+
:examples,
24+
:generator_lang,
1625
:id,
17-
:name,
26+
:input_signature,
1827
:level,
19-
:examples,
20-
:description_ru,
21-
:description_en,
22-
:tags,
23-
:state,
28+
:name,
2429
:origin,
25-
:visibility,
26-
:creator_id,
27-
:input_signature,
2830
:output_signature,
29-
:asserts,
30-
:asserts_examples,
3131
:solution,
32-
:arguments_generator,
33-
:generator_lang
32+
:state,
33+
:tags,
34+
:visibility
3435
]}
3536

3637
@level_order %{
@@ -62,6 +63,7 @@ defmodule Codebattle.Task do
6263
field(:description_en, :string)
6364
field(:name, :string)
6465
field(:level, :string)
66+
field(:comment, :string)
6567
field(:input_signature, {:array, AtomizedMap}, default: [])
6668
field(:output_signature, AtomizedMap, default: %{})
6769
field(:asserts_examples, {:array, AtomizedMap}, default: [])
@@ -84,23 +86,24 @@ defmodule Codebattle.Task do
8486
def changeset(struct, params \\ %{}) do
8587
struct
8688
|> cast(params, [
87-
:examples,
89+
:arguments_generator,
8890
:asserts,
89-
:description_ru,
91+
:comment,
92+
:creator_id,
9093
:description_en,
91-
:name,
92-
:level,
93-
:input_signature,
94-
:output_signature,
94+
:description_ru,
9595
:disabled,
96-
:tags,
97-
:state,
96+
:examples,
97+
:generator_lang,
98+
:input_signature,
99+
:level,
100+
:name,
98101
:origin,
99-
:visibility,
100-
:creator_id,
102+
:output_signature,
101103
:solution,
102-
:arguments_generator,
103-
:generator_lang
104+
:state,
105+
:tags,
106+
:visibility
104107
])
105108
|> validate_required([:examples, :description_en, :name, :level, :asserts])
106109
|> validate_inclusion(:state, @states)
@@ -116,22 +119,24 @@ defmodule Codebattle.Task do
116119
|> Codebattle.Repo.insert!(
117120
on_conflict: [
118121
set: [
122+
arguments_generator: Map.get(params, :arguments_generator, ""),
123+
asserts: params.asserts,
124+
asserts_examples: Map.get(params, :asserts_examples, []),
125+
comment: Map.get(params, :comment),
126+
conflict: params.conflict,
119127
creator_id: params[:creator_id],
120-
origin: params.origin,
121-
state: params.state,
122-
visibility: params.visibility,
123-
examples: params.examples,
124128
description_en: params.description_en,
125129
description_ru: params.description_ru,
126-
level: params.level,
130+
examples: params.examples,
131+
generator_lang: Map.get(params, :generator_lang, "js"),
127132
input_signature: params.input_signature,
133+
level: params.level,
134+
origin: params.origin,
128135
output_signature: params.output_signature,
129-
asserts: params.asserts,
130-
asserts_examples: Map.get(params, :asserts_examples, []),
131136
solution: Map.get(params, :solution, ""),
132-
arguments_generator: Map.get(params, :arguments_generator, ""),
133-
generator_lang: Map.get(params, :generator_lang, "js"),
134-
tags: params.tags
137+
state: params.state,
138+
tags: params.tags,
139+
visibility: params.visibility
135140
]
136141
],
137142
conflict_target: :name
@@ -233,6 +238,7 @@ defmodule Codebattle.Task do
233238
name: "",
234239
description_ru: "",
235240
description_en: "",
241+
comment: "",
236242
level: "elementary",
237243
input_signature: [],
238244
output_signature: %{

services/app/apps/codebattle/lib/codebattle/tournament/strategy/swiss.ex

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,12 @@ defmodule Codebattle.Tournament.Swiss do
99

1010
@impl Tournament.Base
1111
def complete_players(tournament) do
12-
if rem(players_count(tournament), 2) == 0 do
13-
tournament
12+
# just for the UI test
13+
if false do
14+
bots = Bot.Context.build_list(111)
15+
add_players(tournament, %{users: bots})
1416
else
15-
bot = Tournament.Player.new!(Bot.Context.build())
16-
# bots = Bot.Context.build_list(11)
17-
# add_players(tournament, %{users: bots})
18-
19-
Codebattle.PubSub.broadcast("tournament:player:joined", %{
20-
tournament: tournament,
21-
player: bot
22-
})
23-
24-
add_players(tournament, %{users: [bot]})
17+
tournament
2518
end
2619
end
2720

@@ -55,16 +48,28 @@ defmodule Codebattle.Tournament.Swiss do
5548

5649
@impl Tournament.Base
5750
def build_round_pairs(tournament) do
58-
tournament
59-
|> get_players()
60-
|> Enum.map(&{&1.id, &1.score})
61-
|> Tournament.PairBuilder.ByScore.call()
51+
{player_pair_ids, unmatched_player_ids} =
52+
tournament
53+
|> get_players()
54+
|> Enum.filter(&(&1.state == "active"))
55+
|> Enum.map(&{&1.id, &1.score})
56+
|> Tournament.PairBuilder.ByScore.call()
57+
58+
opponent_bot = Bot.Context.build() |> Tournament.Player.new!()
59+
60+
unmatched =
61+
unmatched_player_ids
62+
|> Enum.map(fn id ->
63+
[get_player(tournament, id), opponent_bot]
64+
end)
6265

63-
{player_pairs, new_played_pair_ids} = build_player_pairs(tournament)
66+
played_pair_ids = []
6467

6568
{
66-
update_struct(tournament, %{played_pair_ids: new_played_pair_ids}),
67-
player_pairs
69+
update_struct(tournament, %{played_pair_ids: played_pair_ids}),
70+
player_pair_ids
71+
|> Enum.map(&get_players(tournament, &1))
72+
|> Enum.concat(unmatched)
6873
}
6974
end
7075

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
defmodule Codebattle.Repo.Migrations.AddCommentToTask do
2+
use Ecto.Migration
3+
4+
def change do
5+
alter table(:tasks) do
6+
add(:comment, :string)
7+
end
8+
end
9+
end

services/app/apps/runner/lib/runner/languages.ex

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ defmodule Runner.Languages do
3030
def solution(<%= arguments %>)
3131
<%= return_statement %>
3232
end
33+
# <%= comment %>
3334
""",
3435
arguments_template: %{argument: "<%= name %>", delimiter: ", "},
3536
return_template: "<%= default_value %>",
@@ -66,6 +67,7 @@ defmodule Runner.Languages do
6667
const solution = (<%= arguments %>) => {
6768
<%= return_statement %>
6869
};
70+
// <%= comment %>
6971
7072
module.exports = solution;
7173
""",
@@ -112,6 +114,8 @@ defmodule Runner.Languages do
112114
113115
};
114116
117+
// <%= comment %>
118+
115119
export default solution;
116120
""",
117121
arguments_template: %{argument: "<%= name %>: <%= type %>", delimiter: ", "},
@@ -145,6 +149,7 @@ defmodule Runner.Languages do
145149
<%= expected %>solution(<%= arguments %>) {
146150
147151
}
152+
// <%= comment %>
148153
""",
149154
arguments_template: %{argument: "<%= type %> <%= name %>", delimiter: ", "},
150155
expected_template: "<%= type %> ",
@@ -180,6 +185,7 @@ defmodule Runner.Languages do
180185
<%= expected %> solution(<%= arguments %>) {
181186
<%= return_statement %>
182187
}
188+
// <%= comment %>
183189
""",
184190
arguments_template: %{argument: "<%= type %> <%= name %>", delimiter: ", "},
185191
return_template: "return <%= default_value %>;",
@@ -232,6 +238,7 @@ defmodule Runner.Languages do
232238
233239
}
234240
}
241+
// <%= comment %>
235242
""",
236243
arguments_template: %{argument: "<%= type %> <%= name %>", delimiter: ", "},
237244
expected_template: "<%= type %> ",
@@ -274,6 +281,7 @@ defmodule Runner.Languages do
274281
fun solution(<%= arguments %>):<%= expected %> {
275282
276283
}
284+
// <%= comment %>
277285
""",
278286
arguments_template: %{argument: "<%= name %>: <%= type %>", delimiter: ", "},
279287
expected_template: " <%= type %>",
@@ -322,6 +330,7 @@ defmodule Runner.Languages do
322330
}
323331
}
324332
}
333+
// <%= comment %>
325334
""",
326335
arguments_template: %{argument: "<%= type %> <%= name %>", delimiter: ", "},
327336
expected_template: " <%= type %>",
@@ -364,6 +373,7 @@ defmodule Runner.Languages do
364373
func solution(<%= arguments %>)<%= expected %> {
365374
366375
}
376+
// <%= comment %>
367377
""",
368378
arguments_template: %{argument: "<%= name %> <%= type %>", delimiter: ", "},
369379
expected_template: " <%= type %>",
@@ -400,6 +410,7 @@ defmodule Runner.Languages do
400410
<%= return_statement %>
401411
end
402412
end
413+
# <%= comment %>
403414
""",
404415
arguments_template: %{argument: "<%= name %>", delimiter: ", "},
405416
return_template: "<%= default_value %>",
@@ -434,6 +445,7 @@ defmodule Runner.Languages do
434445
435446
def solution(<%= arguments %>)<%= expected %>:
436447
<%= return_statement %>
448+
# <%= comment %>
437449
""",
438450
arguments_template: %{argument: "<%= name %>: <%= type %>", delimiter: ", "},
439451
expected_template: " -> <%= type %>",
@@ -478,6 +490,7 @@ defmodule Runner.Languages do
478490
function solution(<%= arguments %>) {
479491
<%= return_statement %>
480492
}
493+
// <%= comment %>
481494
""",
482495
return_template: "return <%= default_value %>;",
483496
arguments_template: %{argument: "<%= type %> $<%= name %>", delimiter: ", "},
@@ -525,6 +538,7 @@ defmodule Runner.Languages do
525538
(defn solution [<%= arguments %>]
526539
<%= return_statement %>
527540
)
541+
; <%= comment %>
528542
""",
529543
arguments_template: %{argument: "<%= name %>", delimiter: " "},
530544
return_template: "<%= default_value %>",
@@ -586,6 +600,7 @@ defmodule Runner.Languages do
586600
vector
587601
vector-algorithms
588602
-}
603+
-- <%= comment %>
589604
""",
590605
typespec_template: %{argument: "<%= type %>", delimiter: " -> "},
591606
arguments_template: %{argument: "<%= name %>", delimiter: " "},
@@ -628,6 +643,7 @@ defmodule Runner.Languages do
628643
pub fn solution(<%= arguments %>) -> <%= expected %> {
629644
630645
}
646+
// <%= comment %>
631647
""",
632648
arguments_template: %{argument: "<%= name %>: <%= type %>", delimiter: ", "},
633649
expected_template: "<%= type %>",

services/app/apps/runner/lib/runner/solution_generator.ex

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@ defmodule Runner.SolutionGenerator do
66
@spec call(Runner.Task.t(), Runner.LanguageMeta.t()) :: String.t()
77
def call(task, lang_meta) do
88
binding =
9-
%{arguments: [], expected_type: "", return_statement: "", typespec: "lal"}
9+
%{
10+
arguments: [],
11+
expected_type: "",
12+
return_statement: "",
13+
typespec: "lal",
14+
comment: task.comment || "use stdout to debug"
15+
}
1016
|> add_arguments(lang_meta, task.input_signature)
1117
|> add_typespec(lang_meta, task.input_signature)
1218
|> add_expected(lang_meta, task.output_signature)

services/app/apps/runner/lib/runner/task.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ defmodule Runner.Task do
99

1010
@type t :: %__MODULE__{}
1111

12-
@fields [:input_signature, :output_signature, :asserts, :asserts_examples]
12+
@fields [:comment, :input_signature, :output_signature, :asserts, :asserts_examples]
1313
@primary_key false
1414
embedded_schema do
15+
field(:comment, :string, default: "use stdout to debug")
1516
field(:input_signature, {:array, AtomizedMap}, default: [])
1617
field(:output_signature, AtomizedMap, default: %{})
1718
field(:asserts, {:array, AtomizedMap}, default: [])

0 commit comments

Comments
 (0)