April 09, 2015
On Thursday, 9 April 2015 at 12:57:26 UTC, Jack Applegame wrote:
>> I quite often have to write similar designs:
>>
>> -----
>> import std.stdio;
>>
>> void main() {
>>
>> 	auto a = [ 1, 2, 3, 4, 5 ];
>>
>> 	foreach (e; a) {
>> 		if (e == 4) {
>> 			writeln("Yes");
>> 			return;
>> 		}
>> 	}
>> 	
>> 	writeln("No");
>> }
>> -----
>>
>> But is not it easier to write :)
>>
>> import std.stdio;
>>
>> void main() {
>>
>> 	auto a = [ 1, 2, 3, 4, 5 ];
>>
>> 	foreach (e; a) {
>> 		if (e == 4) {
>> 			return writeln("Yes");
>> 		}
>> 	}
>> 	
>> 	writeln("No");
>> }
>
> import std.stdio;
> import std.algorithm;
> import std.array;
>
> void main() {
>   auto a = [ 1, 2, 3, 4, 5 ];
>   writeln(a.find(4).empty ? "No" : "Yes");
> }

import std.stdio;

void main() {

	foreach (...) {
		foreach (...) {
			...
			if (...) {
				...
				return writeln("Yes");
			}
			...
		}
		...
	}

	...
	
	writeln("No");
}

No design can be completely arbitrary:

-----
import std.stdio;

void main() {

	foreach (...) {
		foreach (...) {
			...
			if (...) {
				...
				return writeln("Yes");
			}
			...
		}
		...
	}

	...
	
	writeln("No");
}
April 09, 2015
On Thursday, 9 April 2015 at 11:04:00 UTC, Dennis Ritchie wrote:
> Hi,
> Is it allowed in D similar designs?
>
> void main() {
> 	import std.stdio;
> 	return writeln("Hello, world!");
> }

It seems that you can not do so because writeln() something back, which leads to RUNTIME_ERROR in DMD 2.066.1:

OK:
-----
import std.conv;
import std.stdio;
import std.string;

void main() {
	
	int n = readln.strip.to!int;
	string s = readln.strip;
	
	foreach (from; 0 .. n)
	foreach (jump; 1 .. n) {
		bool ok;
		foreach (i; 0 .. 5) {
			int pos = from + i * jump;
			if (pos >= n || s[pos] != '*') {
				ok = true;
				break;
			}
		}
		if (!ok)
			return write("yes");
	}
	
	write("no");
}
-----
http://codeforces.ru/contest/526/submission/10641745?locale=en

RUNTIME_ERROR:
-----
import std.conv;
import std.stdio;
import std.string;

void main() {

	int n = readln.strip.to!int;
	string s = readln.strip;

	foreach (from; 0 .. n)
		foreach (jump; 1 .. n) {
			bool ok;
			foreach (i; 0 .. 5) {
				int pos = from + i * jump;
				if (pos >= n || s[pos] != '*') {
					ok = true;
					break;
				}
			}
			if (!ok)
				return writeln("yes");
		}

	writeln("no");
}
-----
http://codeforces.ru/contest/526/submission/10641695?locale=en
April 09, 2015
On Thursday, 9 April 2015 at 16:02:01 UTC, Dennis Ritchie wrote:
> On Thursday, 9 April 2015 at 11:04:00 UTC, Dennis Ritchie wrote:
>> Hi,
>> Is it allowed in D similar designs?
>>
>> void main() {
>> 	import std.stdio;
>> 	return writeln("Hello, world!");
>> }
>
> It seems that you can not do so because writeln() something back, which leads to RUNTIME_ERROR in DMD 2.066.1:
>
> OK:
> -----
> import std.conv;
> import std.stdio;
> import std.string;
>
> void main() {
> 	
> 	int n = readln.strip.to!int;
> 	string s = readln.strip;
> 	
> 	foreach (from; 0 .. n)
> 	foreach (jump; 1 .. n) {
> 		bool ok;
> 		foreach (i; 0 .. 5) {
> 			int pos = from + i * jump;
> 			if (pos >= n || s[pos] != '*') {
> 				ok = true;
> 				break;
> 			}
> 		}
> 		if (!ok)
> 			return write("yes");
> 	}
> 	
> 	write("no");
> }
> -----
> http://codeforces.ru/contest/526/submission/10641745?locale=en
>
> RUNTIME_ERROR:
> -----
> import std.conv;
> import std.stdio;
> import std.string;
>
> void main() {
>
> 	int n = readln.strip.to!int;
> 	string s = readln.strip;
>
> 	foreach (from; 0 .. n)
> 		foreach (jump; 1 .. n) {
> 			bool ok;
> 			foreach (i; 0 .. 5) {
> 				int pos = from + i * jump;
> 				if (pos >= n || s[pos] != '*') {
> 					ok = true;
> 					break;
> 				}
> 			}
> 			if (!ok)
> 				return writeln("yes");
> 		}
>
> 	writeln("no");
> }
> -----
> http://codeforces.ru/contest/526/submission/10641695?locale=en

Try running your code somewhere where you can actually see the output properly. RUNTIME_ERROR isn't something I recognise from D.
April 09, 2015
On Thursday, 9 April 2015 at 16:55:00 UTC, John Colvin wrote:
> Try running your code somewhere where you can actually see the output properly. RUNTIME_ERROR isn't something I recognise from D.

Operates a code normally, but still gives the error:
http://ideone.com/kDHMk5
April 09, 2015
On Thursday, 9 April 2015 at 17:08:44 UTC, Dennis Ritchie wrote:
> Operates a code normally, but still gives the error:
> http://ideone.com/kDHMk5

I think it has something to do with Vindovs :)
-----
http://dpaste.dzfl.pl/4c5bb9dd0ffa
April 09, 2015
On Thursday, 9 April 2015 at 17:38:42 UTC, Dennis Ritchie wrote:
> I think it has something to do with Vindovs :)

*Windows
April 10, 2015
On Thursday, 9 April 2015 at 17:39:43 UTC, Dennis Ritchie wrote:
> On Thursday, 9 April 2015 at 17:38:42 UTC, Dennis Ritchie wrote:
>> I think it has something to do with Vindovs :)
>
> *Windows

Indeed, you can test it on Windows locally by running a .cmd file such as:
-----
a.exe
echo %ERRORLEVEL%
-----

With dmd 2.066 (as on Codeforces), it gives me non-zero exit code.

With dmd 2.067.0, the return code seems to always be zero.
1 2
Next ›   Last »