Napisz licznik binarny w quine


10

Napisz dwa fragmenty kodu, które nazwiemy s_zero i s_one.

Program (l, n) składa się z l kopii s_zero i s_one odpowiadających cyfrom b w formacie binarnym, wypełnionych s_zero po lewej stronie.

Na przykład, jeśli s_zero = fooi s_one = barto
Program (4, 0) = foofoofoofoo
Program (4, 1) = foofoofoobar
Program (4, 2) = foofoobarfoo
itd.

Program (l, n) musi wydrukować źródło programu (l, (n + 1) mod (2 ^ l)) na standardowe wyjście. W powyższym przykładzie foobarfoofoonależy wydrukować foobarfoobarpo uruchomieniu .

Twój wynik to suma długości fragmentów s_zero i s_one


Niemal duplikat do codegolf.stackexchange.com/questions/35974/… - obliczenia wykonane przez quiting programu z 2 różnymi blokami kodu.
— feersum

Czy program może odczytać własny kod źródłowy?
— Klamka

2
@feersum Nie zgadzam się. Jest to o wiele łatwiejsze, w szczególności nie musisz być w stanie określić podziałów linii. Co więcej, myślę, że zadanie to robi różnicę, w przeciwnym razie każde uogólnione wyzwanie quine byłoby duplikatem podstawowego wyzwania quine.
— Martin Ender

Zaletą prostszego zadania jest to, że zachęca ono konkurencję do tworzenia szokująco krótkich odpowiedzi, które do tej pory widziały - mam nadzieję, że uzasadnia to wyzwanie jako inne!
— QuadmasterXLII,

1
Prawdopodobnie warto zauważyć, że s_zero i s_one muszą być różne. W przeciwnym razie mam wiele rozwiązań z wynikami 2 * n.
— randomra

Odpowiedzi:


6

CJam, 29 + 29 = 58 bajtów

Kod 0:

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

Kod 1:

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

Wyjaśnienie

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
za każdym razem ...
— Optymalizator

3

CJam, 47 + 47 = 94 bajty

Kod 0:

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

Kod 1:

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

Przepraszam za przekleństwa.

Jestem pewien, że wciąż mogę zgolić kilka bajtów. Dodam wyjaśnienie, gdy zdecyduję, że nie będę się już przejmować golfem.

Sprawdź to tutaj.



1

GolfScript, 37 + 37 = 74 bajty

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

Nie tak krótkie jak rozwiązanie CJam użytkownika user23013 , ale pomyślałem, że i tak to opublikuję, jeśli tylko (nieznacznie) zwiększę różnorodność używanych języków.

Moje rozwiązanie nie opiera się bezpośrednio na żadnym z istniejących rozwiązań (i rzeczywiście ich nie zbadałem szczegółowo, ponieważ nadal nie czytam zbyt dobrze CJam), ale wszystkie mają warianty tej samej podstawowej struktury quine ( {".~"}.~w GolfScript, {"_~"}_~w CJam). Nie jest to bardzo zaskakujące, ponieważ wydaje się, że jest to jeden z najbardziej skutecznych sposobów napisania quinu z dowolną ładownością w tych językach.

Jest kilka części tego kodu, które tak naprawdę mi się nie podobają i podejrzewam, że może być możliwe dalsze granie w golfa, ale spędziłem na tym zbyt wiele czasu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.