এএসসিআইআই আর্টের সাথে দীর্ঘ বিভাগটি কল্পনা করুন


16

এমন একটি প্রোগ্রাম লিখুন যা ASCII শিল্পের সাথে দীর্ঘ বিভাগকে কল্পনা করে। আপনার পছন্দসই ইনপুট ফর্ম্যাটটি ব্যবহার করে ইনপুটটিতে দুটি পূর্ণসংখ্যা, একটি অঙ্ক এবং ডিনোমিনেটর থাকে।

উদাহরণ:

1234 ÷ 56:

     22
   ----
56|1234
   112
   ---
    114
    112
    ---
      2

1002012 ÷ 12:

     83501
   -------
12|1002012
    96
   ---
     42
     36
     --
      60
      60
      --
        12
        12
        --

0 ÷ 35

   0
   -
35|0

নিয়মাবলী:

  • প্রোগ্রামিং ভাষার বিভাগ অপারেটরের ব্যবহার অনুমোদিত।
  • বড় পূর্ণসংখ্যার সমর্থনও অনুমোদিত।
  • ধারাবাহিকতার জন্য:
    • ভাগফলটি শূন্য হলে ডাইভিং বোর্ডের শেষে একটি একক শূন্য প্রিন্ট করুন।
    • বাকীটি যদি শূন্য হয় তবে এটি মুদ্রণ করবেন না।
    • কোনও সংখ্যায় শীর্ষস্থানীয় জিরো মুদ্রণ করবেন না।
  • শেষে অতিরিক্ত নিউলাইনগুলি এবং ডানদিকে ফাঁকা স্থানগুলি অনুমোদিত।
  • কয়েকটি সংখ্যক চরিত্রের সমাধান সমাধান।

সীমা:

  • 0 <= সংখ্যা <= 10 72 - 1
  • 1 <= ডোনমোনেটর <= 9999999

এটি সূচিত করে যে আউটপুটটি কখনই 80 কলামের চেয়ে বেশি প্রশস্ত হবে না।

পরীক্ষার স্যুট এবং নমুনা বাস্তবায়ন:

আপনি ব্যবহার করতে পারেন দীর্ঘ division.c ( সারকথা আপনার প্রোগ্রাম পরীক্ষা করার জন্য)। এটি আসলে ভিতরে সি প্রোগ্রাম সহ একটি বাশ স্ক্রিপ্ট। পরীক্ষার স্যুটটিতে আপনার প্রোগ্রামটি শুরু করার জন্য এটি স্নিগ্ধ করুন রেফারেন্স বাস্তবায়ন দেখতে নীচে সি কোডটি দেখুন। স্যাম্পল প্রোগ্রাম বা টেস্ট স্যুটে কোনও সমস্যা আছে কিনা তা দয়া করে আমাকে জানান।

$ ./long-division.c 10 7
   1
  --
7|10
   7
  --
   3
$ ./long-division.c
PASS 1234 ÷ 56
PASS 1002012 ÷ 12
PASS 1 ÷ 1
--- snip ---

Score: 35 / 35
All tests passed!

সম্পাদনা করুন: অনুরোধ করে, আমি পরীক্ষার স্যুট ইনপুট এবং প্রত্যাশিত আউটপুটটিকে পাঠ্য ফাইলগুলিতে ( সংক্ষেপে ) রেখেছি put নমুনা ব্যবহার (বাশ):

cat input | while read nd; do
    ./program $nd |
        sed 's/\s*$//' | sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba'
done > output

diff -u expected output

অদ্ভুত সেড কমান্ডগুলি প্রোগ্রাম আউটপুট থেকে নতুন লাইন এবং স্পেসগুলি অনুসরণ করে ফিল্টার আউট করে।


আমি রেফারেন্স বাস্তবায়নের ক্ষেত্রে একটি ছোট্ট ত্রুটি আবিষ্কার করেছিলাম, যথা 123000123000123 ÷ 123 এর ক্ষেত্রে The এটি এখন স্থির।
জোয় অ্যাডামস

2
আমি মনে করি আউটপুট একটি বিট ইংরেজি ভাষাভাষী golfing শ্রোতা প্রতি পক্ষপাতমূলক হল: en.wikipedia.org/wiki/...
hallvabo

আপনি কি এমন একটি ফাইল তৈরি করতে পারেন যা সমস্ত পরীক্ষার প্রত্যাশিত আউটপুট দেখায় এবং এর সাথে লিঙ্ক করে?
মেল্লামব্যাক

@ মেল্লামোকব: যুক্ত হয়েছে, ধন্যবাদ!
জোয়ে অ্যাডামস

গ্রহণের কী হবে? প্রশ্নটি যথেষ্ট পুরানো ...
ওলেহ প্রিপিন

উত্তর:


3

পাইথন 3, 284 257 টি অক্ষর

div.py

