Auf und ab zu größerem Ruhm!

15

Möge diese Herausforderung als (eine weitere ) Hommage an Stan Lee dienen, der im Alter von 95 Jahren verstarb.

Stan Lee hat uns ein unschätzbares Erbe und ein besonderes Schlagwort hinterlassen: Excelsior . Hier ist eine kleine Herausforderung, basierend auf dem, was er sagte, was es bedeutet :

Was bedeutet schließlich "Excelsior"? "Auf und ab zu größerem Ruhm!" Das wünsche ich dir, wenn ich mit dem Twittern fertig bin! Holzwolle!

Herausforderung

Bei einer Reihe nicht negativer Ganzzahlen wird Excelsior!jedes Mal eine Zeile ausgegeben, wenn eine Ganzzahl größer als die vorherige ist.

Regeln

  • Die Eingabe ist ein Array nicht negativer Ganzzahlen.
  • Die Ausgabe besteht aus Zeilen mit dem Wort Excelsior(case does matter), gefolgt von !der Länge des aktuellen Laufs mit immer größeren Zahlen. Sie können auch ein Array von Zeichenfolgen zurückgeben.
  • Eingabe- und Ausgabeformate sind gemäß den Site-Regeln flexibel. Sie können sie also jederzeit an Ihre Sprachformate anpassen. Sie können auch Leerzeichen am Ende der Zeilen oder bei Bedarf sogar zusätzliche neue Zeilen nach oder vor dem Text einfügen.

Beispiele

Input             Output
-----------------------------------
[3,2,1,0,5]       Excelsior!      // Excelsior because 5 > 0

[1,2,3,4,5]       Excelsior!      // Excelsior because 2 > 1
                  Excelsior!!     // Excelsior because 3 > 2 (run length: 2)
                  Excelsior!!!    // Excelsior because 4 > 3 (run length: 3)
                  Excelsior!!!!   // Excelsior because 5 > 4 (run length: 4)

[]                <Nothing>

[42]              <Nothing>

[1,2,1,3,4,1,5]   Excelsior!      // Excelsior because 2 > 1
                  Excelsior!      // Excelsior because 3 > 1
                  Excelsior!!     // Excelsior because 4 > 3 (run length: 2)
                  Excelsior!      // Excelsior because 5 > 1

[3,3,3,3,4,3]     Excelsior!      // Excelsior because 4 > 3

Das ist , also kann der kürzeste Code für jede Sprache gewinnen!

Charlie
quelle
ouflak geht davon aus ganzen Zahlen 1 Ziffer lang sind, ist das in Ordnung
ASCII-only
1
@ ASCII-only eigentlich nicht. Ich weiß nicht, ob LUA eine Einschränkung hat, aber wenn das nicht der Fall ist, sollte ouflak ganze Zahlen beliebiger Länge analysieren.
Charlie
@Charlie Ich weiß nicht , Lua, aber obwohl es ausführliche ist, ist es möglich , beispielsweise eine durch Leerzeichen getrennte Eingangs- und Split zu nehmen wie diese .
Kevin Cruijssen
Ich schaue es an. Der Trick ist, beide Szenarien zu meistern.
14.
FWIW-Sprachen wie C oder Javascript verarbeiten ohnehin nur ganze Zahlen mit einer Genauigkeit von 9/16 Stellen.
user202729

Antworten:

9

JavaScript (ES6), 58 54 Byte

a=>a.map(c=>a<(a=c)?`Excelsior${s+='!'}
`:s='').join``

Probieren Sie es online!

Kommentiert

a =>                           // a[] = input array, also used to store the previous value
  a.map(c =>                   // for each value c in a[]:
    a <                        //   compare the previous value
    (a = c)                    //   with the current one; update a to c
                               //   this test is always falsy on the 1st iteration
    ?                          //   if a is less than c:
      `Excelsior${s += '!'}\n` //     add a '!' to s and yield 'Excelsior' + s + linefeed
    :                          //   else:
      s = ''                   //     reset s to an empty string and yield an empty string
  ).join``                     // end of map(); join everything

