C # kod-golf için ipuçları


62

C # 'da golf oynamak için hangi genel ipuçlarınız var? Genel olarak golf problemlerini kodlamak için uygulanabilecek fikirleri arıyorum, en azından biraz C # 'ya özgü (örneğin "yorumları kaldır" bir cevap değil). Lütfen cevap başına bir ipucu gönderin.

- marcog'un fikrinden ödünç alındı;)


İYİ İPUCU => Mücadeleye en uzun cevabı göndermek istemiyorsanız .NET'in yanında bir şeyler kullanın. .NET, çok ayrıntılı olması ve IDE'nin yazma işlemini yapmasına izin verecek şekilde tasarlanmıştır. Bu aslında sizin IDE koltuk değneğine sahip olduğunuz sürece genel programlama için göründüğü kadar kötü değil, fakat kod golf için bu stratejinin kesin olarak başarısız olduğu.
krowe

Bir takvimin resmi için beni affet, kısa sürede bulabildiğim tek şeydi.
undergroundmonorail

Yanıtlar:


59

Nümerik ve doğal olarak güvenli bir şekilde bir dizeye aktarılabilecek diğer türlerde .ToString()kullanım yerine +"".

.ToString() <-- 11 chars
+""         <--  3 chars

5
Bu aynı zamanda JS'de de çalışır.
Cyoce

1
Bu genellikle gergileri dahil etmek için daha sonra ipi kullanmanız gerekiyorsa aslında 5 karakterdir ...(1+"").DoSomethingWith1String();
TheLethalCoder

1
Dizeye ihtiyacınız varsa, genellikle saklarsınız. Başka herhangi bir kullanım doğal olarak ToString () ...
jcolebrand yazısını yapabilir,

1
Bunun aslında String.Concat(object)sanal çağrı yerine statik ile argüman olarak çağrıldığını unutmayın object.ToString(). Concataçıkça nullboş dizgeye dönüşür ( referans kaynağına bakınız ). 'Yerel oyuncu seçimi' yok, böyle bir şeyi dönüştürebilirsiniz, bu sadece sonuç bazı durumlarda çok yararlı olmayabilir! (ama boş davranış olabilir).
VisualMelon

1
Alternatif - string enterpolasyonu :$"{n}"
Andriy Tolstoy

41

Bir zamanlar programımı kasıtlı olarak yerleştirdim, namespace Systemböylece belirli bir sınıfa erişimi kısaltabilirim. Karşılaştırmak

using System;using M=System.Math;

için

