একটি টাইমলাইন আঁকুন


23

তারিখগুলি উপস্থাপন করে এমন পূর্ণসংখ্যার তালিকার একটি ইনপুট দেওয়া হয়, নিম্নলিখিতগুলির মতো একটি ASCII আর্ট টাইমলাইন আউটপুট দেয়:

<----------------------------->
  A     B  C           D    E

উপরের টাইমলাইনটি ইনপুটটির আউটপুট [1990, 1996, 1999, 2011, 2016]। টাইমলাইন সম্পর্কে কয়েকটি বিষয় নোট করুন:

  • আউটপুটটির প্রথম লাইনটি চিহ্ন ( <) এর চেয়ে কম , কয়েকটি ড্যাশ সমান dateOfLastEvent - dateOfFirstEvent + 3(কারণ শেষের তারিখটি অন্তর্ভুক্ত করতে একটি যোগ করতে হবে, এবং তারপরে প্যাডিংয়ের জন্য আরও দুটি) এবং তারপরে একটি চিহ্ন ( >) এর চেয়ে বড় ।

  • আউটপুট-এর দ্বিতীয় লাইনে প্রতিটি ইভেন্টকে অবস্থানে রাখা হয় dateOfEvent - dateOfFirstEvent + 2(শূন্য-সূচকে ধরে নেওয়া)। সুতরাং, প্রথম ইভেন্টটি অবস্থানে রাখা 2হয়েছে, ডানদিকে দুটি অক্ষর <এবং শেষ ইভেন্টটি একইভাবে বামে দুটি অক্ষর >

  • প্রতিটি ইভেন্ট একটি চিঠি দ্বারা প্রতিনিধিত্ব করা হয়। ইভেন্ট 1 হ'ল A, ইভেন্ট 2 হ'ল Bইত্যাদি 26 26 টির বেশি ইভেন্ট কখনই ঘটবে না। আপনি চাইলে ছোট হাতের অক্ষর ব্যবহার করতে পারেন।

  • কোনও পেছনের সাদা স্থান নেই। শুধুমাত্র অতিরিক্ত শ্বেত স্পেসের অনুমতি দেওয়া হ'ল প্রোগ্রামের শেষে একটি অনুবর্তনযোগ্য নতুন লাইন।

তদ্ব্যতীত,

  • ইভেন্টগুলি যথাযথভাবে দেওয়া হয় না। তারিখগুলি এখনও অ্যারেতে তাদের অবস্থান অনুযায়ী লেবেলযুক্ত। উদাহরণস্বরূপ, [2, 3, 1, 5, 4]অবশ্যই আউটপুট এর একটি ইনপুট

    <------->
      CABED
    
  • আপনাকে ইনপুট হিসাবে এক বা একাধিক ইভেন্ট দেওয়া হতে পারে। উদাহরণস্বরূপ, [12345]অবশ্যই আউটপুট এর একটি ইনপুট

    <--->
      A
    
  • আপনি ধরে নিতে পারেন ইনপুটটিতে কখনই সদৃশ তারিখ থাকবে না।

ইনপুটটি হয় হয় পূর্ণসংখ্যা / স্ট্রিংগুলির একটি অ্যারে / তালিকা বা কোনও অ-সংখ্যাগত অক্ষর দ্বারা পৃথককৃত একটি একক স্ট্রিং হিসাবে দেওয়া যেতে পারে। ইনপুট হিসাবে সরবরাহ করা হবে এমন তারিখগুলির মঞ্জুরিযোগ্য ব্যাপ্তি 1 ≤ x ≤ 32767

যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে।

পরীক্ষার কেস:

32767 32715 32716 32750 32730 32729 32722 32766 32740 32762
<------------------------------------------------------->
  BC     G      FE         I         D           J   HA
2015 2014
<---->
  BA
1990 1996 1999 2011 2016
<----------------------------->
  A     B  C           D    E
2 3 1 5 4
<------->
  CABED
12345
<--->
  A

উত্তর:


5

পাইথ, 37 36 35 34 বাইট

:*dlp++\<*\-+3-eJSQhJ">
"mhh-dhJQG

ব্যাখ্যা: (এর জন্য নিউলাইনটি \nসরলতার জন্য প্রতিস্থাপন করা হবে )

