A Phrase Fill-in-Blank Problem in a Client-Side Web Programming Assistant System
Abstract
1. Introduction
2. Related Works in the Literature
2.1. Automated Programming Exercises
2.2. AI for Programming Education
3. Review of Adopted Technologies
3.1. Web Programming Learning Assistant System (WPLAS)
3.1.1. Step-by-Step Study
3.1.2. Answer Interface
3.2. Regular Expressions for Answer Extraction
- 1.
- Import the re library.
- 2.
- Compile the regular expression using the re.compile() function and generate the regular expression object with the pattern string and optional flag parameters for use by the match() and search() functions.
- 3.
- Use the search() function to search the HTML file as a parameter one by one.
- 4.
- If every character of one element is matched with the pattern, the match is successful. Then, the matched element is added to the answer object using the append() function.
3.3. ChatGPT for Answer Uniqueness Verification
4. Phrase Fill-in-Blank Problem
4.1. Overview of PFP
- Code structure and logic flow across HTML, CSS, and JavaScript;
- Behavioral interactions between UI components and user input; and
- Syntax and semantics of common client-side programming patterns.
4.2. Candidates for Key Phrases
- HTML: id, text message (e.g., label messages);
- CSS: property name (e.g., color, display), selector (e.g., .class, #id); and
- JavaScript: reserved word (e.g., var, function), identifier (e.g., variable or function name), id, library class/method (e.g., Math.random()), text message used in DOM manipulation.
4.3. PFP Instance Generation Procedure
- 1.
- Source code selection: Select a client-side Web programming source code that includes interactive behaviors (e.g., event handling or DOM updates). This code can be sourced from websites, textbooks, or educational materials. This forms the input for PFP instance generation.
- 2.
- Duplication prevention: To avoid confusions caused by repeating patterns, the algorithm first detects variable and function declarations and counts their occurrences. Only those that appear multiple times are considered for blank generations, ensuring that the resulting blanks are meaningful and not trivially obvious.
- 3.
- Algorithm application: Using the filtered variable information, the algorithm applies the regular expression-based rules to extract key phrases. These phrases, such as variable declarations, expressions, or event handlers, are replaced with placeholders. The original phrases are stored as correct answers.
- 4.
- PFP instance output: The modified source code with placeholders is output as a PFP instance. This version is ready for integration into the answer interface and serves as the core of the interactive learning activity.
5. PFP Instance Generation Algorithm
5.1. Algorithm Overview
- 1.
- Pattern Definition: The algorithm begins by defining a detection pattern tailored to each key phrase type. Regular expressions are used to identify syntactic units that represent meaningful educational targets, such as JavaScript reserved words, HTML tags, or CSS properties. These patterns are crafted to capture relevant code segments that reflect the core concepts of client-side Web development.
- 2.
- Pattern Matching: The source code is then parsed line by line, and the algorithm searches for matches using the defined patterns. The detection is context-sensitive, for example, distinguishing a reserved word within a loop from one inside a function body.
- 3.
- Phrase Replacement and Storage: Once a matching is found, the corresponding code fragment is replaced with a placeholder (i.e., a blank) in the instance output. Simultaneously, the original phrase is stored in a replacement list to be presented as the answer set.
- 4.
- Duplication Handling: To maintain pedagogical efficiency, the algorithm tracks previously replaced phrases (e.g., identical id values or repeated function names) and avoids creating redundant blanks. This reduces cognitive overload and improves exercise variety.
- 5.
- Instance Output: Finally, the modified source code, now containing blanks, is output as a new PFP instance. Each instance is designed to retain the integrity of the original program logic while encouraging students to infer the missing phrase based on context.
5.2. Redundant Blank Prevention
- If a variable appears twice, we blank only one occurrence to provide sufficient context while still assessing comprehension.
- If a variable appears three times, we selectively blank the first and third occurrences, maintaining the challenge of recognizing recurring variables without making the exercise overly difficult.
- If a variable appears four or more times, we blank the first, third, and last occurrences to ensure students engage with different parts of the code while still preserving some references for contextual understanding.
5.3. Details of Pattern Definition and Matching
- 1.
- JavaScript Library Class/Method Element: Our PFP instance generation algorithm includes a specific rule to detect method usage. As illustrated in Figure A2, it uses a regular expression to identify calls to document.getElementById(“ID”), which is a typical method for accessing HTML elements via the id attribute. When this pattern is matched, the corresponding code fragment is replaced with a blank, prompting learners to recall how to retrieve DOM elements in JavaScript.To prevent redundant blanks for the same element, the algorithm keeps track of already processed IDs and skips any repeated occurrences. This avoids unnecessary repetition and keeps the exercise streamlined and pedagogically effective.
- 2.
- JavaScript Reserved Word Element: JavaScript includes a set of reserved words (e.g., if, for, return, and function) that cannot be used as identifiers or variable names. These words form the backbone of the language’s grammar, signifying specific operations or structures, such as loops, conditionals, and functions. Selecting such reserved words as blank phrases prompts learners to recognize fundamental JavaScript syntax and control-flow structures. The implementation for detecting words like alert is shown in Appendix A.1 (Figure A1).
- 3.
- JavaScript Identifier Element: Identifiers in JavaScript, such as variable names, function names, or object properties, are crucial for maintaining readable and modular code. When selecting identifiers (e.g., score, updateGame(), and playerName), the generated blanks require students to track and interpret variable states or function calls. This underscores the importance of naming conventions, scope understanding, and the flow of data throughout a script. The detection approach for variable declarations using let or var is provided in Appendix A.3 (Figure A3).
- 4.
- Id Name Element: HTML id attributes uniquely identify DOM elements for JavaScript manipulation (e.g., <div id="grid">). Selecting id names as blanks forces students to connect the layout structure (HTML) with the interactive logic (JavaScript), demonstrating how client-side code references specific elements for reading or updating of content. Mastering id usage is vital for dynamic Web pages, especially in games where event handling and score tracking often hinge on precise DOM operations. The detection logic for tags such as <div id="grid"> is illustrated in Appendix A.4 (Figure A4).
- 5.
- Text Message Element: In both HTML and JavaScript, text is often used to show messages. For example, “scoreDisplay.textContent = score” conveys dynamic information to users. This kind of message can be written directly inside an HTML tag, such as p or h1, or can be updated using JavaScript code such as scoreDisplay.textContent = score. The approach to extracting messages within tags like <h1>, <h2>, and <button> is shown in Appendix A.5 (Figure A5).In PFP instances, these text parts are sometimes made blank so that students need to think about what message should be there. This helps students understand how important a text message is for giving users feedback, like showing scores or game status. In games, these messages are very important to keep the user engaged.
- 6.
- CSS Syntax Element: CSS rules (e.g., background-color, display, and margin) define a Web page’s visual presentation. Highlighting CSS syntax as blanks helps learners recall styling fundamentals and how small changes to properties can significantly alter game interfaces. In an interactive client-side Web game, aesthetics often guide user flow and clarity, making it crucial for students to master correct CSS syntax. The code for detecting relevant CSS properties appears in Appendix A.6 (Figure A6).
- 7.
- HTML Tag Element: HTML tags (e.g., <title> and <canvas>) provide the structural foundation of a Web page or game interface. Selecting them as blanks, the PFP generation tests students on the correct usage and context of these tags. It also reveals how different tags can be crucial for specific functionalities (like <canvas> for drawing). The detection logic, including regular expressions to find specific tags, is provided in Appendix A.7 (Figure A7).
- 8.
- HTML Attribute Element: HTML attributes (e.g., class, src, and autoplay) add details and functionalities to tags. In client-side Web games, attributes might control media playback, link CSS classes for styling, or set default behaviors (like autofocus on input fields). By removing these attributes and asking students to fill them in, the exercise underscores how attributes fine-tune the element’s behavior and styling beyond the basic tag itself. The code for detecting attributes like onclick is shown in Appendix A.8 (Figure A8).
6. Key Phrase Rules for Game-Based PFP Generation
6.1. Rule Definitions
- 1.
- User Input Handling: Games depend heavily on user interactions like mouse clicks or keyboard input. This rule captures event listeners (e.g., addEventListener("click", ...)), helping learners connect user actions to functional responses in the game.
- 2.
- Event Handling Function: Many games define specific callback functions such as startGame() or handleCollision(). This rule selects such handlers, challenging learners to understand event-driven programming.
- 3.
- Loop Statement Loops such as for or while are frequently used in games to animate objects or check repeated conditions. This rule detects loop constructs and replaces them with blanks to train students in constructing correct and efficient repetition structures.
- 4.
- Dynamic Value Calculation Expression: Game codes often include dynamic values such as scores, timers, or health bars that are continuously updated. This rule identifies expressions involving operations like score++ or lives–. By turning them into blanks, learners are asked to recall the logic required to reflect game state changes.
- 5.
- Switch-case Construct: To handle multi-branch logic (e.g., selecting difficulty modes or game states), switch-case structures are used. The corresponding rule targets these constructs, promoting comprehension of conditional branching beyond if–else.
- 6.
- Dynamic Animation and Styling: Lastly, visual feedback is key in game UX. This rule targets direct style changes or animations (e.g., element.style.left = ...), encouraging learners to understand how code controls appearance and motion.
6.2. Rule Application Example
7. Algorithm Extensions to Game Programming
7.1. Reference Guide
7.2. Source Code
7.3. Blank Analysis
7.4. Role of Each Blank
- Styling blanks (e.g., _2_, _3_): These blanks force students to recall crucial CSS properties, such as text-align, background-color, or border, and understand how they contribute to the overall look of the game.
- DOM manipulation blanks (e.g., _13_): Through referencing commands like “document.getElementById(”grid”)” or “document.createElement(“div”)”, these blanks highlight how JavaScript dynamically retrieves and modifies HTML elements.
- Event-handling blanks (e.g., _17_): Questions focused on click listeners (e.g., document.getElementById(“startButton”). addEventListener(“click”, ...)) require students to recall how user actions in a browser trigger specific callback functions. This is at the heart of real-time interactions in client-side Web game programming.
- Dynamic game-state management blanks (e.g., _15_, _16_): These placeholders revolve around loop statements, conditional checks (e.g., ‘if (cell === activeCell)’), and score increments. Prompting learners to fill in logic like ‘score++’ or random index calculations, the PFP instance fosters a practical understanding of how real-time game updates happen in a browser environment—reinforcing the interplay between user interactions, DOM updates, and styled visuals.
8. Evaluation of Basic PFP Topics in Web Programming
8.1. Generated PFP Instances
8.2. Solution Results of Individual Instances
8.3. Solution Results of Individual Students
9. Evaluation of Game PFP Topics in Web Programming
9.1. Generated PFP Instances
9.2. Solution Results of Individual Instances
9.3. Solution Results of Individual Students
10. Solution Ability of Generative AI
10.1. Solution Results for Basic Programming Topics
10.2. Solution Results for Game Programming
10.3. Answer Patterns by AI
- 1.
- Exact match: The output exactly matches the expected answer and is validated successfully.
- 2.
- Exact content, reordered: The output contains all the required information but in a different order, which is marked incorrectly under string matching. This issue often occurs in CSS properties that have multiple style declarations.
- 3.
- Format variation: Equivalent selections are expressed through different formats (e.g., using hexadecimal color codes instead of color names).
- 4.
- Contextual error: Incorrect answers are obtained due to incomplete contexts, such as a lack of visual reference like screenshots.
- 5.
- Syntax error: The output is incomplete or malformed (e.g., missing HTML tags), potentially resulting in rendering issues or failed validations.
10.4. Common Mistakes by AI
- 1.
- HTML Structure and Syntax: ChatGPT sometimes generates too few HTML tags, which can make the structure confusing or harder to read. This happens because it was trained on a wide variety of Web content, each with different coding styles. In contrast, our algorithm intentionally blanks either the starting tag or the ending tag to help students learn and recognize the correct HTML structure and the tag names more clearly.
- 2.
- Mismatched CSS Property: In some cases, the CSS property returned by ChatGPT is syntactically correct but does not match the instructional objective in context. For example, it might generate box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); instead of the expected cursor: pointer;. The cursor attribute explicitly denotes interactivity, and the former is a styling attribute focused on visual enhancement.While both properties are valid, only cursor: pointer; meets the intended learning goal of recognizing interactive elements. In this paper, we emphasize this attribute and demonstrate it visually in the screenshots to help students make a clear connection between the code and the intended behavior.
- 3.
- JavaScript Logic Conditions: Sometimes, ChatGPT uses different logic than the original response. For example, it uses “greater than” instead of “less than”. This happens becauseChatGPT copies what it has seen often in its training data, not necessarily what is correct for the task at hand. A source code in the proposal always follows the correct logic based on what the student is supposed to learn, ensuring consistency with the lesson’s intended objective.
10.5. Limitations and Future Direction of Proposal
11. Conclusions
Author Contributions
Funding
Institutional Review Board Statement
Informed Consent Statement
Data Availability Statement
Acknowledgments
Conflicts of Interest
Appendix A. Source-Code Listings for Key Phrase Detection
Appendix A.1. Detection of JavaScript Reserved Words
Appendix A.2. Detection of JavaScript Library Class/Method Elements
Appendix A.3. Detection of JavaScript Identifiers and Loops
Appendix A.4. Detection of HTML id Attributes
Appendix A.5. Detection of Text Messages in HTML Tags
Appendix A.6. Detection of CSS Syntax Elements
Appendix A.7. Detection of HTML Tags and Headings
Appendix A.8. Detection of HTML Attributes
Appendix B. Example Output Text File
References
- What Is JavaScript. Available online: https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/What_is_JavaScript (accessed on 1 June 2025).
- Regular Expression in Python. Available online: https://docs.python.org/3/library/re.html (accessed on 1 April 2025).
- ChatGPT. Available online: https://openai.com/chatgpt/overview/ (accessed on 1 April 2025).
- Qi, H.; Li, Z.; Funabiki, N.; Kyaw, H.H.S.; Kao, W.C. A proposal of blank phrase selection algorithm for phrase fill-in-blank problems in web-client programming learning assistant system. In Proceedings of the2025 1st International Conference on Consumer Technology (ICCT-Pacific), Matsue, Japan, 29–31 March 2025; pp. 1–4. [Google Scholar]
- Smith, M.; Johnson, L.; Patel, R. Automated fill-in-the-blank exercises in online learning: Effectiveness and limitations. Int. J. Comput. Educ. 2017, 25, 134–145. [Google Scholar]
- Jordan, M.; Ly, K.; Soosai Raj, A.G. Need a programming exercise generated in your native language? ChatGPT’s got your back: Automatic generation of non-English programming exercises using OpenAI GPT-3.5. In Proceedings of the 55th ACM Technical Symposium on Computer Science Education (SIGCSE ’24), Portland, OR, USA, 20–23 March 2024. [Google Scholar]
- Denny, P.; Luxton-Reilly, A.; Prather, J.; Becker, B.A. Prompt Problems: A new programming exercise for the generative AI era. In Proceedings of the 55th ACM Technical Symposium on Computer Science Education, Portland, OR, USA, 20–23 March 2024; Volume 1, pp. 1–6. [Google Scholar]
- Messer, M.; Paiva, J.; Hauksson, H.; Ihantola, P.; Prather, J.; Petersen, A.; Edwards, S.H.; Luxton-Reilly, A.; Becker, B.A. Automated grading and feedback tools for programming education: A systematic review. ACM Trans. Comput. Educ. 2024, 24, 1–43. [Google Scholar] [CrossRef]
- Daradoumis, T.; Puig, J.M.M.; Arguedas, M.; Liñan, L.C. Analyzing students’ perceptions to improve the design of an automated assessment tool in online distributed programming. Comput. Educ. 2019, 128, 159–170. [Google Scholar] [CrossRef]
- Duran, R.; Rybicki, J.M.; Sorva, J.; Hellas, A. Exploring the value of student self-evaluation in introductory programming. In Proceedings of the 2019 ACM Conference on International Computing Education Research, Toronto, ON, Canada, 12–14 August 2019; pp. 121–130. [Google Scholar]
- Papadakis, S. Evaluating a game-development approach to teach introductory programming concepts in secondary education. Int. J. Technol. Enhanc. Learn. 2020, 12, 127–145. [Google Scholar] [CrossRef]
- Gulec, U.; Yilmaz, M.; Yalcin, A.D.; O’Connor, R.V.; Clarke, P.M. Cengo: A web-based serious game to increase the programming knowledge levels of computer engineering students. In Proceedings of the EuroSPI 2019, Edinburgh, UK, 18–20 September 2019; Springer: Cham, Switzerland, 2019; pp. 237–248. [Google Scholar]
- Estévez-Ayres, I.; Callejo, P.; Hombrados-Herrera, M.Á.; Alario-Hoyos, C.; Kloos, C.D. Evaluation of LLM tools for feedback generation in a course on concurrent programming. Int. J. Artif. Intell. Educ. 2024, 35, 774–790. [Google Scholar] [CrossRef]
- Ma, B.; Chen, L.; Konomi, S. Enhancing programming education with ChatGPT: A case study on student perceptions and interactions in a Python course. In International Conference on Artificial Intelligence in Education; Springer: Cham, Switzerland, 2024. [Google Scholar]
- Doughty, J.; Prather, J.; Teague, D.; Zingaro, D.; Petersen, A.; Becker, B.A. A comparative study of AI-generated (GPT-4) and human-crafted MCQs in programming education. In Proceedings of the 26th Australasian Computing Education Conference, Sydney, Australia, 29 January–2 February 2024; pp. 1–8. [Google Scholar]
- Ghimire, A.; Edwards, J. Coding with AI: How are tools like ChatGPT being used by students in foundational programming courses. In Proceedings of the International Conference on Artificial Intelligence in Education, Recife, Brazil, 8–12 July 2024; pp. 259–267. [Google Scholar]
- Silva, C.A.G.D.; Ramos, F.N.; De Moraes, R.V.; Santos, E.L.D. ChatGPT: Challenges and benefits in software programming for higher education. Sustainability 2024, 16, 1245. [Google Scholar] [CrossRef]
- Popovici, M.D. ChatGPT in the classroom: Exploring its potential and limitations in a functional programming course. Int. J. Hum.-Comput. Interact. 2024, 40, 7743–7754. [Google Scholar] [CrossRef]
- Rahman, M.M.; Watanobe, Y. ChatGPT for education and research: Opportunities, threats, and strategies. Appl. Sci. 2023, 13, 5783. [Google Scholar] [CrossRef]
- Lo, C.K. What is the impact of ChatGPT on education? A rapid review of the literature. Educ. Sci. 2023, 13, 410. [Google Scholar] [CrossRef]
- Strielkowski, W.; Grebennikova, V.; Lisovskiy, A.; Rakhimova, G.; Vasileva, T. AI-driven adaptive learning for sustainable educational transformation. Sustain. Dev. 2025, 33, 1921–1947. [Google Scholar] [CrossRef]
- Chang, C.I.; Choi, W.C.; Choi, I.C. A systematic literature review of the opportunities and advantages for AIGC (OpenAI ChatGPT, Copilot, Codex) in programming course. In Proceedings of the 7th International Conference on Big Data and Education (ICBDE ’24), Fukuoka, Japan, 24–26 September 2024. [Google Scholar]
- Qi, H.; Li, Z.; Funabiki, N.; Kyaw, H.H.S.; Kao, W.C. A blank element selection algorithm for element fill-in-blank problems in client-side web programming. Eng. Lett. 2024, 32, 684–700. [Google Scholar]
Blank ID | Excerpt or Code Fragment | Rule Type | Line # | Remark |
---|---|---|---|---|
1 | _1_ (<title>Whack-a-Mole</title>) | HTML Tag | 5 | Document title setup |
2 | _2_ (text-align: center;) | CSS Syntax | 12 | Centers body text |
3 | _9_ (Whack-a-Mole</h1>) | HTML Element/Text | 37 | Main heading text |
4 | _10_ (let activeCell;) | JavaScript Identifier | 44 | Tracks the current active cell |
5 | _13_ (const scoreDisplay = document.getElementById("score");) | JavaScript DOM Reference | 48 | Points to the score display |
6 | _14_ (for (let i = 0; i < 9; i++) { ...) | Loop Statement | 50 | Generates 9 game cells |
7 | _15_ (if (cell === activeCell)) | Condition (Game Logic) | 53 | Checks if user clicked the mole |
8 | _16_ (score++;) | Dynamic Value Calculation | 54 | Increments the player score |
9 | _17_ (document.getElementById("startButton")...) | Event Handling | 60 | Sets up the start-button click |
ID | Topic | Total # of Lines | JS Lines | Blanks |
---|---|---|---|---|
1 | Button Function | 15 | 5 | 5 |
2 | Easy Multiplication | 15 | 6 | 4 |
3 | Showing Date | 15 | 5 | 5 |
4 | Character Counter App | 21 | 6 | 5 |
5 | Selected Values | 23 | 10 | 8 |
6 | Object | 25 | 11 | 8 |
7 | Warning Message | 26 | 6 | 7 |
8 | Color Selector | 27 | 11 | 7 |
9 | Password Check App | 32 | 13 | 10 |
10 | Custom Timer | 49 | 20 | 14 |
Total (Average) | 248 (24.8) | 93 (9.3) | 73 (7.3) |
ID | Topic | Total # of Lines | JS Lines | Blanks |
---|---|---|---|---|
1 | Counter Game | 46 | 7 | 11 |
2 | Guess Number Game | 66 | 17 | 21 |
3 | Snake Game | 103 | 58 | 17 |
4 | React Time Game | 61 | 19 | 16 |
5 | Hit Mole Game | 80 | 36 | 20 |
Total (Average) | 356 (71.2) | 137 (27.4) | 85 (17) |
ID | Topic | Blanks | Correct Blanks | Incorrect Blanks | Accuracy |
---|---|---|---|---|---|
1 | Button Function | 5 | 5 | 0 | 100% |
2 | Easy Multiplication | 4 | 2 | 2 | 50% |
3 | Showing Date | 5 | 5 | 0 | 100% |
4 | Color Selector | 7 | 4 | 3 | 57.14% |
5 | Selected Values | 8 | 8 | 0 | 100% |
6 | Object | 8 | 5 | 3 | 62.5% |
7 | Character Counter Application | 7 | 7 | 0 | 100% |
8 | Warning Message | 7 | 7 | 0 | 100% |
9 | Password Check Application | 10 | 9 | 1 | 90% |
10 | Custom Timer | 14 | 13 | 1 | 92.86% |
Total (Average) | 75 (7.5) | 65 (6.5) | 10 (1) | (86.67%) |
ID | Topic | Blanks | Correct Blanks | Incorrect Blanks | Accuracy |
---|---|---|---|---|---|
1 | Counter Game | 11 | 9 | 2 | 81.82% |
2 | Guess Number Game | 21 | 20 | 1 | 95.24% |
3 | Snake Game | 17 | 14 | 3 | 82.35% |
4 | React Time Game | 16 | 11 | 5 | 68.75% |
5 | Hit Mole Game | 20 | 14 | 6 | 70% |
Total (Average) | 85 (17) | 68 (13.6) | 17 (3.4) | (79.63%) |
Answer Pattern | Original Answer | ChatGPT Answer |
---|---|---|
Exact Match | <title>Click Game | <title>Click Game |
Exact Content, Reordered |
_1_: text-align: center; _2_: background-color: white; |
_1_: background-color: white; _2_: text-align: center; |
Format Variation | background-color: green; | background-color: #006400; |
Contextual Error | if (guess > randomNumber) | if (guess < randomNumber) |
Syntax Error | Enter a number between 1 and 100:</p> | Enter a number between 1 and 100: |
Disclaimer/Publisher’s Note: The statements, opinions and data contained in all publications are solely those of the individual author(s) and contributor(s) and not of MDPI and/or the editor(s). MDPI and/or the editor(s) disclaim responsibility for any injury to people or property resulting from any ideas, methods, instructions or products referred to in the content. |
© 2025 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license (https://creativecommons.org/licenses/by/4.0/).
Share and Cite
Qi, H.; Li, Z.; Funabiki, N.; Sandi Kyaw, H.H.; Kao, W.C. A Phrase Fill-in-Blank Problem in a Client-Side Web Programming Assistant System. Information 2025, 16, 709. https://doi.org/10.3390/info16080709
Qi H, Li Z, Funabiki N, Sandi Kyaw HH, Kao WC. A Phrase Fill-in-Blank Problem in a Client-Side Web Programming Assistant System. Information. 2025; 16(8):709. https://doi.org/10.3390/info16080709
Chicago/Turabian StyleQi, Huiyu, Zhikang Li, Nobuo Funabiki, Htoo Htoo Sandi Kyaw, and Wen Chung Kao. 2025. "A Phrase Fill-in-Blank Problem in a Client-Side Web Programming Assistant System" Information 16, no. 8: 709. https://doi.org/10.3390/info16080709
APA StyleQi, H., Li, Z., Funabiki, N., Sandi Kyaw, H. H., & Kao, W. C. (2025). A Phrase Fill-in-Blank Problem in a Client-Side Web Programming Assistant System. Information, 16(8), 709. https://doi.org/10.3390/info16080709