Warum die Wiederverwendung von [] zum Speichern des vorherigen Werts sicher ist

Es gibt drei mögliche Fälle:

  • Wenn a[ ] leer ist, wird die Rückruffunktion von überhaupt .map()nicht aufgerufen und wir erhalten nur ein leeres Array, was eine leere Zeichenfolge ergibt.
  • Wenn a[ ] genau ein Element x , wird es beim ersten (und eindeutigen) Test zu diesem Element gezwungen a < (a = c). Also testen wir x<x , was falsch ist. Wir erhalten ein Array mit einer leeren Zeichenkette, was wiederum eine leere Zeichenkette ergibt.
  • Wenn a[ ] mehrere Elemente enthält, wird es NaNbeim ersten Test erzwungen a < (a = c). Daher ist das Ergebnis falsch und es wird die Initialisierung von s zu einer leeren Zeichenfolge ausgeführt - was wir wollen. Der erste aussagekräftige Vergleich erfolgt bei der 2. Iteration.
Arnauld
quelle
5

05AB1E , 26 24 23 Bytes

ü‹γvyOE.•1Š¥èò²•™N'!׫,

-2 Bytes dank @Kroppeb .

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

ü                        # Loop over the (implicit) input as pairs
                        #  And check for each pair [a,b] if a<b is truthy
                         #   i.e. [1,2,1,3,4,1,5,7,20,25,3,17]
                         #   → [1,0,1,1,0,1,1,1,1,0,1]
  γ                      # Split it into chunks of equal elements
                         #  i.e. [1,0,1,1,0,1,1,1,1,0,1]
                         #   → [[1],[0],[1,1],[0],[1,1,1,1],[0],[1]]
   vy                    # Foreach `y` over them
     O                   #  Take the sum of that inner list
                         #   i.e. [1,1,1,1] → 4
                         #   i.e. [0] → 0
      E                  #  Inner loop `N` in the range [1, length]:
       .•1Š¥èò²•         #   Push string "excelsior"
                        #   Titlecase it: "Excelsior"
                 N'!׫  '#   Append `N` amount of "!"
                         #    i.e. N=3 → "Excelsior!!!"
                      ,  #   Output with a trailing newline

Sehen Sie diese 05AB1E Spitze Mine (Abschnitt Wie Kompresse Strings nicht Teil des Wörterbuchs? ) Zu verstehen , warum .•1Š¥èò²•ist "excelsior".

Kevin Cruijssen
quelle
2
Ich kenne 05AB1E nicht wirklich, aber kannst du das nicht 0Kgmit tauschen O?
Kroppeb
@Kroppeb Ah, das habe ich völlig verpasst, aber ja, das kann ich wirklich. Vielen Dank! :)
Kevin Cruijssen
5

Perl 6 , 60 58 57 Bytes

-1 byte dank nwellnhof

{"Excelsior"X~("!"Xx grep +*,[\[&(-+^*×*)]] .skip Z>$_)}

Probieren Sie es online!

Anonymer Codeblock, der eine Liste von Excelsiors zurückgibt!

Scherzen
quelle
4

Java-8 118 113 Bytes

n->{String e="";for(int i=0;i<n.length-1;)System.out.print(""==(n[i+1]>n[i++]?e+="!":(e=""))?e:"Excelsior"+e+"\n");}

Leicht zu lesen :

