ডিজিটাল ত্রিভুজ সহ এটি যোগ করুন


28

ভাল, সত্যিই এটি সংক্ষিপ্ত।

দশমিক পূর্ণসংখ্যার (0-9) অবিচ্ছিন্ন তালিকার জন্য একটি প্রোগ্রাম বা ফাংশন লিখুন এবং শীর্ষে ইনপুট তালিকা সহ একটি নীচের দিকে নির্দেশিত "ত্রিভুজ" আউটপুট দেয় যেখানে প্রথম লাইনের পরে প্রতিটি অঙ্ক দুটি অঙ্কের যোগফল হয় এটির উপরে 10 টি মডেল।

উদাহরণস্বরূপ, ইনপুটটির [7, 5, 0, 9]আউটপুট রয়েছে

7 5 0 9
 2 5 9
  7 4
   1

কারণ 2হল (7 + 5) mod 10, 5হল (5 + 0) mod 10, 9হল (0 + 9) mod 10, সব পথ ইত্যাদি 1হচ্ছে (7 + 4) mod 10

তালিকায় যদি কেবল একটি আইটেম থাকে তবে আউটপুটটি ইনপুটটির সাথে মেলে; যেমন একটি ইনপুট [4]ফলন

4

এখানে কিছু অতিরিক্ত উদাহরণ দেওয়া হল:

[0]

0

[1, 2]

1 2
 3

[8, 7]

8 7
 5

[0, 0]

0 0
 0

[1, 4, 2]

1 4 2
 5 6
  1

[0, 1, 0]

0 1 0
 1 1
  2

[1, 0, 0, 0]

1 0 0 0
 1 0 0
  1 0
   1

[1, 2, 3, 4]

1 2 3 4
 3 5 7
  8 2
   0

[1, 2, 3, 5, 8]

1 2 3 5 8
 3 5 8 3
  8 3 1
   1 4
    5

[9, 2, 4, 5, 3, 2, 2]

9 2 4 5 3 2 2
 1 6 9 8 5 4
  7 5 7 3 9
   2 2 0 2
    4 2 2
     6 4
      0

আউটপুট নোট করুন:

  • প্রথম লাইনে শীর্ষস্থানীয় স্থান নেই have
  • প্রতিটি পরবর্তী লাইনের আগের রেখার চেয়ে আরও একটি নেতৃস্থানীয় স্থান রয়েছে।
  • অঙ্কগুলি একটি একক স্থান দ্বারা পৃথক করা হয়।
  • প্রতিটি লাইনে একটি করে ট্রেলিং স্পেস থাকার অনুমতি রয়েছে।
  • একক alচ্ছিক ট্রেলিং নিউলাইন থাকতে পারে।
  • আপনার অবশ্যই দশমিক সংখ্যা (0 থেকে 9) এর জন্য অক্ষরগুলি ব্যবহার করতে হবে।

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। টাইব্রেকার এর আগের উত্তর।


1
প্রথমে আমি "ডিজিটাল ট্রমা" হিসাবে শিরোনামটি পড়েছিলাম
বিড়াল

উত্তর:


24

BrainF ** কে, 396 391 বাইট

>+>>++++[-<++++++++>]->,----------[++++++++++.>>++++++++[-<++++<------>>]<.,----------]-<+[-<+]->>+[-<<<<<++++++++++.[-]>[-<+>>.<]<[->+<]>+>>>[[->+]->>+<<<+[-<+]->]>+[-<->[[->+]->+>>+<<<<+[-<+]->]<+>->+[->+]->>[->+<]>+>++++++++++>>-<<[-<-[>>]<]<->>>+[-<<<+>>>[-<->]<+++++++++>>>+]++++++++[-<++++<++++++>>]<<<[-<<<<+[-<+]-<+>>+[->+]->>>>+<]>.>.[-]<[-]<<<[->+<]<<+[-<+]>+]>>[-]<<<-<+[-<+]->>+]

আমি এটি করার প্রলোভনকে প্রতিহত করতে পারি না। কমপক্ষে ত্রিভুজটি নীচু দিকের নীচে।

ইনপুটটি একক নিউলাইন অনুসারে সংখ্যাসূচক অক্ষরের একটি স্ট্রিং হিসাবে আসে।

আউটপুট প্রতিটি লাইনে একক চলমান স্থান থাকবে।

উদাহরণ:

$ bf sd.bf
010
0 1 0 
 1 1 
  2 

$ bf sd.bf
123456
1 2 3 4 5 6 
 3 5 7 9 1 
  8 2 6 0 
   0 8 6 
    8 4 
     2 

$ bf sd.bf
9245322
9 2 4 5 3 2 2 
 1 6 9 8 5 4 
  7 5 7 3 9 
   2 2 0 2 
    4 2 2 
     6 4 
      0 

ব্যাখ্যা

যেহেতু কোডটি কার্যকরী দৃষ্টিকোণ থেকে ব্যাখ্যা করা বরং কঠিন, তাই আমরা পরিবর্তে এটি বিভিন্ন সময় টেপের অবস্থার দৃষ্টিকোণ থেকে দেখতে পারি। এখানে মূল ধারণাটি হ'ল আমাদের আউটপুট ত্রিভুজটি শক্তভাবে প্যাকযুক্ত (বিএফের জন্য, যাইহোক) অ্যারে হিসাবে সূচনা করা হয় যা লুপের প্রতিটি পুনরাবৃত্তিতে 1 দ্বারা আকারে সঙ্কুচিত হয়। আরেকটি গুরুত্বপূর্ণ চিন্তাভাবনা হ'ল আমরা 255কোনও "স্থানধারক" নির্দেশ করতে ব্যবহার করি যা আমরা টেপটিতে সন্ধান করতে পারি।

