মাত্রিক গণনা


17

একটি ফাংশন লিখুন (n, কে) যা কে থেকে কে-মাত্রিক গণনা প্রদর্শন করে count

5 থেকে 1-মাত্রিক কাউন্টডাউনটি দেখতে দেখতে মনে হচ্ছে

 54321

5 টির দ্বি-মাত্রিক কাউন্টডাউন দেখে মনে হচ্ছে

 54321
 4321
 321
 21
 1

অবশেষে, 5 টির ত্রি-মাত্রিক কাউন্টডাউন দেখে মনে হচ্ছে

 54321
 4321
 321
 21
 1
 4321
 321
 21
 1
 321
 21
 1
 21
 1
 1

আনুষ্ঠানিক সংজ্ঞা

যে কোনও এন থেকে 1-মাত্রিক গণনা হ'ল এন, এন -1, ..., 1 সংখ্যার (একটি নতুন লাইনের পরে) সংখ্যার একক রেখা।

যে কোনও কে-এর জন্য 1-এর কে-মাত্রিক গণনা একক লাইন

 1

N> 1 এবং কে> 1 এর জন্য, এন থেকে একটি কে-ডাইমেনশনাল কাউন্টডাউন হ'ল এন থেকে 1-ডি-ডাইমেনশনাল কাউন্টডাউন এর পরে এন থেকে ডি-ডাইমেনশনাল কাউন্টডাউন।

ইনপুট

দুটি ধনাত্মক পূর্ণসংখ্যার কে এবং এন <= 9, আপনার চয়ন করা কোনও ফর্ম্যাটে।

আউটপুট

প্রতিটি 1-মাত্রিক কাউন্টডাউন পরে একটি নতুন লাইন সহ এন থেকে কে-মাত্রিক গণনা। অতিরিক্ত নিউলাইনগুলি আউটপুটটিতে অনুমোদিত।

স্কোরিং

স্ট্যান্ডার্ড গল্ফ স্কোরিং।

বোনাস উদাহরণ

এখানে কে> এন এর একটি উদাহরণ রয়েছে, 3 থেকে 4-মাত্রিক গণনা

 -- 3-dimensional countdown from 3
 321
 21
 1
 21
 1
 1
 -- 4-dimensional countdown from 2:
 ---- 3-dimensional countdown from 2:
 21
 1
 1
 ---- 4-dimensional countdown from 1:
 1  

ব্যাখ্যা:

একটি লাইনের অঙ্কগুলি সংলগ্ন হওয়া দরকার না, তবে সেগুলি অবশ্যই সমান-ব্যবধানে থাকা উচিত।

আপনি যদি চান তবে কেবল একটি ফাংশনের পরিবর্তে একটি সম্পূর্ণ প্রোগ্রাম লিখতে পারেন।


আমি নিশ্চিত না যে আমি পরীক্ষার কেসগুলি সঠিকভাবে বুঝতে পেরেছি। 3 ডি এবং 4 ডি কাউন্টডাউনগুলি কি 2 টির মতো?
ডেনিস

1
@ ডেনিস আমি মনে করি উদ্দেশ্যটি হ'ল 1
Sp3000

এটি এক থেকে 3 ডি কাউন্টডাউন না বলা উচিত?
ধ্বংসাত্মক লেবু

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

@ ডেনিস অতিরিক্ত নিউলাইনগুলি যে কোনও জায়গায় ঘটতে পারে। ঠিক আছে, 543 21 n21 ঠিক আছে না, তবে কোনও '1' পরে তারা ঠিক আছে।
এরিক ট্র্রেসার

উত্তর:


15

পাইথন, 60 বাইট

f=lambda n,k:n>1<k and f(n,k-1)+f(n-1,k)or'987654321\n'[~n:]

আইডিয়নে এটি পরীক্ষা করুন ।

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

দ্য N কে- ডাইমেনশনাল কাউন্টডাউনটি একটি একক বেসের সাথে সংজ্ঞায়িত করা যায়:

যদি এন = 1 বা কে = 1 হয় তবে আউটপুটটি এন || n-1 || ... || 1 || Where , যেখানে || সংমিশ্রণ নির্দেশ করে।

প্রশ্ন থেকে পুনরাবৃত্ত সংজ্ঞাটি ব্যবহার করে, এন> 1 এবং কে> 1 যদি f(n,k)ফিরে আসে ; অন্যথায় এটি থেকে শেষ n + 1 টি অক্ষর প্রদান করে ।f(n,k-1)+f(n-1,k)'987654321\n'


ডেনিস ঠিক খুব ভাল। আপনি কিভাবে এটি করেছেন?
ক্লিমেজিক

এখানে আমার একমাত্র অন্তর্দৃষ্টি ছিল আপনি উভয় বেস কেস একত্রিত করতে পারেন। বাকীটি কেবল পুনরাবৃত্ত সংজ্ঞাটির সরাসরি অনুবাদ।
ডেনিস