n,t=input().split()
d=int(t)
l=lambda x:len(str(x))
s=l(n)
def p(x):print(' '*(l(d)+s-l(x)+1)+str(x))
p(int(n)//d)
p('-'*s)
p(t+'|'+n)
s=z=f=0
while t:
 try:
  while z<d:z=z*10+int(n[s]);s+=1
 except:t=0
 if z*f:p(z)
 if t:f=1;t=z//d*d;p(t);p('-'*l(z));z-=t

ব্যবহার: python3 div.py
ইনপুট: কীবোর্ড থেকে

test.py

import sys
sys.stdin=open('input'); sys.stdout=open('output','w')
for line in open('input'): exec(open('div.py').read())

আউটপুট ম্যাচ প্রত্যাশিত

সংস্করণ:
 1. 284
 2. 257 : s,z,f=0,0,0s=z=f=0; z and fz*f; ভাল লুপিং; কয়েকটি নতুনলাইন সরানো হয়েছে।


2
আপনি পাইথন 3 এবং ইনপুটটির জন্য আদর্শ চেষ্টা করতে পারেন - আদর্শ one.com
আপনি

3

হাস্কেল, 320 টি অক্ষর

l=length
(®)=replicate
p!v=p&show v
p&s=(p-l s)®' '++s
0§_=[];_§l=l
d[m,n]=l c!(read m`div`e):l c&(l m®'-'):c:drop 1(g 0(map(toInteger.fromEnum)m)$1+l n)where
 e=read n;c=n++'|':m
 g r(d:z)p=i§[o!k,o!(i*e),o&(l(show k)®'-')]++g j z o where k=r*10+d-48;(i,j)=k`divMod`e;o=1+p
 g r[]p=r§[p!r]
main=interact$unlines.d.words

সমস্ত পরীক্ষা পাস। যদিও এটি বেশ গল্ফ '- আমার মনে হয় এখানে এখনও আরও কিছু করা বাকি আছে ...


  • সম্পাদনা করুন: (344 -> 339) বিলম্ব readকল, যা কল করার প্রয়োজন হ্রাস করে show, সংক্ষিপ্ত showহিসাবে যথেষ্ট যে sএটি উপযুক্ত নয়।
  • সম্পাদনা করুন: (339 -> 320) স্ট্রিং ফিল্ড ফর্ম্যাটিং ফাংশনগুলি পুনরায় লিখেছেন

ঝরঝরে! আমি 344 টি অক্ষর সহ একটি হাস্কেল সমাধান করেছি, তবে এটি পোস্ট করি নি। এছাড়াও, আমি জানতাম না আপনি অপারেটরগুলির জন্য (ছাড়া -XUnicodeSyntax) ইউনিকোড প্রতীক ব্যবহার করতে পারেন ।
জোয়ে অ্যাডামস

3

জাভাস্ক্রিপ্ট (400 394 418 )

function d(n,d){t=parseInt;p=function(v){return(s+v).substring(v.length)};a=function(v,c){return v.replace(/\d/g,c)};w='\n';q=b=o=c=e='';s=a(d,' ')+' ';f=true;i=-1;z='0';while(++i<n.length){s+=' ';if(t(c+=n[i])>=t(d)){q+=r=Math.floor(t(c)/t(d));o+=(!f?p(c)+w:e)+p(''+r*t(d))+w+p(a(c,'-'))+w;c=t(c)%t(d);f=false}else if(!f){q+=z;}c=(c==0)?e:e+c}return p(!q?z:q)+w+p(a(n,'-'))+w+d+'|'+n+w+o+(q?p(c):e)}

দ্রষ্টব্য: এটি প্রতিস্থাপনের c=(c==0)?মাধ্যমে কয়েকটি অক্ষর শেভ করার মতো লোভনীয় মনে হচ্ছে c=!c?, এটি ব্যবহারযোগ্য নয় কারণ এটি ভাসমান পয়েন্ট-সম্পর্কিত ত্রুটিগুলি সৃষ্টি করে।

http://jsfiddle.net/nLzYW/9/

নমুনা কার্যকর:

document.writeln("<pre>");
document.writeln(d("1234","56"));
document.writeln();
document.writeln(d("1002012","12"));
document.writeln();
document.writeln(d("0","35"));
document.writeln();
document.writeln(d("123000123000123","123"));
document.writeln("</pre>");

সম্পাদনা 1 : মাইনর বাগ ফিক্স, অসংখ্য কোড অপ্টিমাইজেশন।

সম্পাদনা 2 : অতিরিক্ত আউটপুট উত্পাদন করে 1/7 দিয়ে বাগ ঠিক করুন


পরীক্ষার স্ক্রিপ্ট একটি সমস্যা প্রকাশ করেছে। d(1,7)(এবং অনুরূপ পরীক্ষাগুলি) কিছুই ছাপানোর পরিবর্তে ডিনোমিনেটরটির পুনরাবৃত্তি করুন। এটি ভুল কারণ এই সংখ্যাটি হরকের সংখ্যাফল গুণফল হতে হবে যা শূন্য।
জোয় অ্যাডামস

সমস্ত পরীক্ষা এখন পাস।
জোয় অ্যাডামস

1

জাভাস্ক্রিপ্ট: (372)

function g(a){for(var c="",e=0;e<a;e++)c=" "+c;return c}function i(a,c){for(var e=a+"/"+c+"\\",j=(""+c).split(""),k="",d=0,b=0;b<j.length;b++){d*=10;d+=parseInt(j[b],10);var f=d>9?b-1:b,h=0;h=Math.floor(d/a);d%=a;f=g(f+a.toString().split("").length);f+=h*a+"\n"+g(b+a.toString().split("").length)+"--\n"+g(b+a.toString().split("").length)+d+"\n";k+=f;e+=h}return e+"\n"+k}

আই (বিভাজক, সংখ্যা) ব্যবহার করে আমন্ত্রণ করুন। কোডগল্ফড জেএস: http://jsfiddle.net/puckedia/EP464/ Ungolfed (ডাচ) জেএস: http://jsfiddle.net/puckedia/M82VM/

দীর্ঘ বিভাগটি ফেরত দেয় (ডাচ ফর্ম্যাটে আমি এটি শিখেছি):

5/25\05
 0
 --
 2
 25
  --
  0

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

document.write("<pre>"+i(5,25)+"</pre>");
document.write("<pre>"+i(7,65669726752476)+"</pre>");

আরে, এটি প্রয়োজনীয় হিসাবে একই নয়!
ওলেহ প্রাইপিন

@ ব্ল্যাকস্পিরিত আমি জানি, আমি এটি সেভাবে শিখেছি।
পুকিপিডিয়া

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