আরম্ভ

এটি সবচেয়ে সহজ পদক্ষেপ। প্রোগ্রামটির শুরুতে, আমরা নিম্নলিখিতগুলি সম্পাদন করি:

>+>>++++[-<++++++++>]->

এটি টেপটিকে নিম্নলিখিত অবস্থায় জোর করে (যেখানে >N<টেপের উপরের পয়েন্টারের অবস্থান নির্দেশ করে)

[ 0 1 32 255 >0< 0 0 ...]

এখানে প্রথম সংখ্যাটি একটি "বাফার" অবস্থান। আমরা এটি দীর্ঘমেয়াদী ভিত্তিতে ব্যবহার করতে যাচ্ছি না, তবে সামান্য ক্রিয়াকলাপকে আরও সহজ করার জন্য এবং চারপাশের ডেটা অনুলিপি করার জন্য এটি দরকারী।
দ্বিতীয় সংখ্যাটি হ'ল স্পেসের সংখ্যা যা আমরা প্রতিটি লাইনের শুরুতে প্রথম লাইনের পরে শুরু করে আউটপুট করব । প্রথম লাইনে কোনও শীর্ষস্থানীয় স্থান নেই।
তৃতীয় নম্বরটি আমরা আউটপুট আউট স্পেস অক্ষর।
চতুর্থ সংখ্যাটি একজন স্থানধারক 255, যাতে আমরা তুলনামূলকভাবে সহজেই এই অবস্থানে ফিরে যেতে পারি can

ইনপুট

এই অবস্থান থেকে, আমরা সমস্ত অক্ষর পড়ব। এই পদক্ষেপের শেষে আমরা আশা করি নিম্নলিখিত পরিস্থিতিতে থাকব:

[ 0 1 32 255 a b c d e f ... >255< 0 0 ... ]

যেখানে a b c d e f ...সংখ্যার অক্ষরের স্ট্রিংটি নির্দেশ করে যা ইনপুট ছিল (নতুন লাইন নয়)।

আমরা নিম্নলিখিত সহ এটি সম্পন্ন:

,----------[++++++++++.>>++++++++[-<++++<------>>]<.,----------]-

এটির কিছু সংক্ষিপ্তসার রয়েছে। প্রথমত, আমরা প্রতিটি চরিত্রকে পাওয়ার সাথে সাথে আউটপুট দেব এবং তারপরে একটি স্থান আউটপুট করব। দ্বিতীয়ত, আমরা টেপটিতে ASCII মানটি অনুলিপি করতে চাই না, আমরা আসল সংখ্যার অঙ্কটি অনুলিপি করতে চাই। তৃতীয়ত, আমরা যখন একটি নতুন লাইনটি হিট করি এবং তখন নিজেকে একটি ভাল জায়গায় রেখে যাই আমরা থামতে চাই।
আমাদের ইনপুট বলুন 6723। তারপরে, প্রথমটি পড়ার পরে, 6আমাদের টেপটি এমন দেখাচ্ছে:

[ 0 1 32 255 >54< 0 0 ...]

আমরা পরীক্ষা করে দেখি যে এই মানটি 10(একটি ASCII নিউলাইন) এর সাথে সমান নয় ,----------[++++++++++। তারপরে আমরা মানটি মুদ্রণ করি এবং একই সাথে ইনপুট মান থেকে 48 বিয়োগ করে এবং এর পাশের মানটিতে 32 যোগ করে (আমাদের >>++++++++[-<++++<------>>]<) এখানে রেখে চলেছি:

[ 0 1 32 255 6 >32< 0 ...]

লক্ষ্য করুন কিভাবে এই প্রক্রিয়া চলাকালীন আমরা অনুমান করতে পারেন যে, আমাদের ইনপুট ডানদিকে ভাবে সংখ্যা বসিয়ে 0 রয়েছে - এর মানে হল যে আমরা কোনো পূর্বের অবস্থায় বিনষ্টকারী বিপদের মধ্যে না থাকেন, আমরা গণনা করতে ডানদিকে মান ব্যবহার 6 * 8এবং 4 * 8
এখন আমরা কেবলমাত্র উত্পন্ন স্থানের অক্ষর আউটপুট করি এবং একটি নতুন ইনপুট গ্রহণ করি, সেখানে গণনা করা স্থান মুছে ফেলা। অবশেষে, ইনপুটটি একটি নতুন লাইন দ্বারা বন্ধ হয়ে যাবে এবং লুপটি প্রস্থান করবে, 255যেখানে নতুন লাইনটি থাকত ( ,----------]-)। এটি দ্বিতীয় স্থানধারক চরিত্রটি আমরা টেপ নেভিগেট করতে ব্যবহার করব। আমাদের দৃশ্যের এই মুহুর্তে, আমাদের টেপটি হ'ল:

[ 0 1 32 255 6 7 2 3 >255< 0 0 ... ]

হিসাব

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

