Đọc một dòng thời gian


11

Lấy cảm hứng từ Vẽ một dòng thời gian .

Đưa ra một dòng thời gian của các sự kiện, xuất ngày cho mỗi sự kiện.

Một dòng thời gian sẽ được đưa ra trong mẫu

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

Trong đó dòng đầu tiên hiển thị một điểm đã biết trong thời gian. Năm được biết luôn là ký tự bên dưới chữ số đầu tiên của năm được biết

Bạn có thể giả sử:

  • Trên dòng thời gian, mỗi nhân vật đại diện cho một năm.
  • Sẽ luôn có ít nhất một sự kiện
  • Các sự kiện không phải theo thứ tự
  • Bạn có thể giả sử mọi nhân vật trong phạm vi giữa Avà nhân vật xa nhất đều có mặt
  • Sẽ có nhiều nhất 26 sự kiện
  • Điểm đã biết sẽ không có bất kỳ phần đệm nào ở bên phải
  • Có thể có số âm ở cả điểm đã biết và đầu ra
  • Bạn sẽ không phải xử lý các số lớn hơn 2 ^ 32
  • Bạn sẽ không phải xử lý phạm vi lớn hơn 2 ^ 8
  • Bạn có thể lấy đầu vào là chữ thường thay vì chữ hoa

Bạn nên viết chương trình lấy dòng thời gian ở dạng này và xuất ra các ngày chính theo thứ tự (A, B, C, D ...)

Bạn có thể xuất ra ở dạng thuận tiện nhưng bạn phải lấy đầu vào ở định dạng đã cho.

Các trường hợp thử nghiệm:

    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
... đầu vào ở định dạng đã cho. Đó là? Một chuỗi đơn với một dòng mới? hoặc 2 chuỗi?
edc65

1
2 chuỗi hoặc một chuỗi với một dòng mới
Blue

Câu trả lời:



2

05AB1E , 19 18 byte

Mã số:

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

Giải trình:

ð¢                   # 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

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

Sử dụng mã hóa CP-1252 .


1

JavaScript (ES6), 72

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

Kiểm tra

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

Bash + coreutils, 68

Dòng 1 là đầu vào dưới dạng tùy chọn dòng lệnh được trích dẫn và dòng 2 là đầu vào từ STDIN:

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

1

Perl, 58 + 1 = 59 byte

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

Phá vỡ:

/\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
}

Yêu cầu -nvà miễn phí -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

Bình thường, 22 byte

V+r\AJeSKwJ+xKN-izT/zd

Không, tôi đã không viết điều này trước khi tôi đăng thử thách.

Giải trình:

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

Hãy thử nó ở đây


0

Trăn 3, 118

Man, hôm nay là ngày của câu trả lời Python dài.

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

Perl, 80 79 71 67 byte

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

Cảm ơn @ dev-null cho 12 byte!

($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
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.