private static void lee(int num[]) {
    String exclamation = "";
    for (int i = 0; i < num.length - 1;) {
        exclamation = num[i + 1] > num[i++] ? exclamation += "!" : "";
        System.out.print("".equals(exclamation) ? "" : "Excelsior" + exclamation + "\n");
    }
}
CoderCroc
quelle
2
Hier einige golfs 10 Bytes speichern: n->{var e="";for(int i=0;i<n.length-1;System.out.print(""==e?e:"Excelsior"+e+"\n"))e=n[i++]<n[i]?e+="!":"";}. Versuchen Sie es online ( 108 Bytes ). (Java 10+)
Kevin Cruijssen
@ KevinCruijssen Danke!
CoderCroc
2
n->{for(int e=0,i=0;i<n.length-1;)if(n[i++]<n[i])System.out.println("Excelsior"+"!".repeat(e++));else e=0;}( 107 bytes )
Olivier Grégoire
Behebung meines Problems: ++eStattdessen muss e++mindestens eines !gedruckt werden.
Olivier Grégoire
1
@KevinCruijssen Kleiner Tippfehler in Ihrem Golf, damit Sie ein Byte gewinnen: e=...?e+"!":statt e=...?e+="!":.
Olivier Grégoire
4

R , 86 Bytes

Die Hälfte dieser Antwort ist @ Giuseppe. RIP Stan Lee.

