Wardর্ধ্বমুখী এবং আরও বেশি গৌরব!


15

এই চ্যালেঞ্জটি স্টান লি, যা 95 বছর বয়সে মারা গেছে তাকে শ্রদ্ধা জানাতে ( আরও একটি ) কাজ করতে পারে।

স্টান লি আমাদের একটি অমূল্য উত্তরাধিকার এবং একটি মজাদার ক্যাচ শব্দ: এক্সেলসিওর রেখে গেছেন । সুতরাং তিনি যা বলেছেন তার অর্থের ভিত্তিতে এখানে একটি ছোট চ্যালেঞ্জ রয়েছে :

অবশেষে, "এক্সেলসিয়ার" অর্থ কী? "Wardর্ধ্বমুখী এবং আরও বেশি গৌরব অর্জনের দিকে!" আমি যখনই টুইট শেষ করি তখনই এটাই আমি চাই! এক্সেলসীয়র!

চ্যালেঞ্জ

অ-নেতিবাচক পূর্ণসংখ্যার একটি সিরিজ দেওয়া, Excelsior!প্রতিটি সংখ্যার সাথে একটি লাইনের আউটপুট আগের সময়ের চেয়ে বড় হয়।

বিধি

  • ইনপুটটি অ-নেতিবাচক পূর্ণসংখ্যার একটি অ্যারে হবে।
  • আউটপুট শব্দের সাথে লাইন থাকবে Excelsior(কেস ব্যাপার না) এরপরে !ক্রমবর্ধমান সংখ্যার বর্তমান রানের দৈর্ঘ্য যতগুলি হবে। আপনি স্ট্রিংগুলির একটি অ্যারেও ফিরিয়ে দিতে পারেন।
  • সাইটের নিয়ম অনুসারে ইনপুট এবং আউটপুট ফর্ম্যাটগুলি নমনীয়, সুতরাং এগুলি আপনার ভাষা ফর্ম্যাটগুলির সাথে খাপ খাইয়ে নিতে দ্বিধা বোধ করবেন। আপনি যদি প্রয়োজন হয় তবে আপনি রেখাগুলির শেষে বা এমনকি অতিরিক্ত নতুন লাইনগুলি পাঠ্যের পরে বা তার আগেও যুক্ত করতে পারেন।

উদাহরণ

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

এটি , তাই প্রতিটি ভাষার পক্ষে সংক্ষিপ্ততম কোডটি জয় পেতে পারে!


ouflak ধরেছে পূর্ণসংখ্যাগুলি 1 ডিজিট দীর্ঘ, এটি ঠিক আছে
ASCII-

1
@ এএসসিআইআই- কেবল সত্যই নয়। আমি জানি না যে LUA এর সাথে সীমাবদ্ধতা রয়েছে কিনা, তবে এটি যদি না হয় তবে ওউফ্ল্যাকের কোনও দৈর্ঘ্যের পূর্ণসংখ্যাকে পার্স করা উচিত।
চার্লি

@ চারলি আমি লুয়া জানি না, তবে যদিও এটি ভার্জোজ, উদাহরণস্বরূপ একটি স্পেস-সীমিত ইনপুট এবং এভাবে বিভাজন করা সম্ভব ।
কেভিন ক্রুইজসেন

আমি এটি তাকান। কৌশলটি হ'ল উভয় পরিস্থিতিতে পরিচালনা করতে সক্ষম handle
এউফ্লাক

সি বা জাভাস্ক্রিপ্টের মতো এফডব্লিউআইডাব্লু ভাষাগুলি যাইহোক, কেবল তার যথার্থতার (9/16 ডিজিট) এর মধ্যে পূর্ণসংখ্যাগুলি পরিচালনা করবে।
ব্যবহারকারী 202729

উত্তর:


9

জাভাস্ক্রিপ্ট (ES6), 58 54 বাইট

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

এটি অনলাইন চেষ্টা করুন!

মন্তব্য

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

পূর্ববর্তী মানটি সংরক্ষণ করতে কেন একটি [] পুনরায় ব্যবহার করা নিরাপদ

