Merhaba,
Yeni işim dolayısıyla Ubuntu kurdum ve DMD yükledim.
Aşağıdaki gibi basit bir kodda bir sorunla karşılaştım.
Şu aralık :
auto busRows = stdin
.byLine()
.take(busRowCount)
.map!(line => line
.splitter("|")
.map!( a => busRowOperation(a) )
.array());
writeln(busRows); satırında çalışmaya başlıyor. Fakat aralık çalışırken güncellediğim "isHasSeat" boolean'ı ne yazıkki güncellenmemiş ve yanlış yazılmış oluyor. Bu durumun önüne nasıl geçebilirim sizce ?
Bir sorumda bütün aralığı dolaşan map fonksiyonu yerine duruma bağlı olarak sadece bir kere çalışacak bir iterasyon method'u varmıdır? Aslında aşağıda görüleceği gibi isHasSeat değişkeni bir kere true 'ya çekildikten sonra hep return yapıyorum. Sizce bunun önüne geçebilirmiyim?
import std.stdio;
import std.string;
import std.algorithm;
import std.conv;
import std.range;
import std.bitmanip;
bool isHasSeat = false;
char[] busRowOperation( char[] singleRow )
{
if ( isHasSeat )
return singleRow;
if ( singleRow.equal( "OO" ) )
{
isHasSeat = true;
return "++".dup;
}
return singleRow;
}
void main() {
const int busRowCount = stdin.readln.strip.to!int;
auto busRows = stdin
.byLine()
.take(busRowCount)
.map!(line => line
.splitter("|")
.map!( a => busRowOperation(a) )
.array());
if ( isHasSeat )
writeln("YES");
else
writeln("NO");
writeln(busRows);
}
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Permalink
Reply