Schreiben Sie einen Binärzähler in Quine


10

Schreiben Sie zwei Codefragmente, die wir s_zero und s_one nennen werden.

Das Programm (l, n) besteht aus l Kopien von s_zero und s_one, die den Ziffern von n in Binärform entsprechen und links mit s_zero aufgefüllt sind.

Wenn zum Beispiel s_zero = foound s_one =, bardann ist
Programm (4, 0) = foofoofoofoo
Programm (4, 1) = foofoofoobar
Programm (4, 2) = foofoobarfoo
usw.

Programm (l, n) muss die Quelle des Programms (l, (n + 1) mod (2 ^ l)) drucken, um zu standardisieren. Im obigen Beispiel foobarfoofoomuss foobarfoobarbei der Ausführung gedruckt werden .

Ihre Punktzahl ist die Summe der Längen der Fragmente s_zero und s_one


Nahezu doppelt an codegolf.stackexchange.com/questions/35974/… - Berechnung durch Quining-Programm mit 2 verschiedenen Codeblöcken.
Feersum

Kann das Programm seinen eigenen Quellcode lesen?
Türknauf

2
@feersum Ich bin anderer Meinung. Dies ist viel einfacher, insbesondere müssen Sie keine Zeilenumbrüche feststellen können. Außerdem denke ich , die Aufgabe hat , einen Unterschied machen, sonst jede generali quine Herausforderung eine Betrogene des Grundes quine Herausforderung sein würde.
Martin Ender

Der Vorteil der einfacheren Aufgabe besteht darin, dass sie den Wettbewerb dazu ermutigt, die bisher gesehen schockierend kurzen Antworten zu erstellen. Ich hoffe, dass dies diese Herausforderung als anders rechtfertigt!
QuadmasterXLII

1
Wahrscheinlich erwähnenswert, dass s_zero und s_one unterschiedlich sein müssen. Ansonsten habe ich viele Lösungen mit 2 * n Punkten.
Randomra

Antworten:


6

CJam, 29 + 29 = 58 Bytes

Der 0-Code:

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

Der 1 Code:

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

Erläuterung

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
jedes Mal ...
Optimizer

3

CJam, 47 + 47 = 94 Bytes

Der 0-Code:

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

Der 1 Code:

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

Entschuldigen Sie das Expletive.

Ich bin sicher, ich kann dort noch ein paar Bytes rasieren. Ich werde eine Erklärung hinzufügen, sobald ich mich entscheide, dass ich nicht mehr die Mühe habe, Golf zu spielen.

Testen Sie es hier.



1

GolfScript, 37 + 37 = 74 Bytes

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

Nicht ganz so kurz wie die CJam-Lösung von user23013 , aber ich dachte, ich würde dies trotzdem posten, wenn auch nur, um die Vielfalt der verwendeten Sprachen (geringfügig) zu erhöhen.

Meine Lösung basiert nicht direkt auf einer der vorhandenen Lösungen (und ich habe sie in der Tat nicht im Detail untersucht, da ich CJam immer noch nicht sehr gut lese), aber alle enthalten Varianten derselben grundlegenden Quine-Struktur ( {".~"}.~in GolfScript, {"_~"}_~in CJam). Das ist nicht wirklich überraschend, da es eine der effizientesten Möglichkeiten zu sein scheint, ein Quine mit einer beliebigen Nutzlast in diesen Sprachen zu schreiben.

Es gibt einige Teile dieses Codes, die ich nicht wirklich mag, und ich vermute, dass es möglich ist, dies weiter zu spielen, aber ich habe zu viel Zeit damit verbracht, wie es ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.