Hướng lên và hướng tới vinh quang lớn hơn!


15

Có thể thử thách này đóng vai trò ( một ) khác tưởng nhớ Stan Lee, người đã qua đời ở tuổi 95.

Stan Lee đã để lại cho chúng tôi một di sản vô giá và một từ bắt kỳ dị: Excelsior . Vì vậy, đây là một thách thức nhỏ dựa trên những gì ông nói đó là ý nghĩa của nó :

Cuối cùng, ý nghĩa của Excelsior phạm nghĩa là gì? Hướng lên và hướng tới vinh quang lớn hơn! Đó là điều tôi ước bạn mỗi khi tôi hoàn thành tweet! Tuyệt vời!

Thử thách

Cho một loạt các số nguyên không âm, xuất ra một dòng với Excelsior!mỗi lần số nguyên lớn hơn số nguyên trước đó.

Quy tắc

  • Đầu vào sẽ là một mảng các số nguyên không âm.
  • Đầu ra sẽ bao gồm các dòng có từ Excelsior(trường hợp có vấn đề) theo sau !là độ dài của chuỗi hiện tại với số lượng ngày càng lớn hơn. Bạn cũng có thể trả về một chuỗi các chuỗi.
  • Các định dạng đầu vào và đầu ra linh hoạt theo các quy tắc của trang web, vì vậy hãy thoải mái điều chỉnh chúng theo các định dạng ngôn ngữ của bạn. Bạn cũng có thể thêm khoảng trắng ở cuối dòng hoặc thậm chí thêm dòng mới sau hoặc trước văn bản nếu bạn cần.

Ví dụ

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

Đây là , vì vậy có thể mã ngắn nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!


ardyak giả sử số nguyên dài 1 chữ số, có ổn không
ASCII chỉ có

1
@ ASCII-chỉ không thực sự. Tôi không biết LUA có giới hạn với điều đó không, nhưng nếu đó không phải là trường hợp thì ngụy trang nên phân tích các số nguyên có độ dài bất kỳ.
Charlie

@Charlie Tôi không biết Lua, nhưng mặc dù nó dài dòng, có thể lấy ví dụ như một đầu vào được phân tách bằng không gian và phân tách như thế này .
Kevin Cruijssen

Tôi đang nhìn nó. Bí quyết là có thể xử lý cả hai kịch bản.
ngerak

Các ngôn ngữ FWIW như C hoặc Javascript sẽ chỉ xử lý các số nguyên trong độ chính xác của nó (9/16 chữ số).
dùng202729

Câu trả lời:


9

JavaScript (ES6), 58 54 byte

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

Hãy thử trực tuyến!

Đã bình luận

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

Tại sao sử dụng lại [] để lưu trữ giá trị trước đó là an toàn

Có ba trường hợp có thể xảy ra:

  • Nếu a[ ] trống, hàm gọi lại hoàn toàn .map()không được gọi và chúng ta chỉ nhận được một mảng trống, thu được một chuỗi trống.
  • Nếu a[ ] chứa chính xác một phần tử x , nó bị ép buộc với phần tử đó trong lần kiểm tra đầu tiên (và duy nhất) a < (a = c). Vì vậy, chúng tôi đang thử nghiệm x<x , đó là giả mạo. Chúng ta nhận được một mảng chứa một chuỗi rỗng, mang lại một chuỗi trống.
  • Nếu a[ ] có chứa một số phần tử, nó bị ép buộc NaNtrong lần thử nghiệm đầu tiên a < (a = c). Do đó, kết quả là sai lệch và những gì được thực hiện là khởi tạo s thành một chuỗi rỗng - đó là những gì chúng ta muốn. Sự so sánh có ý nghĩa đầu tiên xảy ra ở lần lặp thứ 2.


5

05AB1E , 26 24 23 byte

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

-2 byte nhờ @Kroppeb .

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

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

Xem 05AB1E mẹo này của tôi (phần Làm thế nào để chuỗi nén không nằm trong từ điển? ) Để hiểu tại sao .•1Š¥èò²•"excelsior".


2
Tôi thực sự không biết 05AB1E nhưng bạn không thể trao đổi 0Kgvới O?
Kroppeb

@Kroppeb Ah, hoàn toàn bỏ lỡ điều đó, nhưng vâng, tôi thực sự có thể. Cảm ơn! :)
Kevin Cruijssen


4

Java-8 118 113 byte

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

Dễ đọc :

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

2
Ở đây một số golf để tiết kiệm 10 byte : 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+="!":"";}. Hãy thử trực tuyến ( 108 byte ). (Java 10+)
Kevin Cruijssen 14/11/18

