<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://dev.eiffel.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marco2357</id>
		<title>EiffelStudio: an EiffelSoftware project - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://dev.eiffel.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marco2357"/>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/Special:Contributions/Marco2357"/>
		<updated>2026-04-15T18:48:31Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=RosettaCode_Balanced_Brackets&amp;diff=14559</id>
		<title>RosettaCode Balanced Brackets</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=RosettaCode_Balanced_Brackets&amp;diff=14559"/>
				<updated>2012-10-03T10:39:57Z</updated>
		
		<summary type="html">&lt;p&gt;Marco2357: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rosetta Code]]&lt;br /&gt;
[[Category:Flash Code]]&lt;br /&gt;
&lt;br /&gt;
'''-&amp;gt; [[RosettaCode]] Overview'''&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
Statement of the Balanced Brackets problem on RosettaCode: [http://rosettacode.org/wiki/Balanced_brackets here].&lt;br /&gt;
&lt;br /&gt;
==Eiffel code==&lt;br /&gt;
&lt;br /&gt;
Here's a candidate implementation using [[EiffelBase2]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;e&amp;gt;&lt;br /&gt;
class&lt;br /&gt;
	BALANCED_BRACKETS&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
	make&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Initialization&lt;br /&gt;
&lt;br /&gt;
	make&lt;br /&gt;
			-- Generate bracket string.&lt;br /&gt;
		local&lt;br /&gt;
			random: V_RANDOM&lt;br /&gt;
		do&lt;br /&gt;
			create random&lt;br /&gt;
			count := 2 * random.bounded_item (0, Max_half_count)&lt;br /&gt;
--			count := 50&lt;br /&gt;
			create brackets.make (1, count)&lt;br /&gt;
			fill_random&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[][]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[[][]]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;][&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;][][&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[]][[]&amp;quot;) ; printout&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
feature -- Access&lt;br /&gt;
&lt;br /&gt;
	Max_half_count: INTEGER = 10&lt;br /&gt;
			-- Maximum possible value for count // 2.&lt;br /&gt;
&lt;br /&gt;
	count: INTEGER&lt;br /&gt;
			-- Number of items in bracket sequence.&lt;br /&gt;
&lt;br /&gt;
	brackets: V_ARRAY [BOOLEAN]&lt;br /&gt;
			-- The string of brackets to be generated and analyzed.&lt;br /&gt;
			-- True is opening bracket, False is closing.&lt;br /&gt;
&lt;br /&gt;
feature -- Basic operations&lt;br /&gt;
&lt;br /&gt;
	is_balanced: BOOLEAN&lt;br /&gt;
			-- Is bracket string represented by `brackets' bracket-balanced?&lt;br /&gt;
		local&lt;br /&gt;
			balance: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			Result := True&lt;br /&gt;
			across brackets as b until not Result loop&lt;br /&gt;
				if b.item then&lt;br /&gt;
					balance := balance + 1&lt;br /&gt;
				else&lt;br /&gt;
					if balance = 0 then&lt;br /&gt;
						Result := False&lt;br /&gt;
					else&lt;br /&gt;
						balance := balance - 1&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			Result := Result and (balance = 0)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature -- Conversion&lt;br /&gt;
&lt;br /&gt;
	as_bracket_string (br: V_ARRAY [BOOLEAN]): STRING&lt;br /&gt;
			-- `br' understood as a string consisting solely of opening and closing brackets.&lt;br /&gt;
		do&lt;br /&gt;
			create Result.make (count)&lt;br /&gt;
