Kıyıda ikili sayaç yazma


10

S_zero ve s_one diyeceğimiz iki kod parçası yazın.

Program (l, n), soldaki s_zero ile doldurulmuş, ikilikteki n basamaklarına karşılık gelen s_zero ve s_one l kopyalarından oluşur.

Örneğin, s_zero = halinde foove s_one = barardından
Programı (4, 0) = foofoofoofoo
Program (4 1) = foofoofoobar
Programı (4, 2) = foofoobarfoo
vb

Program (l, n), Program çıkışı (l, (n + 1) mod (2 ^ l)) kaynağını standart çıkışa yazdırmalıdır. Yukarıdaki örnekte, yürütüldüğünde foobarfoofooyazdırılmalıdır foobarfoobar.

Skorunuz s_zero ve s_one parçalarının toplamıdır


Codegolf.stackexchange.com/questions/35974/… kopyasına yakın - 2 farklı kod bloğu ile program quining tarafından yapılan hesaplama.
feersum

Program kendi kaynak kodunu okuyabilir mi?
Kapı tokmağı

2
@feersum Ben katılmıyorum. Bu çok daha kolay, özellikle satır sonlarını belirleyebilmenize gerek yok. Dahası, ben görev düşünmek gelmez aksi her genelleştirilmiş quine meydan temel quine zorluk dupe olacağını, bir fark yaratmak.
Martin Ender

Daha basit görevin avantajı, şu ana kadar görülen şok edici kısa cevapları yaratmak için rekabeti teşvik etmesidir - umarım bu meydan okumayı farklı olarak haklı çıkarır!
QuadmasterXLII

1
Muhtemelen s_zero ve s_one'un farklı olması gerektiğini belirtmek gerekir. Aksi takdirde 2 * n skorlu birçok çözümüm var.
randomra

Yanıtlar:


6

CJam, 29 + 29 = 58 bayt

0 kodu:

0{"_~"]]z(3\+2b(2b2>a\+z~[}_~

1 kodu:

1{"_~"]]z(3\+2b(2b2>a\+z~[}_~

açıklama

0                       " Push the current bit. ";
{"_~"                   " The basic quine structure. ";
    ]                   " Make an array of the current bit, the function and _~.
                          That is the code fragment itself. ";
    ]                   " Make an array of all code fragments in the stack. ";
    z(                  " Extract the array of the bits. ";
    3\+2b(2b2>          " Convert from base 2, decrease by one and convert back,
                          keeping the length. ";
    a\+z                " Put the bits back to the original position. ";
    ~                   " Dump the array of code fragments back into the stack. ";
    [                   " Mark the beginning position of the array of the next code fragment. ";
}_~

2
her seferinde ...
Doktor

3

CJam, 47 + 47 = 94 bayt

0 kodu:

{`"_~"+]:+T2*0+:T)\AsSerS/_,(@2Y$#+2bU@->]zs}_~

1 kodu:

{`"_~"+]:+T2*1+:T)\AsSerS/_,(@2Y$#+2bU@->]zs}_~

Kısıtlayıcıyı affedin.

Eminim orada hala birkaç bayt tıraş edebilirim. Daha fazla golf oynamak için rahatsız edemeyeceğime karar verdikten sonra bir açıklama ekleyeceğim.

Burada test edin.



1

GolfScript, 37 + 37 = 74 bayt

0{`".~"+:q;]-2%1\{1$^.@&q@}%\;-1%~}.~
1{`".~"+:q;]-2%1\{1$^.@&q@}%\;-1%~}.~

User23013'ün CJam çözümü kadar kısa değil , ancak kullanılan dillerin çeşitliliğini (marjinal olarak) artırmak için bunu yine de yayınlayacağımı düşündüm.

Benim çözümüm doğrudan mevcut çözümlerden herhangi dayanmayan ((ve aslında, ben hala çok iyi CJam okumaz gibi ben ayrıntılı olarak incelenmiş değil), ama hepsi özellik aynı temel quine yapısının varyantları {".~"}.~içinde GolfScript, {"_~"}_~CJam). Bu gerçekten şaşırtıcı değil, çünkü bu dillerde keyfi bir yük ile bir quine yazmanın en etkili yollarından biri gibi görünüyor.

Bu kodun gerçekten sevmediğim birkaç kısmı var ve bundan daha fazla golf oynamak mümkün olabileceğinden şüpheleniyorum, ancak olduğu gibi bu konuda çok fazla zaman geçirdim.

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.