এএসসিআইআইয়ের শাসক প্রজন্ম


11

চ্যালেঞ্জটি হ'ল নিম্নলিখিত বিন্যাসে একটি ASCII অক্ষর গণনা রুলার তৈরি করা:

+-------------------------------------------------------------------------+
||    |    |    |    |    |    |    |    |    |    |    |    |    |    |  |
|0         10        20        30        40        50        60        70 |
|                                                                         |
+-------------------------------------------------------------------------+

10 এর যে কোনও একাধিকের জন্য শাসকের দৈর্ঘ্য স্কেলেযোগ্য হওয়া উচিত।

নিয়মাবলী:

  • শাসক অবশ্যই অনুভূমিক হতে হবে।
  • যাক, জিনিসগুলি সহজ রাখার জন্য, শাসককে 1000 চিহ্ন অবধি কাজ করতে হবে, সমস্ত সংখ্যা বাম-সারিবদ্ধ, চূড়ান্ত সংখ্যার পরে একটি স্থান
  • শূন্য দৈর্ঘ্যের সাথে কোনও শাসকের কাছে জিজ্ঞাসা করা উচিত এনআরআর মুদ্রণ করা
  • Gণাত্মক সংখ্যার ডান-প্রান্তিক সংখ্যাসমূহের সাথে বিপরীত শাসক (-90, -80, -70, ...) মুদ্রণ করা উচিত অন্যথায় উপরের মত ঠিক একই বিন্যাসে

এবং, কেবল কনসোলে মুদ্রণ করা ভাল

প্রস্তুত, সেট, গল্ফ!


প্রোগ্রামটি কীভাবে জানতে পারে যে কত দিন শাসককে তৈরি করতে হবে? এটি কি এসটিডিনে একটি নম্বর হিসাবে সরবরাহ করা হয়?
PhiNotPi

হ্যাঁ, যথারীতি আমার ধারণা!
ব্যবহারকারী 2398029

1
শাসককে কি অনুভূমিক বা উল্লম্ব হতে হবে? যদি এটি অনুভূমিক হয়, তবে আমরা কি সর্বোচ্চ 80 টি অক্ষর ধরে নিতে পারি, বা এর পরিবর্তে মোড়ানো এড়াতে আমরা কোনও ফাইলের সাথে এটি আউটপুট দেব? বা stdout লেখার সময় আমাদের কি কনসোল / টার্মিনালের আকার পরিবর্তন করতে হবে?
ব্লেজার

5
কোড-গল্ফের অন্যতম প্রধান বিষয় হ'ল সমস্যাটি অবশ্যই 100% নির্বিঘ্নভাবে নির্দিষ্ট করা উচিত ( FAQ দেখুন )। আসল আউটপুটে সৃজনশীলতার জন্য খুব কম জায়গা আছে, কারণ সৃজনশীলতা কোডের মধ্যে রয়েছে। ভবিষ্যতে, দয়া করে প্রশ্ন পোস্ট করার আগে এই সমস্ত সম্ভাব্য
কেসগুলির মধ্যে

3
আপনি দয়া করে মন্তব্যগুলিতে নির্দিষ্ট বিধি অন্তর্ভুক্ত করতে চ্যালেঞ্জটি সম্পাদনা করতে পারেন?
flesk

উত্তর:


8

পাইথন - 227 232

সম্পূর্ণ স্পেসিফিকেশন সমর্থন করে

সম্পাদনা: জেনারেটর এক্সপ্রেশন উন্নত।

ডান সারিবদ্ধ নেতিবাচক সংখ্যাগুলি সমর্থন করা একটি বিস্ময়কর কোডের যোগ করে।

b,p,d,w,='|+- '
g=input
s=''.join(('%'+d[:i>0]+'10s')%i+['',9*w][i==0] for i in range(g(),g()+1,10)).strip()+w
m,n=s[0]==d and s.find(w)-1,len(s)
t=p+n*d+p
print['\n'.join([t,b+(w*m+'|    '*n)[:n]+b,b+s+b,b+n*w+b,t]),'NaR'][n<9]