সম্ভাব্য তিনটি মামলা রয়েছে:

  • যদি একটি[ ] খালি থাকে তবে এর কলব্যাক ফাংশনটি .map()মোটেও চালু করা হবে না এবং আমরা খালি একটি অ্যারে পাই, একটি খালি স্ট্রিং প্রদান করে।
  • যদি একটি[ ] এর ঠিক একটি উপাদান এক্স থাকে তবে এটি প্রথম (এবং অনন্য) পরীক্ষার সময় সেই উপাদানটির সাথে জোর করা হয় a < (a = c)। সুতরাং, আমরা এক্স<এক্স পরীক্ষা করছি যা মিথ্যা। আমরা একটি শূন্য স্ট্রিংযুক্ত অ্যারে পাই, আবার খালি স্ট্রিং উপস্থাপন করি।
  • যদি একটি[ ] টিতে বেশ কয়েকটি উপাদান NaNথাকে তবে এটি প্রথম পরীক্ষার সময় জোর করা হয় a < (a = c)। অতএব, ফলাফলের falsy আর কোনটা মৃত্যুদন্ড কার্যকর সে সম্পর্কে আরম্ভের হয় গুলি একটি খালি স্ট্রিং করুন - যা আমরা কি চাই। প্রথম অর্থবহ তুলনা ২ য় পুনরাবৃত্তিতে ঘটে।

5

পাইথন 2 , 84 83 81 70 68 বাইট

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

এটি অনলাইন চেষ্টা করুন!

-২ বাইটস, কেবলমাত্র এসসিআইআই-কে ধন্যবাদ



@ এএসসিআইআই-শুধুমাত্র ধন্যবাদ :)
টিফিল্ড

ফাংশনগুলি খুব দীর্ঘ :(
ASCII- কেবল

ভাল, পুনরাবৃত্তির পন্থা কমপক্ষে
ASCII-


5

05 এ বি 1 ই , 26 24 23 বাইট

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

-2 ধন্যবাদ বাইট @Kroppeb

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

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

আমার এই 05AB1E টিপটি দেখুন (বিভাগটি কীভাবে স্ট্রিংগুলি সংকোচিত করবেন? ) কেন .•1Š¥èò²•তা বোঝার জন্য "excelsior"


2
আমি সত্যিই 05AB1E জানি না তবে আপনি কি এর 0Kgসাথে এক্সচেঞ্জ করতে পারবেন না O?
ক্রপবেব

@ ক্রপ্পেব আহ, সম্পূর্ণরূপে এটি মিস করেছেন, তবে হ্যাঁ, আমি সত্যিই পারি ধন্যবাদ! :)
কেভিন ক্রুইজসেন


4

জাভা -8 118 113 বাইট

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

পড়তে সহজ :

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
এখানে কিছু golfs 10 বাইট সংরক্ষণ করতে: 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+="!":"";}এটি অনলাইনে চেষ্টা করুন ( 108 বাইট ) (জাভা 10+)
কেভিন ক্রুইজসেন

ধন্যবাদ কেভিন ক্রুজসেন!
কোডারক্রোক

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 বাইট )
অলিভিয়ার গ্রাগোয়ার

আমার ইস্যু ঠিক করা: এর ++eপরিবর্তে e++কমপক্ষে একটি !মুদ্রণ করা দরকার।
অলিভিয়ার গ্রোগোয়ার

1
@ কেভিন ক্রুইজসেন আপনার গল্ফের ছোট ছোট টাইপ আপনাকে একটি বাইট বাড়ানোর জন্য: e=...?e+"!":পরিবর্তে e=...?e+="!":
অলিভিয়ার গ্রাগোয়ার



4

সি (জিসিসি / ক্ল্যাং), 106 99 97 বাইট

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

গ্যাস্ট্রোপনারকে ধন্যবাদ2 বাইট গল্ফ ।

এটি এখানে অনলাইনে চেষ্টা করুন

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

}

আমি একটি সমাধান তৈরি করতে শুরু করেছিলাম, তবে আপনার এতটা কাছে এসেছি যে আলাদা উত্তর হিসাবে আমার পোস্ট করা কিছুটা নির্বোধ অনুভব করেছিল। তবুও, কয়েকটি পার্থক্য আপনাকে কয়েকটি বাইট সংরক্ষণ
গ্যাস্ট্রোপনার 21 '21

@ গ্যাস্ট্রোপনার আপনার সংস্করণ ভাগ করে নেওয়ার জন্য ধন্যবাদ। আমি আপনার উন্নতিগুলি একত্রিত করেছি এবং এটি আরও 99 বাইটে গল্ফ করেছি। কেবল যদি আমাদের খালি অ্যারে হ্যান্ডেল করার প্রয়োজন না হয় - অন্যথায় এটি আপনার লুপের স্টাইলটি ব্যবহার করে 97 বাইট হবে ।
ওব্লান্স

4

জাপট -R, 25 22 বাইট

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

চেষ্টা করে দেখুন

কামিলকে ধন্যবাদ 3 বাইট সংরক্ষণ করা হয়েছে

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


-Rপতাকা আসলে প্রয়োজন নেই, চ্যালেঞ্জ বলেছে তুমি আউটপুট স্ট্রিং একটি অ্যারে পারেন।
কামিল দ্রাকারী