আমরা এখন প্রথম নেভিগেট করতে এই কৌতুক ব্যবহার 255স্থানধারক: <+[-<+]-। এটি কার্যকরভাবে একটিটির জন্য বাম দিকে টেপটি অনুসন্ধান করে 255, এর মধ্যে কোনও কিছুই পরিবর্তন করে না। এখন যেহেতু আমরা পয়েন্টারটি সরিয়ে নিয়েছি, আমরা আমাদের প্রস্থান শর্তটি পরীক্ষা করতে পারি: তালিকায় যদি কেবল একটি অঙ্ক থাকে তবে ডানদিকে ঘর দুটি ফাঁকা স্থান ধরে রাখবে 255। সুতরাং, আমরা এটির বিরুদ্ধে পরীক্ষা করে একটি লুপ শুরু করি:>>+[-<<

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

-<<<<<++++++++++.[-]>[-<+>>.<]<[->+<]>+>>>

যা আমাদের এই অবস্থায় ফেলে দেয়:

[ 0 2 32 255 >6< 7 2 3 255 0 0 0 0 0 0 ]

আমাদের পরবর্তী পদক্ষেপটি তালিকার প্রথম স্থানটি অনুলিপি করে, দ্বিতীয় স্থানধারককে ছাড়িয়ে গেছে 255:

[[->+]->>+<<<+[-<+]->]

আমরা মূলত আমাদের স্থানধারকগুলির মধ্যে পিছনে পিছনে হাঁপিয়ে 255আমাদের এখানে রেখে:

[ 0 2 32 255 >0< 7 2 3 255 0 6 0 0 ... ]

আমরা এখন একটি লুপ শুরু করি, বাকী তালিকার মধ্য দিয়ে পুনরাবৃত্তি করে, আঘাত করলে থামি 255:>+[-<

এই মুহুর্তে, আমাদের তাত্ক্ষণিক বাম দিকে সংখ্যাটি সর্বদা 0 থাকে So সুতরাং, কারণ আমরা তাদের ভালবাসি, আমরা 255সেখানে একটি স্থানধারককে পপ করব যাতে তালিকায় আমাদের জায়গায় ফিরে আসতে পারি। পরের পদক্ষেপটি তালিকার দ্বিতীয় স্থানটি আশেপাশের লোকেশনগুলিতে স্থানান্তর করা যেখানে আমরা প্রথম স্থানধারককে পেরিয়ে প্রথম স্থানটিতে চলে এসেছি 255। এই পদক্ষেপগুলি নিম্নলিখিত দ্বারা সম্পাদিত হয়:

->
[[->+]->+>>+<<<<+[-<+]->]

আমাদের এখানে রেখে চলেছেন : [ 0 2 32 255 255 >0< 2 3 255 7 6 7 0 ] এখন, উভয়ই 6এবং 7এমন একটি জায়গায় চলে গেছে যেখানে গণনা হতে পারে occur আমাদের দুটি কপি দরকার 7কারণ তালিকার পরবর্তী নম্বরটিও এটির প্রয়োজন হবে। 7অবিলম্বে পরে 255এই উদ্দেশ্যে কাজ করে, যেহেতু অন্যান্য 7হিসাব খায় করা হবে না।

প্রথমে আমরা দুটি অঙ্ক যুক্ত করব:

<+>->+[->+]->>
[->+<]>

আমাদের এখানে রেখে:

[ 0 2 32 255 0 255 2 3 255 7 0 >13< 0 ]

পদক্ষেপের পরবর্তী সংমিশ্রণটি সবচেয়ে জটিল। আমাদের দেখতে হবে যে সংখ্যাটি আমরা নির্দেশ করছি সেটি 10 ​​এর চেয়ে বড় কিনা এবং যদি এটি হয় তবে আমরা বিয়োগ করি 10। বাস্তবে, আমরা যা করি তা হ'ল আমরা তা থেকে 10 বিয়োগ করে দেখি যে এটি 0বিয়োগের কোনও বিন্দুতে আঘাত করে কিনা । যদি এটি হয় তবে আমরা 10পরে আবার যুক্ত করব। এর শেষে, আমাদের যোগফল 10 হওয়া উচিত।

Prepare a 10 to the right
+>++++++++++
Leave yet another 255 for a loop condition later
>>-<<
If the number is greater than 10 end up one space to the left
else one space to the right
[-<-[>>]<]<->
Check if the previous 255 is two spaces to the right and if it is
add 10 back to our sum--we've subtracted too much
>>+[-<<<+>>>[-<->]<+++++++++>>>+]

এই মুহুর্তে, আমরা লক্ষ্যটি অর্জন করেছি। আমাদের যোগফল 10 আছে! এছাড়াও, সংখ্যাটি 10 ​​এর চেয়ে বেশি ছিল কি না, আমরা এখানেই শেষ করব:

[ 0 2 32 255 0 255 2 3 255 7 0 3 0 0 >0< ]

আমাদের পরবর্তী লক্ষ্যগুলি হল এই নতুন অঙ্কটি আউটপুট করা, একটি স্থানের সাথে এটি অনুসরণ করা এবং এটি আবার আমাদের তালিকায় ইনজেক্ট করা। আমরা আমাদের পূর্ববর্তী কৌশলগুলি - 255শপিং এবং 48আমাদের যোগে যুক্ত করার মাধ্যমে এটি করি, তাই আমি এটিকে বিস্তারিতভাবে কভার করব না।

++++++++[-<++++<++++++>>]
<<<[-<<<<+[-<+]-<+>>+[->+]->>>>+<]
>.>.

এবং আমরা এখানে আছি: [ 0 2 32 255 3 255 2 3 255 7 0 0 51 >32< ] লক্ষ্য করুন কীভাবে আমরা 255আমাদের নতুন ইনজেকশনের পরে একটি অতিরিক্ত স্থানধারক রেখেছি 3যাতে তালিকায় স্থানটি হারাতে না পারি। এই মুহুর্তে, আমাদের আউটপুটটি আমাদের যোগফল এবং তার স্থান রয়েছে, তাই আমাদের পরিষ্কার করে এমন অবস্থায় ফিরে যেতে হবে যেখানে এই লুপের পরবর্তী পুনরাবৃত্তি কাজ করবে। আমাদের আমাদের 51এবং 32কোষগুলি পরিষ্কার করতে হবে, 7একবারে ডান দিকে সরানো এবং আমাদের তালিকা প্লেসোল্ডারের কাছে নেভিগেট করতে হবে যাতে আমরা শুরু করতে পারি।

[-]<[-]<<<[->+<]<<+[-<+]

এখন, আমরা এখানে আছি: [ 0 2 32 255 3 >0< 2 3 255 0 7 0 ... ]
আমাদের পরবর্তী পুনরাবৃত্তির জন্য আমরা ঠিক যেখানে থাকতে চাই। 255 জন্য পরীক্ষা করুন এবং এগিয়ে যান! ( >+])

যখন আমরা লুপটি থেকে নামিয়ে ফেলি, আমরা একটি সম্পূর্ণ নতুন তালিকা রাখতে যাচ্ছি - পূর্ববর্তী তালিকা থেকে যোগগুলি তৈরি করে। প্রথমবারের মতো, এটির মতো দেখতে:

 [ 0 2 32 255 3 9 5 0 >0< ]

এখন আমরা আমাদের নতুন তালিকায় সেই পুরো প্রক্রিয়াটি পুনরাবৃত্তি করতে চাই, তাই আমরা 255নীচে বাম দিকে নেমে সমস্ত কিছু শুরু করব! আমাদের সাথে কিছুটা সাফাই করা দরকার >>[-]<<, এবং তারপরে আমাদের স্থানধারককে বাদ দিয়ে দিন <-। তারপরে, আমরা ইনপুট দেওয়ার পরে ঠিক ঠিক একই জায়গায় এসেছি, যাতে আমরা একই চেকগুলি করে পালিয়ে যেতে পারি: <+[-<+]->>+এবং গুম্ফ! আমরা আমাদের সম্পূর্ণ লুপ পেয়েছি! আমাদের যা দরকার বন্ধ বন্ধনী, এবং যখন এটা শেষ আমরা তাই আমরা কাজ সম্পন্ন হয় ইতিমধ্যে আউটপুট সবকিছু করেছি: ]