&lt;br /&gt;
			across br as b loop&lt;br /&gt;
				if b.item then&lt;br /&gt;
					Result.extend ('[')&lt;br /&gt;
				else&lt;br /&gt;
					Result.extend (']')&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	as_boolean_array (bs: STRING): V_ARRAY [BOOLEAN]&lt;br /&gt;
			-- `br' turned into boolean array (&amp;quot;[&amp;quot; is True, &amp;quot;]&amp;quot;is False).&lt;br /&gt;
		require&lt;br /&gt;
			exists: bs /= Void&lt;br /&gt;
			only_brackets: bs.occurrences ('[') + bs.occurrences (']') = bs.count&lt;br /&gt;
		do&lt;br /&gt;
			create Result.make (1, bs.count)&lt;br /&gt;
			across bs as b loop&lt;br /&gt;
				Result [b.target_index] := (b.item = '[')&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature -- Input and output&lt;br /&gt;
&lt;br /&gt;
	printout&lt;br /&gt;
			-- Output result.&lt;br /&gt;
		do&lt;br /&gt;
			print (&amp;quot;Bracket string: &amp;quot;)&lt;br /&gt;
			print (as_bracket_string (brackets)+ &amp;quot;%T&amp;quot;)&lt;br /&gt;
			if not is_balanced then&lt;br /&gt;
				print (&amp;quot;NOT &amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			print (&amp;quot;OK%N&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Implementation&lt;br /&gt;
&lt;br /&gt;
	fill_random&lt;br /&gt;
			-- Set `count//2' random `brackets' position to opening.&lt;br /&gt;
		local&lt;br /&gt;
			random: V_RANDOM&lt;br /&gt;
			filled, pos: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			from&lt;br /&gt;
				create random&lt;br /&gt;
			invariant&lt;br /&gt;
				filled &amp;lt;= count // 2&lt;br /&gt;
			until&lt;br /&gt;
				filled = count // 2&lt;br /&gt;
			loop&lt;br /&gt;
				pos := random.bounded_item (brackets.lower, brackets.upper)&lt;br /&gt;
				if not brackets [pos] then&lt;br /&gt;
					brackets [pos] := True&lt;br /&gt;
					filled := filled + 1&lt;br /&gt;
				end&lt;br /&gt;
				random.forth&lt;br /&gt;
				-- variant&lt;br /&gt;
				-- Interestingly enough, there is no  variant as this&lt;br /&gt;
				-- loop might in principle not terminate, depending&lt;br /&gt;
				-- on the properties of the random generator.&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
invariant&lt;br /&gt;
	count_limit: count &amp;lt;= 2 * Max_half_count&lt;br /&gt;
	array_length_consistent: brackets.count = count&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/e&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marco2357</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=RosettaCode_Balanced_Brackets&amp;diff=14558</id>
		<title>RosettaCode Balanced Brackets</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=RosettaCode_Balanced_Brackets&amp;diff=14558"/>
				<updated>2012-10-03T08:50:35Z</updated>
		
		<summary type="html">&lt;p&gt;Marco2357: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rosetta Code]]&lt;br /&gt;
[[Category:Flash Code]]&lt;br /&gt;
&lt;br /&gt;
'''-&amp;gt; [[RosettaCode]] Overview'''&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
Statement of the Balanced Brackets problem on RosettaCode: [http://rosettacode.org/wiki/Balanced_brackets here].&lt;br /&gt;
&lt;br /&gt;
==Eiffel code==&lt;br /&gt;
&lt;br /&gt;
Here's a candidate implementation using [[EiffelBase2]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;e&amp;gt;&lt;br /&gt;
class&lt;br /&gt;
	APPLICATION&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
	make&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Initialization&lt;br /&gt;
&lt;br /&gt;
	make&lt;br /&gt;
			-- Generate bracket string.&lt;br /&gt;
		local&lt;br /&gt;
			random: V_RANDOM&lt;br /&gt;
		do&lt;br /&gt;
			create random&lt;br /&gt;
			count := 2 * random.bounded_item (0, Max_half_count)&lt;br /&gt;
--			count := 50&lt;br /&gt;
			create brackets.make (1, count)&lt;br /&gt;
			fill_random&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[][]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[[][]]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;][&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;][][&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[]][[]&amp;quot;) ; printout&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
feature -- Access&lt;br /&gt;
&lt;br /&gt;
	Max_half_count: INTEGER = 10&lt;br /&gt;
			-- Maximum possible value for count // 2.&lt;br /&gt;
&lt;br /&gt;
	count: INTEGER&lt;br /&gt;
			-- Number of items in bracket sequence.&lt;br /&gt;
&lt;br /&gt;
	brackets: V_ARRAY [BOOLEAN]&lt;br /&gt;
			-- The string of brackets to be generated and analyzed.&lt;br /&gt;
			-- True is opening bracket, False is closing.&lt;br /&gt;
