## TITLE('Franklin\'s Photograph 51')
## DESCRIPTION
## Select the statement that is TRUE or FALSE about Franklin's Photograph 51.
## ENDDESCRIPTION
## KEYWORDS('Franklin\'s Photograph 51','true/false','multiple choice')
## DBsubject('Molecular Biology')
## 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 = (
  [
    'distance between nucleotides along DNA double helix',
  ],
  [
    'diameter of the DNA double helix',
  ],
  [
    'distance between turns of the DNA double helix (pitch)',
  ],
  [
    'DNA exists as an anti-parallel double helix',
    'DNA contains two strands, with each strand running in opposite directions',
  ],
  [
    'the angle of the pitch in the DNA double helix',
  ],
  [
    'the DNA bases face the inside of the helix',
  ],
  [
    'the phosphate groups are on the outside of the DNA double helix',
  ],
  [
    'the DNA double helix had ten nucleotides between each turn',
  ],
);
@false_groups = (
  [
    'A-T and G-C base pairing system',
  ],
  [
    'amount of guanine is equal to that of thymine',
    'amount of adenine is equal to that of cytosine',
    'amount of thymine is equal to that of guanine',
    'amount of cytosine is equal to that of adenine',
    'amount of thymine is equal to that of cytosine',
    'amount of cytosine is equal to that of thymine',
    'amount of guanine is equal to that of adenine',
    'amount of adenine is equal to that of guanine',
  ],
  [
    'identification of the correct tautomers or protonation state of the nucleobases',
    'identification of the correct (keto rather than enol) tautomeric forms for the nucleobases',
  ],
  [
    'DNA is the genetic material responsible for inheritance',
  ],
  [
    'G-C base pairs have three hydrogen bonds, whereas A-T base pairs only have two hydrogen bonds',
    'G-C base pairs are stronger than A-T base pairs',
    'A-T base pairs are weaker than G-C base pairs',
  ],
);

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

$topic = q{Franklin's Photograph 51};
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;
# Question text with FALSE override
$question_false = q{What information was NOT obtained from Rosalind Franklin's diffraction pattern in Photograph 51?};
#==========================================================
# 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?" : $question_false @]*

[_]{$rb}

END_PGML

ENDDOCUMENT();

