<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: 10033 code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Mon, 13 Oct 2008 13:23:20 GMT</pubDate>
    <description>DZone Snippets: 10033 code</description>
    <item>
      <title>A solution for the "Interpreter" problem</title>
      <link>http://snippets.dzone.com/posts/show/5246</link>
      <description>A solution for the "Interpreter" problem.&lt;br /&gt; &lt;br /&gt;Problem description:&lt;br /&gt;&lt;a href="http://icpcres.ecs.baylor.edu/onlinejudge/external/100/10033.html"&gt;http://icpcres.ecs.baylor.edu/onlinejudge/external/100/10033.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Author: &lt;a href="http://joanatrindade.wikidot.com"&gt;Joana Matos Fonseca da Trindade&lt;/a&gt;&lt;br /&gt;Date: 2008.03.16&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/* &lt;br /&gt; * Solution for the "Interpreter" problem.&lt;br /&gt; * UVa ID: 10033&lt;br /&gt; */&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;#define MAX_REG 10&lt;br /&gt;#define MAX_RAM 1000&lt;br /&gt;&lt;br /&gt;int pointer;&lt;br /&gt;int regArray[MAX_REG];&lt;br /&gt;int ram[MAX_RAM];&lt;br /&gt;&lt;br /&gt;/* initialize registers and ram */&lt;br /&gt;int init() {&lt;br /&gt;	int i;&lt;br /&gt;	for (i = 0; i &lt; MAX_REG; i++) {&lt;br /&gt;		regArray[i] = 0;&lt;br /&gt;	}&lt;br /&gt;	for (i = 0; i &lt; MAX_RAM; i++) {&lt;br /&gt;		ram[i] = 0;&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* decode instruction */&lt;br /&gt;int decode() {&lt;br /&gt;	int command, a1, a2;&lt;br /&gt;	command = ram[pointer] / 100;&lt;br /&gt;	a1 = (ram[pointer] % 100) / 10;&lt;br /&gt;	a2 = ram[pointer] % 10;&lt;br /&gt;	&lt;br /&gt;	switch (command) {&lt;br /&gt;		/* halt */&lt;br /&gt;		case 1 :		&lt;br /&gt;			return 0;&lt;br /&gt;			break;&lt;br /&gt;			&lt;br /&gt;		/* set register a1 to a2 */&lt;br /&gt;		case 2 :&lt;br /&gt;			regArray[a1] = a2;&lt;br /&gt;			pointer++;&lt;br /&gt;			break;&lt;br /&gt;			&lt;br /&gt;		/* add a2 to register a1 */&lt;br /&gt;		case 3 :&lt;br /&gt;			regArray[a1] = (regArray[a1] + a2) % 1000;&lt;br /&gt;			pointer++;&lt;br /&gt;			break;&lt;br /&gt;			&lt;br /&gt;		/* multiply register a1 by a2 */&lt;br /&gt;		case 4 :&lt;br /&gt;			regArray[a1] = (regArray[a1] * a2) % 1000;&lt;br /&gt;			pointer++;&lt;br /&gt;			break;&lt;br /&gt;			&lt;br /&gt;		/* set register a1 to the value of register a2 */&lt;br /&gt;		case 5 : &lt;br /&gt;			regArray[a1] = regArray[a2];&lt;br /&gt;			pointer++;&lt;br /&gt;			break;&lt;br /&gt;			&lt;br /&gt;		/* add the value of register a2 to register a1 */&lt;br /&gt;		case 6 : &lt;br /&gt;			regArray[a1] = (regArray[a1] + regArray[a2]) % 1000;&lt;br /&gt;			pointer++;&lt;br /&gt;			break;&lt;br /&gt;			&lt;br /&gt;		/* multiply register a1 by the value of register a2 */&lt;br /&gt;		case 7 :&lt;br /&gt;			regArray[a1] = (regArray[a1] * regArray[a2]) % 1000;&lt;br /&gt;			pointer++;&lt;br /&gt;			break;&lt;br /&gt;			&lt;br /&gt;		/* set register a1 to the value in RAM whose address is in register a2 */&lt;br /&gt;		case 8 :&lt;br /&gt;			regArray[a1] = ram[regArray[a2]];&lt;br /&gt;			pointer++;&lt;br /&gt;			break;			&lt;br /&gt;			&lt;br /&gt;		/* set the value in RAM whose address in in register a2 to that of register a1 */&lt;br /&gt;		case 9 :&lt;br /&gt;			ram[regArray[a2]] = regArray[a1];&lt;br /&gt;			pointer++;&lt;br /&gt;			break;			&lt;br /&gt;			&lt;br /&gt;		/* goto */		&lt;br /&gt;		case 0 :&lt;br /&gt;			if (regArray[a2] != 0) {&lt;br /&gt;				pointer = regArray[a1];&lt;br /&gt;			} else {&lt;br /&gt;				pointer++;&lt;br /&gt;			}&lt;br /&gt;			break;			&lt;br /&gt;			&lt;br /&gt;		default: &lt;br /&gt;			break;&lt;br /&gt;	}&lt;br /&gt;	return 1;	&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* main */&lt;br /&gt;int main (int argc, const char * argv[]) {&lt;br /&gt;	int i, j, cases, num_instr;&lt;br /&gt;	char instr[5];&lt;br /&gt;&lt;br /&gt;	scanf("%d", &amp;cases);&lt;br /&gt;	fgets(instr, sizeof(instr), stdin);&lt;br /&gt;	fgets(instr, sizeof(instr), stdin);&lt;br /&gt;	num_instr = 0;&lt;br /&gt;	&lt;br /&gt;	/* for the number of test cases specified */&lt;br /&gt;	for (i = 0; i &lt; cases; i++) {&lt;br /&gt;		init();&lt;br /&gt;		&lt;br /&gt;		pointer = 0;&lt;br /&gt;		&lt;br /&gt;		if (i != 0) {&lt;br /&gt;			printf("\n");&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		/* read input ram */&lt;br /&gt;		while(fgets(instr, sizeof(instr), stdin) != NULL) {&lt;br /&gt;			if (instr[0] == '\n') {&lt;br /&gt;				break;&lt;br /&gt;			}&lt;br /&gt;			ram[pointer] = (instr[0] - '0') * 100 + (instr[1] - '0') * 10 + (instr[2] - '0');&lt;br /&gt;			pointer++;&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		/* decode and interpret instructions until halt */&lt;br /&gt;		num_instr = 1;&lt;br /&gt;		pointer = 0;&lt;br /&gt;		while (decode()) {&lt;br /&gt;			num_instr++;&lt;br /&gt;		}	&lt;br /&gt;		&lt;br /&gt;		printf("%d\n",num_instr);	&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 18 Mar 2008 09:26:35 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5246</guid>
      <author>jmftrindade (Joana M. F. da Trindade)</author>
    </item>
  </channel>
</rss>