উপায় দ্বারা ফিরে স্বাগত :) আপনি 2015 সাল থেকে উত্তর দেয় নি: o
ক্যালভিনের শখ

1
@ হেলকাহোম্বা আমি জানি! আমি এখনও কিছুটা ফ্রিকোয়েন্সি সহ পরিদর্শন করি, তবে আমি কেবল এইটির জন্য কোডটি রোধ করতে পারিনি। এটি ভাষার জন্য নিখুঁত :)
ব্রেইনস্টিল

9
"বিএফের জন্য পারফেক্ট" এমন একটি ধারণা যা আমাকে elludes :-)
লুইস মেন্ডো

7

জেলি , 20 19 18 বাইট

Ṛ+2\Ṗп%⁵z”@ṚZGḟ”@

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

পটভূমি

সংখ্যা উত্পন্ন করা জেলি মধ্যে সোজা। আউটপুটটি কিছুটা জটিল।

জেলির একটি অন্তর্নির্মিত গ্রিড পরমাণু রয়েছে ( G) যা কলামগুলির মধ্যে সারি এবং ফাঁকা স্থানগুলির মধ্যে নতুন লাইনের সাথে একটি 2D তালিকা প্রদর্শন করে। আমরা 2D সংখ্যার অ্যারে নিই (প্রতিটি সারি বিপরীত দিয়ে উত্পন্ন) এবং ভরাট মান সহ এটি স্থানান্তর করি @। ফলস্বরূপ অ্যারেটি ফেরত দেওয়ার পরে এবং পুনরায় স্থান পরিবর্তন করার পরে, Gনিম্নোক্ত ফলন প্রয়োগ করুন।

9 2 4 5 3 2 2
@ 1 6 9 8 5 4
@ @ 7 5 7 3 9
@ @ @ 2 2 0 2
@ @ @ @ 4 2 2
@ @ @ @ @ 6 4
@ @ @ @ @ @ 0

পছন্দসই ত্রিভুজাকার আকৃতিটি পেতে, আমাদের কেবলমাত্র ফিল ভ্যালুটি সরিয়ে ফেলতে হবে।

কিভাবে এটা কাজ করে

Ṛ+2\Ṗп%⁵z”@ṚZGḟ”@  Main link. Argument: A (list of integers)

Ṛ                   Reverse A.
    Ṗп             While there's more than one element:
 +2\                  Compute the pairwise sum.
                    Collect all intermediate results in a list.
       %⁵           Take all resulting integers modulo 10.
         z”@        Transpose with fill value '@'.
            Ṛ       Reverse the order of the rows.
             Z      Transpose.
              G     Grid.
               ḟ”@  Filter; remove the fill value.

