Forum: D Programlama Dili RSS
Koşullu DropBackOne
kerdemdemir #1
Üye Eyl 2013 tarihinden beri · 123 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Koşullu DropBackOne
Güzel bir tek satırlı fonksiyon yazma şansım oldu.

auto sayilar = stdin.readln.strip.array.map!(a => to!dchar(a)).split("0").map!( a => to!dstring(a.length)).join().dup.array;

Bu 10111011 gibi bir şey verilirse 0 larla ayırıp her ayrışık gruptaki 1 lerin sayısında bir rakam elde ediyor. Bu örnekte 132 oluyor. http://codeforces.com/contest/825/problem/A

Eğer şöyle bir istek olsaydı ne yapardım diye düşündüm

101110110 -> 1320 dönmesin fakat 132 dönsün yanı eğer sondaki eleman sıfır ise sondaki elemanı at.

Bunu benim güzel zincirimi bozmadan yapabilirmiydim acaba ? 

auto sayilar = stdin.readln.strip.array.map!(a => to!dchar(a)).split("0").map!( a => to!dstring(a.length)).join().dup.array.dropBackOneIf!( a => a == '0').array

Gibi dropBackOneIf'e denk gelen bir fonksiyon varmıdır std'de
Bu mesaj kerdemdemir tarafından değiştirildi; zaman: 2017-07-22, 09:16.
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Öyle bir algoritma Phobos'ta yok. Senin kodunu biraz temizledim:
    auto sayilar = stdin.readln.strip.split('0').map!(a => cast(char)('0' + a.length));
Olabildiği kadar .dup ve .array çağrılarından kaçınmak gerek; bellek ayırırlar.
Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-17, 16:53:30 (UTC -08:00)