W górę i dalej ku większej chwale!

15

Niech to wyzwanie będzie ( kolejnym ) hołdem dla Stana Lee, który zmarł w wieku 95 lat.

Stan Lee pozostawił nam nieocenioną spuściznę i swoiste hasło: Excelsior . Oto małe wyzwanie oparte na tym, co powiedział, że ma to znaczenie :

Wreszcie, co oznacza „Excelsior”? „W górę i dalej ku większej chwale!” Tego właśnie życzę, gdy skończę tweetować! Wełna drzewna!

Wyzwanie

Biorąc pod uwagę serię liczb całkowitych nieujemnych, wypisz linię z Excelsior!każdym razem, gdy liczba całkowita jest większa niż poprzednia.

Zasady

  • Dane wejściowe będą tablicą liczb całkowitych nieujemnych.
  • Dane wyjściowe będą składać się z wierszy ze słowem Excelsior( wielkość liter ma znaczenie), po których następuje !długość bieżącej serii coraz większych liczb. Możesz także zwrócić tablicę ciągów.
  • Formaty wejściowe i wyjściowe są elastyczne zgodnie z zasadami witryny, więc możesz je dostosować do swoich formatów językowych. Możesz także dodać spacje na końcu wierszy, a nawet dodatkowe nowe wiersze po tekście lub przed nim, jeśli potrzebujesz.

Przykłady

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

To jest , więc może wygrać najkrótszy kod dla każdego języka!

Charlie
źródło
ouflak zakłada, że ​​liczby całkowite mają długość 1 cyfry, to jest ok
tylko ASCII
1
@ ASCII-tylko nie bardzo. Nie wiem, czy LUA ma z tym ograniczenie, ale jeśli tak nie jest, ouflak powinien analizować liczby całkowite o dowolnej długości.
Charlie
@Charlie Nie znam Lua, ale chociaż jest to pełne, można na przykład wziąć dane rozdzielone spacjami i podzielić w ten sposób .
Kevin Cruijssen
Patrzę na to. Sztuką jest być w stanie obsłużyć oba scenariusze.
ouflak
Języki FWIW, takie jak C lub Javascript, i tak będą obsługiwać liczby całkowite z dokładnością (9/16 cyfr).
user202729,

Odpowiedzi:

9

JavaScript (ES6), 58 54 bajtów

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

Wypróbuj online!

Skomentował

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

Dlaczego ponowne użycie [] do przechowywania poprzedniej wartości jest bezpieczne

Istnieją trzy możliwe przypadki:

  • Jeśli [ ] jest pusty, funkcja zwrotna od nie jest wywoływany w ogóle, a my po prostu pustą tablicę, otrzymując pusty ciąg.a[ ].map()
  • Jeśli [ ], zawiera jeden element X , jest zmuszany do tego elementu w pierwszym (i unikalne) testu . Tak, testujemy x < x , który jest falsy. Otrzymujemy tablicę zawierającą pusty ciąg, zwracając ponownie pusty ciąg.a[ ]xa < (a = c)x<x
  • Jeśli [ ], zawiera wiele elementów, jest on zmuszony do podczas pierwszej próby . Dlatego wynikiem jest fałsz, a tym, co zostało wykonane, jest inicjalizacja s do pustego łańcucha - tego właśnie chcemy. Pierwsze znaczące porównanie następuje przy 2. iteracji.a[ ]NaNa < (a = c)s
Arnauld
źródło
5

Python 2 , 84 83 81 70 68 bajtów

a=n=''
for b in input():
 n+='!';n*=a<b;a=b
 if n:print'Excelsior'+n

Wypróbuj online!

-2 bajty, tylko dzięki ASCII

TFeld
źródło
68?
Tylko ASCII,
@ Tylko ASCII Dzięki :)
TFeld
funkcje są za długie :(
tylko ASCII
cóż, przynajmniej podejście rekurencyjne
tylko ASCII
to samo z zip
tylko ASCII
5

05AB1E , 26 24 23 bajtów

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

-2 bajty dzięki @Kroppeb .

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

ü                        # 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

Zobacz moją wskazówkę 05AB1E (sekcja Jak kompresować ciągi znaków, które nie są częścią słownika? ), Aby zrozumieć, dlaczego tak .•1Š¥èò²•jest "excelsior".

Kevin Cruijssen
źródło
2
I naprawdę nie wiem 05AB1E, ale nie można wymieniać 0Kgz O?
Kroppeb,
@Kroppeb Ah, zupełnie tego nie zauważyłem, ale tak, rzeczywiście mogę. Dzięki! :)
Kevin Cruijssen
5

Perl 6 , 60 58 57 bajtów

-1 bajt dzięki nwellnhof

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

Wypróbuj online!

Anonimowy blok kodu, który zwraca listę Excelsiors!

Jo King
źródło
4

