Eine 1, zwei Einsen, eine 2 Eine 1

16

Herausforderung:

Erstellen Sie ein Programm, das die Eingabe einer positiven Ganzzahl ungleich Null akzeptiert und die 4 nächsten Zahlen in der unten beschriebenen Reihenfolge ausgibt.

Hinweis: Es ist nicht erforderlich zu überprüfen, ob die Eingabe tatsächlich eine positive Ganzzahl ungleich Null ist

Reihenfolge:

Jede Zahl in dieser Sequenz (mit Ausnahme der ersten, bei der es sich um die Eingabe handelt) muss aus n Ziffern bestehen, wobei n eine gerade Zahl ist. Wenn wir die Zahl auf n / 2 Paare aufteilen, sollte die erste Ziffer die Häufigkeit sein, mit der die zweite Ziffer in der vorherigen Ziffer vorkommt

Visuelle Erklärung :
Betrachten Sie dieses Beispiel als "Sequenz-Starter" oder Eingabe. 6577
Die nächste Nummer in der Sequenz sollte folgendermaßen aussehen, 161527
da die Eingabe 1 "6", 1 "5" und 2 "7" hat.

Wenn die Eingabe zu viele Ziffern hat (mehr als 9 einer einzelnen Ziffer), können Sie keine korrekte Ausgabe erhalten.
Beispiel: 111111111111(12 Einsen ) Die
nächste Zahl in der Sequenz muss 12 Einsen beschreiben. Also teilen wir es in 9 Einsen und 3 Einsen (Summe 9 + 3 = 12)
Nächste Nummer:9131

Sie sollten die Eingabe viermal iterieren und ausgeben (entweder eine Liste / ein Array mit vier Ganzzahlen zurückgeben oder sie durch Trennen mit einem Leerzeichen ausgeben, auch Zeilenumbrüche sind zulässig).

"Die Nummer kann auf viele Arten geschrieben werden. Wie schreibe ich sie?" :
Wenn Sie darüber nachdenken, kann die Beispieleingabe 6577auch als 271516 geschrieben werden (zwei Siebenen, eine Fünf, eine Sechs). Dies ist jedoch eine ungültige Ausgabe. Sie sollten die Nummer von links nach rechts durchlaufen. Also 161527. Wenn Sie 7657den Betrag von 7 iterieren würden, dann wäre der Betrag von 6 der Betrag von 5, somit wäre die Ausgabe gültig271615

Beispiel I / O:

Eingabe: 75
Ausgabe:1715 211715 12311715 4112131715

Eingabe: 1
Ausgabe:11 21 1211 3112

Eingang: 111111111111(12
Einsen ) Ausgang:9131 192113 31191213 23411912


Dies unterscheidet sich von der Frage "Sagen Sie, was Sie sehen", da die Sequenzen unterschiedlich sind: https://oeis.org/A005150 <- Diese gibt Zahlen wie diese zurück:
Eingabe: 1211 Ausgabe: 111221
Während der Sequenz, nach der ich frage würde tun
Input: 1211 Output: 3112

Die beiden Sequenzen sind unterschiedlich und erfordern unterschiedliche Algorithmen.
Meine angeforderte Sequenz: https://oeis.org/A063850
"Mögliche doppelte" Sequenz: https://oeis.org/A005150


Wichtige Spezifikation:

Da es für einige Leute, die diese Frage zu beantworten versuchten, nicht klar genug war, ist die korrekte Ausgabe für k Zeichen, wobei k> 9 ist, nicht "kc" (wobei c char ist), sondern 9c (k-9) c usw. Somit korrekte Ausgabe für 12 Einsen sind nicht 121(12 1), sondern 9131(9 Einsen, (12-9) Einsen und so weiter)

Im Zweifelsfall ist Ihr Code falsch, wenn er jemals eine Zahl mit einer ungeraden Anzahl von Ziffern ausgibt (wie 121). Aufgrund der Art der Sequenz sollte er geradzahlige Ziffern ausgeben.


Dies ist also gewinnt Code mit den wenigsten Bytes.