namespace System{using M=Math;

9
Tek bir kullanım sorunu çözdüğünde sınıfları / işlevleri tam olarak nitelendirmenin daha iyi olduğunu unutmayın. Bu, yalnızca bir kereden fazla bir şey çağırmanız gerekiyorsa ve hatta yalnızca Systemad alanındaki öğeler için kullanışlıdır .
Nick Larsen,

Ayrıca sadece yapabilirsiniz using System;class P....
ldam

@Logan: Bu sadece using System;aynı zamanda aynı isim alanında bir sınıf için bir takma ad bulundurmakla ilgili değildi , bu da burada gösterdiğim şekilde daha kısa.
Joey

using static System.Math;C # 6'da yapmak daha da kısadır (ek olarak bu işlevlerden herhangi birini gerçekten küreselmişler gibi kullanabilirsiniz - bir sınıfta değil). Orijinal öneri, using staticbirden fazla sınıfa erişmeniz gerektiğinden daha kısa olabilir .
süt

@milk: ek staticanahtar kelime çoğu zaman M.yöntem çağrıları dışında bırakılan tasarruflardan daha uzundur , ancak evet, bu bir seçenektir, ancak itfa edilmesi için çok sayıda aramaya ihtiyaç duyan çok yüksek bir peşin maliyetle gelir.
Joey,

30

varTürdeki karakterleri kaydetmek için (tek) değişkenleri bildirmek ve başlatmak için kullanın :

string x="abc";

olur

var x="abc";

intTabii ki özellikle gerekli değil .


2
Unutmayın ki varbirden fazla bildirici olamaz, örneğin var x="x",y="y";mümkün değildir.
Ian H.

29

LINQ kullanıyorsanız Select, bir lambda yapmak yerine doğrudan bir yöntemi iletebilirsiniz .

Yani, yerine

foo.Select(x=>int.Parse(x))

kullanabilirsiniz

foo.Select(int.Parse)

direkt olarak.

( Timwi'nin C # cevaplarından birini geliştirirken yakın zamanda keşfedildi .)


2
FWITW buna η-azaltma
ThreeFx

Aynı zamanda "
Jonathan Wilson

5
Bize daha pragmatik olabilmek için sadece var kısa : bırakanların
Joey

23

C # 'daki en küçük derlenebilir programın 29 karakter olduğunu unutmayın:

class P
{
    static void Main()
    {   
    }
}

Öyleyse bunu boyundan uzatarak başlayın ve ne kadar sürdüğü konusundaki cevabınızı değerlendirin. C #, çoğu [code-golf]sorunun kalbi olan girişi basmak veya okumak söz konusu olduğunda diğer dillerle rekabet edemez , bu yüzden endişelenmeyin. Bir C # golfçü olarak, gerçekten dile karşı yarışıyorsunuz.

Akılda tutulması gereken birkaç şey:

  • ifParantezleri çıkarmak için mümkünse tüm döngüler ve ifadeleri tek bir satıra indirin.
  • Stdin ve komut satırı arasında bir seçenek verilirse, her zaman komut satırını kullanın!

Bu genellikle üçlü de içerir;)
jcolebrand

1
As a C# golfer, you're really competing against the language İnanılmaz derecede ilgili
dorukayhan

1
Aslında bu doğru değil. Ayrıca static int Main()28 karakterden oluşuyor.
Metoniem


21

Onun yerine

bool a = true;
bool b = false;

yap

var a=0<1;
var b=1<0;

Birden fazla değişkene ihtiyacınız varsa, bunu kullanın ( @VisualMelon tarafından önerilen )

bool a=0<1,b=!a;

Aynı tip birden fazla değişkene ihtiyacınız varsa, virgül tipini bildirimleri ayırmak için genellikle daha ucuz olduğunu unutmayınbool a=0<1,b=!a;
VisualMelon

18

Üçlü operatöre uygun if.. elseblokları tercih edin.

Örneğin:

if(i<1)
    j=1;
else
    j=0;

daha verimli:

j=i<1?1:0;

15
İkinci durumun genel olarak böyle şeyler için doğal olarak daha okunaklı olduğunu düşünen tek kişi ben miyim? Bunu rutin olarak yapıyorum. Ayrıca, boş bir durumdan kaçınmam gerekirse (bir dizgede olduğu gibi) Ben de bir şey yaparım var x = input ?? "";(birleşmeleri
severim

Özellikle daha i < 1karmaşık bir ifade olduğunda veya isminin juzun olduğu zamanların daha okunaklı seçenek olmaktan uzak olduğu zamanlar vardır . IMO, yan etkileri de çok iyi iletmiyor. Yan etkilerin başarısına bağlı olarak doğru / yanlış döndüren bir if (i < 1)şeyin olduğu durumlarda , if (SendEmail(recipient))if / then gösterimini tercih ederim.
Nick Larsen,

11
İkinci durumda parantez gerek yok - j=i<1?1:0;yeter.
Danko Durbić

3
Soru, C # 'ya özgü olan ipuçlarını soruyor. Bu, tüm dillere ilişkin ipuçlarına dahil edilmiştir .
Peter Taylor,

4
@PeterTaylor Bu soruyu 3 yıl önce yanıtladım, bağlantı
kurduğunuz

15

Kullanarak etkili kullanımı

Sen edebilirsiniz yerine float (için bir takma ad olan System.Singleile) zkullanılarakz=System.Single;

Sonra yerini z=System.Single;ile z=Single;ad alanında programı yerleştirerek System. (Joey'in cevabında olduğu gibi)

Bu, diğer değer türleri (bunun için takma adlarını kullanın), yapılar ve sınıflar için uygulanabilir.


14

Console.ReadLine()Kodunuzda birden çok kez kullanmanız gerekirse (en az 3 kez), şunları yapabilirsiniz:

Func<string>r=Console.ReadLine;

ve sonra sadece kullan

r()

yerine


Bence ()ilk satırdan çıkarman gerek .
mellamokb

@ mellamokb bu doğru, teşekkürler! sabit.
Cristian Lupascu

1
Yapamaz auto r=Console.ReadLine;mısın
Claudiu

2
@claudiu hayır, maalesef ideone.com/jFsVPX
Cristian Lupascu

@ Claudiu, autobir C++fiildir. variçindir C#. Bunun yapılamamasının sebebi Console.ReadLineaşırı yüklenmiş olmasıdır , bu nedenle derleyiciye hangi aşırı yüklenmenin istendiğini bildirmek için işlev imzasının belirtilmesi gerekir.
GreatAndPowerfulOz

14

Dizenin uzunluğuna kadar döngü yapmak yerine, bir komut satırı argümanının her karakterini okurken:

static void Main(string[]a){
    for(int i=0;i<a[0].Length;)Console.Write(a[0][i++]);
}

Sonu bulmak için bir try / catch bloğunu kullanarak bir karakteri kaydedebilirsiniz:

static void Main(string[]a){
    try{for(int i=0;;)Console.Write(a[0][i++]);}catch{}
}

Bu, aşağıdaki gibi bir dizideki herhangi bir dizi için geçerlidir:

  • string[]
  • int[][]
  • IList<IList<T>>

7
Bu gerçekten dehşet verici ... Bayıldım!
Alex Reinking,

Kutsal bok bu deha, aslında sadece bir dizi döngü yaparken bir karakter kaydetti
Gaspa79

Bu gerçekten kötü!
GreatAndPowerfulOz

13

C # 6'da bir fonksiyon tanımlamak için lambdas kullanın.

C # 6'da, bir işlevi tanımlamak için bir lambda kullanabilirsiniz:

int s(int a,int b)=>a+b;

Bu, böyle bir işlevi tanımlamaktan daha kısadır:

int s(int a,int b){return a+b;}

3
C # 6, kod
golfüne

C # 7'de, yerel fonksiyonlar oluşturmak için başka bir fonksiyon içinde yapılabilir. Bunun golf oynarken yardımcı olacağından şüpheliyim, ama hala bilmesi gereken çok güzel bir numara.
TehPers,

1
Bu resmen bir lambda değil. Bu bir ifade gövdeli üye .
özyinelemeli

13

LINQ

Kullanmak yerine:

Enumerable.Range(0,y).Select(i=>f(i))

fonksiyonunun sonucu ile Enumerable almak için fher için intde [0,y]size kullanabilirsiniz

new int[y].Select((_,i)=>f(i))

Programınızda stringuygulayan herhangi bir şeye ihtiyacınız olursa Enumerablebunları da kullanabilirsiniz.

var s="I need this anyway";
s.Select((_,i)=>f(i))

Bu numarayı , Shamir'in Gizli Paylaşma yarışmasına verdiğim cevapta kullanıyorum .
aloisdg

İyileştirme açıkken yinelemeyi yinelememeniz durumunda string kısmının çalışacağını sanmıyorum. Sadece benim için başarısız oldu. ToArray () ;. Bunun dışında harika ipucu!
Gaspa79

Evet, numaralandırıcılar tembeldir ancak bu, yalnızca dize içeren değil, üç örnek için de geçerlidir.
raggy

11

Dictionary<TKey, TValue>Kodunuzda en az iki kez genel kullanmanız gerekirse, bu örnekte olduğu gibi bir sözlük sınıfı tanımlayabilirsiniz :

class D:Dictionary<int,string>{}

ve sonra sadece kullan

D d=new D{{1,"something"},{2,"something else"}};

Dictionary<int,string>her örnekleme için tekrarlamak yerine .

Bu tekniği bu cevapta kullandım.


2
Ve ayrıca "var d" yerine "D d"
Zukki

@ Zukki Açıkçası! Ne düşünüyordum? :)
Cristian Lupascu 5:15

Alternatif:using D = System.Collections.Generic.Dictionary<int,string>;
Andriy Tolstoy

10

Birkaç bayttan tasarruf etmek için floatve doubledeğişmezleri kullanabilirsiniz .

var x=2.0;
var y=2d;         // saves 1 byte

intDöndürmek için biraz aritmetik ihtiyacınız olduğunda floatveya doubledönüştürmeyi zorlamak için değişmezleri kullanabilirsiniz.

((float)a+b)/2;  // this is no good
(a+b)/2.0;       // better
(a+b)/2f;        // best      

Eğer döküm yapmanız gereken bir durumla karşılaşırsanız, bunun yerine çarpma kullanarak birkaç bayttan tasarruf edebilirsiniz.

((double)x-y)/(x*y);
(x*1d-y)/(x*y);      // saves 5 bytes

Daha da kısa:(x-y)*1d/x/y;
tekrarlayan

9

Aşağıdakilerin olduğu gibi özel veya kamusal alanların nerede olduğunu hatırlayın:

class Default{static void Main()

ile kıyaslandığında

public class Default { public static void Main()

5
Ve sınıfı her zaman sadece bir harf yapar :-)
Joey

2
Oh, ve burada ima edilen başka güzel bir şey: Mainmesela Java’nın aksine herhangi bir tartışmaya ihtiyaç duymaz.
Joey

@Joey: Ve bunun da halka açık olması gerekmez.
R. Martinho Fernandes

1
@martinho ~ cevabımı okudun mu? ;) ana
hatta

@Joey ~ Her mesaj için bir tanesini tutmaya çalışıyordum;) ... bir başkası ya da sadece bir harf olduğu için sınıfları taht göndereceğini düşündü. Başka hiç kimsenin olmadığını görünce, devam edip bunu da ekleyeceğim.
jcolebrand

9

Tek satırlık lambda ifadeleri için, parantezleri ve noktalı virgülleri atlayabilirsiniz. Tek parametreli ifadeler için parantezleri atlayabilirsiniz.

Onun yerine

SomeCall((x)=>{DoSomething();});

kullanım

SomeCall(x=>DoSomething);

11
Prodüksiyon kodunda bile tek parametreli lambdaların parantezlerini yazmam.
R. Martinho Fernandes

Ben her zaman parantez kullanıyorum çünkü okunabilirlik için lambayı çoklu hatlara bölmeyi seviyorum.
Juliana Peña

2
SomeCall(DoSomething)daha da iyidir
GreatAndPowerfulOz

9

Döngü:

Değişken bildirimler:

int max;
for(int i=1;i<max;i++){
}

olmak:

int max,i=1;
for(;i<max;i++){
}

Ayrıca, i değişkenine yalnızca bir kez ihtiyaç duymanız veya bununla çalışmanız gerekiyorsa, -1 (veya döngü koşuluna bağlı olarak 0) 'dan başlayabilir ve satır içi artırımı yapabilirsiniz:

int max,i=1;
for(;i<max;i++){
  Console.WriteLine(i);
}

için

int max,i=1;
for(;i<max;){
  Console.WriteLine(++i);
}

Ve bu bir karakter azalır ve aynı zamanda biraz da gizliliği engeller. Bunu yalnızca FIRST ireferansına yapın, şöyle yapın: (verilen bir karakter optimizasyonu fazla değil, ancak yardımcı olabilir)

int max,i=1;
for(;i<max;i++){
  Console.WriteLine(i + " " + i);
}

için

int max,i=1;
for(;i<max;){
  Console.WriteLine(++i + " " + i);
}

döngünün artması gerekmediğinde i(ters sırada döngü):

for(int i=MAX;--i>0;){
      Console.WriteLine(i);
}

Genellikle ++bu gibi durumlarda doğrudan döngü başlığına koyarım: for(;++i<max;)takip etmesi daha kolay ve yanlış yapmak daha zor.
Joey

@Joey Bu durumlarda, aynı uzunlukta fakat okuması daha kolay olan (++ i <max) süresine geçme eğilimindeyim.
ICR

ICR: forbaşlığa başka bir (önceki) ifade de ekleyip eklemeyeceğinize bağlı olarak değişir , bu daha sonra tekrar bir karakter kaydeder.
Joey,

Her iki bildirimi a1 bayt tasarruf için for fıkra geri taşıyabilirsiniz.
özyinelemeyle

Ben değişiyor severim for(;i<max;)etmek while(i<max). Aynı bayt sayısı, ancak benim için sadece daha temiz görünüyor.
Ayb4btu

8

Bir çıktı parametresinin karakterleri kaydedebildiği durumlar vardır. İşte biraz tartışmalı bir örnek, 10 iğneli bir bowling skoru algoritması.

Bir iade ifadesi ile:

........10........20........30........40........50........60........70........80........90.......100.......110.......120.......130.......140.......150..
public double c(int[]b){int n,v,i=0,X=10;double t=0;while(i<19){n=b[i]+b[i+1];v=b[i+2];t+=(n<X)?n:X+v;if(b[i]>9)t+=b[i+(i>16|v!=X?3:4)];i+=2;}return t;}

Ve bir çıktı parametresiyle:

........10........20........30........40........50........60........70........80........90.......100.......110.......120.......130.......140.......
public void d(int[]b,out double t){int n,v,i=0,X=10;t=0;while(i<19){n=b[i]+b[i+1];v=b[i+2];t+=(n<X)?n:X+v;if(b[i]>9)t+=b[i+(i>16|v!=X?3:4)];i+=2;}}

Buradaki çıktı parametresi toplam 5 karakter kaydeder.


8

C # ' da çift sayı if(n%2)olup olmadığını kontrol etmemize izin verilmez n. Eğer yaparsak, bir alırız cannot implicity convert int to bool. Bir saf taşıma yapmak olacaktır:

if(n%2==0)

Daha iyi bir yol kullanmaktır:

if(n%2<1)

Bunu burada bir bayt kazanmak için kullandım .

Bunun sadece pozitif sayılar için işe yaradığını -1%2==-1ve bu yöntemde bile göz önüne alındığını unutmayın.


6

Dize enterpolasyonu

Gerçekten çok az yer kaplayan bir gelişme enterpolasyondur. Onun yerine:

string.Format("The value is ({0})", (method >> 4) + 8)

sadece $satır içi ifadeleri kullanın :

$"The value is ({(method >> 4) + 8})"

Bu, C # 6.0'daki yeni ifade gövdeleriyle birlikte C # 'da oldukça basit bir string string hesaplama zorluğunu sağlamalıdır.


3
Ayrıca i+$" bottles of beer";, daha kısa olduğuna dikkat edin $"{i} bottles of beer".
aloisdg

1
@ Aloisdg Bu ilk durumda gitmelisin $ olsa da, dışarıda .
Metoniem

@Metoniem Gerçekten! Buna izin verdim çünkü asıl durumumda {i}önünde iki tane, diğeri ortada;)
aloisdg