নমুনা আউটপুট:

-30 30

+-----------------------------------------------------------------+
|  |    |    |    |    |    |    |    |    |    |    |    |    |  |
|-30       -20       -10         0         10        20        30 |
|                                                                 |
+-----------------------------------------------------------------+

-30 -30

NaR

100 150

+------------------------------------------------------+
||    |    |    |    |    |    |    |    |    |    |   |
|100       110       120       130       140       150 |
|                                                      |
+------------------------------------------------------+

-1000 -950

+--------------------------------------------------------+
|    |    |    |    |    |    |    |    |    |    |    | |
|-1000      -990      -980      -970      -960      -950 |
|                                                        |
+--------------------------------------------------------+

10

গতিশীল ভাষাগুলি আজ পরাজিত করতে যাচ্ছে না, তবে যাইহোক ...

হাস্কেল, 341

import Data.List
main=interact$unlines.m.map read.words
m[l,r]|r>l=ᴛ.("┌│││└":).(++["┬   ─","┐│││┘"]).ʀ.t.ʀ.t.takeWhile((>4).length).ᴛ$[c"┬",c"│    ",[l,l+10..r]>>=h.show,c" ",c"─"]|True=["NaR"]
h s=p s$length s;p s@('-':_)l=r(6-l)ꜱ++s++r 4ꜱ;p s l=r 5ꜱ++s++r(5-l)ꜱ
ᴛ=transpose;ʀ=reverse;r=replicate;c=cycle
ꜱ=' ';t l@(c:o)|c!!2==ꜱ=t o|True=l

আমি আরও ভাল দেখাচ্ছে ইউনিকোড বক্স অঙ্কন চরগুলি সহ প্রকৃত ASCII অক্ষরগুলি বিনিময় করার স্বাধীনতা গ্রহণ করেছি।

$ echo "-50 30" | runhaskell  def0.hs
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│  │    │    │    │    │    │    │    │    │    │    │    │    │    │    │    │    │  │
│-50       -40       -30       -20       -10         0         10        20        30 │
│                                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────┘

2
শাসককে খুব, খুব সুন্দর দেখাচ্ছে।
ব্যবহারকারী 2398029

3

পাইথন 2.7, 342 266 260 অক্ষর

a,b,c,d,m='+|- \n'
def f(y):x=map(str,(range(0,y+1,10)if y>0 else range(y,1,10)));h,g=len(x[-1])+1,len(x)-1;u=a+(c*10)*g+c*h+a;return'NaR'if y==0 else u+m+b+(b+d*4)*2*g+b+d*(h-1)+b+m+b+''.join(i.ljust(10)for i in x[:-1])+x[-1].ljust(h)+b+m+b+(d*10)*g+d*h+b+m+u

প্রতিটি লাইন স্ট্রিংয়ের একটি টুপল ফেরত দেয় , যা আপনি কোনও ফাইল মুদ্রণ বা সংরক্ষণ করতে পারেন (কনসোলটি 70০ এর চেয়ে বেশি দৈর্ঘ্যের জন্য আমি পছন্দ করি কনসোলটি এটিকে মোড়কের সাথে মিশ্রিত দেখায়)

অনুমান yকরা একটি স্ট্রিং (raw_input () এন পাইথন, অথবা sys.argv [1] আপনি ডাকা মাধ্যমে cmd কমান্ড করতে ইচ্ছুক হলে) একটি পূর্ণসংখ্যা (যেমন ইনপুট () 2.x বা int- এ সঙ্গে (ইনপুট ()) 3.x মধ্যে )

আমি আরও একটি নমনীয় হতে একটি ফাংশন তৈরি

সম্পাদনা: হ্রাস 266 টি অক্ষর। আর একটি টুপল দেয় না, পরিবর্তে একটি স্ট্রিং। এখন আর্গুমেন্ট হিসাবে স্ট্রিংয়ের পরিবর্তে একটি পূর্ণসংখ্যা নেয়

সম্পাদনা 2: 260 অক্ষরে হ্রাস, একক লাইন ফাংশন