&lt;br /&gt;
feature -- Basic operations&lt;br /&gt;
&lt;br /&gt;
	is_balanced: BOOLEAN&lt;br /&gt;
			-- Is bracket string represented by `brackets' bracket-balanced?&lt;br /&gt;
		local&lt;br /&gt;
			balance: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			Result := True&lt;br /&gt;
			across brackets as b until not Result loop&lt;br /&gt;
				if b.item then&lt;br /&gt;
					balance := balance + 1&lt;br /&gt;
				else&lt;br /&gt;
					if balance = 0 then&lt;br /&gt;
						Result := False&lt;br /&gt;
					else&lt;br /&gt;
						balance := balance - 1&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			Result := Result and (balance = 0)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature -- Conversion&lt;br /&gt;
&lt;br /&gt;
	as_bracket_string (br: V_ARRAY [BOOLEAN]): STRING&lt;br /&gt;
			-- `br' understood as a string consisting solely of opening and closing brackets.&lt;br /&gt;
		do&lt;br /&gt;
			create Result.make (count)&lt;br /&gt;
&lt;br /&gt;
			across br as b loop&lt;br /&gt;
				if b.item then&lt;br /&gt;
					Result.extend ('[')&lt;br /&gt;
				else&lt;br /&gt;
					Result.extend (']')&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	as_boolean_array (bs: STRING): V_ARRAY [BOOLEAN]&lt;br /&gt;
			-- `br' turned into boolean array (&amp;quot;[&amp;quot; is True, &amp;quot;]&amp;quot;is False).&lt;br /&gt;
		require&lt;br /&gt;
			exists: bs /= Void&lt;br /&gt;
			only_brackets: bs.occurrences ('[') + bs.occurrences (']') = bs.count&lt;br /&gt;
		do&lt;br /&gt;
			create Result.make (1, bs.count)&lt;br /&gt;
			across bs as b loop&lt;br /&gt;
				Result [b.target_index] := (b.item = '[')&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature -- Input and output&lt;br /&gt;
&lt;br /&gt;
	printout&lt;br /&gt;
			-- Output result.&lt;br /&gt;
		do&lt;br /&gt;
			print (&amp;quot;Bracket string: &amp;quot;)&lt;br /&gt;
			print (as_bracket_string (brackets)+ &amp;quot;%T&amp;quot;)&lt;br /&gt;
			if not is_balanced then&lt;br /&gt;
				print (&amp;quot;NOT &amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			print (&amp;quot;OK%N&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Implementation&lt;br /&gt;
&lt;br /&gt;
	fill_random&lt;br /&gt;
			-- Set `count//2' random `brackets' position to opening.&lt;br /&gt;
		local&lt;br /&gt;
			random: V_RANDOM&lt;br /&gt;
			filled, pos: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			from&lt;br /&gt;
				create random&lt;br /&gt;
			invariant&lt;br /&gt;
				filled &amp;lt;= count // 2&lt;br /&gt;
			until&lt;br /&gt;
				filled = count // 2&lt;br /&gt;
			loop&lt;br /&gt;
				pos := random.bounded_item (brackets.lower, brackets.upper)&lt;br /&gt;
				if not brackets [pos] then&lt;br /&gt;
					brackets [pos] := True&lt;br /&gt;
					filled := filled + 1&lt;br /&gt;
				end&lt;br /&gt;
				random.forth&lt;br /&gt;
				-- variant&lt;br /&gt;
				-- Interestingly enough, there is no  variant as this&lt;br /&gt;
				-- loop might in principle not terminate, depending&lt;br /&gt;
				-- on the properties of the random generator.&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
invariant&lt;br /&gt;
	count_limit: count &amp;lt;= 2 * Max_half_count&lt;br /&gt;
	array_length_consistent: brackets.count = count&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/e&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marco2357</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=RosettaCode_Balanced_Brackets&amp;diff=14557</id>
		<title>RosettaCode Balanced Brackets</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=RosettaCode_Balanced_Brackets&amp;diff=14557"/>
				<updated>2012-10-03T08:49:35Z</updated>
		
		<summary type="html">&lt;p&gt;Marco2357: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rosetta Code]]&lt;br /&gt;