5

পাইথ - 18 বাইট

j.e+*dkjdbP.ueM+Vt

টেস্ট স্যুট

j                                       Join by newlines
 .e                                     Loop over seq in var b and index in var k
  +                                     Concatenate
   *dk                                  Space repeated k times
    jdb                                 Join b by spaces
  P                                     [:-1] to get rid of empty line
   .u             (Q implicit)          Cumulative fixed point over input (var G)
    eM                                  Mod 10 mapped over list
     +V                                 Vectorized addition
      t(G implict)                      G[1:]
      (G implict)                       Vectorize cuts this off to G[:-1]

5

পাইথন 3.5, 74 72 71 বাইট

f=lambda L,*S:f([sum(x)%10for x in zip(L,L[1:print(*S,*L)]or 1)],'',*S)

ইনপুট হল পূর্ণসংখ্যার (যেমন f([1,2,3,5,8])) তালিকা, আউটপুটটি STDOUT। %10এবং এটা সত্য যে mapআয় একটি mapপাইথন 3 বস্তুর একটি বিট বিরক্তিকর, যার অর্থ আমরা করতে পারবো না map(lambda*x:sum(x)%10,L,L[1:])বা অনুরূপ।

ফাংশন ত্রুটিযুক্ত, কিন্তু ততক্ষণে আউটপুট সম্পূর্ণ হয়ে যাবে। স্টিকের জন্য একটি ভাল জায়গা খুঁজে পেয়ে -x বাইটের জন্য @ এসএসটকে ধন্যবাদ print


3
আমার 3.5 ইনস্টল নেই তবে এটি কাজ করা উচিত:f=lambda L,*S:f([sum(x)%10for x in zip(L,L[1:print(*S,*L)]or 1)],'',*S)
xsot

1
@ এক্সসট এটি ... একটি আশ্চর্যজনক ব্যবহার None!
Sp3000

কীভাবে কিছু printফিরে আসে ? printফাংশনটি ফিরতে জানি না ।
এরিক আউটগল্ফার

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ ওহ অপেক্ষা করুন, আপনার অর্থ পাইথনের printফাংশনটি ফিরছে - হ্যাঁ এটি Noneসমাপ্তির পরে ফিরে আসে
Sp3000

মানে, Noneকাটা কাটাতে কতটা কার্যকর ?
এরিক আউটগলফার

5

05 এ বি 1 ই , 20 19 17 বাইট

কোড:

DvNð×?T%Ððý,¦‚ø€O

ব্যাখ্যা:

D                     # Duplicate the input.
 v                    # Map over it, running the following len(input) times.
  Nð×                 # Multiply the iteration number with a space.
     ?                # Pop and print without a newline.
      T%              # Take all integers modulo 10.
        Ð             # Triplicate the array.
         ðý,          # Join by spaces and print with a newline.
            ¦         # Remove the first element of the array.
             ‚        # Wrap it up, (pop a, b push [a, b]).
              ø       # Zip.
               €O     # Sum up each element.

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


4

এমএটিএল, 32 30 29 28 27 26 25 24 বাইট

t"X@qZ"y1X9&VhDTTH&Y+10\

1 লুইস @ লুইসকে ধন্যবাদ রক্ষা করেছে

অনলাইনে চেষ্টা করে দেখুন!

সমস্ত পরীক্ষার ক্ষেত্রে পরিবর্তিত সংস্করণ

ব্যাখ্যা

        % Implicitly grab input
t       % Duplicate the input
"       % For each element of the input (really just a shortcut to loop numel(input) times)
  X@q   % Determine the current loop index and subtract 1
  Z"    % Create an array of blanks this size (these are the padding to the left)
  y     % Copy the current array of numbers from the stack
  1X9   % Get the pre-defined output format of %.15g from the clipboard
  &V    % Convert the input to it's character representation with single spacing
  h     % Horizontally concatenate the left padding and the numbers
  D     % Display the result (consumes the string)
  TT    % Create a two-element vector of 1's ([1 1])
  H&Y+  % Convolve [1 1] with the array (computes the pair-wise sum)
  10\   % Mod 10 the result
        % Implicitly close for loop

নিস! আমি নেতৃস্থানীয় স্পেসগুলি পাওয়ার উপায় খুঁজতে চেষ্টা করছিলাম। আমি ভুলে গেছি Vবিন্যাসে অনুমানের অনুমতি দেয়। এর Z"পরিবর্তে আপনি 1 বাইট ব্যবহার করে সংরক্ষণ করতে পারেন O: এই লিঙ্কটি দেখুন (মন্তব্যটিতে ফর্ম্যাটটি নিয়ে আমার সমস্যা হচ্ছে)
লুইস মেন্ডো

@ লুইস মেন্ডো টিপটির জন্য ধন্যবাদ! হ্যাঁ আমি ফর্ম্যাট স্পিকটি পেয়েছি Dযা থেকে ডিফল্টরূপে সেই একক-স্থান-মধ্যবর্তী নম্বরগুলি ব্যবহার করে।
স্যুভার

2

আসলে, 43 বাইট

;l;D+#"{:^%d}"%╗W;' j1╟╜f.;pXZ`i+9u@%`MdXWX

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

এই প্রোগ্রামটি আউটপুট পরে একটি একক ট্রেলিং নিউলাইন প্রিন্ট করে।

ব্যাখ্যা:

