Weise ist eine einfache bitweise Sprache, die ich vor einiger Zeit entworfen habe. Es basiert auf den bitweisen Operationen von Python . Es gibt mehrere Operationen, von denen die meisten mit dem entsprechenden Symbol in Python identisch oder sehr ähnlich sind.
:
Duplizieren Sie die Oberseite des Stapels?
Drehen Sie die Oberseite des Stapels nach unten!
Drehen Sie die Unterseite des Stapels nach oben[
]
Schleife, während die Oberseite des Stapels nicht Null ist~
nicht die Oberseite des Stapels (-(n+1)
)-
negiere die Spitze des Stapels (-n
)>
Verschieben Sie den oberen Rand des Stapels einmal nach rechts (n//2
)<
Verschieben Sie den oberen Rand des Stapels einmal nach links (n*2
)^
xoder die beiden obersten Elemente des Stapels ( wie Python )|
oder die beiden obersten Elemente des Stapels ( wie Python )&
und die beiden obersten Elemente des Stapels ( wie Python )
Eine Ganzzahl in Wise zu erstellen ist ziemlich einfach. Sie können sie mit Null setzen ::^
und inkrementieren, ~-
sodass Sie sie ein paarmal zu Null setzen und inkrementieren können. Wenn wir jedoch die -
Dinge entfernen, werden sie etwas interessanter.
Wir können immer noch jede Nummer mit den restlichen Operationen machen. Zum Beispiel ist hier 3
~<<~
Dies funktioniert, weil ~
Null, eine unendliche Folge von 0
Bits, in negative Eins, eine unendliche Folge von 1
Bits, <
verwandelt wird , wobei jedes 0
Bit an das Ende angehängt wird. Wenn wir fertig sind ~
, verwandeln wir jedes Bit in eine Folge von 0
s, gefolgt von zwei 1
s , oder wie die meisten Leute es nennen 3.
Aufgabe
Schreiben Sie ein Programm, das bei einer positiven Ganzzahl ein Wise-Programm ausgibt, das die Zahl n
ohne -
Quelle erstellt (die Quelle der Ausgabe, die Sie verwenden können)-
in Ihrer eigenen Quelle verwenden). Sie können davon ausgehen, dass sich oben auf dem Stapel bereits eine Null befindet.
Dies ist Code-Golf, nicht Meta-Golf. Sie sollten also versuchen, den generierenden Quellcode zu minimieren, nicht unbedingt die Ausgabe.
Beispielausgaben
Diese Liste erhebt keinen Anspruch auf Vollständigkeit. Es handelt sich lediglich um mögliche Ausgaben
1 -> ~<~
2 -> ~<~<
3 -> ~<<~
4 -> ~<~<<
5 -> ~<~:<<|
6 -> ~<<~<
7 -> ~<<<~
8 -> ~<~<<<
9 -> ~<~:<<<|
10 -> ~<~:<<|<
11 -> ~<<~:><<<|
12 -> ~<<~<<
13 -> ~<<~:<<<|>
14 -> ~<<<~<
15 -> ~<<<<~
16 -> ~<~<<<<
quelle
positive integers
:
auf einen leeren Stapel aufgetragen, drückt ein0
. Ich denke, dies sollte spezifiziert werden, da es nicht offensichtlich ist, dass das Duplizieren von einem leeren Stapel geben sollte0
Antworten:
Japt , 10 Bytes
Probieren Sie es online!
Grundidee: Nehmen Sie die binäre Darstellung der Zahl und ordnen Sie
0
sie<
und1
zu~<~
. Ausgänge für 1-10:quelle
~~
JavaScript (ES6),
3433 BytesFunktioniert für jede 32-Bit-Ganzzahl.
quelle
Haskell , 38 Bytes
Ich habe das Gefühl, dass PPCG mein Haskell wirklich verbessert. Streichelt weiße Katze.
f
nimmt einInt
und gibt ein zurückString
.Probieren Sie es online!
(Ich beziehe mich
<$f
übrigens darauf. Es speichert einen Charakter über\_->
.)Alternativ die gleiche Länge, aber weniger böse (
(l!!)
ist eine anonyme Funktion):Probieren Sie es online!
Beide verwenden dieselbe Darstellung wie die Japt-Antwort von @ETHproductions, obwohl insbesondere die erste zu
<
Beginn einige redundante s enthalten kann.Der erste berechnet alle Kombinationen von
n
"<"
und"~<~"
Zeichenfolgen und indiziert dann in die resultierende Liste.Die zweite berechnet rekursiv eine unendliche Liste gebildet , indem mit Start
""
und dann neue Elemente der Konstruktion durch Anhängen"<"
und"~<~"
Strings zu jedem Element bereits in der Liste (es war tatsächlich etwas kürzer, auch die lassen""
get verwandelte sich in"<"
.)quelle
<$f
? Irgendeine seltsame Functor-Instanz?Ruby ,
11811610910710591 Bytes2 Bytes gespart dank cyoce!
Probieren Sie es online!
Dies ist eine Funktion, die die Ganzzahl als Eingabe verwendet und die Zeichenfolge zurückgibt, die diese Ganzzahl in Wise darstellt. Sie können eine ungolfed Version finden Sie hier , die sich auf alle ganzen Zahlen dieses Programm testet von 1 auf.
Die Grundidee besteht darin, einen "Pool" von Konstanten aufzuzeichnen. Dann werden mit jedem "Schritt" Konstanten für jede mögliche Funktion zum Pool hinzugefügt. Ich habe die Funktionen gewählt
~
,<
und>
, von denen ich glaube, dass sie ausreichen, um jede Zahl darzustellen. (Zumindest jede Zahl unter 10.000.)quelle
dup
anstelle vonclone
iircdup
?map
ändert seinen Empfänger nicht.Python2,
545251 Bytes.Vielen Dank an Wheat Wizard für das Speichern von 2 Bytes und Ørjan Johansen für ein Byte! Dies verwendet dieselbe Idee wie die Japt-Antwort von ETHproduction, jedoch mit unterschiedlichen Ersetzungszeichenfolgen (dh unter Verwendung der binären Darstellung).
quelle
[
]
den Generator nicht in der Nähejoin
.join
kann einen Generator als Argument nehmen.'>~<~'*int(i)
kann dir ein Byte sparen.05AB1E , 11 Bytes
Probieren Sie es online!
Ähnlich wie die Japt-Antwort von ETHproductions.
4 Bytes gespart dank @Adnan!
quelle
'
). Sie können auch die Indizierung verwenden, die Ihnen 11 Bytes geben sollte :).0
dem nullten Element und1
dem ersten Element zugeordnet (da es automatisch vektorisiert). Hier ist ein anschaulicheres Beispiel dafür, wie es funktioniert.Python 2 ,
123110 BytesProbieren Sie es online!
Auch als
lambda
Probieren Sie es online!
Könnte kürzer sein, aber hier ist meine Lösung. Es nimmt die binäre Darstellung und verwandelt sie in den Code.
quelle
Japt , 23 Bytes
Probieren Sie es online!
quelle
Jelly,
11 bis10 BytesDies ist eine portierte Version der Japt-Antwort von ETHproductions. Apropos ETHproductions, sie haben mir ein Byte gespart!
quelle
<
, die in Wise 0~<~
für mich