Betrachten Sie den Prozess von:
Nehmen Sie eine nicht negative ganze Zahl N.
z27
.Teilen Sie es in ganze Zahlen
N - floor(N/2)
undfloor(N/2)
(eine "größere" und "kleinere" Hälfte) und schreiben Sie sie in dieser Reihenfolge.
zB27
wird14 13
.Entfernen Sie das Leerzeichen, um die Ganzzahlen zu einer neuen, viel größeren Ganzzahl zusammenzufügen.
zB14 13
wird1413
.Wiederholen Sie die Schritte 2 und 3 einige Male.
zB1413
→707 706
→707706
→353853 353853
→353853353853
→ ...
Bei dieser Herausforderung geht es darum, genau das zu tun, aber nicht immer in der Basis 10.
Herausforderung
Schreiben Sie ein Programm, das drei Zahlen B, N und S enthält:
B ist eine ganze Zahl von 2 bis 10, die die Basis von N ist (binär bis dezimal).
N ist die nicht negative ganze Zahl, auf die der Aufteilungs- und Wiedervereinigungsprozess angewendet werden soll. Zur Vereinfachung der Benutzereingabe wird diese als Zeichenfolge in Basis B und nicht als Ganzzahl angegeben.
S ist eine nicht negative ganze Zahl, die die Häufigkeit angibt, mit der der Vorgang des erneuten Aufteilens wiederholt wird.
Die Ausgabe des Programms ist die Zeichenfolgendarstellung von N in Basis B nach S Split-Join-Prozeduren.
Wenn S ist 0
, werden keine Teilungen durchgeführt, daher ist die Ausgabe immer N.
Wenn N ist 0
, haben alle Teilungen die Form 0 0
und werden wieder auf reduziert 0
, sodass die Ausgabe immer erfolgt 0
.
Beispiele
B = 10, N = 27, S = 1
→1413
B = 10, N = 27, S = 2
→707706
B = 9, N = 27, S = 1
→1413
B = 9, N = 27, S = 2
→652651
B = anything, N = anything, S = 0
→N
B = anything, N = 0, S = anything
→0
Tabelle für alle B mit N = 1
für S = 0
bis 7
:
B S=0 S=1 S=2 S=3 S=4 S=5 S=6 S=7
2 1 10 11 101 1110 111111 10000011111 10000100001000001111
3 1 10 21 1110 202201 101101101100 1201201201212012012011 212100212102121002121212100212102121002120
4 1 10 22 1111 223222 111311111311 2232222232322322222322 11131111131311311111311113111113131131111131
5 1 10 32 1413 432431 213441213440 104220331443104220331442 2433241322130211014044424332413221302110140443
6 1 10 33 1514 535535 245550245545 122553122553122553122552 4125434125434125434125441254341254341254341254
7 1 10 43 2221 11111110 40404044040403 2020202202020220202022020201 10101011010101101010110101011010101101010110101011010100
8 1 10 44 2222 11111111 44444454444444 2222222622222222222226222222 11111113111111111111131111111111111311111111111113111111
9 1 10 54 2726 13581357 62851746285173 3142536758708231425367587081 15212633743485606571782880411521263374348560657178288040
10 1 10 55 2827 14141413 70707077070706 3535353853535335353538535353 17676769267676676767692676771767676926767667676769267676
Tabelle für alle B mit zufälligem N für S = 0
bis 3
:
B S=0 S=1 S=2 S=3
2 11011 11101101 11101111110110 11101111110111110111111011
3 2210 11021101 20102012010200 1001212100121210012121001211
4 1113 230223 112112112111 2302302302323023023022
5 101 2323 11341134 31430423143042
6 120 4040 20202020 1010101010101010
7 134 5252 24612461 1230456412304564
8 22 1111 445444 222622222622
9 4 22 1111 505505
10 92 4646 23232323 1161616211616161
Einzelheiten
- Eingabe über stdin oder die Kommandozeile. Ausgabe auf Standardausgabe.
- Anstelle eines Programms können Sie eine Funktion schreiben, die B, N und S verwendet und das Ergebnis normal ausgibt oder es (als Zeichenfolge) zurückgibt.
- B, N und S können in beliebiger Reihenfolge genommen werden.
- Alle Eingänge, die Ausgänge erzeugen, deren Dezimalwerte unter 2 32 liegen, sollten funktionieren.
- N wird wie gewohnt dargestellt. dh höchstwertige Ziffer zuerst und keine führenden Nullen außer in der Null selbst, die geschrieben wird
0
. (Ausgabe00
statt0
ist ungültig.) - Der kürzeste Code in Bytes gewinnt.
Wenn Ihnen meine Herausforderungen gefallen, sollten Sie erwägen, Block Building Bot Flocks zu geben! etwas Liebe :)
quelle
Antworten:
Pyth,
21 bis19 BytesÜbernimmt Eingaben im Format
N\nB\nS
. Probieren Sie es online aus: Vorführ- oder TestgeschirrErläuterung
quelle
Pyth,
2921 BytesWirklich unkomplizierte Umsetzung.
Übernimmt die Eingabe von stdin im folgenden Format:
quelle
00
fürN=0
.Mathematica, 101 Bytes
Verwendet einige
Through
Tricks, um sowohl die Decken- als auch die Bodenfunktionen anzuwenden. Ignoriere einfach die Fehler.quelle
CJam, 24 Bytes
Teste es hier. Übernimmt die Eingabe als
"N" S B
.Erläuterung
quelle
"0" 1 9
ausgegeben00
. Ich habe versucht, Golf zu spielen:,q~:B;{:~Bb,2/z:,Bfbs}*
aber auch ungültig, weil stattdessen ein leerer String ausgegeben wurde.i
am Ende würde sich darum kümmern00
. Sie können die Byte zurück durch den Ersatz2/:I-I]
mit)\]2f/
.JavaScript ( ES6 ) 78
79Rekursive Funktion. Führen Sie das Snippet zum Testen aus (nur Firefox)
Bearbeite 1 Byte gespeichert dank @DocMax
quelle
m&&s
mitm*s
.ECMAScript 6, 90 Bytes
Das Definieren einer rekursiven Funktion mithilfe einer Variablen ist kein guter Stil, aber der kürzeste Code, den ich in ECMAScript 6 finden konnte.
Wenn der Eckfall
"00" => "0"
richtig ist, werden drei Bytes verschwendet (s(n)
anstatt einfachN
).Probieren Sie es aus, können Sie Babels REPL : copy / paste den Code und Druck Beispiel Aufruf Ergebnisse wie folgt:
console.log(f(9, "27", 2))
.quelle
Common Lisp - 113 Zeichen
Ungolfed
~vR
Format-Direktive gibt eine Ganzzahl in base ausv
, wobeiv
als Argument für angegeben wirdformat
.parse-integer
akzeptiert ein:radix
Argument für die Konvertierung von einer angegebenen Basis.#1=
und#1#
(bzw. zuweisen und verwenden) sind Leservariablen, mit denen gemeinsame Unterausdrücke verwendet werden können. Wenn sie erweitert werden, geben sie den folgenden Code an:quelle
Pip , 27 Bytes
Nimmt Basis, Ganzzahl und Anzahl der Wiederholungen als Befehlszeilenargumente. Der Algorithmus ist unkompliziert, verwendet jedoch einige interessante Sprachfunktionen:
Der skalare Typ von Pip, der sowohl Zahlen als auch Zeichenfolgen darstellt, ist hier nützlich, ebenso wie die elementweisen Operationen auf Listen. Leider Klammern und die zweistelligen Operatoren
FB
,TB
und//
negieren ein Vorteil.Alternative Lösung, ohne die Zwischenzuweisung, aber immer noch 27 Bytes:
quelle
C 245 Bytes
Das wird nicht gewinnen nichts , aber es war lustig zu machen!
quelle
PHP ,
115112 BytesProbieren Sie es online!
Ungolfed:
Ausgabe
quelle
Japt , 17 Bytes
Probieren Sie es online!
Nimmt Eingaben in der Reihenfolge S, N, B mit N als Singleton-Liste an . Das Akzeptieren von N ohne Singleton-Liste kostet 2 Byte .
Erläuterung:
quelle
Viertens (gviertens) , 105 Bytes
Probieren Sie es online!
Erläuterung
Ändert die Basis in B und dann in einer Schleife, die S-mal ausgeführt wird:
Gibt die Zeichenkette aus, wenn sie fertig ist, und setzt die Basis auf 10 zurück (damit wir sie mehrmals hintereinander ausführen können)
Code-Erklärung
quelle