Lire une chronologie

11

Inspiré par Dessiner une chronologie .

Étant donné une chronologie des événements, affichez la date de chaque événement.

Un calendrier sera donné sous la forme

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

Où la première ligne montre un moment connu. L'année connue est toujours le caractère sous le premier chiffre de l'année connue

Vous pouvez supposer:

  • Sur la chronologie elle-même, chaque personnage représente un an.
  • Il y aura toujours au moins un événement
  • Les événements ne doivent pas nécessairement être en ordre
  • Vous pouvez supposer que chaque personnage compris entre Aet le personnage le plus éloigné est présent
  • Il y aura au plus 26 événements
  • Le point connu n'aura pas de rembourrage à droite
  • Il peut y avoir des nombres négatifs à la fois au point connu et à la sortie
  • Vous n'aurez pas à gérer des nombres supérieurs à 2 ^ 32
  • Vous n'aurez pas à gérer des plages supérieures à 2 ^ 8
  • Vous pouvez prendre la saisie en lettres minuscules au lieu de majuscules

Vous devez écrire un programme qui prend un calendrier sous cette forme et affiche les dates clés dans l'ordre (A, B, C, D ...)

Vous pouvez produire sous une forme pratique, mais vous devez saisir les données au format indiqué.

Cas de test:

    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]
Bleu
la source
1
... entrée dans le format donné. C'est? Une seule chaîne avec une nouvelle ligne? ou 2 cordes?
edc65
1
2 chaînes ou une chaîne avec un saut de ligne
Bleu

Réponses:

1

Pyth, 16 octets

Prend l'entrée en minuscules au lieu de majuscules.

VS@GJw+-sz/zdxJN
drobilc
la source
2

05AB1E , 19 18 octets

Code:

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

Explication:

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

Essayez-le en ligne!

Utilise l' encodage CP-1252 .

Adnan
la source
1

JavaScript (ES6), 72

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

Tester

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>

edc65
la source
1

Bash + coreutils, 68

La ligne 1 est entrée comme une option de ligne de commande entre guillemets et la ligne 2 est entrée depuis STDIN:

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

Perl, 58 + 1 = 59 octets

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

Panne:

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

Requiert -net gratuit -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--
andlrc
la source
0

Pyth, 22 octets

V+r\AJeSKwJ+xKN-izT/zd

Non, je n'ai pas écrit ceci avant de poster le défi.

Explication:

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

Essayez-le ici

Bleu
la source
0

Python 3, 118

Aujourd'hui, c'est le jour des longues réponses Python.

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)))
Morgan Thrapp
la source
0

Sérieusement, 40 octets

' ,c,;)l@;±)@-(x@;╗@Z`i3╤τ+@┐`MX╜ú∩S`└`M

Essayez-le en ligne!

Explication à venir plus tard après un nouveau golf.

Mego
la source
0

Perl, 80 79 71 67 octets

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

Merci à @ dev-null pour 12 octets!

($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
Poignée de porte
la source