:*dlp++\<*\-+3-eJSQhJ">\n"mhh-dhJQG

                                    - autoassign Q = eval(input())
                                    - G = "abcdefghijklmnopqrstuvwxyz"

    p++\<*\-+3-eJSQhJ">\n"          -    print out the first line

            +3-eJSQhJ               -        Get the number of dashes
                 SQ                 -            sorted(Q)
                J                   -           autoassign J = ^
               e                    -          ^[-1]
              -                     -         ^-V
                   hJ               -          J[0]
            +3                      -        ^+3

         *\-                        -       ^*"-"
      +\<                           -      "<"+^
     +               ">\n"          -     ^+"-->\n"
    p                               -    print(^)

 *dl                                -  work out the number of spaces to print
   l                                -   len(^)
 *d                                 -  ^*" "
:                                 G - For i in V: ^[i] = G[i]
                          mhh-dhJQ  -  Work out the positions of the characters
                          m      Q  -  [V for d in Q]
                               hJ   -     J[0]
                             -d     -    d-^
                           hh       -   ^+2

এখানে চেষ্টা করুন!


5

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

param($a)$n,$m=($a|sort)[0,-1];"<$('-'*($b=$m-$n+3))>";$o=,' '*$b;$i=97;$a|%{$o[$_-$n+2]=[char]$i++};-join$o

ইনপুট লাগে $aসেট তারপর $nএবং $mযথাক্রমে ন্যূনতম এবং সর্বাধিক মান। আমরা একটি কোড ব্লক নির্বাহ করে পরবর্তী বিভাগের সাথে টাইমলাইন আউটপুট করি$(...)- অক্ষরের যথাযথ সংখ্যা উত্পন্ন করতে স্ট্রিংয়ের ভিতরে । তারপরে আমরা কেবলমাত্র ফাঁকা স্থান সমেত একই দৈর্ঘ্যের একটি অ্যারে তৈরি করি এবং আমাদের আউটপুট চরিত্রটিকে এতে সেট করি $i

তারপরে, আমরা ইনপুটটি $aদিয়ে লুপ করব |%{...}। প্রতিটি লুপ আমরা উপযুক্ত সেট$o মান । অবশেষে, আমরা -join $oএকসাথে একটি স্ট্রিং গঠন। যেহেতু পাইপলাইনে রেখে গেছে তাই আউটপুট অন্তর্ভুক্ত।

মুছে ফেলার জন্য সম্পাদিত .TrimEnd()কমান্ডটি , এর সর্বশেষ চরিত্রটি $oসর্বদা একটি চিঠি হওয়ার নিশ্চয়তা দেয়।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\draw-a-timeline.ps1 2015,2014,2000
<------------------>
  c             ba

4

সি - 294 287 220 191 184 178 174 বাইট

কিছুটা উন্মাদ কোড দিয়ে স্টার আউট করার পরে আমি কমপক্ষে এটি কিছুটা নামিয়ে রেখেছি ...

দ্রষ্টব্য: প্রথম লুপ প্রয়োজন আছে বাইনারি সঞ্চালনের থেকে ফলে 0 দেয় atoi()উপর argv[0]। যদি তা না হয় তবে এর ফলে বাইনারি (নাম) ইভেন্ট হিসাবে অন্তর্ভুক্ত হবে। অকার্যকর উদাহরণ:

$ 42/program 1 2 3
# 42/program gives 42 from argv[0], fail.

$ 1program 3 2 9
# 1program gives 1 from argv[0], fail.

$ 842 3 2 9
# 842 gives 842 from argv[0], fail.

এটি বৈধ প্রয়োজন কিনা তা নিশ্চিত নয়।

char y[32769];n,m;main(i,a)char**a;{for(;n=atoi(a[--i]);y[n>m?m=n:n]=64+i);for(;!y[++i];);printf("<");for(n=i;i<=m;i+=printf("-"))!y[i]?y[i]=' ':0;printf("-->\n  %s\n",y+n);}

চালান:

./cabed 32767 32715 32716 32750 32730 32729 32722 32766 32740 32762
<------------------------------------------------------->
  BC     G      FE         I         D           J   HA

./cabed 2 1 3 5 4
<------->
  BACED