@aloisdg Ahh, anlıyorum. Evet, utanç verici yorumlar değiştirilemez :(
Metoniem

6

C # lambda kullanın. PPCG giriş / çıkış için lambda izin verdiği için bunları kullanmalıyız.

Klasik bir C # yöntemleri şöyle görünür:

bool Has(string s, char c)
{
    return s.Contains(c);
}

Bir lambda olarak yazacağız

Func<string, char, bool> Has = (s, c) => s.Contains(c);

Anonim lambda da izin verilir:

(s, c) => s.Contains(c)

Tüm gürültüyü kaldırın ve odaklanın!

Güncelleme:

Biz birlikte bir adım daha artırabilir currying @TheLethalCoder yorum olarak:

s => c => s.Contains(c);

@Felix Palmen tarafından yapılan akım örneği: WPA anahtarı nasıl hesaplanır?

Tam olarak 2 parametreniz olduğunda yardımcı olacaktır, daha sonra boş bir kullanılmayan değişken _daha iyi olacaktır. Bununla ilgili meta gönderiye bakın . Bu numarayı burada kullanıyorum . Fonksiyonu biraz değiştirmek zorunda kalacaksınız. Örnek: Çevrimiçi deneyin!


1
s=>c=>...
Bahşişlerde

@TheLethalCoder Gerçekten yapabiliriz! Cevabı güncelleyeceğim teşekkür ederim!
aloisdg

Bu durumda eta azaltma kullanabilir misiniz? Böyle bir şey: s=>s.Contains.
corvus_192

'Yazılmamış lambda' çeşitliliğinin C # ve Java cevaplarının lehine düştüğünü, bu meta yazıdaki tartışmaya katılmak isteyebileceğinizi unutmayın . Önerilen alternatif(string s,char c)=>s.Contains(c)
VisualMelon



5

ComputeÖrneği yöntemi System.Data.DataTable, basit bir dize ifadesini, örneğin değerlendirmenize olanak sağlar:

C # (Visual C # Derleyici) , 166 bayt

namespace System.Data
{
    class P
    {
        static void Main()
        {
            Console.Write(new DataTable().Compute("30*2+50*5/4",""));
        }
    }
}

Çevrimiçi deneyin!

Çok "golfy" değil, ama bazen yararlı olabilir.


5

İki değişkeni değiştirmek

Normal olarak, iki değişkeni değiştirmek için, değeri kaydetmek için geçici bir değişken bildirmeniz gerekir. Bunun çizgisinde bir şey gibi görünürdü:

var c=a;a=b;b=c;

Bu 16 bayt! Daha iyi olan başka bir takas yöntemi de var.

//Using tuples
(a,b)=(b,a);
//Bitwise xoring 
a=a^b^(b=a);
//Addition and subtraction
a=a+b-(b=a);
//Multiplication and division
a=a*b/(b=a);

Yalnızca son üç sayı sayısal değerler için çalışır ve yalnızca ASCII'nin işaret ettiği gibi, son ikisi ArithmeticOverflow istisnasına yol açabilir. Yukarıdakilerin tümü, ilk örneğe kıyasla 4 baytlık bir tasarruf olan 12 bayttır.


Ancak sayılar için de geçerlidir, hatta o zaman tekiller ve xor dışındaki herhangi bir şey veya bunu tam sayılara uyguladığınız tamsayı sınırlarına girme riski. Zaman zaman, diğer sayı türleri de sınırlara girer
ASCII-

4

LinqPad'i kullanmak, tüm programları ek yükü kaldıracağınız ve ifadeleri doğrudan çalıştırabilirsiniz. (Ve kodgolfta tamamen yasal olmalı ... Hiç kimse bir .exe'ye ihtiyacın olduğunu söylemiyor)