;l;D+#"{:^%d}"%╗W;' j1╟╜f.;pXZ`i+9u@%`MdXWX
;l;D+                                        calculate the width of the field (2L-1 where L = len(input))
     #"{:^%d}"%╗                             push to a list, make a Python new-style format string for centering text, save in reg0
                W;' j1╟╜f.;pXZ`i+9u@%`MdXW   while the top of the stack is truthy:
                 ;' j1╟                        duplicate list, join with spaces, push string to a list
                       ╜f.                     center string and print  
                          ;pXZ                 zip list with itself shifted forward by 1 (zip(a,a[1:]))
                              `i+9u@%`M        map: add each pair and mod by 10
                                       dX      discard the last value (which was not added with anything)
                                          X  discard the now-empty list after the loop to avoid printing it


2

সিজেম, 25 বাইট

q~{_2ew::+Af%}h;]eeSff*N*

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

ব্যাখ্যা

এটি ত্রিভুজ লেআউট উত্পন্ন করতে মোটামুটি ঝরঝরে কৌশল ব্যবহার করে।

q~      e# Read and evaluate input.
{       e# While the list of digits is non-empty...
  _2ew  e#   Duplicate and get all sublists of length 2.
  ::+   e#   Sum each pair.
  Af%   e#   Take each result modulo 10.
}h
;]      e# Discard the final empty list and wrap the others in an array.
ee      e# Enumerate the array. E.g. for input `[7 5 0 9]` we now get this:
        e# [[0 [7 5 0 9]]
        e#  [1 [2 5 9]]
        e#  [2 [7 4]]
        e#  [3 [1]]]
Sff*    e# Perform S* on each element at depth two. For the integers from the
        e# enumeration this gives a string of that many spaces, i.e. the correct
        e# indentation. For the lists of digits this inserts a space character
        e# between every two digits, thereby spacing out the digits as necessary.
N*      e# Put linefeeds between the pairs of indentation and digit list.

1

জাভাস্ক্রিপ্ট (ES6) 147 বাইট

a=>{o=0;e=(c=>console.log(' '.repeat(o++)+c.join` `));l=1;while(l){p=0,d=[],e(a),a.map(b=>{p?d.push((v+b)%10):0;p=1,v=b});d.length<2?l=0:a=d};e(d)}

হুম, এটিকে গলফ করতে আমার বেশ কয়েকটি ধারণা রয়েছে
বুলিন্ট


1

পাইকে, 21 বাইট

lVDm}R$],FsT%)od*pKDP

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

আমি এই পদ্ধতিটি কিছুটা আলাদা বলে ভাবতে চাই।

[1, 2, 3, 5, 8] - take the input
[2, 4, 6, 10, 16] - double it
[1, 2, 3, 5, 8] - take the input again
[1, 1, 2, 3] - get the deltas
[[2,1], [4,1], [6,2], [10,3]] - transpose them together
[3, 5, 8, 13] - apply addition
[3, 5, 8, 3] - mod 10

1

পার্ল 6 ,  65 63 62  61 বাইট

{put ' 'x my$++,$_ for @_,{.rotor(2=>-1).map(*.sum%10).list}...1}
{put ' 'x my$++,$_ for @_,{@(.rotor(2=>-1).map(*.sum%10))}...1}
{put ' 'x my$++,$_ for @_,{@(map *.sum%10,.rotor(2=>-1))}...1}
{put ' 'x my$++,$_ for @_,{[map *.sum%10,.rotor(2=>-1)]}...1}

ব্যাখ্যা:

{ # anonymous block that takes the list as input (@_)

  put # print with trailing newline

    ' ' x ( my $ )++, # pad with one more space than previous iteration
    $_                   # the list to print for this iteration
    # The 「.Str」 method on a List puts spaces between elements
    # which is what 「put」 calls on anything that isn't a Str

  for # do that for every list produced from the following

    @_, # the input list

    { # anonymous block that takes the previous list as input ($_)

      [ # turn the following from a Seq into an Array

        map
          *.sum % 10, # sum the values and modulus 10 of the following:

          # take the previous list 2 at a time, backing up one
          $_.rotor( 2 => -1 )

      ]

    }

    ... # repeatedly call that block until:

    1   # the result is only one element long
}

উদাহরণ:

my &digital-triangle-sum = {put ' 'x my$++,$_ for @_,{[map *.sum%10,.rotor(2=>-1)]}...1}

for [7,5,0,9], [0,1,0], [1,0,0,0], [9,2,4,5,3,2,2] -> \List {
   digital-triangle-sum List

   put '';
}
7 5 0 9
 2 5 9
  7 4
   1

0 1 0
 1 1
  2

1 0 0 0
 1 0 0
  1 0
   1

9 2 4 5 3 2 2
 1 6 9 8 5 4
  7 5 7 3 9
   2 2 0 2
    4 2 2
     6 4
      0


@ মেগো ফিক্সড
ব্র্যাড গিলবার্ট b2gills

1

টিএসকিউএল, 198 194 191 বাইট

WHIL- র একটির পরিবর্তে GOTO ব্যবহার করে আমি 3 টি চরিত্র গল্ফ করতে সক্ষম হয়েছি

Golfed

DECLARE @ varchar(100)= '1 2 3 4 5 6 7'

