एक समय रेखा पढ़ना


11

एक समय रेखा ड्रा द्वारा प्रेरित ।

घटनाओं की समय-सीमा को देखते हुए, प्रत्येक घटना के लिए दिनांक आउटपुट करें।

फॉर्म में एक टाइमलाइन दी जाएगी

    2000
--AF-C-------E--D---B--

जहां पहली पंक्ति समय में एक ज्ञात बिंदु दिखाती है। ज्ञात वर्ष हमेशा ज्ञात वर्ष के पहले अंक के नीचे का वर्ण होता है

आप मान सकते हैं:

  • समयरेखा पर ही, प्रत्येक वर्ण एक वर्ष का प्रतिनिधित्व करता है।
  • हमेशा कम से कम एक घटना होगी
  • घटनाओं को क्रम में नहीं होना चाहिए
  • आप हर चरित्र को सीमा के बीच मान सकते हैं Aऔर सबसे दूर का चरित्र मौजूद है
  • इसमें सबसे अधिक 26 कार्यक्रम होंगे
  • ज्ञात बिंदु के दाईं ओर कोई पैडिंग नहीं होगी
  • ज्ञात बिंदु और आउटपुट दोनों में नकारात्मक संख्याएं हो सकती हैं
  • आपको 2 ^ 32 से बड़ी संख्या को संभालना नहीं पड़ेगा
  • आपको 2 ^ 8 से बड़ी श्रेणियों को संभालना नहीं पड़ेगा
  • आप अपरकेस के बजाय लोअरकेस अक्षरों के रूप में इनपुट ले सकते हैं

आपको एक प्रोग्राम लिखना चाहिए जो इस रूप में समयरेखा लेता है और क्रम में प्रमुख तिथियों (ए, बी, सी, डी ...) को आउटपुट करता है।

आप एक सुविधाजनक रूप में आउटपुट कर सकते हैं, लेकिन आपको दिए गए प्रारूप में इनपुट लेना होगा।

परीक्षण के मामलों:

    2000
--AF-C-------E--D---B--
[1998, 2016, 2001, 2012, 2009, 1999]

     10
--C-AB--D
[9, 10, 7, 13]

     0
--ABCDEFG--
[-3, -2, -1, 0, 1, 2, 3]

          5
--ABCDEFG--
[-3, -2, -1, 0, 1, 2, 3]

1
... दिए गए प्रारूप में इनपुट। अर्थात्? एक नई लाइन के साथ एक स्ट्रिंग? या 2 तार?
edc65

1
2 स्ट्रिंग्स या एक स्ट्रिंग एक नई रेखा के साथ
ब्लू

जवाबों:


1

पायथ, 16 बाइट्स

अपरकेस के बजाय लोअरकेस अक्षरों के रूप में इनपुट लेता है।

VS@GJw+-sz/zdxJN

2

05AB1E , 19 18 बाइट्स

कोड:

ð¢>UágF²N>.bkX-¹+,

स्पष्टीकरण:

ð¢                   # Count the number of spaces before the year starts
  >                  # Increment by 1
   U                 # Pop and store this into X
    á                # Keep the alphabetic characters of the second input
     g               # Take the length
      F              # For N in range(0, length), do...
       ²             #   Take the second input
        N>           #   Push N and increment by 1
          .b         #   Converts 1 to A, 2 to B, etc.
            k        #   Find the index of that letter in the second input
             X       #   Push X
              -      #   index - X
               ¹     #   Get the first input, which contains the year
                +    #   Add to the difference of the index
                 ,   #   Pop and output the sum

इसे ऑनलाइन आज़माएं!

CP-1252 एन्कोडिंग का उपयोग करता है ।


1

जावास्क्रिप्ट (ईएस 6), 72

(a,b,r=[])=>[...b].map((x,i)=>r[parseInt(x,36)-10]=+a+i-a.search`\\d`)&&r

परीक्षा

f=(a,b,r=[])=>[...b].map((x,i)=>r[parseInt(x,36)-10]=+a+i-a.search`\\d`)&&r

console.log=x=>O.textContent+=x+'\n'

;[['    2000','--AF-C-------E--D---B--'],
['     10','--C-AB--D'],
['     0','--ABCDEFG--'],
['          5','--ABCDEFG--']]
.forEach(t=>{
  var a=t[0],b=t[1],r=f(a,b)
  console.log(a+'\n'+b+'\n'+r+'\n')
})  
<pre id=O></pre>


1

बैश + कोरुटिल्स, 68

पंक्ति 1 इनपुट के रूप में उद्धृत कमांड लाइन विकल्प है और लाइन 2 STDIN से इनपुट है:

s="${1//[0-9]}"
fold -1|nl -v$[$1-${#s}]|sort -k2|sed '/-$/d;s/.$//'

1

पर्ल, 58 + 1 = 59 बाइट्स

/\d/;$b=<>;for$c(A..Z){($z=index$b,$c)>-1&&say$_+$z-$-[0]}

टूट - फूट:

/\d/;                    # Match first digit in input string, this will set $-[0]
$b=<>;                   # Read next line (--A--CB--...) into $b
for $c (A..Z){           # Iterate over A, B, C, ... Z
  ($z=index$b,$c) >-1 && # If the character is found inside $b
  say $_+$z-$-[0]        #   then print
}

आवश्यकता है -nऔर मुफ्त -M5.010:

# Added line breaks for each test case
$ perl -nE'/\d/;$b=<>;for$c(A..Z){($z=index$b,$c)>-1&&say$_+$z-$-[0]}' tl
1998
2016
2001
2012
2009
1999

9
10
7
13

-3
-2
-1
0
1
2
3

-3
-2
-1
0
1
2
3
$ cat tl
    2000
--AF-C-------E--D---B--
     10
--C-AB--D
     0
--ABCDEFG--
          5
--ABCDEFG--

0

पायथ, 22 बाइट्स

V+r\AJeSKwJ+xKN-izT/zd

नहीं, मैंने चुनौती पोस्ट करने से पहले यह नहीं लिखा था।

स्पष्टीकरण:

                       - autoassign z = input()
 +r\AJeSKwJ            -  create range of letters
        Kw             -      autoassign K = input()
      eS               -     sorted(K)[-1] (get the biggest character)
     J                 -    autoassign J = ^
  r\A                  -   range("A", ^)
 +        J            -  ^ + J
V                      - for N in ^: V
               -izT/zd - Get the number at the start
                izT    -   int(z, 10)
               -       -  ^-V
                   /zd -   z.count(" ")
           +           - V+^
            xKN        -  K.index(N)

इसे यहाँ आज़माएँ


0

अजगर 3, 118

यार, आज लंबे अजगर जवाब का दिन है।

def f(p,l):o=sum(x<'0'for x in p);e={x:i-o+int(p[o:])for i,x in enumerate(l)if'@'<x};return list(map(e.get,sorted(e)))


0

पर्ल, 80 79 71 67 बाइट्स

($a=<>)=~/\d/;$b=<>;say$a+$_-$-[0]for grep{$_+1}map{index$b,$_}A..Z

12 बाइट्स के लिए @ देव-नल का धन्यवाद !

($a=<>)=~/\d/;  # read first line of input, find position of first digit
                # (saved in the $- variable)
$b=<>;          # read the second line
                                           A..Z  # generate range 'A','B',...
                            map{index$b,$_}      # find index for each
                  grep{$_+1}                     # select only those != -1
              for                                # foreach of remaining...
say$a+$_-$-[0]                                   # calculate proper date
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.