@KevinCruijssen Cảm ơn!
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 byte )
Olivier Grégoire

Khắc phục sự cố của tôi: ++ethay vì e++để có ít nhất một !bản được in.
Olivier Grégoire

1
@KevinCruijssen Lỗi đánh máy nhỏ trong golf của bạn để giúp bạn đạt được một byte: e=...?e+"!":thay vì e=...?e+="!":.
Olivier Grégoire

4

R , 86 byte

Một nửa câu trả lời này là của @ Giuseppe. RIP Stan Lee.

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

Hãy thử trực tuyến!


4

05AB1E , 20 19 byte

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

Hãy thử trực tuyến!

Giải trình

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

4

C (gcc / clang), 106 99 97 byte

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

Cảm ơn gastropner đã chơi golf 2 byte.

Hãy thử trực tuyến tại đây .

Ung dung:

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

}

Tôi bắt đầu đưa ra một giải pháp, nhưng cuối cùng lại gần với bạn đến nỗi việc đăng bài của tôi như một câu trả lời riêng biệt cảm thấy hơi ngớ ngẩn. Tuy nhiên, một vài khác biệt có thể giúp bạn tiết kiệm một vài byte.
gastropner

@gastropner Cảm ơn bạn đã chia sẻ phiên bản của bạn. Tôi đã kết hợp các cải tiến của bạn và đánh gôn thêm 99 byte. Nếu chỉ chúng ta không cần xử lý mảng trống - nếu không nó sẽ là 97 byte , sử dụng kiểu vòng lặp của bạn.
OOBalance

4

Japt -R, 25 22 byte

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

Thử nó

3 byte được lưu nhờ 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


Các -Rcờ không phải là thực sự cần thiết, thách thức nói rằng bạn có thể xuất một mảng các chuỗi.
Kamil Drakari

Rất vui, cảm ơn, @KamilDrakari. Tôi đã thử một giải pháp sử dụng slicetrên đường chuyền đầu tiên của mình nhưng đã loại bỏ nó khi nó hoạt động quá lâu. Quay trở lại với nó ngay bây giờ, với sự nhắc nhở của bạn, tôi đoán rằng tôi nên bị mắc kẹt với nó vì tôi cũng đã giảm xuống còn 22.
Xù xì


3

Java 8, 106 byte

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

Hãy thử trực tuyến!

(những đánh giá lại của s... yike)


Bạn có thể chơi thêm hai byte bằng cách thay thế (s="")+s=>(s="")
OOBalance

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 byte ) Di chuyển s=""đến byte dự phòng.
Olivier Grégoire


3

R , 111 byte

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

Hãy thử trực tuyến!

Một cống phẩm R tốt hơn có thể được tìm thấy ở đây - Tôi đã quá cố định sequencerle .


Điều này không cung cấp một số dòng trống, nhưng 86 byte?
J.Doe 14/11/18

2
@ J.Doe dang, đó là cách tốt hơn. Tôi sẽ tự đăng nó nếu tôi là bạn.
Giuseppe

3

Thạch , 16 byte

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

Một liên kết đơn âm mang lại một danh sách các danh sách các nhân vật.

Hãy thử trực tuyến!(chân trang tham gia với dòng mới)

Làm sao?

<Ɲṣ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','!','!']]


3

Japt , 22 byte

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

Hãy thử trực tuyến!

Giải thích, với ví dụ đơn giản:

ò¨                       :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!]

3

Powershell, 69 byte

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

Kịch bản kiểm tra ít chơi gôn hơn:

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

Đầu ra:

True
Excelsior!
True
Excelsior!
Excelsior!!
Excelsior!!!
Excelsior!!!!
True
True
True
Excelsior!
Excelsior!
Excelsior!!
Excelsior!
True
Excelsior!

1
Ở đó, tôi đã cố gắng để một con trỏ lag hoạt động nhưng không thể nghĩ ra cách nào.
Veskah

3

PowerShell , 87 85 byte

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

Hãy thử trực tuyến!

Có lẽ có một sự tái cấu trúc ẩn trong đó, rất có thể là trong trường hợp khác, nhưng nhìn chung khá ổn. Sử dụng thủ thuật "Biến không khởi tạo" của ol 'mặc định thành 0 "cho cả việc tạo chỉ mục và !.


2

Võng mạc , 55 byte

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

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Giải trình:

\d+
*

Chuyển đổi sang unary.

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

