타임 라인 읽기


11

영감을 받아 타임 라인을 그 립니다.

이벤트 타임 라인이 주어지면 각 이벤트의 날짜를 출력하십시오.

타임 라인은 양식으로 제공됩니다

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

첫 번째 줄에 알려진 특정 시점이 표시됩니다. 알려진 연도는 항상 알려진 연도의 첫 번째 숫자 아래 문자입니다.

당신은 가정 할 수 있습니다 :

  • 타임 라인 자체에서 각 문자는 1 년을 나타냅니다.
  • 항상 하나 이상의 이벤트가 있습니다
  • 이벤트가 순서대로 진행될 필요는 없습니다.
  • A가장 먼 문자와 가장 먼 문자 사이의 모든 문자가 있다고 가정 할 수 있습니다
  • 최대 26 개의 이벤트가 있습니다
  • 알려진 점은 오른쪽에 패딩이 없습니다.
  • 알려진 지점과 출력 모두에 음수가있을 수 있습니다.
  • 2 ^ 32보다 큰 숫자를 처리 할 필요가 없습니다.
  • 2 ^ 8보다 큰 범위를 처리 할 필요가 없습니다.
  • 대문자 대신 소문자로 입력 할 수 있습니다

이 형식으로 타임 라인을 작성하고 주요 날짜를 순서대로 출력하는 프로그램을 작성해야합니다 (A, B, C, D ...).

편리한 형식으로 출력 할 수 있지만 주어진 형식으로 입력해야합니다.

테스트 사례 :

    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
... 주어진 형식으로 입력하십시오. 그건? 줄 바꿈이있는 단일 문자열? 아니면 두 줄?
edc65

1
2 개의 문자열 또는 줄 바꿈이있는 문자열
Blue

답변:


1

Pyth, 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

자바 스크립트 (ES6), 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

Pyth, 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

Perl, 80 79 71 67 바이트

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

12 바이트 동안 @ dev-null 에게 감사 합니다!

($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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.