[[Category:Flash Code]]&lt;br /&gt;
&lt;br /&gt;
'''-&amp;gt; [[RosettaCode]] Overview'''&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
Statement of the Balanced Brackets problem on RosettaCode: [http://rosettacode.org/wiki/Balanced_brackets here].&lt;br /&gt;
&lt;br /&gt;
==Eiffel code==&lt;br /&gt;
&lt;br /&gt;
Here's a candidate implementation using [[EiffelBase2]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;e&amp;gt;&lt;br /&gt;
class&lt;br /&gt;
	APPLICATION&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
	make&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Initialization&lt;br /&gt;
&lt;br /&gt;
	make&lt;br /&gt;
			-- Generate bracket string.&lt;br /&gt;
		local&lt;br /&gt;
			random: V_RANDOM&lt;br /&gt;
		do&lt;br /&gt;
			create random&lt;br /&gt;
			count := 2 * random.bounded_item (0, Max_half_count)&lt;br /&gt;
--			count := 50&lt;br /&gt;
			create brackets.make (1, count)&lt;br /&gt;
			fill_random&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[][]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[[][]]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;][&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;][][&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[]][[]&amp;quot;) ; printout&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
feature -- Access&lt;br /&gt;
&lt;br /&gt;
	Max_half_count: INTEGER = 10&lt;br /&gt;
			-- Maximum possible value for count // 2.&lt;br /&gt;
&lt;br /&gt;
	count: INTEGER&lt;br /&gt;
			-- Number of items in bracket sequence.&lt;br /&gt;
&lt;br /&gt;
	brackets: V_ARRAY [BOOLEAN]&lt;br /&gt;
			-- The string of brackets to be generated and analyzed.&lt;br /&gt;
			-- True is opening bracket, False is closing.&lt;br /&gt;
&lt;br /&gt;
feature -- Basic operations&lt;br /&gt;
&lt;br /&gt;
	is_balanced: BOOLEAN&lt;br /&gt;
			-- Is bracket string represented by `brackets' bracket-balanced?&lt;br /&gt;
		local&lt;br /&gt;
			balance: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			Result := True&lt;br /&gt;
			across brackets as b until not Result loop&lt;br /&gt;
				if b.item then&lt;br /&gt;
					balance := balance + 1&lt;br /&gt;
				else&lt;br /&gt;
					if balance = 0 then&lt;br /&gt;
						Result := False&lt;br /&gt;
					else&lt;br /&gt;
						balance := balance - 1&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			Result := Result and (balance = 0)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature -- Conversion&lt;br /&gt;
&lt;br /&gt;
	as_bracket_string (br: V_ARRAY [BOOLEAN]): STRING&lt;br /&gt;
			-- `br' understood as a string consisting solely of opening and closing brackets.&lt;br /&gt;
		do&lt;br /&gt;
			create Result.make (count)&lt;br /&gt;
&lt;br /&gt;
			across br as b loop&lt;br /&gt;
				if b.item then&lt;br /&gt;
					Result.extend ('[')&lt;br /&gt;
				else&lt;br /&gt;
					Result.extend (']')&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	as_boolean_array (bs: STRING): V_ARRAY [BOOLEAN]&lt;br /&gt;
			-- `br' turned into boolean array (&amp;quot;[&amp;quot; is True, &amp;quot;]&amp;quot;is False).&lt;br /&gt;
		require&lt;br /&gt;
			exists: bs /= Void&lt;br /&gt;
			only_brackets: bs.occurrences ('[') + bs.occurrences (']') = bs.count&lt;br /&gt;
		do&lt;br /&gt;
			create Result.make (1, bs.count)&lt;br /&gt;
			across bs as b loop&lt;br /&gt;
				Result [b.target_index] := (b.item = '[')&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature -- Input and output&lt;br /&gt;
&lt;br /&gt;
	printout&lt;br /&gt;
			-- Output result.&lt;br /&gt;
		do&lt;br /&gt;
			print (&amp;quot;Bracket string: &amp;quot;)&lt;br /&gt;
			print (as_bracket_string (brackets)+ &amp;quot;%T&amp;quot;)&lt;br /&gt;
			if not is_balanced then&lt;br /&gt;
				print (&amp;quot;NOT &amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			print (&amp;quot;OK%N&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Implementation&lt;br /&gt;
&lt;br /&gt;
	fill_random&lt;br /&gt;
			-- Set `count//2' random `brackets' position to opening.&lt;br /&gt;
		local&lt;br /&gt;
			random: V_RANDOM&lt;br /&gt;
			filled, pos: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			from&lt;br /&gt;
				create random&lt;br /&gt;
			invariant&lt;br /&gt;
				filled &amp;lt;= count // 2&lt;br /&gt;
			until&lt;br /&gt;
				filled = count // 2&lt;br /&gt;
			loop&lt;br /&gt;
				pos := random.bounded_item (brackets.lower, brackets.upper)&lt;br /&gt;
				if not brackets [pos] then&lt;br /&gt;
					brackets [pos] := True&lt;br /&gt;
					filled := filled + 1&lt;br /&gt;
				end&lt;br /&gt;
				random.forth&lt;br /&gt;
				-- variant&lt;br /&gt;
				-- Interestingly enough, there is no  variant as this&lt;br /&gt;
				-- loop might in principle not terminate, depending&lt;br /&gt;
				-- on the properties of the random generator.&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
