Eingang:
Wir nehmen zwei Eingaben:
- Eine Eingabe
b
mit zwei unterschiedlichen Werten:Left
undRight
. † - Und eine positive ganze Zahl
n
.
Ausgabe:
Basierend auf der Eingabe von Links / Rechts geben wir eine der beiden folgenden Sequenzen im Bereich von aus 1-n
(in den Sequenzen unter werden die ersten 125 Elemente angezeigt):
Left:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966, 967, 1016, 1017, 1022, 1023, 31744, 31745, 31750, 31751, 31800, 31801, 31806, 31807, 32704, 32705, 32710, 32711, 32760, 32761, 32766, 32767, 2064384, 2064385, 2064390, 2064391, 2064440, 2064441, 2064446, 2064447, 2065344, 2065345, 2065350, 2065351, 2065400, 2065401, 2065406, 2065407, 2096128, 2096129, 2096134, 2096135, 2096184, 2096185, 2096190, 2096191, 2097088, 2097089, 2097094, 2097095, 2097144, 2097145, 2097150, 2097151, 266338304, 266338305, 266338310, 266338311, 266338360, 266338361, 266338366, 266338367, 266339264, 266339265, 266339270, 266339271, 266339320, 266339321, 266339326, 266339327, 266370048, 266370049, 266370054, 266370055, 266370104, 266370105, 266370110, 266370111, 266371008, 266371009, 266371014, 266371015, 266371064, 266371065, 266371070, 266371071, 268402688, 268402689, 268402694, 268402695, 268402744, 268402745, 268402750, 268402751, 268403648, 268403649, 268403654, 268403655, 268403704, 268403705, 268403710, 268403711, 268434432, 268434433, 268434438, 268434439, 268434488, 268434489, 268434494, 268434495, 268435392, 268435393, 268435398, 268435399, 268435448, 268435449
Right:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624, 639, 896, 911, 1008, 1023, 16384, 16415, 16864, 16895, 19968, 19999, 20448, 20479, 28672, 28703, 29152, 29183, 32256, 32287, 32736, 32767, 1048576, 1048639, 1050560, 1050623, 1079296, 1079359, 1081280, 1081343, 1277952, 1278015, 1279936, 1279999, 1308672, 1308735, 1310656, 1310719, 1835008, 1835071, 1836992, 1837055, 1865728, 1865791, 1867712, 1867775, 2064384, 2064447, 2066368, 2066431, 2095104, 2095167, 2097088, 2097151, 134217728, 134217855, 134225792, 134225919, 134471680, 134471807, 134479744, 134479871, 138149888, 138150015, 138157952, 138158079, 138403840, 138403967, 138411904, 138412031, 163577856, 163577983, 163585920, 163586047, 163831808, 163831935, 163839872, 163839999, 167510016, 167510143, 167518080, 167518207, 167763968, 167764095, 167772032, 167772159, 234881024, 234881151, 234889088, 234889215, 235134976, 235135103, 235143040, 235143167, 238813184, 238813311, 238821248, 238821375, 239067136, 239067263, 239075200, 239075327, 264241152, 264241279, 264249216, 264249343, 264495104, 264495231, 264503168, 264503295, 268173312, 268173439, 268181376, 268181503, 268427264, 268427391
Wie werden diese Sequenzen generiert?
Eine Standardsequenz von 1 bis n=10
wäre:
As integer:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
As binary:
1 10 11 100 101 110 111 1000 1001 1010
Wenn wir uns nach links strecken, wird die Binärdatei folgendermaßen aussehen:
1, 110, 111, 111000, 111001, 111110, 111111, 1111000000, 1111000001, 1111000110
Warum? Das letzte Bit wird einmal verwendet. der Single-Last wird zweimal verwendet; der vorletzte wird dreimal verwendet; etc.
So `1010` will become (spaces added as clarification): `1111 000 11 0`
Und diese neuen binären Zeichenfolgen mit linker Ausdehnung werden zurück in Ganzzahlen konvertiert:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966
Wie für rechts gestreckt, wird das erste Bit einmal verwendet; zweimal Sekunde; dreimal dritter; usw. So:
As binary:
1, 100, 111, 100000, 100111, 111000, 111111, 1000000000, 1000001111, 1001110000
As integer:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624
Herausforderungsregeln:
- † Sie können zwei verschiedene Werte annehmen, aber angeben, welchen Sie verwenden. So soll es sein kann
1/0
,true/false
,null/undefined
,"left"/"right"
etc. n
ist immer größer als 0.- Sie sollten eine maximale Ausgabe von mindestens der Standard-Ganzzahl Ihrer Sprache unterstützen (32-Bit für die meisten Sprachen).
- Das Ausgabeformat ist flexibel. Kann ausgedruckt oder als Array / Liste zurückgegeben werden. Kann mit einem Leerzeichen, Komma, Pipe und ähnlichem als Begrenzer angegeben werden. Ihr Anruf. (Bitte geben Sie noch einmal an, was Sie verwendet haben.)
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
n < 128
, damit die Ergebnisse in 32-Bit-Ganzzahlen passen?Antworten:
Gelee , 9 Bytes
Probieren Sie es online!
-1
für links,1
für rechts.quelle
Python 2 ,
10296 Bytes-1 für links, 1 für rechts
Probieren Sie es online!
quelle
05AB1E ,
1413 BytesDank Erik the Outgolfer 1 Byte gespeichert
1
für links.0
(oder irgendetwas anderes) für richtig.Probieren Sie es online!
Erläuterung
quelle
ε
für -1 verwenden:LbεIiRƶRëƶ}JC
ë
.if
Schale , 13 Bytes
Das sind viele gepunktete Buchstaben ...
Nimmt zuerst
b
(0
für links und1
für rechts), dannn
. Probieren Sie es online!Erläuterung
quelle
b
direkt ḣ oder ṫ, speichern Sie drei Bytes :)b
und meine Lösung einfach habenI
...Japt ,
191817 Bytes0
für "links",1
für "rechts". (Es können tatsächlich falsche oder wahrheitsgemäße Werte anstelle dieser 2 verwendet werden.)Probier es aus
Erläuterung
Implizite Eingabe von ganzen Zahlen
U
&V
.Erstellen Sie ein Array von ganzen Zahlen von 1 bis
U
einschließlich.Führen Sie jeweils eine Funktion durch.
Konvertiert die aktuelle Ganzzahl in eine Binärzeichenfolge
Ordnen Sie die Zeichenfolge zu, indem Sie jedes Zeichen durch eine Funktion leiten. Dabei
E
handelt es sich um den aktuellen Index undF
um die vollständige Zeichenfolge.Wiederholen Sie das aktuelle Zeichen
©
ist logisch UND (&&
) undª
ist logisch ODER||
, also prüfen wir hier, obV
wahr ist (nicht Null) oder nicht.Wenn
V
es wahr ist,X
wird es mehrmals wiederholtY+1
.Wenn
V
Falsch ist,X
wird wiederholtY
von (n
) die Länge (l
) derZ
Zeiten abgezogen .Konvertieren Sie zurück in eine Ganzzahl zur Basis 10.
Das resultierende Array wird implizit ausgegeben.
quelle
Gaia , 15 Bytes
Verwendet
-1
für links und1
rechts.Probieren Sie es online!
Erläuterung
quelle
Proton , 79 Bytes
0
ist links,1
ist rechts.Probieren Sie es online!
Ungolfed
quelle
C # (.NET Core) ,
192187 + 23 Byte-5 Bytes dank TheLethalCoder
Die Byteanzahl umfasst auch:
Probieren Sie es online!
Eingabe:
left
isttrue
,right
istfalse
Erläuterung:
quelle
using System.Linq;
kürzer alsnamespace System.Linq{}
, oder fehle ich hier etwas? Vor langer Zeit programmierte ich in .NET tbh ..Math
undConvert
beide imSystem
Namespace sind, so ist fürnamespace System.Linq
die kürzeste - es ermöglicht die Verwendung von beidenSystem
undSystem.Linq
Klassen.Dyalog APL, 23 Bytes
left is
1
right is0
(wird als linkes Argument der Funktion übergeben)⍳
ist Indexgenerator{
...}¨
wenden Sie die Funktion in geschweiften Klammern auf jedes Element rechts anb←2⊥⍣¯1⊢⍵
b ist ⍵ binär codiert (unter Verwendung der Umkehrung der Decodierung, um die minimale Anzahl von Bits zu erhalten, die für die Darstellung⍵
in Basis 2 erforderlich sind )⍳≢b
generiere Indizes für Vektor b (≢b
ist Länge von b)⌽⍣⍺
Umkehrzeiten⍺
(hier bedingt für linke oder rechte Strecke)b/⍨
b repliziert von (repliziert die Bits gemäß dem (umgekehrten) Index)2⊥
Dekodiere von Basis 2TryAPL online
quelle
JavaScript (ES6), 131 Byte
Dies ist deutlich länger als Shaggys Antwort , aber ich wollte einen rein bitweisen Ansatz versuchen.
Aufgrund der 32-Bit-Beschränkung der bitweisen JS-Operationen funktioniert dies nur für n <128 .
Nimmt Eingaben in der Curry-Syntax vor
(n)(r)
, wobei r für links / für rechts falsch ist.Formatiert und kommentiert
Demo
Code-Snippet anzeigen
quelle
JavaScript (ES6), 113 Byte
Oh, das ist einfach viel zu lang! Dies ist, was passiert, wenn Sie den Tag damit verbringen, "echtes" JavaScript zu schreiben, Kinder; Sie vergessen, wie man richtig Golf spielt!
Verwendet alle truthy oder Falsey Werte für
b
, mit zufalse
sein „links“ undtrue
seinem „Recht“.Versuch es
quelle
Jelly , 11 Bytes
Probieren Sie es online!
Argument 1:
n
Argument 2:
1
für links,0
für rechts.quelle
Netzhaut , 111 Bytes
Probieren Sie es online! Nimmt die Nummer und entweder
L
oderR
als Suffix (oder in einer separaten Zeile). Erläuterung:Konvertiere von dezimal nach unär und zähle von 1 nach
n
.Konvertieren von unär zu binär.
Binde jedes Bit
R
und jedesL
Zeichen entsprechend seiner Position in der Zeile ein.Ersetzen Sie die relevanten
R
oderL
Zeichen durch die entsprechende benachbarte Ziffer.Entfernen Sie die verbleibenden Zeichen und konvertieren Sie sie von binär nach dezimal.
quelle
1
bis ausgebenn
. Nicht nur dien
'te Nummer.JavaScript (ES6),
130127 Byte3 Bytes, danke Kevin
Ich kenne nicht genug ES6 für diese Seite, aber ich habe es versucht! Durchlaufen Sie jede Zahl und durchlaufen Sie jede Binärdarstellung für diese Zahl, wobei Sie jedes Zeichen so oft wiederholen, wie es erforderlich ist.
quelle
d=>n=>
) verwenden, wie die anderen beiden JS ES6-Antworten. Außerdem denke ich, dass Sie weitere 2 Bytes sparen können, indem Siek=-1,l=b.length;while(++k<l)s+=b[k].repeat(d?k+1:l-k);
aufk=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l+~k);
(beginnendk=0
statt-1
, und das,l-k-1
was dann benötigt wird, wird auf gekürztl+~k
) ändern . Sind die Klammern um die(i).toString(2)
erforderlichen?+~k
scheint so, als sollte es funktionieren, aber ich kann es nicht herausfinden und werde immer wütender. Danke für die anderen Tipps!l+~k
ist falsch, da es nichtl-k-1
aber istl-k+1
. Mein schlechtes. Sie können immer noch Golf ein Byte durch Startenk
auf Null aber:k=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l-k+1);
.Ruby, 98 Bytes
quelle
a{r ?a:a.reverse}
notwendig??
,r?
wären als Methodenname interpretiert worden.Java 8, 136 Bytes
Lambda (Curry) von
Boolean
zu einem Verbraucher vonInteger
. Der boolesche Parameter gibt an, ob nach links gedehnt werden soll (Wertetrue
,false
). Die Ausgabe wird standardmäßig ausgegeben und durch Zeilenumbrüche mit einem abschließenden Zeilenumbruch getrennt.Ungolfed Lambda
Probieren Sie es online
Grenzen
Weil sie sich angesammelt haben
int
s , sind die Ausgaben auf 31 Bit begrenzt. Infolgedessen sind die Eingaben auf 7 Bit begrenzt, sodass das Programm maximal 127 Eingaben unterstützt.Erläuterung
Diese Lösung baut jede gedehnte Zahl mit bitweisen Operationen auf. Die äußere Schleife durchläuft
i
die zu streckenden Zahlen von 1 bis n und gibt den gestreckten Wert nach jeder Iteration aus.Die innere
while
Schleife wirds
um die Anzahl der eingegebenen Bits erhöhti
, und die darauffolgende Schleifefor
durchläuftc
jede Bitposition.d
Zählt in dieser Schleife bis zu der Häufigkeit, mit der das aktuelle Bit wiederholt wird, was von der Eingabe abhängtl
. Bei jedem Schritto
wird nach links verschoben und das entsprechende Bit voni
wird ausgeblendet und ODER-verknüpft.quelle