8

জেলি , 8 বাইট

R¡UḌFṚp⁷

এটি একটি সম্পূর্ণ প্রোগ্রাম যা n এবং k কমান্ড-লাইন আর্গুমেন্ট হিসাবে প্রত্যাশা করে ।

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

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

R¡UḌFṚp⁷  Main link. Left argument: n. Right argument: k

 ¡        Repeat the link to the left k times.
R           Range; map each integer j in the previous return value to [1, ..., j].
  U       Upend; reverse each 1-dimensional array in the result.
   Ḍ      Undecimal; convert each 1-dimensional array from base 10 to integer.
    F     Flatten the resulting array.
     Ṛ    Reverse the result.
      p⁷  Cartesian product with '\n'. (Join is weird for singleton arrays.)

না Yস্থানে কাজ p⁷?
মাইল

প্রকার, রকম. জন্য 5, 1, এটি প্রদর্শিত হয় [54321]
ডেনিস

5

জাভাস্ক্রিপ্ট, 40 38 37 বাইট

@ Edc65 এর জন্য 1 বাইট সংরক্ষণ করা:

f=(n,k)=>k*n?f(n,k-1)+f(n-1,k):n||`
`

পূর্ববর্তী উত্তর

38 বাইট @ নীলকে ধন্যবাদ

f=(n,k)=>k&&n?f(n,k-1)+f(n-1,k):n||`
`

40 বাইট:

f=(n,k)=>k&&n?f(n,k-1)+f(n-1,k):n?n:'\n'

