Ausgabe der vereinfachten Goodstein-Sequenz

22

Eine Zahl ist in base-b vereinfachter Goodstein-Form, wenn sie geschrieben ist als

b + b + ... + b + c,   0 < c ≤ b

Die vereinfachte Goodstein-Folge einer Zahl beginnt mit dem Schreiben der Zahl in der vereinfachten Goodstein-Form zur Basis 1, dem Ersetzen aller Einsen durch Zweien und dem Subtrahieren von 1. Das Ergebnis in der vereinfachten Goodstein-Form zur Basis 2 umschreiben, dann alle Zweien durch Dreien ersetzen und 1 subtrahieren usw., bis Sie 0 erreichen.

Ihr Programm soll eine positive Ganzzahl eingeben und die Goodstein-Sequenz ausgeben / drucken und beenden. Ihr Programm sollte mit Zahlen unter 100 umgehen können, obwohl es möglicherweise nicht in angemessener Zeit beendet wird.

Wenn Sie beispielsweise 3 als Eingabe angeben, sollte Ihr Programm eine Ausgabe durchführen (die rechte Seite ist nur eine Erklärung).

1 + 1 + 1                | 3 = 1 + 1 + 1
2 + 2 + 1                | Change 1's to 2's, then subtract 1. (2 + 2 + 2 - 1 = 2 + 2 + 1)
3 + 3                    | 3 + 3 + 1 - 1 = 3 + 3
4 + 3                    | 4 + 4 - 1 = 4 + 3
5 + 2                    | 5 + 3 - 1 = 5 + 2
6 + 1                    | 6 + 2 - 1 = 6 + 1
7                        | 7 + 1 - 1 = 7
7                        | 8 - 1 = 7
6                        | Numbers are now lower than the base, so just keep subtracting 1.
5                        |
4                        |
3                        |
2                        |
1                        |
0                        | End

Abstand spielt keine Rolle.


Gewinnkriterium:

Das ist . Kürzester Code gewinnt.

Einfach schöne Kunst
quelle
1
Muss die letzte 0 angegeben werden?
KSab
5
@KSab Hm .... nein, ich denke nicht.
Simply Beautiful Art

Antworten:

2

05AB1E , 19 Bytes

Å1[D'+ý,N>D>:`Ž<)0K

Könnte auch als neu angeordnet werden >Å1[ND>:`Ž<)0KD'+ý,

Probieren Sie es online!

Erläuterung

Å1                    # push a list of 1's the length of the input
  [                   # start a loop
   D                  # duplicate the current list
    '+ý,              # join on "+" and print
        N>D>:         # replace <current_iteration>+1 with <current_iteration>+2
             `        # flatten the list to the stack
              Ž       # break loop if the stack is empty
               <      # decrement the top number
                )     # wrap the stack in a list
                 0K   # remove zeroes
Emigna
quelle
10

Python 2, 77 74 Bytes

-3 Bytes dank Lynn

n=input();b=1
while n:print"+".join(n/b*[`b`]+[`n%b`][:n%b]);n+=n/b-1;b+=1

Probieren Sie es online!

Läuft problemlos bis zu n = 100 (obwohl die Ausgabe zu lang ist, um sie vollständig anzuzeigen).

KSab
quelle
"Abstand spielt keine Rolle", also geht es dir gut.
Simply Beautiful Art
Speichern Sie ein Byte, indem Sie die Eingabe von STDIN lesen:n=input() b=1 while n:…
Lynn
1
Und noch zwei mit n+=n/b-1;b+=1. 74 Bytes
Lynn
1
@SimplyBeautifulArt behoben
KSab
1
@SimplyBeautifulArt es hat anscheinend mit der while-Schleife zu tun, man kann keine whilefolgenden a setzen ;. Ich würde vermuten, dass dies daran liegt, dass, wenn die Zeile mit einer whilefolgenden Anweisung (durch Semikolons getrennt) begonnen wird, dies innerhalb ihres Gültigkeitsbereichs betrachtet wird und das Verhalten mehrdeutig oder zumindest etwas undurchsichtig ist
KSab
2

Mathematica, 123 Bytes

(s=1~Table~#;i=1;While[s!={},Print@StringRiffle[ToString/@s,"+"];s=s/.i->i+1;s=Join[Most@s,{Last@s}-1]~DeleteCases~0;i++])&


Probieren Sie es online!

J42161217
quelle
1

Python 3, 155 Bytes

n=int(input());l=[1]*(n+1);i=0
while l:
    l=[t+1 if t==i else t for t in l];l[-1]-=1;l=l[:-1] if l[-1]==0 else l;print("+".join(list(map(str,l))));i+=1

Dies kann neu formatiert werden

n = int(input())
l = [0]*(n+1)
i = 0
while l:
    l = [t+1 if t==i else t for t in l]
    if l[-1] == 0:
        l = l[:-1]
    print("+".join(list(map(str,l))))
    i += 1
RGS
quelle
Sie vermissen die erste Zeile von 1+1+...und beachten, dass Ihr Programm jede positive Ganzzahleingabe verarbeiten soll.
Simply Beautiful Art
1
Ja bitte. Außerdem funktioniert MathJax auf dieser Site nicht: P
Simply Beautiful Art
1
Für mich sieht es so aus, als hätten Sie in Ihrer Golfversion ein Leerzeichen anstelle von a gesetzt +.
Simply Beautiful Art
1
106 Bytes
OVS
1
@RGS -~xhat den gleichen Wert wie x+1, Sie müssen ihn jedoch nicht in Klammern setzen, da unär -(Negation) und unär ~(bitweise Negation) eine höhere Priorität haben als *. In deinem Fall [1]*-~nist das gleich [1]*(n+1).
Ovs
1

Javascript ES6, 121 Zeichen

for(q=1,s=Array(+prompt()).fill(1).join`+`;s!=0;s=s.split(q).join(++q).replace(/\d+$/,x=>x-1).replace(/\+0$/,''))alert(s)

alert=s=>document.write(s+'\n')
document.write("<pre>")

for(q=1,s=Array(+prompt()).fill(1).join`+`;s!=0;s=s.split(q).join(++q).replace(/\d+$/,x=>x-1).replace(/\+0$/,''))alert(s)

Qwertiy
quelle