ভাল লাগল, ধন্যবাদ, কমিলড্রাকারী। আমি sliceআমার প্রথম পাসটি ব্যবহার করে একটি সমাধান চেষ্টা করেছিলাম কিন্তু এটি যখন খুব দীর্ঘ কাজ করে তখন তা বরখাস্ত করে দিয়েছি। আপনার অনুরোধের সাথে এখনই এটিতে ফিরে আসছি, আমি অনুমান করি যে এটির সাথে আমার আটকে থাকা উচিত ছিল 'কারণ আমিও এটি 22 এ নেমে এসেছি।
শেগি


3

জাভা 8, 106 বাইট

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

এটি অনলাইন চেষ্টা করুন!

(এই s... পুনরায় নিয়োগের জন্য পুনরায় নিয়োগ )


আপনি (s="")+s=>(s="")
ওবালেন্স

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 বাইট ) স্প্রে বাইটে সরান s=""
অলিভিয়ার গ্রাগোয়ার


3

আর , 111 বাইট

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

এটি অনলাইন চেষ্টা করুন!

আরও উন্নত আর শ্রদ্ধা পাওয়া যায় এখানে - আমি খুব উপর স্থির ছিল sequenceএবং rle


এটি কিছু ফাঁকা লাইন দেয় না, তবে 86 বাইট?
জে.ডো

2
@ জে.ডো ডাং, এটি আরও ভাল। আমি নিজে থাকলে আমি পোস্ট করতাম।
জিউসেপ

3

জেলি , 16 বাইট

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

একটি মোনাডিক লিঙ্ক, যা অক্ষরের তালিকাগুলির একটি তালিকা উপস্থাপন করে।

এটি অনলাইন চেষ্টা করুন! (পাদলেখগুলি নতুন লাইনের সাথে যোগ দেয়)

কিভাবে?

<Ɲṣ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

জাপট , 22 বাইট

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

এটি অনলাইন চেষ্টা করুন!

সরলীকৃত উদাহরণ সহ ব্যাখ্যা:

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

পাওয়ারশেল, 69 বাইট

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

কম গল্ফ পরীক্ষা স্ক্রিপ্ট:

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

আউটপুট:

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

1
এটি সেখানে রয়েছে, আমি কাজ করার জন্য একটি ল্যাগ পয়েন্টার পাওয়ার চেষ্টা করছিলাম তবে কীভাবে তা ভাবতে পারিনি।
ভেস্কাহ


2

রেটিনা , 55 বাইট

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

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

\d+
*

অ্যানারিতে রূপান্তর করুন।

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

প্রক্রিয়া ওভারল্যাপিং ম্যাচগুলি ডান থেকে বামে (যদিও ম্যাচগুলি বাম থেকে ডানে তালিকাভুক্ত করা হয়)। এর অর্থ হ'ল আমরা এক নম্বরে প্রতিটি সংখ্যার সাথে মিল রাখতে পারি এবং ম্যাচটি রান শুরুর দিকে প্রসারিত হয়। প্রতিটি ম্যাচ আরও সীমাবদ্ধ যে প্রতিটি অতিরিক্ত ম্যাচ করা সংখ্যাটি আগের ম্যাচ করা অতিরিক্ত সংখ্যার চেয়ে কম হওয়া উচিত, বা কোনও অতিরিক্ত সংখ্যা এখনও মেলানো না থাকলে প্রথম সংখ্যাটি অবশ্যই কম।

L$...
Excelsior$#1*!

প্রতিটি ম্যাচের জন্য, Excelsiorরান হিসাবে অতিরিক্ত হিসাবে সংখ্যা হিসাবে আউটপুট পছন্দ।


2

পাইথ, 32 বাইট

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

এটি এখানে অনলাইনে চেষ্টা করুন , বা এখানে সমস্ত পরীক্ষার কেস একবারে যাচাই করুন

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

লুয়া , 88 87 83 82 96 95 113 বাইট

মূল প্রশ্নের চেতনার সাথে সংযুক্ত আপডেটের জন্য কেভিন ক্রুইজসেনকে ধন্যবাদ Thanks

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

এটি অনলাইন চেষ্টা করুন!


1
দুঃখিত তবে আপনাকে নিয়ম অনুসারে বিস্ময়বোধক চিহ্নটি ছাপাতে হবে (ক্রমবর্ধমান সংখ্যার বর্তমান দৈর্ঘ্যের এক বিস্মরণ চিহ্ন)।
চার্লি

সমস্যা নেই. ভাবুন আমি এখানে যতটা করতে
পেরেছি ততক্ষণ