.Dump()Uzatma yöntemi kullanılarak çıktı yapılır .


.NetFiddle desteği .Dump();)
aloisdg

4

( Operatör önceliğini bilmek özel bir durum !)

%Sıkı ciltleme (biraz) sınırlı çıkarma için kullanın . Bu, çıkarmasıyla çarpmak veya bir şeyle bölmek istediğiniz bir çift parantez içinde biriktirmenizi sağlayabilir; ama dikkatli olun, ciddi sınırlamaları var.

Onun yerine

char b='5'; // b is some ASCII input
int a=(b-48)*c; // we want to find the numerical value of b, and multiply it by something ('0'==48)

Düşünmek

char b='5'; // b is some ASCII input
int a=b%48*c; // only good for ASCII within 48 of '0' (positive only)!

Örnekler:

'5'%'0'*2 -> 10
'5'%'0'*-1 -> -5
'5'%'0'/2 -> 2

Bunu daha yeni keşfettim ve gelecekte ASCII ile çalışırken hatırlamak değerli bir şey olacak gibi hissediyorum. (Şu anda kompakt sayısal gösterimler için ASCII kullandığım bir yerde golf oynuyorum, ancak başka bir koşula 1veya -1bu çizgili 2 bayta göre çarpma ihtiyacı duyuyorum )