Java-8 118 113 bajtów

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");}

Łatwy do odczytania:

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
źródło
2
Oto niektóre golfs zapisać 10 bajtów: 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+="!":"";}. Wypróbuj online ( 108 bajtów ). (Java 10+)
Kevin Cruijssen
@KevinCruijssen Thanks!
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 bajtów )
Olivier Grégoire
Napraw mój problem: ++ezamiast e++tego, że jest co najmniej jeden !do wydrukowania.
Olivier Grégoire,
1
@KevinCruijssen Mała literówka w twoim golfie, abyś zyskał jeden bajt: e=...?e+"!":zamiast e=...?e+="!":.
Olivier Grégoire,
4

R , 86 bajtów

Połowa tej odpowiedzi to @ Giuseppe. RIP Stan Lee.

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

Wypróbuj online!

J.Doe
źródło
4

05AB1E , 20 19 bajtów

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

Wypróbuj online!

Wyjaśnienie

ü‹                    # 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
źródło
4

C (gcc / clang), 106 99 97 bajtów

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);}

Dzięki gastropner za grę w golfa 2 bajty.

Wypróbuj online tutaj .

Nie golfowany:

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
źródło
Zacząłem szukać rozwiązania, ale znalazłem się tak blisko twojego, że opublikowanie mojego jako osobnej odpowiedzi było trochę głupie. Jednak kilka różnic może zaoszczędzić kilka bajtów.
gastropner
@gastropner Dziękujemy za udostępnienie twojej wersji. Włączyłem twoje ulepszenia i wprowadziłem do gry w golfa dalej do 99 bajtów. Gdybyśmy nie musieli obsługiwać pustej tablicy - w przeciwnym razie byłoby to 97 bajtów , używając twojego stylu pętli.
OOBalance
4

Japt -R, 25 22 bajtów

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

Spróbuj

3 bajty zapisane dzięki Kamilowi

ò¨                      :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
Kudłaty
źródło
Kolejne 25 bajtów
Luis felipe De Jesus Munoz
-RFlaga nie jest rzeczywiście konieczne, wyzwaniem mówi można wyprowadzać tablicę ciągów.
Kamil Drakari
Niezły, dzięki, @KamilDrakari. Próbowałem rozwiązania przy slicepierwszym przejściu, ale odrzuciłem je, gdy zadziałało zbyt długo. Wracając do tego teraz, z twoją sugestią, myślę, że powinienem był utknąć w tym, ponieważ zmniejszyłem go również do 22.
Kudłaty
3

Common Lisp, 111 bajtów

(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 #\!))

Wypróbuj online!

Renzo
źródło
3

Java 8, 106 bajtów

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;}

Wypróbuj online!

(te zmiany przydziału s... yikes)

NotBaal
źródło
Możesz (s="")+s(s="")
zagrać
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 bajty ) Przenieś s=""do wolnych bajtów.
Olivier Grégoire,
3

R , 111 bajtów

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

Wypróbuj online!

Można znaleźć znacznie lepszy hołd dla R. tutaj - byłem zbyt skupiony na sequencei rle.

Giuseppe
źródło
To nie daje niektórych pustych linii, ale 86 bajtów?
J.Doe
2
@ J.Doe dang, to o wiele lepsze. Sam bym to opublikował, gdybym był tobą.
Giuseppe,
3

Galareta , 16 bajtów

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

Monadyczny link dający listę list znaków.

Wypróbuj online!(stopka łączy się z nowymi liniami)

W jaki sposób?

<Ɲṣ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
źródło
3

Japt , 22 bajty

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

Wypróbuj online!

Objaśnienie, z uproszczonym przykładem:

ò¨                       :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
źródło
3

PowerShell, 69 bajtów

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

Skrypt testu mniej golfowego:

$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
}

Wynik:

True
Excelsior!
True
Excelsior!
Excelsior!!
Excelsior!!!
Excelsior!!!!
True
True
True
Excelsior!
Excelsior!
Excelsior!!
Excelsior!
True
Excelsior!
mazzy
źródło
1
Próbowałem uruchomić wskaźnik opóźnienia, ale nie mogłem wymyślić, jak to zrobić.
Veskah
3

PowerShell , 87 85 bajtów

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

Wypróbuj online!

Prawdopodobnie kryje się w tym restrukturyzacja, najprawdopodobniej w przypadku „jeśli”, ale ogólnie całkiem dobrze. Używa starej sztuczki „Domyślna zmienna bez instancji jest ustawiona na 0” zarówno przy tworzeniu indeksu, jak i !.

Veskah
źródło
2

Siatkówka , 55 bajtów

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

Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:

\d+
*

Konwertuj na unary.

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