./cabed 2016
<--->
  A

./cabed 130 155 133 142 139 149 148 121 124 127 136
<------------------------------------->
  H  I  J  A  C  K  E  D     GF     B

Ungolfed:

#include <stdio.h>
#include <stdlib.h>

char y[32769]; /* Zero filled as it is in global scope. */
int n, m;

int main(i, a) 
    char**a; 
{
    /* Loop argv and set y[argv[i] as int] = Letter, (Event name).
     * Set m = Max value and thus last data element in y. */
    for ( ; n = atoi(a[--i]); y[n > m ? m = n : n] = 64 + i)
        ;

    /* i = 0. Find first element in y that has a value. (Min value.) */
    for (; !y[++i]; )
        ;

    printf("<");

    /* Save min value / y-index where data starts to n.
     * Print dashes until y-index = max 
     * Build rest of event string by filling in spaces where no letters.*/
    for (n = i; i <= m; i += printf("-"))
        !y[i] ? y[i] = ' ' : 0;

    printf("-->\n  %s\n", y + n);

    return 0;
}

3

এমএটিএল , 40 41 বাইট

0lY2in:)GtX<-I+(t~32w(ctn45lbX"60hP62hcw

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

0          % array initiallized to 0
lY2        % string 'ABC...Z'
in:)       % input array. Take as many letters as its length
GtX<-I+    % push input again. Duplicate, subtract minimum and add 3
(          % assign selected letter to those positions. Rest entries are 0
t~32w(     % replace 0 by 32 (space)
c          % convert to char
tn45lbX"   % duplicate, get length. Generate array of 45 ('-') repeated that many times
60hP62h    % prepend 60 ('<'), postpend 62 ('>')
c          % convert to char
w          % swap. Implicit display

2

রুবি, 83 টি অক্ষর

->a{n,m=a.minmax
s=' '*(d=m-n+3)
l=?@
a.map{|i|s[i-n+2]=l.next!}
puts ?<+?-*d+?>,s}

নমুনা রান:

irb(main):001:0> ->a{n,m=a.minmax;s=' '*(d=m-n+3);l=?@;a.map{|i|s[i-n+2]=l.next!};puts ?<+?-*d+?>,s}[[32767,32715,32716,32750,32730,32729,32722,32766,32740,32762]]
<------------------------------------------------------->
  BC     G      FE         I         D           J   HA

2

জাভাস্ক্রিপ্ট (ES6), 124

l=>(l.map(v=>r[v-Math.min(...l)]=(++i).toString(36),r=[],i=9),`<-${'-'.repeat(r.length)}->
  `+[...r].map(x=>x||' ').join``)

পরীক্ষা

F=
l=>(l.map(v=>r[v-Math.min(...l)]=(++i).toString(36),r=[],i=9),`<-${'-'.repeat(r.length)}->
  `+[...r].map(x=>x||' ').join``)

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

test= [[32767,32715,32716,32750,32730,32729,32722,32766,32740,32762],
[2015,2014],[1990,1996,1999,2011,2016],[2,3,1,5,4],[12345]]

test.forEach(x=>console.log(x+'\n'+F(x)+'\n'))
<pre id=O></pre>


2

পিএইচপি, 129 126 125 121 117 115 বাইট

আইএসও 8859-1 এনকোডিং ব্যবহার করে।

$l=min([$h=max($z=$argv)]+$z)-3;echo~str_pad(Ã,$h-$l,Ò).~ÒÁõ;for(;$l<$h;)echo chr((array_search(++$l,$z)-1^32)+65);

এটি চালান ( -dকেবল নান্দনিকতার জন্য যুক্ত):

php -r '$l=min([$h=max($z=$argv)]+$z)-3;echo~str_pad(Ã,$h-$l,Ò).~ÒÁõ;for(;$l<$h;)echo chr((array_search(++$l,$z)-1^32)+65);' 1990 1996 1999 2016 2011 2>/dev/null;echo

অবরুদ্ধ সংস্করণ:

// Get the highest input value.
$h = max($z = $argv);

// Get the lowest value, setting the first argument (script name) to the highest
// so it is ignored.
$l = min([$h] + $z);

// Output the first line.
echo "<".str_repeat("-",$h - $l + 3).">\n  ";

// Iterate from $l to $h.
for(;$l <= $h;)
    // Find the index of the current iteration. If found, convert the numeric
    // index to a char. If not found, print a space.
    echo ($s = array_search($l++, $z)) ? chr($s+64) : " ";
  • লুপ থেকে অগ্রণী স্থান মুদ্রণ করে পরিবর্তন করে 3 বাইট সংরক্ষণ করা <= হয়েছে <
  • এর str_padপরিবর্তে ব্যবহার করে একটি বাইট সংরক্ষণ করা হয়েছেstr_repeat
  • 0 (রূপান্তর করতে বিটওয়াইজ লজিক ব্যবহার করে 4 বাইট সংরক্ষণ করেছেনfalse ) কে 32 এ এবং 0 থেকে 97 এর উপরে সমস্ত কিছু। তারপরে সেই সংখ্যাটিকে চরে রূপান্তর করুন।
  • ফলন অস্বীকার বর্ধিত হওয়া ASCII ব্যবহার করে 4 বাইট সংরক্ষিত <, -,> এবং সম্পর্কে newline
  • আগের পরিবর্তে প্যাডিংয়ের পরে স্ট্রিং উপেক্ষা করে 2 বাইট সংরক্ষণ করা হয়েছে

1

পার্ল, 109 বাইট

+1 এর জন্য অন্তর্ভুক্ত -p

$l=A;s/\d+/$h{$&}=$l++/ge;($a,$z)=(sort keys%h)[0,-1];$o.=$h{$_}//$"for$a..$z;$_='<'.'-'x($z-$a+3).">$/  $o"

স্টিডিনে স্থান ইনপুট আশা করে: স্থান পৃথক সংখ্যক। উদাহরণ:

$ echo 2016 2012 2013 | perl -p file.pl
<------->
  BC  A

কিছুটা পঠনযোগ্য:

$l=A;                                   # Intialize $l with the letter A
s/\d+/$h{$&}=$l++/ge;                   # construct %h hash with number->letter
($a,$z) = (sort keys %h)[0,-1];         # grab min/max numbers
$o .= $h{$_} // $" for $a..$z;          # construct 2nd line: letter or space
$_= '<' . '-' x ($z-$a+3) . ">$/  $o"   # construct 1st line, merge both lines to $_ output

1

পাইথন 2, 173 172 182 বাইট

পাইথন যেহেতু এখনও নিখোঁজ রয়েছে তাই এখানে আমার প্রথম পোস্ট:

import sys
d=dict([(int(v),chr(65+i))for(i,v)in enumerate(sys.argv[1:])])
k=sorted(d.keys())
f=k[0]
s=k[-1]-f+3
o=list(" "*s)
for i in k:o[i-f+2]=d[i]
print "<"+"-"*s+">\n"+"".join(o)

মূল চেহারা নিম্নলিখিত:

import sys

dates = dict([(int(v), chr(65+i)) for (i,v) in enumerate(sys.argv[1:])])
keys = sorted(dates.keys())
first = keys[0]
out_size = keys[-1] - first + 3
out = list(" " * out_size)
for date in keys: out[date - first + 2] = dates[date]
print "<" + "-" * out_size + ">\n" + "".join(out)

1
import sysআপনার গল্ফ সংস্করণে আপনার দরকার ।
মেগো

ঠিক আছে, আমি করব, কিন্তু গল্ফযুক্ত সংস্করণগুলিতে আমি কোনও আমদানি কখনই দেখিনি, তাই আমি কেবল এটি ছেড়ে দিয়েছি
ব্লাডিডি

0

গ্রোভি, 106 99 টি অক্ষর

{n=it.min()
o=[l="A"]
it.each{o[it-n]=l++}
"<${"-"*(it.max()-n+3)}>\n  "+o.collect{it?:" "}.join()}

নমুনা রান:

groovy:000> print(({n=it.min();o=[l="A"];it.each{o[it-n]=l++};"<${"-"*(it.max()-n+3)}>\n  "+o.collect{it?:" "}.join()})([32767,32715,32716,32750,32730,32729,32722,32766,32740,32762]))
<------------------------------------------------------->
  BC     G      FE         I         D           J   HA
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.