দ্রষ্টব্য: negativeণাত্মক সংখ্যাগুলি পরিচালনা করে, তবে ন্যায়সঙ্গততা দেয় না (ন্যায়সঙ্গততাটিকে আমি সত্যিই হিন্টিং করি না যাই হোক না কেন এটি খুব গুরুত্বপূর্ণ


অথবা কেবল একটি নন-লাইন ব্রেকিং কনসোল ব্যবহার করুন (যেমন টার্মিনেটর )।
ঘড়ির

@ বামপন্থী সম্পর্কে আমি নিশ্চিত ছিলাম যে এ জাতীয় কোনও অস্তিত্ব আছে
ব্লেজার

নির্বিশেষে, কোনও শাসককে কেবল অর্থহীন করে তোলার জন্য পৃথক প্ল্যাটফর্ম ইনস্টল করা, যেখানে-যে কেউ ব্যবহার করতে পারে এমন কোনও রিটার্ন মান তৈরি করা (কোনও ফাইলে লিখুন ইত্যাদি) আরও সর্বজনীন
ব্লেজার

@ ব্লাজার, আপনার শেলের কি পাইপ এবং পুনঃনির্দেশ নেই?
পিটার টেলর

1

পাওয়ারশেল , 256 253 233 225 222 বাইট

param($a,$b)('NaR',$($d=@{}
$a..$b|%{$d.$_=' ';0..($l=($s="$($_-$_%10)").Length-1)|%{$d[$_+$s-$l*(0-gt$s)]=$s[$_]}}
$d.Keys|sort|%{$e+='-';$p+='|    '[$_%5];$r+=$d.$_;$w+=' '}
@"
+$e-+
|$p |
|$r |
|$w |
+$e-+
"@))[$a-lt$b]

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

কম গল্ফড:

param($a,$b)
(
    'NaR',
    $(
        # {key, value} := {position, digit|minus|space}
        $d=@{}
        $a..$b|%{
            $d.$_=' '

            # draw a nearest left number
            $n=$_-$_%10
            $s="$n"
            $l=$s.Length-1
            0..$l|%{
                $d[$_+$s-$l*(0-gt$s)]=$s[$_]
            }
        }

        # edge, points, ruler, whitespaces
        $d.Keys|sort|%{
            $e+='-'
            $p+='|    '[$_%5]
            $r+=$d.$_
            $w+=' '
        }

        # output the multiline string
@"
+$e-+
|$p |
|$r |
|$w |
+$e-+
"@
    )
)[$a-lt$b]

0

পাইথন, 291 241 টি অক্ষর

একটি খুব সহজ পদ্ধতির। আমি নিশ্চিত এটির অনেক উন্নতি করা যায়।
আমি মন্তব্যে গাইডলাইনগুলি অনুসরণ করার চেষ্টা করেছি, তবে আমি নেতিবাচক সংখ্যাগুলি সমর্থন করি না (এটি একটি রসিকতা ছিল, আমি আশা করি)।
এটি একটি প্রোগ্রাম, স্ট্যান্ডার্ড আউটপুটে শাসককে মুদ্রণ করে। যদি আপনার পর্দা যথেষ্ট প্রশস্ত হয় তবে এটি দীর্ঘ দীর্ঘ শাসকদের সমর্থন করা উচিত।

import sys
def p(b,a="|"):print a+b+a
j="".join
l=int(sys.argv[1])//10*10
if l:
    d=j(["%-10d"%n for n in range(0,l,10)])+"%d "%l
    L=len(d)
    h="-"*L
    p(h,"+")
    p(j(["|    "[n%5] for n in range(L)]))
    p(d)
    p(" "*L)
    p(h,"+")
else: print "NaR"

আপনি আরও কয়েকটি চরিত্রের বাইরে গল্ফ করতে পারেন আমি এখানে 12 টি চরিত্রের
গর্ডন বেইলি

ধন্যবাদ @ গর্ডনবাইলি, তবে ইতিমধ্যে ইতিমধ্যে একটি বিজয়ী আছেন, যা আমার কোডের চেয়ে কম এবং সম্পূর্ণ স্পেসিফিকেশন সমর্থন করে।
ugoren

0

সি ++, 392

এটি উইন্ডোজ কনসোল ব্যবহার করে প্রোগ্রাম করা হয়েছে, অতএব আমি সর্বাধিক রুলার আকার 70 বেছে নিয়েছি, এটি আরও বড় কোনও কিছুর জন্য ক্র্যাশ করবে। নেতিবাচক সংখ্যা (-70 অবধি) এবং 0 সঠিকভাবে পরিচালনা করা হয়।

#include<ios>
#define q s[2][i
#define v ,memset(&s
char g,o,i,n,s[5][80];int main(int a,char**b){a=atoi(b[1])v,32,400);n=0<a;for(a=abs(a)v[0][1],45,a+3)v[4][1],45,a+3);i<a+4;++i)o=i-n,!(o%5)?s[1][n?i:i+3]='|',(o%2-1?(n?q]=i/10+48,i>9?q+1]=48:0:((a-i)>9?q+2]=(a-i)/10+48,q+1]=45:0,q+3]=48)):0):0;for(;g-5;g++)for(s[g][a+4]=s[g][i=0]=g&g-4?'|':43;i-80;i++)printf(a?"%c":g+i?"":"NaR",s[g][i]);}