invariant&lt;br /&gt;
	count_limit: count &amp;lt;= 2 * Max_half_count&lt;br /&gt;
	array_length_consistent: brackets.count = count&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/e&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marco2357</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=RosettaCode_Balanced_Brackets&amp;diff=14556</id>
		<title>RosettaCode Balanced Brackets</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=RosettaCode_Balanced_Brackets&amp;diff=14556"/>
				<updated>2012-10-03T08:43:32Z</updated>
		
		<summary type="html">&lt;p&gt;Marco2357: New page: Category:Rosetta Code Category:Flash Code  '''-&amp;gt; RosettaCode Overview'''  ==Reference== Statement of the Balanced Brackets problem on RosettaCode: [http://rosettacode.org/wiki/...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rosetta Code]]&lt;br /&gt;
[[Category:Flash Code]]&lt;br /&gt;
&lt;br /&gt;
'''-&amp;gt; [[RosettaCode]] Overview'''&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
Statement of the Balanced Brackets problem on RosettaCode: [http://rosettacode.org/wiki/Balanced_brackets here].&lt;br /&gt;
&lt;br /&gt;
==Eiffel code==&lt;br /&gt;
&lt;br /&gt;
Here's a candidate implementation using [[EiffelBase2]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;e&amp;gt;&lt;br /&gt;
class&lt;br /&gt;
	APPLICATION&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
	make&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Initialization&lt;br /&gt;
&lt;br /&gt;
	make&lt;br /&gt;
			-- Generate bracket string.&lt;br /&gt;
		local&lt;br /&gt;
			random: V_RANDOM&lt;br /&gt;
		do&lt;br /&gt;
			create random&lt;br /&gt;
			count := 2 * random.bounded_item (0, Max_half_count)&lt;br /&gt;
--			count := 50&lt;br /&gt;
			create brackets.make (1, count)&lt;br /&gt;
			fill_random&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[][]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[[][]]&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;][&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;][][&amp;quot;) ; printout&lt;br /&gt;
			brackets := as_boolean_array (&amp;quot;[]][[]&amp;quot;) ; printout&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
feature -- Access&lt;br /&gt;
&lt;br /&gt;
	Max_half_count: INTEGER = 10&lt;br /&gt;
			-- Maximum possible value for count // 2.&lt;br /&gt;
&lt;br /&gt;
	count: INTEGER&lt;br /&gt;
			-- Number of items in bracket sequence.&lt;br /&gt;
&lt;br /&gt;
	brackets: V_ARRAY [BOOLEAN]&lt;br /&gt;
			-- The string of brackets to be generated and analyzed.&lt;br /&gt;
			-- True is opening bracket, False is closing.&lt;br /&gt;
&lt;br /&gt;
feature -- Basic operations&lt;br /&gt;
&lt;br /&gt;
	is_balanced: BOOLEAN&lt;br /&gt;
			-- Is bracket string represented by `brackets' bracket-balanced?&lt;br /&gt;
		local&lt;br /&gt;
			balance: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			Result := True&lt;br /&gt;
			across brackets as b  until not Result loop&lt;br /&gt;
				if b.item then&lt;br /&gt;
					balance := balance + 1&lt;br /&gt;
				else&lt;br /&gt;
					if balance = 0 then&lt;br /&gt;
						Result := False&lt;br /&gt;
					else&lt;br /&gt;
						balance := balance - 1&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			Result := Result and (balance = 0)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature -- Conversion&lt;br /&gt;
&lt;br /&gt;
	as_bracket_string (br: V_ARRAY [BOOLEAN]): STRING&lt;br /&gt;
			-- `br' understood as a string consisting solely of opening and closing brackets.&lt;br /&gt;
		do&lt;br /&gt;
			create Result.make (count)&lt;br /&gt;
&lt;br /&gt;
			across br as b loop&lt;br /&gt;
				if b.item then&lt;br /&gt;
					Result.extend ('[')&lt;br /&gt;
				else&lt;br /&gt;
					Result.extend (']')&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	as_boolean_array (bs: STRING): V_ARRAY [BOOLEAN]&lt;br /&gt;
			-- `br' turned into boolean array (&amp;quot;[&amp;quot; is True, &amp;quot;]&amp;quot;is False).&lt;br /&gt;
		require&lt;br /&gt;
			exists: bs /= Void&lt;br /&gt;
			only_brackets: bs.occurrences ('[') + bs.occurrences (']') = bs.count&lt;br /&gt;
		do&lt;br /&gt;
			create Result.make (1, bs.count)&lt;br /&gt;
			across bs as b loop&lt;br /&gt;
				Result [b.target_index] := (b.item = '[')&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature -- Input and output&lt;br /&gt;
&lt;br /&gt;
	printout&lt;br /&gt;
			-- Output result.&lt;br /&gt;
		do&lt;br /&gt;
			print (&amp;quot;Bracket string: &amp;quot;)&lt;br /&gt;
			print (as_bracket_string (brackets)+ &amp;quot;%T&amp;quot;)&lt;br /&gt;
			if not is_balanced then&lt;br /&gt;
				print (&amp;quot;NOT &amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			print (&amp;quot;OK%N&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Implementation&lt;br /&gt;
&lt;br /&gt;
	fill_random&lt;br /&gt;
			-- Set `count//2' random `brackets' position to opening.&lt;br /&gt;
		local&lt;br /&gt;
			random: V_RANDOM&lt;br /&gt;
			filled, pos: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			from&lt;br /&gt;
				create random&lt;br /&gt;
			invariant&lt;br /&gt;
				filled &amp;lt;= count // 2&lt;br /&gt;
			until&lt;br /&gt;
				filled = count // 2&lt;br /&gt;
			loop&lt;br /&gt;
				pos := random.bounded_item (brackets.lower, brackets.upper)&lt;br /&gt;
				if not brackets [pos] then&lt;br /&gt;
					brackets [pos] := True&lt;br /&gt;
					filled := filled + 1&lt;br /&gt;
				end&lt;br /&gt;
				random.forth&lt;br /&gt;
				-- variant&lt;br /&gt;
				-- Interestingly enough, there is no  variant as this&lt;br /&gt;
				-- loop might in principle not terminate, depending&lt;br /&gt;
				-- on the properties of the random generator.&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
invariant&lt;br /&gt;
	count_limit: count &amp;lt;= 2 * Max_half_count&lt;br /&gt;
	array_length_consistent: brackets.count = count&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/e&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marco2357</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=RosettaCode_Monty_Hall&amp;diff=14555</id>
		<title>RosettaCode Monty Hall</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=RosettaCode_Monty_Hall&amp;diff=14555"/>
				<updated>2012-10-03T08:27:26Z</updated>
		
		<summary type="html">&lt;p&gt;Marco2357: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rosetta Code]]&lt;br /&gt;
