Haftungsausschluss
Diese Frage ist kein Duplikat dieser Frage . Ich zähle keine bestimmten Ziffern, da wir diese bereits in den Anfangsparametern festgelegt haben. Diese Frage konzentriert sich auf die Dezimalzahlen, die aus den binären Zeichenfolgen basierend auf den angegebenen Ziffern erstellt werden können.
Herausforderung
Berechnen Sie bei zwei Ganzzahlen X
und entsprechend Y
der Anzahl der Nullen ( 0
) und Einsen ( 1
) alle möglichen Dezimaläquivalente, die aus der Erstellung von Binärzeichenfolgen unter Verwendung der angegebenen Nullen und Einsen ermittelt werden können, und zeigen Sie sie als Ausgabe an.
Beispiel 1:
Eingang: 0 1
Ausgabe: 1
Erläuterung: Es muss nur eine 1
berücksichtigt werden, die nur in eine Richtung konvertiert werden kann.
Beispiel 2:
Eingang: 1 1
Ausgabe: 1,2
Erklärung: 01
konvertiert zu 1, 10
konvertiert zu 2.
Beispiel 3:
Eingang: 3 2
Ausgabe: 3,5,6,9,10,12,17,18,20,24
Erklärung: Drei 0
s und zwei 1
s ergeben 00011
(3), 00101
(5), 00110
(6), 01001
(9), 01010
(10), 01100
(12), 10001
(17), 10010
(18), 10100
(20), 11000
(24)
Einschränkungen und Regeln
- Ich erwarte nur, dass Ihr Code funktioniert, wo
0 < X + Y <= 16
also die maximale Anzahl in der Ausgabe erst ab 161
s auftreten kann, also Parameter0
und16
. - Aufgrund der obigen Einschränkung ist der erwartete Zahlenbereich in der Ausgabe von
0
und65535
. - Ich akzeptiere Funktionen oder Code, solange die resultierende Ausgabe bereitgestellt wird, sei es eine durch Kommas getrennte Liste, ein Array, eine an STDOUT ausgegebene Liste usw. Das einzige Kriterium, das ich in Bezug auf die Ausgabe hervorheben muss, ist, dass sie sortiert werden muss .
- Dies ist Code Golf, minimale Bytes erhalten maximale Pracht.
- Wir werden dumme Schlupflöcher nicht tolerieren
0 0
?0 <= X + Y <= 16
, also ja, weil0 0
dies als gültige Eingabe angesehen wird, die diese Regel erfüllt.0 0
? Die Zahl 0 kann durch Null, eine oder mehrere Nullen dargestellt werden.Antworten:
Gelee , 8 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Python, 60 Bytes
Teste es auf Ideone .
Wie es funktioniert
Alle positiven Zahlen, die binär mit x Nullen und y Einsen dargestellt werden können, sind deutlich kleiner als 2 x + y , da die kanonische binäre Darstellung der letzteren x + y + 1 Ziffern hat.
Das Lambda einfach iteriert über die ganzen Zahlen in [0, 2 x + y ) und hält alle ganzen Zahlen n in diesem Bereich, haben y diejenigen. Da n <2 x + y ist, kann mit x (oder weniger) Nullen dargestellt werden.
quelle
Mathematica,
5957 BytesEin übliches Ergebnis mit Mathematica: Übergeordnete Funktionen = gut, lange Funktionsnamen = schlecht.
Join[0&~Array~#,1&~Array~#2]
erstellt eine Liste mit der richtigen Anzahl von0
s und1
s.Permutations
generiert alle Permutationen dieser Liste, ohne Wiederholungen (wie ich gelernt habe) und in sortierter Reihenfolge.#+##&~Fold~#
(eine golfuscated Version von#~FromDigits~2
) konvertiert eine Liste von Basis-2-Ziffern in die Ganzzahl, die sie darstellen.Vorherige Version vor Martin Enders Kommentar:
quelle
FromDigits
kann in der Regel gekürzt werden:#+##&~Fold~#&/@Permutations...
Select[Range[2^+##]-1,x=#;DigitCount[#,2,1]==x&]&
CJam (
15 bis14 Bytes)Dies ist ein anonymer Block (eine Funktion), der Eingaben als Array akzeptiert
[number-of-ones number-of-zeros]
und Ausgaben als Array zurückgibt.Online-Demo
Weit weg von der Marke, aber interessanter : Dies ist ohne Permutation Builtins oder Basiskonvertierung:
Es würde gut funktionieren, wenn sich ein GolfScript entfalten würde.
quelle
ee{)*}/
durch etwas zu ersetzen , indem ich.*
diese 14-Byte-Lösung verwendet habe:{As.*s:~e!2fb}
Dies:~
sieht jetzt allerdings ein bisschen ineffizient aus..*
und festgestellt, dassee
das schöner ist als zB2,:a.*e_
. Ich wusste jedoch nicht, dass diese!
unabhängig von der Reihenfolge der Argumente zu derselben Ausgabe führt.Japt , 16 Bytes
Online testen!
Wie es funktioniert
Alternative Version, 17 Byte
Ich habe versucht, beide Versionen weiter zu golfen, aber ich kann einfach keinen Durchhang finden ...
quelle
("0".p(U)+"1".p(V)).á().m("n",2)
; Jede der.x()
Funktionen ist in der Quelldatei definiert .Ruby, 63 Bytes
Eine einfache Implementierung. Golfvorschläge sind willkommen.
Ungolfing
quelle
Pyth - 11 Bytes
Test Suite .
quelle
Python 2 -
10599 Bytes+8 Byte, da unsere Ausgabe sortiert werden muss
quelle
Mathematica, 47 Bytes
Eine unbenannte Funktion mit zwei Argumenten: Anzahl von
1
s, Anzahl von0
s.Im Wesentlichen eine Portierung von Dennis 'Python-Lösung . Wir erstellen einen Bereich von
0
bis und behalten dann nur die Zahlen bei, deren Anzahl der Bits der ersten Eingabe entspricht. Das interessanteste Bit ist wahrscheinlich das, das Sequenzmagie verwendet , um die Klammern um das Hinzufügen der beiden Argumente zu vermeiden.2x+y-1
1
2^+##
quelle
MATLAB 57 + 6
laufen mit
ungolfed
quelle
MATL , 9 Bytes
Probieren Sie es online!
Erläuterung
Der Ansatz ähnelt dem in Dennis 'Jelly-Antwort .
quelle
Eigentlich 21 Bytes
Ein Port meiner Ruby-Antwort . Golfvorschläge sind willkommen. Probieren Sie es online!
Wie es funktioniert
quelle
Groovy 74 Bytes, 93 Bytes oder 123 Bytes
Ich weiß nicht, welches Ihrer Meinung nach die Frage ausführlicher beantwortet, aber ...
74 Byte Lösung
Bei einer Eingabe von 1,2 erhalten Sie:
93 Byte Lösung
Bei einer Eingabe von 1,2 erhalten Sie:
123 Byte Lösung
Bei einer Eingabe von 1,2 erhalten Sie:
Probieren Sie es hier aus:
https://groovyconsole.appspot.com/edit/5143619413475328
quelle
JavaScript (Firefox 48),
8576747170 Bytes3 Bytes dank @Neil gespart.
Das Array-Verständnis ist fantastisch. Schade, dass sie es noch nicht in die offizielle ECMAScript-Spezifikation geschafft haben.
JavaScript (ES6),
1098779787170 ByteSollte jetzt in allen ES6-kompatiblen Browsern funktionieren. 7 Bytes auf diesem gespeichert, auch dank @Neil.
quelle
undefined
jetzt mit jedem Testlauf zurück, den ich mache ...?f=(m,n)=>...
und rufen Sie es dann wie folgt auff(3,2)
. Wenn Sie das tun, welchen Browser verwenden Sie?eval
-lose Version (macht genau das gleiche, aber 3 Bytes länger):(m,n)=>{a="";for(i=0;i<1<<m+n;i++)if(i.toString(2).split(1).length==n+1)a+=i+" ";return a}
Groovy 80 Bytes
basierend auf der Antwort von @carusocomputing
Seine 123-Byte-Lösung kann auf 80 Byte komprimiert werden:
80 Byte Lösung
Bei einer Eingabe von 1,2 erhalten Sie:
quelle
C (GCC) ,
7268 BytesProbieren Sie es online!
Leider gibt es kein popcount () in der Standardbibliothek, aber es wird von GCC als "eingebaute Funktion" bereitgestellt. Die Ausgabe ist sortiert, jedoch in umgekehrter Reihenfolge.
Vielen Dank an @ceilingcat für das Abschneiden von 4 Bytes!
quelle
PHP, 80 oder 63 Bytes
je nachdem , ob ich verwenden muss
$argv
oder kann verwendet werden$x
und$y
stattdessen.druckt alle übereinstimmenden Nummern in absteigender Reihenfolge, die durch Unterstriche getrennt sind.
Dateiname darf nicht mit einer Ziffer beginnen.
Keine Builtins, 88 oder 71 Bytes
Fügen Sie jeweils ein Byte für nur einen Unterstrich nach jeder Zahl hinzu.
@WallyWest: Sie hatten recht. Spart 3 Bytes für mich aus
for($i=-1;++$i<...;)
quelle
Perl 6 ,
64 6249 BytesErläuterung:
quelle