0

পাইথন - 208

(ডান সারিবদ্ধ নেতিবাচক সংখ্যা সমর্থন করে না)

 l,u=map(int,raw_input().split())
 n=u-l
 q="+%s+\n"
 q=q+"|%s|\n"*3+q
 print q%('-'*n,(''.join("|    "for i in range(n)))[:n],(''.join("{:<10d}".format(i)for i in range(l,u,10)))[:n],' '*n,'-'*n)if n>0 else"NaR"

আমি মনে করি আমার প্রিয় কৌশলটি ছিল এমন স্ট্রিংগুলি তৈরি করা যা প্রয়োজনের চেয়ে দীর্ঘ দীর্ঘ এবং তারপরে সেগুলি কেটে ফেলা, উদাহরণস্বরূপ:

 ''.join("|    "for i in range(n)))[:n]

আমি কেবল চাই বাম-প্রান্তিককরণের জন্য আরও সংক্ষিপ্ত স্ট্রিং ফর্ম্যাটিং বিকল্প ছিল (যদি না এমন একটি থাকে যা আমি জানিনা)


0

পার্ল 5.14, 198 224 অক্ষর

সম্ভবত আরও অনেক ছোট করা যেতে পারে, তবে এখানে প্রথম দ্বিতীয় প্রচেষ্টা (পাঠযোগ্যতার জন্য লাইন ব্রেক সহ withোকানো হয়েছে):

$l=shift||die"NaR\n";
@n=grep!($_%10),$l>0?0..$l:$l..0;
$l=9-length$n[$#n];
@f=('-'x10,'|    'x2,'@'.'<'x9,' 'x10);
@f=map$_ x@n,@f;
map$_=~s/.{$l}$//,@f;
eval"format=\n+$f[0]+\n|$f[1]|\n|$f[2]|\n\@n\n|$f[3]|\n+$f[0]+\n.\n";
write

সম্পাদনা: ইনপুট যখন থাকে 0এবং "নেআর" দিয়ে মারা যাওয়ার জন্য সম্পাদিত এবং নেতিবাচক ব্যাপ্তিকে সমর্থন করে।

সম্পাদনা 2: আমার এ বিষয়ে আরও কাজ করার সুযোগ হয়নি, এবং আমি এখনই নেতিবাচক সংখ্যার নিয়মের জন্য সঠিকভাবে প্রান্তিককরণ লক্ষ্য করেছি, যা আমার কোড সমর্থন করে না, তাই আমি মনে করি যদি অন্য সমাধানটি উত্তর হিসাবে চিহ্নিত করা উচিত তবে সময়সীমা পৌঁছেছে


@ লুইজম: আমার উত্তরটি সমস্ত নিয়মের সাথে খাপ খায় না। সম্ভব হলে আর একটি উত্তর বেছে নেওয়া উচিত।
ফলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.