4

Birden fazla eklemeniz gerekirse usingHepsi aynı hiyerarşiden düşen s , en uzun olanı kullanmak genellikle daha kısadır namespace:

using System;
using System.Linq;
//Some code

vs:

namespace System.Linq
{
    //Some code
}

3

Bu gece "siperlerde" keşfedilen bazı golf kodlarını geliştirirken ... işlemleriniz için bir sınıfınız varsa, bir yöntem beyan etmek için yapıcıda çalışabilirsiniz.

Bunu bir konsol uygulamasını azaltırken keşfettim - olduğu gibi static void Main() , tüm işlevlerin ve değişkenlerin statik olduğu bildirildi. Yapıcıda yapılan ana çalışma ile üye fonksiyon ve değişkenleriyle iç içe bir sınıf yarattım. Bu ayrıca arama kodunda karakterleri de kaydeder.

Örn: Metodlu sınıf:

class a
{
    public void b()
    {
        new c().d("input");
    }
}
class c
{
    public void d(string e)
    {
        System.Console.Write(e.Replace("in", "out"));
    }
}

Yapıcıda çalışılan sınıf:

class a
{
    public void b()
    {
        new c("input");
    }
}
class c
{
    public c(string e)
    {
        System.Console.Write(e.Replace("in", "out"));
    }
}

Bu örnek 9 karakter kaydeder.



3

Boş / eşleşen dizeleri birlikte bildirir

Birden fazla boş / eşleşen dize bildirmeniz gerekirse, aşağıdakileri kullanarak birkaç bayt kaydedebilirsiniz:

string a="";string b="";string c=""; // 36 bytes
var a="";var b="";var c="";          // 27 bytes
string a="",b="",c="";               // 22 bytes
string a="",b=a,c=a;                 // 20 bytes

Maalesef var a="",b=a,c=a;yasadışıimplicitly type variable cannot have multiple declarators


var a=b=c=""Javascript gibi yapabilir misin ?
corvus_192

@ corvus_192 hayır - ne yazık ki değil.
Erresen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.