P. Ktinos
quelle
Vorgeschlagener Testfall: 1111111111111111111(19 1's )
Emigna
Eng verwandt (aber immer noch nicht betrogen).
ETHproductions
Können wir eine durch Kommas getrennte Liste von ganzen Zahlen ausgeben? Kann die Ausgabe mit der Eingabe-Ganzzahl beginnen (und somit die Länge 5 haben)?
Greg Martin
Sollte in Ihrem letzten Testfall nicht die letzte Nummer 23411912statt sein 23411219?
Greg Martin
@ GregMartin In der Tat. Vielen Dank für den Hinweis. Aber nein, Sie dürfen keine Liste von Ganzzahlen oder Ausgabe-Ganzzahlen zurückgeben, die mit etwas anderem als Zeilenumbrüchen oder Leerzeichen getrennt sind. Und nein, Sie sollten die Eingabe nicht ausgeben
P. Ktinos

Antworten:

6

PowerShell , 111 bis 104 Byte

$z=$args;1..4|%{($z=-join($z-split'\B'|group|%{for($c,$n=$_.Count,$_.Name;$c-gt9;$c-=9){"9$n"}"$c$n"}))}

Probieren Sie es online!

Briantist
quelle
Da Sie nicht $iin Ihrer Schleife verwenden, warum nicht einfach direkt wie Schleife$z=$args;0..3|%{...
AdmBorkBork
@AdmBorkBork Ich dachte darüber nach, hatte aber das Gefühl, dass es nach der Zuweisung länger dauern würde $args(und ich dachte ursprünglich, ich würde es verwenden $i). Ich wollte es messen, aber dann wurde die Frage geschlossen.
Briantist
@AdmBorkBork ... aaaund bearbeitet (danke)
Briantist
5

Python 2 , 116 Bytes

x=input()
exec"x=''.join(x.count(n)/9*(`9`+n)+`x.count(n)%9`+n for i,n in enumerate(x)if n not in x[:i]);print x;"*4

Probieren Sie es online!

Stange
quelle
Die Ausgabe für 19 1111111111111111111ist falsch. Sollte sein, 919111aber gibt919121
CSharpie
Ausgabe für viele Werte falsch. Beispiel: image.prntscr.com/image/ed4c523b105b41169e8aa8c46a95f963.png , Mit Eingabe 11sollte Ausgabe sein 21 1211 3112 132112, ich verstehe nicht, warum es 111als erste Iteration ausgegeben wird, die dazu führt , dass die gesamte Kette schlecht
läuft
@ P.Ktinos das Eingabeformat war falsch, es muss ein String sein (es muss der Rest der Tests sein, die ich gemacht habe). Fehler behoben
Rod
4

05AB1E , 30 23 21 Bytes

4F©Ùv9y«®y¢9‰`U×XyJ}=

Probieren Sie es online!

Erläuterung

4F                     # 4 times do:
  ©                    # store a copy of the current number in register
   Ùv                  # for each unique digit y in the number
     9y«               # concatenate 9 with y
        ®y¢            # count occurrences of y in current number
           9‰          # divmod by 9
             `U        # store the result of modulus in X
               ×       # repeat the number "9y" result_of_div times
                X      # push result of modulus
                 y     # push y
                  J    # join everything to one number
                   }   # end inner loop
                    =  # print the current number without popping
Emigna
quelle
@MagicOctopusUrn: Das funktioniert bei Zahlen mit mehr als 9 Wiederholungen einer Ziffer nicht, wie zum Beispiel in meinem TIO-Link.
Emigna
Ohhh ... ich habe es jetzt verstanden.
Magic Octopus Urn
1

Mathematica, 117 Bytes

Grid@{Rest@NestList[FromDigits[Join@@(Reverse/@Tally@IntegerDigits@#//.{a_,b_}/;a>9->{9,b}~Sequence~{a-9,b})]&,#,4]}&

Scheint, als müsste es nicht so lange dauern.

Greg Martin
quelle
1

C # 246 Bytes

namespace System{using Linq;using f=String;class p{static void Main(f[] s){f p=s[0];for(int i=0,n;i++<4;Console.Write(p+" "))p=f.Concat(p.GroupBy(c=>c).SelectMany(g=>new int[(n=g.Count())/9].Select(_ =>"9"+g.Key).Concat(new[]{n%9+""+g.Key})));}}}

Ungolfed:

namespace System
{
    using Linq;
    using f = String;
    class p
    {
        static void Main(f[] s)
        {
            f p = s[0];
            for (int i = 0, n; i++ < 4; Console.Write(p + " "))

                p = f.Concat(p.GroupBy(c => c).SelectMany(g =>
                    new int[(n = g.Count()) / 9].Select(_ => "9" + g.Key).Concat(new[] { n % 9 + "" + g.Key }
                )));
            Console.ReadKey();
        }
    }
}

Probieren Sie es hier aus (geben Sie die Eingabe in den unteren Frame ein, sobald sie kompiliert ist, und drücken Sie die Eingabetaste)

CSharpie
quelle
0

Gelee , 27 Bytes

L,Ḣ
D©®i$ÞŒgs9$€Ç€€FḌµ4µÐ¡Ḋ

Probieren Sie es online!

Die aufeinanderfolgenden s können nicht verschachtelt werden, da Ketten nicht verschachtelt werden können.

Verschachtelung mit separatem Link: 27 Bytes.

Drucken statt kumulieren: 27 Bytes.

Erläuterung

L,Ḣ                     - helper function, does the look-and-say. Input is a list of digits
 ,                      - return 2-tuple of:
L                       -   length of input
  Ḣ                     -   first element of input

D©®i$ÞŒgs9$€Ç€€FḌµ4µÐ¡Ḋ - main link, takes input as integer
                 µ4µÐ¡  - repeat 4 times, saving the results of each iteration:
D                       -   convert integer to list of digits
 ©                      -   save into register, for later use
  ®i$Þ                  -   sort list's elements by first occurrence in list
      Œg                -   group runs of equal elements
        s9$€            -   split each run into sets which are at most 9 elements long
            Ç€€         -   do the look-and-say with helper function
               FḌ       -   flatten and convert back into integer for next iteration
                      Ḋ - remove the first element from the list since it includes the
                           initial element
fireflame241
quelle
0

PHP, 141 Bytes

for($a=$argn;$i++<4;$a=$o,print$a._,$o="")foreach(array_count_values(str_split($a))as$n=>$c)$o.=str_repeat("9$n",$c/9^0).($c%9?($c%9).$n:"");

Probieren Sie es online!

Jörg Hülsermann
quelle