[[Category:Flash Code ]]&lt;br /&gt;
&lt;br /&gt;
'''-&amp;gt; [[RosettaCode]] Overview'''&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
Statement of the Monty Hall problem on RosettaCode: [http://rosettacode.org/wiki/Monty_Hall_problem here].&lt;br /&gt;
&amp;lt;br&amp;gt;Deadline for adding to RosettaCode page: 31 Aug 2012; submitter:&lt;br /&gt;
&lt;br /&gt;
==Eiffel code==&lt;br /&gt;
&lt;br /&gt;
Here's a candidate implementation. This compiles and runs, producing output similar to this:&lt;br /&gt;
&lt;br /&gt;
Staying wins 333504 times.&lt;br /&gt;
&lt;br /&gt;
Switching wins 666496 times.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;e&amp;gt;&lt;br /&gt;
class&lt;br /&gt;
	MONTY_HALL&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
	make&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Initialization&lt;br /&gt;
&lt;br /&gt;
	make&lt;br /&gt;
		local&lt;br /&gt;
			games_count: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			create random_generator.make&lt;br /&gt;
			games_count := 1000000&lt;br /&gt;
&lt;br /&gt;
			across 1 |..| games_count as game loop&lt;br /&gt;
				play&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			print (&amp;quot;Staying wins &amp;quot; + staying_wins.out + &amp;quot; times.%N&amp;quot;)&lt;br /&gt;
			print (&amp;quot;Switching wins &amp;quot; + (games_count - staying_wins).out + &amp;quot; times.%N&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature -- Commands&lt;br /&gt;
&lt;br /&gt;
	play&lt;br /&gt;
		local&lt;br /&gt;
			doors: ARRAYED_LIST [BOOLEAN]&lt;br /&gt;
			chosen, shown: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			create doors.make_filled (Door_count)	-- False is a goat, True is a car&lt;br /&gt;
			doors [next_random_door] := True	-- Put a car behind a random door&lt;br /&gt;
 			chosen := next_random_door	-- Pick a door, any door&lt;br /&gt;
&lt;br /&gt;
			-- Monty selects a door which is neither the winner nor the choice&lt;br /&gt;
			from&lt;br /&gt;
				shown := next_random_door&lt;br /&gt;
			until&lt;br /&gt;
				shown /= chosen and not doors [shown]&lt;br /&gt;
			loop&lt;br /&gt;
				shown := next_random_door&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if doors [chosen] then	-- If you would have won by staying, count it&lt;br /&gt;
				staying_wins := staying_wins + 1&lt;br /&gt;
			end&lt;br /&gt;
		ensure&lt;br /&gt;
			staying_wins_valid: staying_wins = old staying_wins or staying_wins = old staying_wins + 1&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Implementation&lt;br /&gt;
&lt;br /&gt;
	Door_count: INTEGER = 3&lt;br /&gt;
			-- The total number of doors.&lt;br /&gt;
&lt;br /&gt;
	staying_wins: INTEGER&lt;br /&gt;
			-- The number of times that the strategy of staying would win.&lt;br /&gt;
&lt;br /&gt;
	random_generator: RANDOM&lt;br /&gt;
			-- A random number generator for selecting doors.&lt;br /&gt;
&lt;br /&gt;
	next_random_door: INTEGER&lt;br /&gt;
			-- A door chosen at random.&lt;br /&gt;
		do&lt;br /&gt;
			random_generator.forth&lt;br /&gt;
			Result := random_generator.item \\ Door_count + 1&lt;br /&gt;
		ensure&lt;br /&gt;
			valid_door: Result &amp;gt;= 1 and Result &amp;lt;= Door_count&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/e&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
&lt;br /&gt;
Note that the implementations in many other languages maintain a separate variable to count the number of switch wins. They calculate whether switching wins at each step via some funky logic that relies on zero-based array indexing, which would be inconvenient in Eiffel. But we don't need to do that at all anyway, because calculating it at each step is completely redundant: we can just do a final subtraction at the end, right?&lt;/div&gt;</summary>
		<author><name>Marco2357</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=RosettaCode_Monty_Hall&amp;diff=14554</id>
		<title>RosettaCode Monty Hall</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=RosettaCode_Monty_Hall&amp;diff=14554"/>
				<updated>2012-10-03T08:27:12Z</updated>
		
		<summary type="html">&lt;p&gt;Marco2357: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rosetta Code]]&lt;br /&gt;