DECLARE @j INT=1,@i INT=LEN(@)a:
PRINT @
WHILE @i>@j
SELECT
@=STUFF(@,@i-1,2,RIGHT(SUBSTRING(@,@i-2,1)+SUBSTRING(@,@i,1)*1,1)+' '),@i-=2SELECT
@=STUFF(@,@j,1,' '),@j+=1,@i=LEN(@)IF @i>0GOTO a

এটি অনলাইনে ব্যবহার করে দেখুন (2 * WHILE সহ পুরানো স্ক্রিপ্ট ব্যবহার করে)


1

জাভা 7, 230 215 213 বাইট

int c=0;void m(int[]a){int l=a.length,j=-1,i=-1;if(l<1)return;int[]x=new int[l-1];while(++j<c)p(" ");for(;++i<l;p(a[i]+" "))if(i<l&i>0)x[i-1]=(a[i-1]+a[i])%10;p("\n");c++;m(x);}<T>void p(T s){System.out.print(s);}

এটি আমার চিন্তাভাবনা থেকে কিছুটা দীর্ঘ হওয়া শেষ হয়েছিল .. কারণ এটি সম্ভবত আরও কিছুটা গল্ফ করা যেতে পারে, যেহেতু আমি মনে করি যে আমি গণ্ডগোল করেছিলাম ..

কিছু বাইট ধন্যবাদ সংরক্ষণ করেছে @ গিয়াকোমো গারবেলোকে করেছে

অবরুদ্ধ এবং পরীক্ষার কোড:

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

class Main{
  static int c = 0;

  static void m(int[] a){
    int l = a.length,
        j = -1,
        i = -1;
    if(l < 1){
      return;
    }
    int[] x = new int[l-1];
    while(++j < c){
      p(" ");
    }
    for(; ++i < l; p(a[i] + " ")){
      if(i < l & i > 0){
        x[i - 1] = (a[i - 1] + a[i]) % 10;
      }
    }
    p("\n");
    c++;
    m(x);
  }

  static <T> void p(T s){
    System.out.print(s);
  }

  static void printAndReset(int[] a){
    m(a);
    c = 0;
    System.out.println();
  }

  public static void main(String[] a){
    printAndReset(new int[]{ 7, 5, 0, 9 });
    printAndReset(new int[]{ 0 });
    printAndReset(new int[]{ 1, 2 });
    printAndReset(new int[]{ 8, 7 });
    printAndReset(new int[]{ 0, 0 });
    printAndReset(new int[]{ 1, 4, 2 });
    printAndReset(new int[]{ 0, 1, 0 });
    printAndReset(new int[]{ 1, 0, 0, 0 });
    printAndReset(new int[]{ 1, 2, 3, 4 });
    printAndReset(new int[]{ 1, 2, 3, 5, 8 });
    printAndReset(new int[]{ 9, 2, 4, 5, 3, 2, 2 });
  }
}

আউটপুট:

7 5 0 9 
 2 5 9 
  7 4 
   1 

0 

1 2 
 3 

8 7 
 5 

0 0 
 0 

1 4 2 
 5 6 
  1 

0 1 0 
 1 1 
  2 

1 0 0 0 
 1 0 0 
  1 0 
   1 

1 2 3 4 
 3 5 7 
  8 2 
   0 

1 2 3 5 8 
 3 5 8 3 
  8 3 1 
   1 4 
    5 

9 2 4 5 3 2 2 
 1 6 9 8 5 4 
  7 5 7 3 9 
   2 2 0 2 
    4 2 2 
     6 4 
      0 

একটি ফাংশন তৈরি করুন void p(String s){System.out.print(s);}এবং মানক মুদ্রণ প্রতিস্থাপন করুন। জন্য printlnব্যবহার p("\n")। ( এবং) এর নিকটে int iএবং সরান এবং অবস্থার অভ্যন্তরে সরান যাতে আপনি মোট -11 এর জন্য বন্ধনীগুলি সরিয়ে ফেলতে পারেনint jint c=0;int c=0,i,j;print(a[i]+" ")for
গিয়াকোমো গারাবেলো

@ জিয়াকোমো গারাবেলো আমি আজ এই ছোট প্রিন্ট বৈকল্পিকটি শিখেছি: <T>void p(T s){System.out.print(s);}পরিবর্তে void p(String s){System.out.print(s);}
কেভিন ক্রুইজসেন

বাহ ... 2 বাইট পাইথ এবং জেলির কাছাকাছি! ধন্যবাদ!
গিয়াকোমো গারাবেলো

@ জিয়াকোমো গ্যারাবেলো "পাইথ এবং জেলির কাছাকাছি 2 বাইট!" হে হে। 'সবসময় জীবনের উজ্জ্বল দিকে তাকান.' ;)
কেভিন ক্রুইজসেন

1

সি # 6, 125 + 31 125 + 18 = 143 বাইট

string f(int[] n,string s="")=>s+string.Join(" ",n)+"\n"+(n.Length>1?f(n.Zip(n.Skip(1),(a,b)=>(a+b)%10).ToArray(),s+" "):"");

+18 এর জন্য using System.Linq;

অপ্রয়োজনীয় ব্যবহারের বিবৃতিটি নির্দেশ করে 13 বাইট সংরক্ষণ করার জন্য @ লেলথল কোডারকে ধন্যবাদ জানাই


0

জাভাস্ক্রিপ্ট (ES6), 77 বাইট