1
আমি লুয়াকে খুব ভাল করে জানি না, তবে এখানে আপনার কোডের জন্য ঠিক করা তাই এটি সমস্ত পরীক্ষার কেস সঠিকভাবে চালায় বর্তমানে আপনি কেবল একটি "মুদ্রণ করুন!" প্রতিবারের চেয়ে কোনও সংখ্যা আগেরটির চেয়ে বেশি হয়, তবে আপনি যখন এটিকে পুনরায় সেট করবেন না তখন যখন এটি হয় না। আরও সম্ভবত গল্ফ করা যেতে পারে, তবে যেহেতু আমি কখনই লুয়ায় গল্ফ করিনি আমি কেবলমাত্র ছোটখাটো গল্ফ দিয়ে এটি ঠিক করার দিকে মনোনিবেশ করেছি। পিএস: নিশ্চিত হন না যে ইনপুটটি সর্বদা একক অঙ্কে
ধরেছে

2
যেহেতু @ চার্লি চ্যালেঞ্জ বর্ণনার নীচে একটি মন্তব্যে উল্লেখ করেছেন যে বহু সংখ্যার সংখ্যা ইনপুট হিসাবে নেওয়া সম্ভব হওয়া উচিত, তাই এখানে স্পেস-ডিলিমিটেড ইনপুট গ্রহণ করে এটির উপর বিভক্ত হয়ে একটি সম্ভাব্য সংশোধন করা উচিত
কেভিন ক্রুইজসেন

আমি সিদ্ধান্ত নিয়েছি যে কেভিন ক্রুইজসেন পরিবর্তনগুলি ওপি-র প্রত্যাশার সাথে আরও ইনলাইন। ধন্যবাদ!
ওফ্লাক করুন

2

সি ++ 14 (জি ++), 123 118 বাইট

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

ভাগ্যক্রমে std::stringএমন একটি নির্মাতা রয়েছে যা পুনরাবৃত্তি করে a char। এটি এখানে অনলাইনে চেষ্টা করুন

5 বাইট সংরক্ষণের জন্য গ্যাস্ট্রোপনারকে ধন্যবাদ ।

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

}


2

সি # (.নেট কোর) , 115 107 105 বাইট

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

এটি অনলাইন চেষ্টা করুন!

-8 বাইট: b একটি ইন কাউন্টার থেকে -2 বাইট: সেট থেকে একটি স্ট্রিং হোল্ডিং "!" এর পরিবর্তিত হয়েছে
b+="!" একটি ইনলাইন ফাংশন হিসাবে ( জ্যাক ফারা’র ধন্যবাদ জানাই )

ইনপুটটি টানতে এবং কোনও রিটার্নের প্রয়োজন না হওয়ার জন্য অ্যাকশন প্রতিনিধি ব্যবহার করে ।

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
}

1
b+="!"এক্সেলসিয়রের সাথে ইনলাইন তৈরি করে আপনি 2 বাইট সংরক্ষণ করতে পারেন if(a[i]>a[i-1])Console.WriteLine("Excelsior"+(b+="!")); অনলাইনে চেষ্টা করুন!
জ্যাক ফারা’র



1

জাভা, 113 বাইট

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

ভিবিএ, 114 বাইট

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

দুর্ভাগ্যক্রমে, এটি বৈধ সমাধান নয় কারণ এটি একটি সুস্পষ্টভাবে সংজ্ঞায়িত পরিবর্তনশীল a,। এটি বলেছে, আপনি যদি ফাংশনটিকে এমন কোনও হিসাবে সংজ্ঞায়িত করেন subroutineযা প্রত্যাশিত ধরণের অ্যারের বৈকল্প হিসাবে ইনপুট নেয়, তবে আপনি আপনার পদ্ধতির বৈধ সমাধানে রূপান্তর করতে পারেন। এই পদ্ধতির একটি গল্ফড সংস্করণ দেখতে হবে 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, যেখানে কোড ব্লকের মধ্যে বিরতি নতুন লাইনের প্রতিনিধিত্ব করে
টেলর স্কট

1

পাইথন 3, 87 বাইট

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

বা নিম্নলিখিত সহ 97:

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

এটি ধরে নেয় ইনপুটগুলি ফর্ম্যাটে থাকবে:

32105
12345
<null input>
1
1213415
333343

1
আপনার প্রথম প্রোগ্রামটি অবৈধ কারণ এটি একটি পূর্বনির্ধারিত ভেরিয়েবলের মাধ্যমে ইনপুট নেয়। দ্বিতীয়টি ইনভালিউড কারণ এটি একাধিক অঙ্কের সংখ্যার মধ্যে পার্থক্য করতে পারে না। পাইথন 2 ব্যবহার করবেন না বা পরিবর্তে এটিকে কোনও ফাংশনে রূপান্তর করবেন ?
জো কিং

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.