{"id":437,"date":"2025-12-31T13:24:47","date_gmt":"2025-12-31T13:24:47","guid":{"rendered":"https:\/\/i-cte.org\/robot\/?p=437"},"modified":"2026-01-10T03:41:54","modified_gmt":"2026-01-10T03:41:54","slug":"ielts-knowledge","status":"publish","type":"post","link":"https:\/\/i-cte.org\/robot\/ielts-knowledge\/","title":{"rendered":"IELTs &#8211; Knowledge"},"content":{"rendered":"\n<div class=\"icte-menu\">\n  <a href=\"https:\/\/i-cte.org\/robot\/ielts-cork\/\">Passage 1<\/a>\n  <a href=\"https:\/\/i-cte.org\/robot\/ielts-hobby\/\">Passage 2<\/a>\n  <a href=\"https:\/\/i-cte.org\/robot\/ielts-knowledge\/\">Passage 3<\/a>\n<a href=\"https:\/\/i-cte.org\/robot\/ielts-reading-test-2\/\">Test 2<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-reading-test-3\/\">Test 3<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-reading-test-4\/\">Test 4<\/a>\n  <a href=\"https:\/\/i-cte.org\/robot\/ielts-speaking-overview\/\">Speaking<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-listening-overview\/\">Listening<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-writing-overview\/\">Writing<\/a>\n<\/div>\n\n<section class=\"icte-ielts\" aria-label=\"IELTS Reading - What's the purpose of gaining knowledge?\">\n  <header class=\"icte-ielts__intro\">\n    <h2 class=\"icte-ielts__title\">IELTS Reading Passage 3: What\u2019s the purpose of gaining knowledge?<\/h2>\n    <p class=\"icte-ielts__sub\">\n      Read the passage below. Then answer Questions 27\u201340. Use the buttons to check or show answers.\n    <\/p>\n  <\/header>\n\n  <!-- Reading -->\n  <section class=\"icte-ielts__panel\" aria-label=\"Reading passage\">\n    <div class=\"icte-ielts__panelHead\">\n      <h3 class=\"icte-ielts__h3\">Reading (Sections A\u2013F)<\/h3>\n      <div class=\"icte-ielts__headRight\">\n        <button id=\"toggle-reading\" class=\"icte-btn icte-btn--ghost\" type=\"button\">Hide<\/button>\n        <span class=\"icte-loader\" id=\"synthesis-loader\" aria-hidden=\"true\"><\/span>\n      <\/div>\n    <\/div>\n\n    <div id=\"reading-area\" class=\"icte-ielts__reading\" role=\"region\" aria-label=\"Passage text\"><\/div>\n\n    <div class=\"icte-ielts__btnRow icte-ielts__btnRow--tight\">\n      <button id=\"play-passage\" class=\"icte-btn icte-btn--info\" type=\"button\">\ud83d\udd0a Read Passage<\/button>\n      <button id=\"stop-btn\" class=\"icte-btn icte-btn--danger\" type=\"button\">\u23f9 Stop Audio<\/button>\n      <a class=\"icte-link\" href=\"#icte-questions\">Jump to questions \u2193<\/a>\n    <\/div>\n  <\/section>\n\n  <!-- Controls -->\n  <section class=\"icte-ielts__panel\" aria-label=\"Controls\">\n    <div class=\"icte-ielts__row\">\n      <div class=\"icte-ielts__control\">\n        <label for=\"voice-select\"><strong>Choose Voice<\/strong><\/label>\n        <select id=\"voice-select\" aria-label=\"Select Voice\">\n          <option value=\"\">Loading voices&#8230;<\/option>\n        <\/select>\n      <\/div>\n\n      <div id=\"scoreBox\" class=\"icte-ielts__score\" aria-live=\"polite\"><\/div>\n    <\/div>\n\n    <div class=\"icte-ielts__btnGrid\" aria-label=\"Action buttons\">\n      <button id=\"play-instructions\" class=\"icte-btn icte-btn--info\" type=\"button\">\ud83d\udd0a Read Instructions<\/button>\n      <button id=\"play-questions\" class=\"icte-btn icte-btn--info\" type=\"button\">\ud83d\udd0a Read Questions<\/button>\n      <button id=\"check-btn\" class=\"icte-btn icte-btn--primary\" type=\"button\">Check Answers<\/button>\n      <button id=\"show-btn\" class=\"icte-btn icte-btn--dark\" type=\"button\">\ud83d\udc40 Show Answers<\/button>\n      <button id=\"summary-btn\" class=\"icte-btn icte-btn--dark\" type=\"button\">\ud83e\udde0 Summary<\/button>\n      <button id=\"main-ideas-btn\" class=\"icte-btn icte-btn--dark\" type=\"button\">\ud83d\udccc Main ideas<\/button>\n      <button id=\"reset-btn\" class=\"icte-btn icte-btn--ghost\" type=\"button\">Reset<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- Support -->\n  <section class=\"icte-ielts__panel\" aria-label=\"Learning support\">\n    <div class=\"icte-ielts__panelHead\">\n      <h3 class=\"icte-ielts__h3\">Support<\/h3>\n      <div class=\"icte-ielts__headRight\">\n        <button id=\"clear-support\" class=\"icte-btn icte-btn--ghost\" type=\"button\">Clear<\/button>\n      <\/div>\n    <\/div>\n\n    <div id=\"helper-area\" class=\"icte-ielts__helper\" role=\"region\" aria-live=\"polite\">\n      Click <strong>Summary<\/strong> or <strong>Main ideas<\/strong>.\n    <\/div>\n  <\/section>\n\n  <!-- Questions -->\n  <section class=\"icte-ielts__panel\" id=\"icte-questions\" aria-label=\"Questions\">\n\n    <div class=\"icte-ielts__panelHead\">\n      <h3 class=\"icte-ielts__h3\">Questions 27\u201332 (Matching headings)<\/h3>\n    <\/div>\n\n    <div class=\"icte-ielts__qArea\">\n      <div class=\"icte-q\">\n        <div class=\"icte-q__label\">List of Headings<\/div>\n        <ol class=\"icte-list\">\n          <li><strong>i.<\/strong> Courses that require a high level of commitment<\/li>\n          <li><strong>ii.<\/strong> A course title with two meanings<\/li>\n          <li><strong>iii.<\/strong> The equal importance of two key issues<\/li>\n          <li><strong>iv.<\/strong> Applying a theory in an unexpected context<\/li>\n          <li><strong>v.<\/strong> The financial benefits of studying<\/li>\n          <li><strong>vi.<\/strong> A surprising course title<\/li>\n          <li><strong>vii.<\/strong> Different names for different outcomes<\/li>\n          <li><strong>viii.<\/strong> The possibility of attracting the wrong kind of student<\/li>\n        <\/ol>\n      <\/div>\n      <div id=\"headings-area\"><\/div>\n    <\/div>\n\n    <div class=\"icte-ielts__panelHead icte-ielts__panelHead--sub\">\n      <h3 class=\"icte-ielts__h3\">Questions 33\u201336 (Complete the summary)<\/h3>\n    <\/div>\n    <div id=\"summary-area\" class=\"icte-ielts__qArea\"><\/div>\n\n    <div class=\"icte-ielts__panelHead icte-ielts__panelHead--sub\">\n      <h3 class=\"icte-ielts__h3\">Questions 37\u201340 (YES \/ NO \/ NOT GIVEN)<\/h3>\n    <\/div>\n    <div id=\"ynng-area\" class=\"icte-ielts__qArea\"><\/div>\n\n  <\/section>\n\n  <style>\n\/* Top green menu bar (WordPress-safe, full width) *\/\n.icte-menu{\n  width: 100%;\n  max-width: 100%;\n  box-sizing: border-box;\n  display: flex;\n  flex-wrap: wrap;\n  gap: .5rem;\n  justify-content: center;\n  align-items: center;\n  padding: .75rem .9rem;\n  margin: 0 0 1rem 0;\n\n  background: #16a34a;\n  border-radius: 14px;\n  box-shadow: 0 2px 8px rgba(0,0,0,.10);\n}\n\n\/* Menu links *\/\n.icte-menu a{\n  display: inline-block;\n  text-decoration: none;\n  font-weight: 900;\n  font-size: .95rem;\n  color: #ffffff;\n  padding: .55rem .85rem;\n  border-radius: 999px;\n  border: 1px solid rgba(255,255,255,.35);\n  background: rgba(255,255,255,.12);\n  transition: background .2s ease, transform .05s ease;\n}\n\n.icte-menu a:hover{\n  background: rgba(255,255,255,.22);\n}\n\n.icte-menu a:active{\n  transform: translateY(1px);\n}\n\n\/* Highlight current page automatically (when link matches current URL) *\/\n.icte-menu a.is-current{\n  background: #ffffff;\n  color: #16a34a;\n  border-color: #ffffff;\n}\n\n\/* Mobile-friendly *\/\n@media (max-width: 600px){\n  .icte-menu{\n    justify-content: flex-start;\n  }\n  .icte-menu a{\n    width: 100%;\n    text-align: center;\n  }\n}\n\n\n    .icte-ielts{ width:100%; margin:1rem 0; }\n    .icte-ielts__intro{\n      padding:.9rem 1rem; border:1px solid rgba(0,0,0,.10); border-radius:14px;\n      background:rgba(255,255,255,.7); margin-bottom:1rem;\n    }\n    .icte-ielts__title{ margin:0 0 .35rem; font-size:1.2rem; font-weight:900; }\n    .icte-ielts__sub{ margin:0; opacity:.85; }\n\n    .icte-ielts__panel{\n      border:1px solid rgba(0,0,0,.10); border-radius:14px; background:rgba(255,255,255,.85);\n      overflow:hidden; margin-bottom:1rem;\n    }\n    .icte-ielts__panelHead{\n      display:flex; align-items:center; justify-content:space-between; gap:.75rem;\n      padding:.85rem 1rem; border-bottom:1px solid rgba(0,0,0,.08); background:rgba(0,0,0,.03);\n    }\n    .icte-ielts__panelHead--sub{ margin-top:10px; border-top:1px solid rgba(0,0,0,.08); }\n    .icte-ielts__h3{ margin:0; font-size:1.03rem; font-weight:900; }\n    .icte-ielts__headRight{ display:flex; gap:.55rem; align-items:center; }\n\n    .icte-ielts__reading{\n      padding:.95rem 1rem 1.05rem;\n      line-height:1.75;\n      max-height:520px;\n      overflow:auto;\n    }\n    .icte-ielts__reading h4{ margin:.25rem 0 .4rem; font-weight:1000; }\n    .icte-ielts__reading p{ margin:0 0 .9rem; }\n    .icte-ielts__reading p:last-child{ margin-bottom:0; }\n\n    .icte-ielts__row{\n      display:flex; align-items:flex-end; justify-content:space-between; gap:.75rem;\n      padding:.85rem 1rem .25rem;\n    }\n    .icte-ielts__control label{ display:block; margin-bottom:.35rem; }\n    .icte-ielts__control select{\n      width:100%; max-width:520px; padding:.6rem .7rem; border-radius:12px;\n      border:1px solid rgba(0,0,0,.18); background:#fff; font:inherit;\n    }\n    .icte-ielts__score{\n      font-weight:900; font-size:.95rem; opacity:.9; white-space:nowrap; margin-bottom:.25rem;\n    }\n\n    .icte-ielts__btnRow{\n      padding:.75rem 1rem 1rem; display:flex; gap:.6rem; flex-wrap:wrap; align-items:center;\n    }\n    .icte-ielts__btnRow--tight{ padding-top:0; }\n    .icte-ielts__btnGrid{\n      padding:.75rem 1rem 1rem;\n      display:grid;\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n      gap:.6rem;\n    }\n\n    .icte-link{\n      font-weight:900;\n      text-decoration:none;\n      border:1px solid rgba(0,0,0,.14);\n      border-radius:12px;\n      padding:.55rem .75rem;\n      color:inherit;\n      background:rgba(255,255,255,.6);\n    }\n\n    .icte-ielts__qArea{ padding:.9rem 1rem 1rem; }\n\n    .icte-q{\n      padding:.75rem .8rem; border:1px solid rgba(0,0,0,.10); border-radius:12px;\n      background:rgba(255,255,255,.75); margin:0 0 .75rem;\n    }\n    .icte-q__label{ font-weight:900; display:block; margin-bottom:.4rem; }\n    .icte-q__controls{ display:flex; gap:.5rem; flex-wrap:wrap; align-items:center; }\n    .icte-q input[type=\"text\"]{\n      width:100%; max-width:520px; padding:.6rem .7rem; border-radius:12px;\n      border:1px solid rgba(0,0,0,.18); font:inherit;\n    }\n    .icte-q select{\n      padding:.55rem .65rem; border-radius:12px; border:1px solid rgba(0,0,0,.18);\n      background:#fff; font:inherit;\n    }\n    .icte-q__fb{ margin-top:.45rem; font-size:.95rem; font-weight:800; }\n\n    .icte-btn{\n      appearance:none; border:1px solid transparent; border-radius:12px;\n      padding:.65rem .85rem; font-weight:900; cursor:pointer; font:inherit;\n    }\n    .icte-btn--primary{ background:#16a34a; color:#fff; }\n    .icte-btn--info{ background:#0ea5e9; color:#fff; }\n    .icte-btn--danger{ background:#dc2626; color:#fff; }\n    .icte-btn--dark{ background:#334155; color:#fff; }\n    .icte-btn--ghost{ background:transparent; border-color:rgba(0,0,0,.20); color:inherit; }\n\n    .icte-loader{\n      width:18px; height:18px; border-radius:999px;\n      border:3px solid rgba(0,0,0,.15); border-top-color:#0ea5e9;\n      display:none; animation: icteSpin 1s linear infinite;\n    }\n    @keyframes icteSpin{ to{ transform: rotate(360deg); } }\n\n    .icte-ielts__helper{\n      padding:.95rem 1rem 1.05rem;\n      line-height:1.7;\n      overflow-wrap:anywhere;\n      word-break:break-word;\n    }\n    .icte-ielts__helper ul{ margin:.4rem 0 0 1.1rem; }\n    .icte-ielts__helper li{ margin:.35rem 0; }\n    .icte-ielts__helper .tag{\n      display:inline-block;\n      padding:.15rem .5rem;\n      border-radius:999px;\n      border:1px solid rgba(0,0,0,.12);\n      background:rgba(255,255,255,.7);\n      font-weight:900;\n      font-size:.85rem;\n      margin-right:.4rem;\n    }\n\n    .icte-list{ margin:.35rem 0 0 1.25rem; }\n    .icte-list li{ margin:.25rem 0; }\n\n    @media (max-width: 900px){\n      .icte-ielts__btnGrid{ grid-template-columns: repeat(2, minmax(0, 1fr)); }\n    }\n    @media (max-width: 600px){\n      .icte-ielts__row{ align-items:stretch; flex-direction:column; }\n      .icte-ielts__score{ white-space: normal; }\n      .icte-ielts__btnGrid{ grid-template-columns: 1fr; }\n    }\n  <\/style>\n\n  <script>\n    \/* ===== Reading text (provided by you) ===== *\/\n    const readingSections = [\n      {\n        id: \"A\",\n        text: `\"I would found an institution where any person can find instruction in any subject.\" That was the founders' motto for Cornell University, and it seems an apt characterization of the different university, also in the USA, where I currently teach philosophy. A student can prepare for a career in resort management, engineering, interior design, accounting, music, law enforcement, you name it. But what would the founders of these two institutions have thought of a course called \"Arson for Profit\"? I kid you not: we have it on the books. Any undergraduates who have met the academic requirements can sign up for the course in our program in \"fire science\".`\n      },\n      {\n        id: \"B\",\n        text: `Naturally, the course is intended for prospective arson investigators, who can learn all the tricks of the trade for detecting whether a fire was deliberately set, discovering who did it, and establishing a chain of evidence for effective prosecution in a court of law. But wouldn't this also be the perfect course for prospective arsonists to sign up for? My point is not to criticize academic programs in fire science: they are highly welcome as part of the increasing professionalization of this and many other occupations. However, it's not unknown for a firefighter to torch a building. This example suggests how dishonest and illegal behavior, with the help of higher education, can creep into every aspect of public and business life.`\n      },\n      {\n        id: \"C\",\n        text: `I realized this anew when I was invited to speak before a class in marketing, which is another of our degree programs. The regular instructor is a colleague who appreciates the kind of ethical perspective I can bring as a philosopher. There are endless ways I could have approached this assignment, but I took my cue from the title of the course: \"Principles of Marketing\". It made me think to ask the students, \"Is marketing principled?\" After all, a subject matter can have principles in the sense of being codified, having rules, as with football or chess, without being principled in the sense of being ethical. Many of the students immediately assumed that the answer to my question about marketing principles was obvious: no. Just look at the ways in which everything under the sun has been marketed; obviously it need not be done in a principled (= ethical) fashion.`\n      },\n      {\n        id: \"D\",\n        text: `Is that obvious? I made the suggestion, which may sound downright crazy in light of the evidence, that perhaps marketing is by definition principled. My inspiration for this judgement is the philosopher Immanuel Kant, who argued that any body of knowledge consists of an end (or purpose) and a means. Let us apply both the terms \"means\" and \"end\" to marketing. The students have signed up for a course in order to learn how to market effectively. But to what end? There seem to be two main attitudes toward that question. One is that the answer is obvious: the purpose of marketing is to sell things and to make money. The other attitude is that the purpose of marketing is irrelevant: Each person comes to the program and course with his or her own plans, and these need not even concern the acquisition of marketing expertise as such.`\n      },\n      {\n        id: \"E\",\n        text: `My proposal, which I believe would also be Kant\u2019s, is that neither of these attitudes captures the significance of the end to the means for marketing. A field of knowledge or a professional endeavor is defined by both the means and the end; hence both deserve scrutiny. Students need to study both how to achieve X, and also what X is. It is at this point that \"Arson for Profit\" becomes supremely relevant. That course is presumably all about \"means\", how to detect and prosecute criminal activity. It is therefore assumed that the end is good in an ethical sense. When I ask fire science students to articulate the end, or purpose, of their field, they eventually generalize to something like, \"The safety and welfare of society,\" which seems right.`\n      },\n      {\n        id: \"F\",\n        text: `As we have seen, someone could use the very same knowledge of means to achieve a much less noble end, such as personal profit via destructive, dangerous, reckless activity. But we would not call that firefighting. We have a separate word for it: arson. Similarly, if you employed the \"principles of marketing\" in an unprincipled way, you would not be doing marketing. We have another term for it: fraud. Kant gives the example of a doctor and a poisoner, who use the identical knowledge to achieve their divergent ends. We would say that one is practicing medicine, the other, murder.`\n      }\n    ];\n\n    const readingText = readingSections.map(s => `Section ${s.id}. ${s.text}`).join(\"\\n\\n\");\n\n    \/* ===== Q27\u201332: Matching headings (A\u2013F) ===== *\/\n    const headingsQuestions = [\n      { id: 27, section: \"A\", answer: \"vi\" },\n      { id: 28, section: \"B\", answer: \"viii\" },\n      { id: 29, section: \"C\", answer: \"ii\" },\n      { id: 30, section: \"D\", answer: \"iv\" },\n      { id: 31, section: \"E\", answer: \"iii\" },\n      { id: 32, section: \"F\", answer: \"vii\" }\n    ];\n\n    \/* ===== Q33\u201336: Summary completion (NO MORE THAN TWO WORDS) ===== *\/\n    const summaryQuestions = [\n      { id: 33, prompt: \"This is a university course intended for students who are undergraduates and who are studying ________.\", answer: \"fire science\" },\n      { id: 34, prompt: \"The expectation is that they will become ________ specialising in arson.\", answer: \"investigators\" },\n      { id: 35, prompt: \"The course will help them to detect cases of arson and find ________ of criminal intent,\", answer: \"evidence\" },\n      { id: 36, prompt: \"leading to successful ________ in the courts.\", answer: \"prosecution\" }\n    ];\n\n    \/* ===== Q37\u201340: YES \/ NO \/ NOT GIVEN ===== *\/\n    const ynngQuestions = [\n      { id: 37, text: \"It is difficult to attract students onto courses that do not focus on a career.\", answer: \"NOT GIVEN\" },\n      { id: 38, text: \"The 'Arson for Profit' course would be useful for people intending to set fire to buildings.\", answer: \"YES\" },\n      { id: 39, text: \"Fire science courses are too academic to help people to be good at the job of firefighting.\", answer: \"NO\" },\n      { id: 40, text: \"The writer\u2019s fire science students provided a detailed definition of the purpose of their studies.\", answer: \"NO\" }\n    ];\n\n    \/* ===== Speech ===== *\/\n    const speechSynthesisSupported = (\"speechSynthesis\" in window);\n    let voices = [];\n    let selectedVoice = null;\n\n    function showSynthesisLoader(show){\n      const loader = document.getElementById(\"synthesis-loader\");\n      if (!loader) return;\n      loader.style.display = show ? \"inline-block\" : \"none\";\n    }\n\n    function stopSpeaking(){\n      if (speechSynthesisSupported) {\n        window.speechSynthesis.cancel();\n        showSynthesisLoader(false);\n      }\n    }\n\n    function sayText(text, lang){\n      return new Promise((resolve) => {\n        if (!speechSynthesisSupported) return resolve();\n        const u = new SpeechSynthesisUtterance(String(text || \"\"));\n        u.lang = lang || \"en-US\";\n        u.rate = 1.0;\n        u.pitch = 1.0;\n        if (selectedVoice) u.voice = selectedVoice;\n        u.onend = resolve;\n        u.onerror = resolve;\n        window.speechSynthesis.speak(u);\n      });\n    }\n\n    function loadVoices(){\n      if (!speechSynthesisSupported) return;\n      voices = window.speechSynthesis.getVoices();\n      if (voices.length === 0) {\n        window.speechSynthesis.onvoiceschanged = () => {\n          voices = window.speechSynthesis.getVoices();\n          populateVoiceList();\n        };\n      } else {\n        populateVoiceList();\n      }\n    }\n\n    function populateVoiceList(){\n      const voiceSelect = document.getElementById(\"voice-select\");\n      if (!voiceSelect) return;\n\n      voiceSelect.innerHTML = \"\";\n      const en = voices.filter(v => (v.lang || \"\").toLowerCase().startsWith(\"en\"));\n      const usable = en.length ? en : voices;\n\n      usable.forEach((v, idx) => {\n        const opt = document.createElement(\"option\");\n        opt.value = String(idx);\n        opt.textContent = `${v.name} (${v.lang})`;\n        voiceSelect.appendChild(opt);\n      });\n\n      selectedVoice = usable[0] || null;\n      voiceSelect.onchange = () => {\n        selectedVoice = usable[Number(voiceSelect.value)] || usable[0] || null;\n      };\n    }\n\n    \/* ===== Render reading ===== *\/\n    function renderReading(){\n      const area = document.getElementById(\"reading-area\");\n      if (!area) return;\n      area.innerHTML = \"\";\n\n      readingSections.forEach(sec => {\n        const h = document.createElement(\"h4\");\n        h.textContent = `Section ${sec.id}`;\n        area.appendChild(h);\n\n        const p = document.createElement(\"p\");\n        p.textContent = sec.text;\n        area.appendChild(p);\n      });\n    }\n\n    \/* ===== Render questions ===== *\/\n    function renderHeadings(){\n      const area = document.getElementById(\"headings-area\");\n      if (!area) return;\n      area.innerHTML = \"\";\n\n      const options = [\"\", \"i\", \"ii\", \"iii\", \"iv\", \"v\", \"vi\", \"vii\", \"viii\"];\n\n      headingsQuestions.forEach(q => {\n        const box = document.createElement(\"div\");\n        box.className = \"icte-q\";\n\n        const label = document.createElement(\"label\");\n        label.className = \"icte-q__label\";\n        label.htmlFor = `hd-${q.id}`;\n        label.textContent = `${q.id}. Section ${q.section}`;\n        box.appendChild(label);\n\n        const controls = document.createElement(\"div\");\n        controls.className = \"icte-q__controls\";\n\n        const sel = document.createElement(\"select\");\n        sel.id = `hd-${q.id}`;\n        sel.innerHTML = options.map(v => {\n          const name = v ? v : \"Choose\u2026\";\n          return `<option value=\"${v}\">${name}<\/option>`;\n        }).join(\"\");\n        controls.appendChild(sel);\n\n        box.appendChild(controls);\n\n        const fb = document.createElement(\"div\");\n        fb.className = \"icte-q__fb\";\n        fb.id = `fb-${q.id}`;\n        box.appendChild(fb);\n\n        area.appendChild(box);\n      });\n    }\n\n    function renderSummaryQs(){\n      const area = document.getElementById(\"summary-area\");\n      if (!area) return;\n      area.innerHTML = \"\";\n\n      \/\/ Show the summary stem (like the paper)\n      const stem = document.createElement(\"div\");\n      stem.className = \"icte-q\";\n      stem.innerHTML = `\n        <div class=\"icte-q__label\">The \u201cArson for Profit\u201d course<\/div>\n        <div style=\"opacity:.9; line-height:1.65;\">\n          Complete the summary below. Choose <strong>NO MORE THAN TWO WORDS<\/strong> from the passage for each answer.\n        <\/div>\n      `;\n      area.appendChild(stem);\n\n      summaryQuestions.forEach(q => {\n        const box = document.createElement(\"div\");\n        box.className = \"icte-q\";\n\n        const label = document.createElement(\"label\");\n        label.className = \"icte-q__label\";\n        label.htmlFor = `sm-${q.id}`;\n        label.textContent = `${q.id}. ${q.prompt}`;\n        box.appendChild(label);\n\n        const controls = document.createElement(\"div\");\n        controls.className = \"icte-q__controls\";\n\n        const input = document.createElement(\"input\");\n        input.type = \"text\";\n        input.id = `sm-${q.id}`;\n        input.placeholder = \"NO MORE THAN TWO WORDS\";\n        controls.appendChild(input);\n\n        box.appendChild(controls);\n\n        const fb = document.createElement(\"div\");\n        fb.className = \"icte-q__fb\";\n        fb.id = `fb-${q.id}`;\n        box.appendChild(fb);\n\n        area.appendChild(box);\n      });\n    }\n\n    function renderYNNG(){\n      const area = document.getElementById(\"ynng-area\");\n      if (!area) return;\n      area.innerHTML = \"\";\n\n      ynngQuestions.forEach(q => {\n        const box = document.createElement(\"div\");\n        box.className = \"icte-q\";\n\n        const label = document.createElement(\"label\");\n        label.className = \"icte-q__label\";\n        label.htmlFor = `yn-${q.id}`;\n        label.textContent = `${q.id}. ${q.text}`;\n        box.appendChild(label);\n\n        const controls = document.createElement(\"div\");\n        controls.className = \"icte-q__controls\";\n\n        const sel = document.createElement(\"select\");\n        sel.id = `yn-${q.id}`;\n        sel.innerHTML = `\n          <option value=\"\">Choose\u2026<\/option>\n          <option value=\"YES\">YES<\/option>\n          <option value=\"NO\">NO<\/option>\n          <option value=\"NOT GIVEN\">NOT GIVEN<\/option>\n        `;\n        controls.appendChild(sel);\n\n        box.appendChild(controls);\n\n        const fb = document.createElement(\"div\");\n        fb.className = \"icte-q__fb\";\n        fb.id = `fb-${q.id}`;\n        box.appendChild(fb);\n\n        area.appendChild(box);\n      });\n    }\n\n    \/* ===== Checking ===== *\/\n    function setScore(text){\n      const scoreBox = document.getElementById(\"scoreBox\");\n      if (scoreBox) scoreBox.textContent = text || \"\";\n    }\n\n    function normChoice(x){ return String(x || \"\").trim().toUpperCase(); }\n    function normRoman(x){ return String(x || \"\").trim().toLowerCase(); }\n    function normWords(x){\n      return String(x || \"\")\n        .trim()\n        .toLowerCase()\n        .replace(\/[.,!?;:()\"']\/g, \"\")\n        .replace(\/\\s+\/g, \" \");\n    }\n    function wordCount(x){\n      const t = String(x || \"\").trim();\n      if (!t) return 0;\n      return t.split(\/\\s+\/).length;\n    }\n\n    function checkAnswers(){\n      const total = headingsQuestions.length + summaryQuestions.length + ynngQuestions.length;\n      let correct = 0, attempted = 0;\n\n      \/\/ Q27\u201332 (roman)\n      headingsQuestions.forEach(q => {\n        const sel = document.getElementById(`hd-${q.id}`);\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (!sel || !fb) return;\n\n        const user = normRoman(sel.value);\n        if (!user) { fb.textContent = \"Please choose a heading (i\u2013viii).\"; fb.style.color = \"#8a5a00\"; return; }\n        attempted++;\n\n        if (user === q.answer) { correct++; fb.textContent = `\u2705 Correct (${q.answer})`; fb.style.color = \"#065f46\"; }\n        else { fb.textContent = `\u274c Not correct. Correct answer: ${q.answer}`; fb.style.color = \"#991b1b\"; }\n      });\n\n      \/\/ Q33\u201336 (<=2 words)\n      summaryQuestions.forEach(q => {\n        const input = document.getElementById(`sm-${q.id}`);\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (!input || !fb) return;\n\n        const raw = String(input.value || \"\").trim();\n        if (!raw) { fb.textContent = \"Please write an answer (max 2 words).\"; fb.style.color = \"#8a5a00\"; return; }\n        attempted++;\n\n        if (wordCount(raw) > 2) {\n          fb.textContent = `\u26a0\ufe0f NO MORE THAN TWO WORDS. Correct answer: ${q.answer}`;\n          fb.style.color = \"#8a5a00\";\n          return;\n        }\n\n        if (normWords(raw) === normWords(q.answer)) {\n          correct++;\n          fb.textContent = `\u2705 Correct (${q.answer})`;\n          fb.style.color = \"#065f46\";\n        } else {\n          fb.textContent = `\u274c Not correct. Correct answer: ${q.answer}`;\n          fb.style.color = \"#991b1b\";\n        }\n      });\n\n      \/\/ Q37\u201340 (YES\/NO\/NG)\n      ynngQuestions.forEach(q => {\n        const sel = document.getElementById(`yn-${q.id}`);\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (!sel || !fb) return;\n\n        const user = normChoice(sel.value);\n        if (!user) { fb.textContent = \"Please choose YES \/ NO \/ NOT GIVEN.\"; fb.style.color = \"#8a5a00\"; return; }\n        attempted++;\n\n        if (user === q.answer) { correct++; fb.textContent = `\u2705 Correct (${q.answer})`; fb.style.color = \"#065f46\"; }\n        else { fb.textContent = `\u274c Not correct. Correct answer: ${q.answer}`; fb.style.color = \"#991b1b\"; }\n      });\n\n      setScore(`Score: ${correct}\/${total} (attempted: ${attempted}\/${total})`);\n\n      if (speechSynthesisSupported) {\n        showSynthesisLoader(true);\n        sayText(`Your score is ${correct} out of ${total}.`, \"en-US\").then(() => showSynthesisLoader(false));\n      }\n    }\n\n    function showAllCorrectAnswers(){\n      [...headingsQuestions, ...summaryQuestions, ...ynngQuestions].forEach(q => {\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (!fb) return;\n        fb.textContent = `Correct answer: ${q.answer}`;\n        fb.style.color = \"#0f172a\";\n      });\n      setScore(\"Correct answers are shown.\");\n    }\n\n    function resetAll(){\n      headingsQuestions.forEach(q => {\n        const sel = document.getElementById(`hd-${q.id}`);\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (sel) sel.value = \"\";\n        if (fb) fb.textContent = \"\";\n      });\n\n      summaryQuestions.forEach(q => {\n        const input = document.getElementById(`sm-${q.id}`);\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (input) input.value = \"\";\n        if (fb) fb.textContent = \"\";\n      });\n\n      ynngQuestions.forEach(q => {\n        const sel = document.getElementById(`yn-${q.id}`);\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (sel) sel.value = \"\";\n        if (fb) fb.textContent = \"\";\n      });\n\n      setScore(\"\");\n      stopSpeaking();\n    }\n\n    \/* ===== Support: Summary + Main Ideas ===== *\/\n    function setHelperContent(nodesBuilder){\n      const area = document.getElementById(\"helper-area\");\n      if (!area) return;\n      area.innerHTML = \"\";\n      nodesBuilder(area);\n      area.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    }\n\n    function getSummaryText(){\n      return [\n        \"The writer discusses how universities can teach almost any subject, including courses like 'Arson for Profit'.\",\n        \"Although such courses are intended for legitimate professional purposes, the same knowledge can be misused for dishonest or illegal ends.\",\n        \"Using Kant\u2019s idea that knowledge includes both means and ends, the writer argues that students should examine not only how to do something but also the purpose and ethics of doing it.\",\n        \"The passage compares cases where the same knowledge leads to different outcomes, such as marketing versus fraud, and firefighting versus arson.\"\n      ].join(\" \");\n    }\n\n    function showSummary(){\n      const summaryText = getSummaryText();\n      setHelperContent((area) => {\n        const p = document.createElement(\"p\");\n        const tag = document.createElement(\"span\");\n        tag.className = \"tag\";\n        tag.textContent = \"Summary\";\n        p.appendChild(tag);\n        p.append(\" \" + summaryText);\n        area.appendChild(p);\n      });\n\n      if (speechSynthesisSupported) {\n        stopSpeaking();\n        showSynthesisLoader(true);\n        sayText(\"Summary. \" + summaryText, \"en-US\").then(() => showSynthesisLoader(false));\n      }\n    }\n\n    function getMainIdeasForQuestions(){\n      return [\n        { tag: \"Q27\u201332\", text: \"Match each section A\u2013F to the best heading. Look for the main idea, not a small detail.\" },\n        { tag: \"Headings\", text: \"Some headings sound similar (e.g., surprising title vs wrong student type). Choose the one that fits the section\u2019s focus.\" },\n        { tag: \"Q33\u201336\", text: \"Use NO MORE THAN TWO WORDS from the passage. Check plural\/singular and exact wording.\" },\n        { tag: \"Arson course\", text: \"Focus on who the course is for, what they study, and what outcomes the training supports (evidence, prosecution).\" },\n        { tag: \"Q37\u201340\", text: \"YES\/NO\/NOT GIVEN tests the writer\u2019s views. If the writer does not state the view, choose NOT GIVEN.\" },\n        { tag: \"Means & ends\", text: \"Key theme: the same knowledge (means) can serve different ends; ethical ends matter for defining a field (marketing vs fraud; firefighting vs arson).\" }\n      ];\n    }\n\n    function showMainIdeas(){\n      const items = getMainIdeasForQuestions();\n\n      setHelperContent((area) => {\n        const p = document.createElement(\"p\");\n        const tag = document.createElement(\"span\");\n        tag.className = \"tag\";\n        tag.textContent = \"Main ideas\";\n        p.appendChild(tag);\n        p.append(\" Important points to remember for answering the questions:\");\n        area.appendChild(p);\n\n        const ul = document.createElement(\"ul\");\n        items.forEach(i => {\n          const li = document.createElement(\"li\");\n          const t = document.createElement(\"span\");\n          t.className = \"tag\";\n          t.textContent = i.tag;\n          li.appendChild(t);\n          li.append(i.text);\n          ul.appendChild(li);\n        });\n        area.appendChild(ul);\n      });\n\n      if (speechSynthesisSupported) {\n        stopSpeaking();\n        showSynthesisLoader(true);\n        const speakText = \"Main ideas. \" + items.map(i => `${i.tag}. ${i.text}`).join(\" \");\n        sayText(speakText, \"en-US\").then(() => showSynthesisLoader(false));\n      }\n    }\n\n    \/* ===== Audio buttons ===== *\/\n    async function playInstructions(){\n      if (!speechSynthesisSupported) return;\n      stopSpeaking();\n      showSynthesisLoader(true);\n      const msg =\n        \"Questions twenty-seven to thirty-two: choose the correct heading for each section A to F from the list of headings. \" +\n        \"Questions thirty-three to thirty-six: complete the summary. Choose no more than two words from the passage for each answer. \" +\n        \"Questions thirty-seven to forty: choose yes, no, or not given.\";\n      await sayText(msg, \"en-US\");\n      showSynthesisLoader(false);\n    }\n\n    async function playQuestions(){\n      if (!speechSynthesisSupported) return;\n      stopSpeaking();\n      showSynthesisLoader(true);\n\n      await sayText(\"Questions twenty-seven to thirty-two. Matching headings.\", \"en-US\");\n      for (const q of headingsQuestions) await sayText(`Question ${q.id}. Section ${q.section}. Choose the best heading.`, \"en-US\");\n\n      await sayText(\"Questions thirty-three to thirty-six. Complete the summary. No more than two words.\", \"en-US\");\n      for (const q of summaryQuestions) await sayText(`Question ${q.id}. ${q.prompt}`, \"en-US\");\n\n      await sayText(\"Questions thirty-seven to forty. Choose yes, no, or not given.\", \"en-US\");\n      for (const q of ynngQuestions) await sayText(`Question ${q.id}. ${q.text}`, \"en-US\");\n\n      showSynthesisLoader(false);\n    }\n\n    async function playPassage(){\n      if (!speechSynthesisSupported) return;\n      stopSpeaking();\n      showSynthesisLoader(true);\n      await sayText(\"Now, listen to the reading passage. What\u2019s the purpose of gaining knowledge?\", \"en-US\");\n      await sayText(readingText.replace(\/\\n\\s*\\n\/g, \"  \"), \"en-US\");\n      showSynthesisLoader(false);\n    }\n\n    function wireUI(){\n      const playIns = document.getElementById(\"play-instructions\");\n      const playQs = document.getElementById(\"play-questions\");\n      const playPass = document.getElementById(\"play-passage\");\n      const checkBtn = document.getElementById(\"check-btn\");\n      const showBtn = document.getElementById(\"show-btn\");\n      const resetBtn = document.getElementById(\"reset-btn\");\n      const stopBtn = document.getElementById(\"stop-btn\");\n      const toggleReading = document.getElementById(\"toggle-reading\");\n      const readingArea = document.getElementById(\"reading-area\");\n      const summaryBtn = document.getElementById(\"summary-btn\");\n      const mainIdeasBtn = document.getElementById(\"main-ideas-btn\");\n      const clearSupport = document.getElementById(\"clear-support\");\n\n      if (playIns) playIns.onclick = playInstructions;\n      if (playQs) playQs.onclick = playQuestions;\n      if (playPass) playPass.onclick = playPassage;\n      if (checkBtn) checkBtn.onclick = checkAnswers;\n      if (showBtn) showBtn.onclick = showAllCorrectAnswers;\n      if (resetBtn) resetBtn.onclick = resetAll;\n      if (stopBtn) stopBtn.onclick = stopSpeaking;\n      if (summaryBtn) summaryBtn.onclick = showSummary;\n      if (mainIdeasBtn) mainIdeasBtn.onclick = showMainIdeas;\n\n      if (clearSupport) clearSupport.onclick = () => {\n        const area = document.getElementById(\"helper-area\");\n        if (area) area.innerHTML = 'Click <strong>Summary<\/strong> or <strong>Main ideas<\/strong>.';\n      };\n\n      if (toggleReading && readingArea) {\n        toggleReading.onclick = () => {\n          const hidden = readingArea.style.display === \"none\";\n          readingArea.style.display = hidden ? \"block\" : \"none\";\n          toggleReading.textContent = hidden ? \"Hide\" : \"Show\";\n        };\n      }\n    }\n\n    function initialize(){\n      loadVoices();\n      renderReading();\n      renderHeadings();\n      renderSummaryQs();\n      renderYNNG();\n      wireUI();\n    }\n    document.addEventListener(\"DOMContentLoaded\", initialize);\n    (function markCurrentMenu(){\n  const here = (location.href || \"\").replace(\/\\\/$\/, \"\");\n  document.querySelectorAll(\".icte-menu a\").forEach(a => {\n    const href = (a.href || \"\").replace(\/\\\/$\/, \"\");\n    if (href && here.includes(href)) a.classList.add(\"is-current\");\n  });\n})();\n\n  <\/script>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Passage 1 Passage 2 Passage 3 Test 2 Test 3 Test 4 Speaking Listening Writing IELTS Reading Passage 3: What\u2019s<\/p>\n","protected":false},"author":1,"featured_media":438,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_layout":"default_layout","footnotes":""},"categories":[25,26,27],"tags":[],"class_list":["post-437","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ielts","category-reading","category-test-1"],"_links":{"self":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/comments?post=437"}],"version-history":[{"count":3,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/437\/revisions"}],"predecessor-version":[{"id":612,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/437\/revisions\/612"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/media\/438"}],"wp:attachment":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/media?parent=437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/categories?post=437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/tags?post=437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}