1
||পরিবর্তে ব্যবহার করে একটি বাইট সংরক্ষণ করুন ?n:`এর পরিবর্তে এর ভিতরে একটি আক্ষরিক নিউলাইন ব্যবহার করে অন্য বাইট সংরক্ষণ করুন '\n'
নিল

অতিরিক্ত আমি অতিরিক্ত নিউলাইনগুলি ছাড়াই সেরাটি করতে পারি 43:f=(n,k)=>n?(k?f(n,k-1):n)+f(n-1,k):k?``:`\n`
নীল

@ নীল আমি বাইট গণনা করতে নোটপ্যাড ++ এবং আক্ষরিক নিউলাইন গণনাটিকে 2 চর হিসাবে গণ্য করছি।
হেডি

এর পরিবর্তে আপনি নিজের ব্রাউজারের স্ক্র্যাচপ্যাডে চেষ্টা করে দেখতে পারেন?
নিল

1
চতুর, +1। *পরিবর্তে ব্যবহার করুন &&
edc65

3

পাইথন, 76 75 বাইট

-1 বাইট @ এসপি 3000-কে ধন্যবাদ

c=lambda n,k:k>1and'\n'.join(c(n-i,k-1)for i in range(n))or'987654321'[-n:]

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

আদর্শের উপর পরীক্ষার মামলাগুলি


3

পাইথন, 86 81 80 বাইট

o=lambda d,n:"987654321"[-n:]if d<2else"\n".join([o(d-1,n-x) for x in range(n)])

d মাত্রা সংখ্যা, n গণনা সংখ্যা।

শিগগিরই একটি পোস্ট পোস্ট করবে।

সম্পাদনা # 1: এটি ল্যাম্বডায় পরিবর্তন হয়েছে।

সম্পাদনা # 2: সংরক্ষিত 1 বাইট @ ডেসক্রটিবল ওয়াটারমেলনের জন্য ধন্যবাদ।


3

হাস্কেল, 57 বাইট

n#1='\n':(show=<<[n,n-1..1])
1#_=1#1
n#k=n#(k-1)++(n-1)#k

ব্যবহারের উদাহরণ: 5 # 3-> "\n54321\n4321\n321\n21\n1\n4321\n321\n21\n1\n321\n21\n1\n21\n1\n1"

সংজ্ঞাটির প্রত্যক্ষ বাস্তবায়ন।


2

215 বাইট রেকেট

(define(g n k(s(number->string n)))(cond [(< k 2) n]
[else(define o(for/list((i(string-length s)))
(string->number(substring s i))))(for/list((x o))(g x(- k 1)))])) 
(define(f n k)(for-each println(flatten(g n k))))

পরীক্ষামূলক:

(f 54321 3)

54321
4321
321
21
1
4321
321
21
1
321
21
1
21
1
1

উম্ম ... 3 ডি মোডে, কেন 54321দু'বার প্রদর্শিত হবে?
এরিক আউটগলফার

আমি সমস্যাগুলি সমাধান করার চেষ্টা করছি।
rnso

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ সমস্যাটি সংশোধন করা হয়েছে।
rnso

শীতল, এবং আমি দেখতে পাচ্ছি যে আপনি প্রচুর সাদা জায়গা সরিয়ে ফেলেছেন!
এরিক আউটগল্ফার

র‍্যাকেটে, ল্যাম্বডা ( λ) ব্যবহার করা সর্বদা ব্যবহারের চেয়ে কম বাইট define। এছাড়াও, জন্য ইনপুট nএকটি সংখ্যা, যার জন্য আপনি নির্মাণ করা নির্দিষ্ট হয়েছিল (range 1 n)। আপনার প্রতিস্থাপন সম্পর্কে আরও দেখুন condএকটি সঙ্গে ifউপর বাইট সংরক্ষণ, আপনি যেহেতু else
স্টিভেন এইচ।

2

জে, 38 37 32 বাইট

a:":@>@-.~&,0<@-."1~0&(](-i.)"0)

এটি এমন একটি ফাংশন যা LHS কে নিয়ে যায় এবং এন RHS উপর।

@ অ্যাডম থেকে আইডিয়া সহ 5 বাইট সংরক্ষণ করা হয়েছে।

ব্যবহার

   f =: a:":@>@-.~&,0<@-."1~0&(](-i.)"0)
   3 f 5
5 4 3 2 1
4 3 2 1  
3 2 1    
2 1      
1        
4 3 2 1  
3 2 1    
2 1      
1        
3 2 1    
2 1      
1        
2 1      
1        
1

ব্যাখ্যা

a:":@>@-.~&,0<@-."1~0&(](-i.)"0)  Input: k on LHS, n on RHS
                    0&(        )  Repeat k times on initial value n
                        (   )"0   For each value x
                          i.        Make the range [0, x)
                         -          Subtract x from each to make the range [x, 1]
                       ]            Return the array of ranges
            0  -."1~              Remove the zeros from each row
             <@                   Box each row
          &,                      Flatten the array of boxes
a:     -.~                        Remove the empty boxes
     >@                           Unbox each
  ":@                             Convert it into a string and return

আপনার আমার পদ্ধতির ব্যবহার করতে সক্ষম হওয়া উচিত ।
Adám

@ অ্যাডম ধন্যবাদ, আমি এটি চেষ্টা করে দেখছি
মাইল

2

ডায়ালগ এপিএল , 18 বাইট

এন এর জন্য প্রম্পট দেয় , তারপরে কে

~∘'0'1⍕(⌽⍳)⍤0⍣⎕⊢⎕

~∘'0'⍤1~( ) শূন্যগুলি '0'থেকে ( ) জিরো ( ) সরিয়ে ফেলুন ( ⍤1প্রয়োজন অনুসারে স্পেস দিয়ে প্যাডিং করুন)

চরিত্র উপস্থাপনা

(⌽⍳)⍤0⍣⎕বিপরীত ( ) গণনা ( ) প্রতিটি স্কেলার ( ⍤0) অবধি , পুনরাবৃত্তি ( ) ইনপুট ( ) বার

চালু

সংখ্যা ইনপুট

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


2

সি 93 বাইট

Iterative বাস্তবায়ন।

m,i,j;f(n,k){for(;m<k+2;m++)for(j=0;j<n;j++){for(i=m;i<n-j;i++)printf("%d",n-j-i);puts("");}}

সি 67 65 61 56 52 বাইট

পুনরাবৃত্তিমূলক বাস্তবায়ন

f(n,k){n*k?f(n,k-1)+f(n-1,k):puts("987654321"+9-n);}

চর * ব্যবহার না করে আপনি স্ট্রিং ঘোষণা করতে পারবেন না, সুতরাং আপনার পুনরাবৃত্তির প্রয়োগটি সংকলন করে না। কিন্তু সমাধান খুব সহজ এবং 4 বাইট সংরক্ষণ: শুধু প্রতিস্থাপন mভিতরে puts()সহ কল "987654321"
জি স্লিপেন

আমি জিসিসি (জিসিসি) ৩.৪.৪ (সিগমিং স্পেশাল, জিডিসি 0.12, ডিএমডি 0.125 ব্যবহার করে) সংকলন করেছি। আমি মনে করি এটি ঠিক আছে যেহেতু আমি কেবল চর * থেকে ইনট-তে রূপান্তর করছি তবে আপনার দ্রবণটি 4 বাইট ছোট হওয়ায় আমি এটি আরও ভাল পছন্দ করি। ধন্যবাদ
ক্লাবল্যাঙ্ক

1

ব্যাচ, 117 বাইট

@setlocal
@set/an=%1-1,k=%2-1,p=n*k,s=987654321
@if %p%==0 (call echo %%s:~-%1%%)else call %0 %1 %k%&call %0 %n% %2

ডেনিসের পাইথনের উত্তর বন্দর।


1

রুবি, 56 বাইট

f=->n,k{n>1&&k>1?[f[n,k-1],f[n-1,k]]:[*1..n].reverse*""}

ব্যবহার

আপনি যখন কোনও সমাধান প্রদর্শন করেন, আপনার "কার্নেল # পুটস" ব্যবহার করা উচিত।

উদাহরণ:

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