## TITLE('Hardy-Weinberg Equilibrium Conditions for Non-evolving Populations')
## DESCRIPTION
## Select the statement that is TRUE or FALSE about Hardy-Weinberg equilibrium conditions for non-evolving populations.
## ENDDESCRIPTION
## KEYWORDS('Hardy-Weinberg equilibrium conditions for non-evolving populations','true/false','multiple choice')
## DBsubject('Genetics')
## 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 = (
  [
    'no mutations are actively occuring',
    'alleles remain the same across generations',
    'no new alleles are being added to the gene pool',
    'the gene copy number is NOT changing due to chromosomal alterations',
  ],
  [
    'no selective mating is actively occuring',
    'random mating is actively occuring',
    'no inbreeding is actively occuring',
    'random mixing of gametes is actively occuring',
  ],
  [
    'no natural selection is actively occuring',
    'all individuals are equally likely to survive',
    'there are no genotype-based differences in survival rates of individuals',
    'there are no genotype-based differences in reproductive success of individuals',
    'all genotypes have equal chance at surviving',
    'all genotypes are equally likely to survive',
  ],
  [
    'no genetic drift is actively occuring',
    'there exists an extremely large population size',
    'the population size is extremely large',
    'allele frequecies remain constant across generations',
  ],
  [
    'no gene flow is actively occuring',
    'it is an isolated population',
    'alleles are NOT moving into and out of the population',
    'no emigration and no immgration is actively occuring',
  ],
);
@false_groups = (
  [
    'mutations are actively occuring across generations',
    'alleles are becoming actively modified across generations',
    'genes are actively being duplicated or deleted due to chromosomal alterations',
    'genes are actively being deleted or duplicated due to chromosomal alterations',
    'new alleles are actively being added to the gene pool',
  ],
  [
    'selective mating is actively occuring',
    'mating is NOT completly random',
    'a significant amount of inbreeding is actively occuring',
    'some individuals are only mating with a subset of the population',
  ],
  [
    'natural selection is actively occuring',
    'some individuals are more likely to survive than others',
    'there are genotype-based differences in survival rates of individuals',
    'there are genotype-based differences in reproductive success of individuals',
    'some genotypes have a better chance at surviving',
    'some genotypes are more likely to survive than others',
  ],
  [
    'genetic drift is actively occuring',
    'there exists an extremely small population size',
    'the population size is extremely small',
    'allele frequecies are randomly changing',
  ],
  [
    'gene flow is actively occuring',
    'the population is often mixed with other populations',
    'alleles are moving into and out of the population',
    'allele frequecies change constant across generations',
    'a significant amount of immgration is actively occuring',
    'a significant amount of migration is actively occuring',
  ],
);

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

$topic = 'Hardy-Weinberg equilibrium conditions for non-evolving populations';
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();