[[Category:Flash Code ]]&lt;br /&gt;
&lt;br /&gt;
'''[[RosettaCode]] Overview'''&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
Statement of the Monty Hall problem on RosettaCode: [http://rosettacode.org/wiki/Monty_Hall_problem here].&lt;br /&gt;
&amp;lt;br&amp;gt;Deadline for adding to RosettaCode page: 31 Aug 2012; submitter:&lt;br /&gt;
&lt;br /&gt;
==Eiffel code==&lt;br /&gt;
&lt;br /&gt;
Here's a candidate implementation. This compiles and runs, producing output similar to this:&lt;br /&gt;
&lt;br /&gt;
Staying wins 333504 times.&lt;br /&gt;
&lt;br /&gt;
Switching wins 666496 times.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;e&amp;gt;&lt;br /&gt;
class&lt;br /&gt;
	MONTY_HALL&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
	make&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Initialization&lt;br /&gt;
&lt;br /&gt;
	make&lt;br /&gt;
		local&lt;br /&gt;
			games_count: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			create random_generator.make&lt;br /&gt;
			games_count := 1000000&lt;br /&gt;
&lt;br /&gt;
			across 1 |..| games_count as game loop&lt;br /&gt;
				play&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			print (&amp;quot;Staying wins &amp;quot; + staying_wins.out + &amp;quot; times.%N&amp;quot;)&lt;br /&gt;
			print (&amp;quot;Switching wins &amp;quot; + (games_count - staying_wins).out + &amp;quot; times.%N&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature -- Commands&lt;br /&gt;
&lt;br /&gt;
	play&lt;br /&gt;
		local&lt;br /&gt;
			doors: ARRAYED_LIST [BOOLEAN]&lt;br /&gt;
			chosen, shown: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			create doors.make_filled (Door_count)	-- False is a goat, True is a car&lt;br /&gt;
			doors [next_random_door] := True	-- Put a car behind a random door&lt;br /&gt;
 			chosen := next_random_door	-- Pick a door, any door&lt;br /&gt;
&lt;br /&gt;
			-- Monty selects a door which is neither the winner nor the choice&lt;br /&gt;
			from&lt;br /&gt;
				shown := next_random_door&lt;br /&gt;
			until&lt;br /&gt;
				shown /= chosen and not doors [shown]&lt;br /&gt;
			loop&lt;br /&gt;
				shown := next_random_door&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if doors [chosen] then	-- If you would have won by staying, count it&lt;br /&gt;
				staying_wins := staying_wins + 1&lt;br /&gt;
			end&lt;br /&gt;
		ensure&lt;br /&gt;
			staying_wins_valid: staying_wins = old staying_wins or staying_wins = old staying_wins + 1&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
feature {NONE} -- Implementation&lt;br /&gt;
&lt;br /&gt;
	Door_count: INTEGER = 3&lt;br /&gt;
			-- The total number of doors.&lt;br /&gt;
&lt;br /&gt;
	staying_wins: INTEGER&lt;br /&gt;
			-- The number of times that the strategy of staying would win.&lt;br /&gt;
&lt;br /&gt;
	random_generator: RANDOM&lt;br /&gt;
			-- A random number generator for selecting doors.&lt;br /&gt;
&lt;br /&gt;
	next_random_door: INTEGER&lt;br /&gt;
			-- A door chosen at random.&lt;br /&gt;
		do&lt;br /&gt;
			random_generator.forth&lt;br /&gt;
			Result := random_generator.item \\ Door_count + 1&lt;br /&gt;
		ensure&lt;br /&gt;
			valid_door: Result &amp;gt;= 1 and Result &amp;lt;= Door_count&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/e&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
&lt;br /&gt;
Note that the implementations in many other languages maintain a separate variable to count the number of switch wins. They calculate whether switching wins at each step via some funky logic that relies on zero-based array indexing, which would be inconvenient in Eiffel. But we don't need to do that at all anyway, because calculating it at each step is completely redundant: we can just do a final subtraction at the end, right?&lt;/div&gt;</summary>
		<author><name>Marco2357</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=RosettaCode&amp;diff=14553</id>
		<title>RosettaCode</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=RosettaCode&amp;diff=14553"/>
				<updated>2012-10-03T08:25:57Z</updated>
		
		<summary type="html">&lt;p&gt;Marco2357: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RosettaCode_Monty_Hall|Monty Hall]]&lt;br /&gt;
&lt;br /&gt;
[[RosettaCode_Balanced_Brackets|Balanced Brackets]]&lt;/div&gt;</summary>
		<author><name>Marco2357</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=RosettaCode&amp;diff=14552</id>
		<title>RosettaCode</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=RosettaCode&amp;diff=14552"/>
				<updated>2012-10-03T08:24:14Z</updated>
		
		<summary type="html">&lt;p&gt;Marco2357: New page: Monty Hall  Balanced Brackets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Monty Hall]]&lt;br /&gt;
&lt;br /&gt;
[[Balanced Brackets]]&lt;/div&gt;</summary>
		<author><name>Marco2357</name></author>	</entry>

	</feed>