Xử lý các trận đấu chồng chéo từ phải sang trái (mặc dù các trận đấu sau đó được liệt kê từ trái sang phải). Điều này có nghĩa là chúng ta có thể khớp mọi số trong một lần chạy và trận đấu kéo dài đến khi bắt đầu chạy. Mỗi trận đấu bị hạn chế thêm rằng mỗi số phù hợp bổ sung phải nhỏ hơn số bổ sung được khớp trước đó hoặc số đầu tiên nếu chưa có số bổ sung nào được khớp.

L$...
Excelsior$#1*!

Đối với mỗi trận đấu, xuất ra Excelsiorvới số lượng bổ sung trong quá trình chạy như mong muốn.


2

Bình thường, 32 byte

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

Dùng thử trực tuyến tại đây hoặc xác minh tất cả các trường hợp thử nghiệm cùng một lúc tại đây .

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


2

Lua , 88 87 83 82 96 95 113 byte

Cảm ơn @Kevin Cruijssen đã cập nhật tuân thủ tinh thần của câu hỏi ban đầu.

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

Hãy thử trực tuyến!


1
Xin lỗi, nhưng bạn cần in dấu chấm than theo quy tắc (một dấu chấm than cho mỗi chiều dài của số hiện tại ngày càng lớn hơn).
Charlie

Không vấn đề gì. Hãy nghĩ rằng tôi đã làm nhiều như tôi có thể làm ở đây trừ khi người khác nhìn thấy thứ gì đó ...
ngerak

1
Tôi không biết Lua quá rõ, nhưng đây là một sửa lỗi cho mã của bạn để nó chạy tất cả các trường hợp kiểm tra một cách chính xác Hiện tại bạn chỉ cần in một "!" nhiều hơn mỗi khi số cao hơn số trước, nhưng bạn không đặt lại số đó thành 1 khi không phải như vậy. Nhiều người có thể chơi gôn hơn, nhưng vì tôi chưa bao giờ chơi gôn ở Lua, tôi tập trung vào việc sửa nó chỉ với những gôn nhỏ. PS: Không chắc chắn nếu giả sử đầu vào luôn là các chữ số duy nhất là chính xác ..
Kevin Cruijssen 14/11/18

2
Vì @Charlie đã đề cập trong một bình luận bên dưới mô tả thách thức rằng có thể lấy số có nhiều chữ số làm đầu vào, nên đây là cách khắc phục có thể bằng cách lấy đầu vào được phân tách bằng dấu cách và phân tách trên đó .
Kevin Cruijssen

Tôi đã quyết định rằng các sửa đổi của Kevin Cruijssen phù hợp hơn với kỳ vọng của OP. Cảm ơn!
ngerak

2

C ++ 14 (g ++), 123 118 byte

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

May mắn thay std::stringcó một constructor lặp lại a char. Hãy thử trực tuyến tại đây .

Cảm ơn gastropner đã tiết kiệm 5 byte.

Ung dung:

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

}

Bạn có thể cạo đi 5 byte khác
gastropner 14/11/18

2

C # (Lõi .NET) , 115 107 105 byte

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

Hãy thử trực tuyến!

-8 byte: đã thay đổi b thành một chuỗi giữ "!" S từ bộ đếm int
-2 byte: được đặt b+="!" làm hàm nội tuyến (nhờ Zac Faragher )

Sử dụng một đại biểu hành động để kéo đầu vào và không yêu cầu trả lại.

Ung dung:

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
}

1
bạn có thể lưu 2 byte bằng cách tạo b+="!"nội tuyến với Excelsior if(a[i]>a[i-1])Console.WriteLine("Excelsior"+(b+="!")); Thử trực tuyến!
Zac Faragher



1

Java, 113 byte

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

1

VBA, 114 byte

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

Thật không may, đây không phải là một giải pháp hợp lệ vì nó phụ thuộc vào việc có một biến được xác định rõ ràng , a. Điều đó nói rằng, nếu bạn định nghĩa hàm là một hàm subroutinelấy đầu vào là một biến thể của mảng loại dự kiến, thì bạn có thể biến cách tiếp cận của mình thành một giải pháp hợp lệ. Một phiên bản Golfed của cách tiếp cận đó sẽ trông như thế 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, trong đó các khoảng nghỉ giữa khối mã đại diện cho các dòng mới
Taylor Scott

1

Python 3, 87 byte

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

Hoặc 97 với những điều sau đây:

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

Giả định này đầu vào sẽ ở định dạng:

32105
12345
<null input>
1
1213415
333343

1
Chương trình đầu tiên của bạn không hợp lệ vì nó đưa đầu vào thông qua một biến được xác định trước. Thứ hai là bất khả xâm phạm vì nó không thể phân biệt giữa các số có nhiều chữ số. Tại sao không sử dụng Python 2 hoặc biến nó thành một hàm thay thế?
Jo King

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.