## TITLE('Long Distance PCR')
## DESCRIPTION
## Select the statement that is TRUE or FALSE about Long Distance PCR.
## ENDDESCRIPTION
## KEYWORDS('Long Distance PCR','true/false','multiple choice')
## DBsubject('Laboratory Techniques')
## DBchapter('')
## DBsection('')
## Date('2026-07-12')
## Author('Neil R. Voss')
## Institution('Roosevelt University')

DOCUMENT();

loadMacros(
  "PGstandard.pl",
  "PGML.pl",
  "PGchoicemacros.pl",
  "parserRadioButtons.pl",
  "PGcourse.pl",
);

TEXT(beginproblem());
$showPartialCorrectAnswers = 1;

#==========================================================
# AUTO-GENERATED GROUPS FROM YAML
#==========================================================

@true_groups = (
  [
    'the time for polymerase elongation step is extended',
    'the polymerase elongation time is increased',
  ],
  [
    'the time for dna denaturation step is shortened',
    'the dna denaturation time is decreased',
  ],
  [
    'the temperature for polymerase elongation step is lowered',
    'the polymerase elongation temperature is decreased',
  ],
  [
    'a second polymerase is added to proofread mistakes made by Taq',
    'a mixture of two different thermostable polymerases is used',
  ],
  [
    'normal PCR cannot produce products longer than 5 kb',
    'long range PCR can amplify long target DNA sequences up to 30 kb',
  ],
  [
    'the dna denaturation step can cause depurination of the purine bases',
  ],
  [
    'the buffer conditions are modified to provide better ionic concentrations',
  ],
);
@false_groups = (
  [
    'the time for polymerase elongation step is shortened',
    'the polymerase elongation time is decreased',
  ],
  [
    'the time for dna denaturation step is extended',
    'the dna denaturation time is increased',
  ],
  [
    'the temperature for polymerase elongation step is raised',
    'the polymerase elongation temperature is increased',
  ],
  [
    'long range PCR can amplify long target DNA sequences up to an amazing 3,000 kb',
    'normal PCR cannot produce products longer than 200 bases',
    'long range PCR can amplify long target DNA sequences of only 4 kb',
  ],
  [
    'the dna denaturation step can cause depurination of the pyrimidine bases',
  ],
);

#==========================================================
# GLOBAL SETTINGS
#==========================================================

$topic = 'Long Distance PCR';
my $local_random = PGrandom->new();
$local_random->srand($problemSeed);
my @mode_choices = ("TRUE", "FALSE");
$mode = $mode_choices[$local_random->random(0, $#mode_choices, 1)];
$num_distractors = 4;
#==========================================================
# SELECT GROUP
#==========================================================

my (@selected_group, @opposite_groups);

if ($mode eq "TRUE") {
  $group_index      = $local_random->random(0, scalar(@true_groups)-1, 1);
  @selected_group   = @{ $true_groups[$group_index] };
  @opposite_groups  = @false_groups;
} else {
  $group_index      = $local_random->random(0, scalar(@false_groups)-1, 1);
  @selected_group   = @{ $false_groups[$group_index] };
  @opposite_groups  = @true_groups;
}

#==========================================================
# PICK CORRECT + DISTRACTORS
#==========================================================

my $correct_index = $local_random->random(0, $#selected_group, 1);
$correct = $selected_group[$correct_index];

my @available_group_indices = (0 .. $#opposite_groups);
my @selected_distractor_indices = ();

while (@selected_distractor_indices < $num_distractors && @available_group_indices > 0) {
  my $random_index = $local_random->random(0, scalar(@available_group_indices)-1, 1);
  push @selected_distractor_indices, splice(@available_group_indices, $random_index, 1);
}

@distractors = ();
foreach my $group_idx (@selected_distractor_indices) {
  my @group = @{ $opposite_groups[$group_idx] };
  my $distractor_index = $local_random->random(0, $#group, 1);
  my $distractor = $group[$distractor_index];
  push @distractors, $distractor;
}

@choices = ($correct, @distractors);

#==========================================================
# SHUFFLE CHOICES (SEED-STABLE)
#==========================================================

my @choice_indices = (0 .. $#choices);
my @choice_shuffled = ();
while (@choice_indices) {
  my $pick = $local_random->random(0, $#choice_indices, 1);
  push @choice_shuffled, splice(@choice_indices, $pick, 1);
}
@choices = @choices[@choice_shuffled];

#==========================================================
# RADIO BUTTONS WITH A/B/C/D/E LABELS
#==========================================================

$rb = RadioButtons(
  [@choices],
  $correct,
  labels        => ['A','B','C','D','E'],
  displayLabels => 1,
  randomize     => 0,
  separator     => '<div style="margin-bottom: 0.7em;"></div>',
);

#==========================================================
# PGML
#==========================================================

BEGIN_PGML

[@ $mode eq "TRUE" ? "Which one of the following statements is <span style='color: #127663;'><strong>TRUE</strong></span> about $topic?" : "Which one of the following statements is <span style='color: #ba372a;'><strong>FALSE</strong></span> about $topic?" @]*

[_]{$rb}

END_PGML

ENDDOCUMENT();