function(a)for(i in diff(a))"if"(i>0,cat("Excelsior",rep("!",F<-F+1),"
",sep=""),F<-0)

Probieren Sie es online!

J.Doe
quelle
4

05AB1E , 20 bis 19 Bytes

ü‹0¡€ƶ˜ε'!×”¸Îsiorÿ

Probieren Sie es online!

Erläuterung

ü‹                    # pair-wise comparison, less-than
  0¡                  # split at zeroes
    €ƶ                # lift each, multiplying by its 1-based index
      ˜               # flatten
       ε              # apply to each
        '!×           # repeat "!" that many times
                  ÿ   # and interpolate it at the end of
           ”¸Îsior    # the compressed word "Excel" followed by the string "sior"
Emigna
quelle
4

C (gcc / clang) 106 99 97 Bytes

f(a,n)int*a;{int r=0,s[n];for(memset(s,33,n);n-->1;)r*=*a<*++a&&printf("Excelsior%.*s\n",++r,s);}

Dank Gastropner für das Golfspielen von 2 Bytes.

Probieren Sie es hier online aus .

Ungolfed:

f(a, n) // function taking a pointer to the first integer and the length of the array
  int *a; { // a is of type pointer to int, n is of type int

    int r = 0, // length of the current run
        i = 0, // loop variable
        s[n];  // buffer for exclamation marks; we will never need more than n-1 of those (we are declaring an array of int, but really we will treat it as an array of char)

    for(memset(s, 33, n); // fill the buffer with n exclamation marks (ASCII code 33)
        n -- > 1; ) // loop over the array

        r *= *a < *(++ a) // if the current element is less than the next:
             && printf("Excelsior%.*s\n", // print (on their own line) "Excelsior", followed by ...
                       ++ r, // ... r (incremented) of the ...
                       s) // ... n exclamation marks in the buffer s
             ; // else r is reset to 0

}
OOBalance
quelle
Ich habe angefangen, eine Lösung zu finden, bin aber so nahe bei Ihnen gelandet, dass es sich ein bisschen albern anfühlte, meine als separate Antwort zu veröffentlichen. Trotzdem können die wenigen Unterschiede einige Bytes einsparen.
Gastropner
@gastropner Danke, dass du deine Version geteilt hast. Ich habe Ihre Verbesserungen übernommen und weiter auf 99 Bytes golfen. Wenn wir nur nicht mit dem leeren Array umgehen müssten - sonst wären es 97 Bytes , wenn Sie Ihren Schleifenstil verwenden.
OOBalance
4

Japt -R, 25 22 Bytes

ò¨ ËÅ£`Ex­lÐâ`ú'!Y+A
c

Versuch es

3 Bytes gespart dank Kamil

ò¨                      :Partition at items that are greater than or equal to the previous item
   Ë                    :Map
    Å                   :  Slice off the first element
     £                  :  Map each element at 0-based index Y
      `Ex­lÐâ`           :    Compressed string "Excelsior"
             ú'!        :    Right pad with exclamation marks
                Y+A     :     To length Y+10
c                       :Flatten
                        :Implicitly join with newlines & output
Zottelig
quelle
Weitere 25 Bytes
Luis Felipe De Jesus Munoz
Das -RFlag ist eigentlich nicht erforderlich, die Abfrage besagt, dass Sie ein Array von Zeichenfolgen ausgeben können.
Kamil Drakari
Nice one, thanks, @KamilDrakari. I tried a solution using slice on my first pass but dismissed it when it worked out too long. Coming back to it now, with your prompting, I guess I should have stuck with it 'cause I got it down to 22 too.
Shaggy
3

Common Lisp, 111 bytes

(setq i 0)(loop for(a b)on(read)do(incf i(if(and b(> b a))1(- i)))(format(> i 0)"Excelsior~v@{~a~:*~}~%"i #\!))

Try it online!

Renzo
quelle
3

Java 8, 106 bytes

n->{String s="",z=s;for(int i=0;i<n.length-1;)z+=n[i++]<n[i]?"Excelsior"+(s+="!")+"\n":(s="")+s;return z;}

Try it online!

(those reassignments of s...yikes)

NotBaal
quelle
You can golf two more bytes by replacing (s="")+s => (s="")
O.O.Balance
1
n->{String s="",z=s;for(int i=0;i<n.length-1;)z+=n[i++]>=n[i]?s="":"Excelsior"+(s+="!")+"\n";return z;} (103 bytes) Move the s="" to spare bytes.
Olivier Grégoire
3

R, 111 bytes

function(a,r=rle(sign(diff(a))),v=r$l[r$v>0])write(paste0(rep("Excelsior",sum(v)),strrep("!",sequence(v))),1,1)

Try it online!

A far better R tribute can be found here -- I was too fixated on sequence and rle.

Giuseppe
quelle
This doesn't give some blank lines, but 86 bytes?
J.Doe
2
@J.Doe dang, that's way better. I'd post that myself if I were you.
Giuseppe
3

Jelly, 16 bytes

<Ɲṣ0ÄẎ”!ẋ“Ø6ḥ»;Ɱ

A monadic Link yielding a list of lists of characters.

Probieren Sie es online! (Fußzeile verbindet sich mit Zeilenumbrüchen)

Wie?

<Ɲṣ0ÄẎ”!ẋ“Ø6ḥ»;Ɱ - Link: list of integers     e.g. [1,1,4,2,1,1,3,4]
 Ɲ               - for each pair of integers:      [1,1] [1,4] [4,2] [2,1] [1,1] [1,3] [3,4]
<                -   less than?                    [  0,    1,    0,    0,    0,    1,    1]
  ṣ0             - split at zeros                  [[],    [1],     [],   [],      [1,    1]]
    Ä            - cumulative sums                 [[],    [1],     [],   [],      [1,    2]]
     Ẏ           - tighten                         [1,1,2]
      ”!         - literal '!' character           '!'
        ẋ        - repeat (vectorises)             [['!'],['!'],['!','!']]
         “Ø6ḥ»   - dictionary lookup               ['E','x','c','e','l','s','i','o','r']
               Ɱ - map with:
              ;  -   concatenate                   [['E','x','c','e','l','s','i','o','r','!'],['E','x','c','e','l','s','i','o','r','!'],['E','x','c','e','l','s','i','o','r','!','!']]
Jonathan Allan
quelle
3

Japt , 22 Bytes

ò¨ ®£`Ex­lÐâ`+'!pYÃÅÃc

Probieren Sie es online!

Erklärung mit vereinfachtem Beispiel:

ò¨                       :Split whenever the sequence does not increase
                           e.g. [2,1,1,3] -> [[2],[1],[1,3]]
   ®               Ã     :For each sub-array:
    £            Ã       :  For each item in that sub-array:
     `Ex­lÐâ`             :    Compressed "Excelsior"
            +            :    Concat with
             '!pY        :    a number of "!" equal to the index
                               e.g. [1,3] -> ["Excelsior","Excelsior!"]
                  Å      :  Remove the first item of each sub-array
                            e.g. [[Excelsior],[Excelsior],[Excelsior,Excelsior!]]->[[],[],[Excelsior!]]
                    c    :Flatten
                           e.g. [[],[],[Excelsior!]] -> [Excelsior!]
Kamil Drakari
quelle
3

Powershell, 69 Bytes

$args|%{if($o-ne$e-and$_-gt$o){'Excelsior'+'!'*++$c}else{$c=0}$o=$_}

Weniger Golf-Testskript:

$f = {

$args|%{
    if($old-ne$empty-and$_-gt$old){
        'Excelsior'+'!'*++$c
    }else{
        $c=0
    }
    $old=$_
}

}

@(
    ,( (3,2,1,0,5),  'Excelsior!')      # Excelsior because 5 > 0

    ,( (1,2,3,4,5),  'Excelsior!',      # Excelsior because 2 > 1
                    'Excelsior!!',     # Excelsior because 3 > 2 (run length: 2)
                    'Excelsior!!!',    # Excelsior because 4 > 3 (run length: 3)
                    'Excelsior!!!!')   # Excelsior because 5 > 4 (run length: 4)

    ,( $null,         '')                # <Nothing>

    ,( (42),          '')                # <Nothing>

    ,( (1,2,1,3,4,1,5), 'Excelsior!',      # Excelsior because 2 > 1
                        'Excelsior!',      # Excelsior because 3 > 1
                        'Excelsior!!',     # Excelsior because 4 > 3 (run length: 2)
                        'Excelsior!')      # Excelsior because 5 > 1

    ,( (3,3,3,3,4,3),   'Excelsior!')      # Excelsior because 4 > 3
) | % {
    $a,$expected = $_
    $result = &$f @a
    "$result"-eq"$expected"
    $result
}

Ausgabe:

True
Excelsior!
True
Excelsior!
Excelsior!!
Excelsior!!!
Excelsior!!!!
True
True
True
Excelsior!
Excelsior!
Excelsior!!
Excelsior!
True
Excelsior!
mazzy
quelle
1
Ich habe versucht, einen Verzögerungszeiger zur Arbeit zu bringen, konnte mir aber nicht vorstellen, wie.
Veskah 18.11.18
3

PowerShell , 87-85 Byte

param($n)for(;++$i-lt$n.count){if($n[$i]-gt$n[$i-1]){"Excelsior"+"!"*++$c}else{$c=0}}

Probieren Sie es online!

Es gibt wahrscheinlich eine Umstrukturierung, die sich dort versteckt, höchstwahrscheinlich im Wenn-Sonst, aber insgesamt ziemlich in Ordnung. Verwendet den alten Trick "Nicht instanziierte Variable standardmäßig auf 0", um sowohl den Index als auch den !.

Veskah
quelle
2

Netzhaut , 55 Bytes

\d+
*
L$rv`(_*,(?<!(?(1)\1|\2,)))+(_+)\b
Excelsior$#1*!

Probieren Sie es online! Link enthält Testfälle. Erläuterung:

\d+
*

In Unary konvertieren.

rv`(_*,(?<!(?(1)\1|\2,)))+(_+)\b

Überlappende Übereinstimmungen von rechts nach links verarbeiten (obwohl die Übereinstimmungen dann von links nach rechts aufgelistet werden). Dies bedeutet, dass wir jede Zahl in einem Lauf zuordnen können und die Übereinstimmung bis zum Start des Laufs reicht. Jede Übereinstimmung unterliegt ferner der Einschränkung, dass jede zusätzliche übereinstimmende Nummer kleiner sein muss als die zuvor übereinstimmende zusätzliche Nummer oder die erste Nummer, wenn noch keine zusätzlichen Nummern übereinstimmen.

L$...
Excelsior$#1*!

Geben Sie für jede Übereinstimmung Excelsiordie gewünschte Anzahl zusätzlicher Nummern im Lauf aus.

Neil
quelle
2

Pyth, 32 Bytes

j+L"Excelsior"*L\!fT.u*hN<0Y.+Q0

Versuchen Sie es online hier oder überprüfen alle Testfälle auf einmal hier .

j+L"Excelsior"*L\!fT.u*hN<0Y.+Q0   Implicit: Q=eval(input())
                            .+Q    Get forward difference between consecutive elements of Q
                    .u         0   Reduce the above, returning all steps, with current value N starting at 0, next element as Y, using:
                       hN            N+1
                      *              Multiplied by
                         <0Y         1 if 0<Y, 0 otherwise
                  fT               Filter to remove 0s
              *L\!                 Repeat "!" each element number of times
 +L"Excelsior"                     Prepend "Excelsior" to each
j                                  Join on newlines, implicit print
Sok
quelle
2

Lua , 88 87 83 82 96 95 113 Bytes

Vielen Dank an Kevin Cruijssen für das Update, das dem Geist der ursprünglichen Frage entspricht.

s=io.read()n=9 e="Excelsior!"f=e
for c in s.gmatch(s,"%S+")do if n<c+0then print(e)e=e..'!'else e=f end n=c+0 end

Probieren Sie es online!

ouflak
quelle
1
Es tut uns leid, aber Sie müssen das Ausrufezeichen gemäß den Regeln ausdrucken (ein Ausrufezeichen pro Länge der aktuellen Serie mit immer größeren Zahlen).
Charlie
Kein Problem. Denken Sie, ich habe so viel getan, wie ich hier tun kann, es sei denn, jemand anderes sieht etwas ...
ouflak
1
Ich kenne Lua nicht so gut, aber hier ist eine Korrektur für Ihren Code, damit alle Testfälle korrekt ausgeführt werden. Derzeit drucken Sie nur ein "!" jedes Mal mehr, wenn eine Zahl höher als die vorherige ist, aber Sie setzen sie nicht auf 1 zurück, wenn dies nicht der Fall ist. Es kann wahrscheinlich mehr Golf gespielt werden, aber da ich noch nie in Lua Golf gespielt habe, habe ich mich darauf konzentriert, es mit nur kleinen Golfspielen zu reparieren. PS: Nicht sicher, ob die Eingabe immer einstellig ist.
Kevin Cruijssen
2
Da @Charlie in einem Kommentar unterhalb der Challenge-Beschreibung erwähnt hat, dass es möglich sein sollte, mehrstellige Zahlen als Eingabe zu verwenden, hier eine mögliche Korrektur, indem eine durch Leerzeichen getrennte Eingabe verwendet und darauf aufgeteilt wird .
Kevin Cruijssen
Ich entschied, dass Kevin Cruijssen-Modifikationen eher den Erwartungen des OP entsprechen. Vielen Dank!
Ouflak
2

C ++ 14 (g ++), 123 - 118 Bytes

[](auto a){for(int n=0,i=0;++i<a.size();)a[i]>a[i-1]?puts(&("Excelsior"+std::string(++n,33))[0]):n=0;}

Glücklicherweise std::stringhat ein Konstruktor, der eine char. Probieren Sie es hier online aus .

Dank Gastropner für die Einsparung von 5 Bytes.

Ungolfed:

[] (auto a) { // void lambda taking a std::array of integer

    for(int n = 0, // length of the current run
        i = 0; // loop variable
        ++ i < a.size(); ) // start with the second element and loop to the last
        a[i] > a[i - 1] // if the current element is greater than the previous ...
        ? puts( // ... print a new line:
               &("Excelsior" + // "Excelsior, followed by ...
                std::string(++ n, 33)) // ... the appropriate number of exclamation marks (33 is ASCII code for '!'); increment the run length
               [0]) // puts() takes a C string
        : n = 0; // else reset run length

}
OOBalance
quelle
Sie können weitere 5 Bytes
abschneiden
2

C # (.NET Core) , 115 107 105 Bytes

a=>{var b="";for(int i=0;++i<a.Length;)if(a[i]>a[i-1])Console.WriteLine("Excelsior"+(b+="!"));else b="";}

Probieren Sie es online!

-8 Bytes: geändert b in einen String, der "!" Von einem Int-Zähler enthält
-2 Bytes: b+="!" als Inline-Funktion gesetzt (danke an Zac Faragher )

Verwendet einen Aktionsdelegaten , um die Eingabe abzurufen, und erfordert keine Rückgabe.

Ungolfed:

a => {
    var b = "";                         // initialize the '!' string (b)
    for(int i = 0; ++i < a.Length;)     // from index 1 until the end of a
        if(a[i] > a[i - 1])                 // if the current index is greater than the previous index
            Console.WriteLine("Excelsior" +     // on a new line, print "Excelsior"
                                    (b += "!"));    // add a "!" to b, and print the string
        else                                // if the current index is not greater than the previous index
            b = "";                             // reset b
}
Erdmännchen
quelle
1
Sie können 2 Bytes sparen, indem Sie die b+="!"Inline mit dem Excelsior machen. if(a[i]>a[i-1])Console.WriteLine("Excelsior"+(b+="!")); Probieren Sie es online aus!
Zac Faragher
2

PHP , 117 109 Bytes

<?php do{$i=next($argv);if($p!==null&&$p<$i){$e.='!';echo "
Excelsior$e";}else$e='';$p=$i;}while($i!==false);

Probieren Sie es online!

Scoots
quelle
2

J, 50 Bytes

'Excelsior',"1'!'#"0~[:;@(([:<+/\);._1)0,2</\ ::0]

Probieren Sie es online!

ungolfed

'Excelsior' ,"1 '!' #"0~ [: ;@(([: < +/\);._1) 0 , 2 </\ ::0 ]
Jona
quelle
1

Java, 113 Bytes

String i="";for(int a=0;a<s.length-1;a++){if(s[a+1]>s[a]){i+="!";System.out.println("Excelsior"+i);}else{i="";}}
Isaac
quelle
1

VBA, 114 Bytes

For i=0 To UBound(a)-LBound(a)-1 If a(i+1)>a(i)Then s=s&"!" Debug.Print("Excelsior"&s&"") Else s="" End If Next i
Isaac
quelle
Leider ist dies keine gültige Lösung, da eine explizit definierte Variable erforderlich ist a. Das heißt, wenn Sie die Funktion als eine definieren subroutine, die die Eingabe als eine Variante des erwarteten Array-Typs verwendet, können Sie Ihren Ansatz in eine gültige Lösung umwandeln. Eine Golf-Version dieses Ansatzes würde so aussehen sub f(x) For i=0To UBound(x)-1 If x(i+1)>x(i)Then s=s+"!":Debug.?"Excelsior"s:Else s="" Next End Sub, als würden die Brüche zwischen den Codeblöcken neue Zeilen darstellen
Taylor Scott
1

Python 3, 87 Bytes

c='!'
for i in range(1,len(n)):
    if n[i]>n[i-1]:print('Excelsior'+c);c+='!'
    else:c='!'

Oder 97 mit dem folgenden:

c='!';n=input()
for i in range(1,len(n)):
    if n[i]>n[i-1]:print('Excelsior'+c);c+='!'
    else:c='!'

Dies setzt voraus, dass die Eingaben im folgenden Format erfolgen:

32105
12345
<null input>
1
1213415
333343
Henry T
quelle
1
Ihr erstes Programm ist ungültig, da es Eingaben über eine vordefinierte Variable vornimmt. Die zweite ist ungültig, da nicht zwischen mehrstelligen Zahlen unterschieden werden kann. Warum nicht Python 2 verwenden oder es stattdessen in eine Funktion verwandeln ?
Jo King