a=a.map((_,i)=>(b=a,a=[a.map((e,j)=>j>i?(e+a[j-1])%10:''),b.join` `)).join`
`

0

সি, 138 বাইট

Golfed

c,d;main(int a,char**b){b++;while(c++,d=0,--a)while(d<a)printf("%*c%c",!d?c:1,*b[d],(d+2>a)*10),++d<a?*b[d-1]=(*b[d-1]+*b[d]-96)%10+48:0;}

Ungolfed

c,d;
main(int a,char**b){
b++;
while(c++,d=0,--a)
    while(d<a)
        printf("%*c%c",
          !d?c:1,      //number of blanks in front of digit
          *b[d],       //digit
          (d+2>a)*10), //returns 10(new line) only for d+1 == a
        ++d<a
          ? *b[d-1]=(*b[d-1]+*b[d]-96)%10+48 //update digit 
          :  0;
}

0

সি #, 167 বাইট

আমি এই সমাধানটির জন্য সত্যিই বেশ গর্বিত, লাম্বদা এক্সপ্রেশনগুলি মজাদার হলে আপনি একবার তাদের হ্যাং পান

void f(List<int> a){int x=a.Count;for(int s=0;s<x;s++){Console.WriteLine(new String(' ',s)+string.Join(" ",a));a=a.Take(x-s-1).Select((v,i)=>(a[i+1]+v)%10).ToList();}}

আরও উন্নতির জন্য এখানে অবরুদ্ধ:

void f(List<int> a)
{
int x = a.Count;
for (int s = 0; s<x ;s++)
{
    Console.WriteLine(new String(' ',s)+string.Join(" ",a));
    a=a.Take(x-s-1).Select((v,i)=>(a[i+1]+v)%10).ToList();
}
}

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


আপনি তালিকার চেয়ে ইনপুটটির জন্য অ্যারে ব্যবহার করে 2 বাইট সংরক্ষণ করতে পারেন। List<int> a-> int[] a, int x=a.Count-> int x=a.Length, .ToList()->ToArray()
সোক

0

হাস্কেল, ১৩৯ বাইট

f=mapM(\(r,s)->putStrLn$r++(s>>=(++" ").show)).zip(iterate(' ':)"").takeWhile(/=[]).iterate g where g(_:[])=[];g(y:p:ys)=mod(y+p)10:g(p:ys)

আর্গুমেন্ট হিসাবে ইনপুট নেয়, STDOUT এ আউটপুট দেয়।

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

f = mapM (\(r, s) -> putStrLn $ r ++ (s >>= (++ " ") . show))
    . zip (iterate (' ' :) "")
    . takeWhile (/= [])
    . iterate sumTerms
    where sumTerms (_:[]) = []
          sumTerms (y:p:ys) = mod (y+p) 10 : sumTerms (p:ys)

0

পাইথন 3, 97 বাইট

def f(x):print(*x);x[-1]==''or f(['']+[(x[i]+x[i+1])%10if''!=x[i]else''for i in range(len(x)-1)])

একটি একক ট্রেলিং নিউলাইন প্রিন্ট করে।

কিভাবে এটা কাজ করে

def f(x):                            function with input of list of numbers
print(*x)                            print the old line of the triangle
x[-1]==''or...                       if no more numbers, stop...
(x[i]+x[i+1])%10if''!=x[i]else''...  ...else compute the next entry in the new line if
                                     possible...
...for i in range(len(x)-1)          ...for all relevant digit pairs...
['']+...                             ...concatenate with empty string to force new leading
                                     space...
f(...)                               ...and pass to function

আইডিয়নে চেষ্টা করে দেখুন



0

জাভাস্ক্রিপ্ট (বাহ্যিক গ্রন্থাগার ব্যবহার করে) (198 বাইট)

n=>{a=_.From(n);b=a.Write(" ");c=1;while(++c){a=a.BatchAccumulate(2).Where(y=>y.Count()==2).Select(z=>z.Sum()%10);if(a.Count()==0){break;}b+="\r\n"+_.Range(0,c).Write(" ",x=>"")+a.Write(" ")}return b}

লিবে লিঙ্ক: https://github.com/mvegh1/Eeumerable/

কোড ব্যাখ্যা: লাইব্রেরিটি ব্যবহার করা সহজ ছিল! বাইটে জিততে পারে না, তবে কোডটি খুব ভার্ভোজ এবং পড়তে সহজ নয়। সুতরাং, "n" ইনপুটটি পূর্ণসংখ্যার অ্যারে the এটি একটি লাইব্রেরিতে লোড করুন, ভেরিয়েবল "এ" তে সংরক্ষণ করা হয় " বর্তমান পুনরাবৃত্তি, সন্নিবেশ করানোর জন্য স্পেসের সংখ্যা নির্ধারণ করতে এটি ব্যবহার করুন NOT দ্রষ্টব্য: ইনপুট 0-9 থেকে এটাই কেবল দুর্দান্তভাবে কাজ করবে বলে মনে হয় Then বর্তমান গণনাযোগ্য "এ" এর সেটস, যদি আমাদের [1,2,3,4,5,6] থাকে তবে আমরা [1,2], [2,3], [3,4], ... [ ]] ... তারপরে ফিল্টার করুন যাতে আমাদের কেবল মাত্র ২ আকারের ব্যাচ থাকে Then অন্যথায় আমরা আমাদের রিটার্নে নতুন লাইন যুক্ত করি। শেষ অবধি ...

কয়েক মিনিটে ছবি আসছে।

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.