Przetwarzaj nakładające się dopasowania od prawej do lewej (chociaż dopasowania są następnie wyświetlane od lewej do prawej). Oznacza to, że możemy dopasować każdą liczbę w biegu, a dopasowanie rozciąga się na początek cyklu. Każde dopasowanie jest dodatkowo ograniczone tym, że każda dodatkowa dopasowana liczba musi być mniejsza niż poprzednio dopasowana dodatkowa liczba lub pierwsza liczba, jeśli nie zostały jeszcze dopasowane żadne dodatkowe liczby.

L$...
Excelsior$#1*!

Dla każdego dopasowania, wypisz Excelsiorz liczbą dodatkowych liczb w serii zgodnie z potrzebami.

Neil
źródło
2

Pyth, 32 bajty

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

Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .

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
źródło
2

Lua , 88 87 83 82 96 95 113 bajtów

Dzięki @Kevin Cruijssen za aktualizację zgodną z duchem pierwotnego pytania.

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

Wypróbuj online!

ouflak
źródło
1
Przepraszamy, ale musisz wydrukować wykrzyknik zgodnie z regułami (jeden wykrzyknik na długość bieżącej serii coraz większych liczb).
Charlie
Nie ma problemu. Myślę, że zrobiłem tyle, ile mogę, chyba że ktoś inny coś zobaczy ...
ouflak
1
Nie znam Lui zbyt dobrze, ale oto poprawka dla twojego kodu, więc poprawnie uruchamia wszystkie przypadki testowe. Teraz po prostu drukujesz „!” więcej za każdym razem, gdy liczba jest wyższa od poprzedniej, ale nie resetujesz jej z powrotem do 1, gdy tak nie jest. Prawdopodobnie więcej można grać w golfa, ale ponieważ nigdy nie grałem w Lua, skupiłem się na naprawie tylko niewielkich pól golfowych. PS: Nie jestem pewien, czy zakładanie, że dane wejściowe są zawsze jednocyfrowe, jest poprawne.
Kevin Cruijssen
2
Ponieważ @Charlie wspomniał w komentarzu poniżej opisu wyzwania, że ​​jako dane wejściowe powinno być możliwe przyjmowanie liczb wielocyfrowych, tutaj możliwa jest poprawka, przyjmując dane rozdzielane spacjami i dzieląc je .
Kevin Cruijssen
Uznałem, że modyfikacje Kevina Cruijssena są bardziej zgodne z oczekiwaniami PO. Dzięki!
ouflak
2

C ++ 14 (g ++), 123 118 bajtów

[](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;}

Na szczęście std::stringma konstruktora, który powtarza char. Wypróbuj online tutaj .

Dzięki gastropner za oszczędność 5 bajtów.

Nie golfowany:

[] (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
źródło
Możesz ogolić kolejne 5 bajtów
gastropner
2

C # (.NET Core) , 115 107 105 bajtów

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

Wypróbuj online!

-8 bajtów: zmieniono b na ciąg zawierający „!” S z licznika int
-2 bajty: ustaw b+="!" jako funkcję wbudowaną (dzięki Zacowi Faragherowi )

Wykorzystuje delegata akcji aby pobrać dane wejściowe i nie wymaga powrotu.

Nie golfowany:

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
}
Surykatka
źródło
1
możesz zaoszczędzić 2 bajty, tworząc b+="!"inline z Excelsior if(a[i]>a[i-1])Console.WriteLine("Excelsior"+(b+="!")); Wypróbuj online!
Zac Faragher
2

PHP , 117 109 bajtów

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

Wypróbuj online!

Scoots
źródło
2

J, 50 bajtów

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

Wypróbuj online!

bez golfa

'Excelsior' ,"1 '!' #"0~ [: ;@(([: < +/\);._1) 0 , 2 </\ ::0 ]
Jonasz
źródło
1

Java, 113 bajtów

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="";}}
isaace
źródło
1

VBA, 114 bajtów

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
isaace
źródło
Niestety, nie jest to ważne rozwiązanie, ponieważ opiera się na konieczności wyraźnie zdefiniowaną zmienną jest, a. To powiedziawszy, jeśli zdefiniujesz funkcję jako, subroutinektóra przyjmuje dane wejściowe jako wariant oczekiwanej tablicy typów, możesz zmienić swoje podejście w prawidłowe rozwiązanie. Wygląda na to wersja golfowa 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, w której przerwy między blokiem kodu reprezentują nowe linie
Taylor Scott,
1

Python 3, 87 bajtów

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

Lub 97 z następującymi:

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

Zakłada się, że dane wejściowe będą miały format:

32105
12345
<null input>
1
1213415
333343
Henry T.
źródło
1
Twój pierwszy program jest nieprawidłowy, ponieważ pobiera dane wejściowe przez predefiniowaną zmienną. Drugi jest nieważny, ponieważ nie można rozróżnić liczb z wieloma cyframi. Dlaczego zamiast tego nie użyć Python 2 lub zmienić go w funkcję ?
Jo King