অ-নেতিবাচক থেকে একজোড়া পূর্ণসংখ্যা তৈরি করুন


25

আপনার এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা Nইনপুট হিসাবে অ-নেতিবাচক পূর্ণসংখ্যার গ্রহণ করে এবং আউটপুট দেয় বা দুটি পূর্ণসংখ্যার (নেতিবাচক, শূন্য বা ধনাত্মক) Xএবং দেয় Y

পূর্ণসংখ্যাগুলি গাণিতিক অর্থে বোঝানো হয় কারণ এর মধ্যে অনেকগুলিই অসীম।

বাস্তবায়িত ক্রিয়াকলাপটি দ্বিপদী হতে হবে । এর অর্থ হ'ল প্রত্যেকটির জন্য Nএটি আলাদা X Yজুড়ি আউটপুট করতে হয় এবং প্রতিটি X Yজুটি কিছু ইনপুট জন্য আউটপুট করা উচিত Nঅর্থাত্ নীচের সমস্ত জোড়া কিছুটির জন্য আউটপুট করা উচিত N:

                 ...
    ┌─────┬─────┬────┬────┬────┐
    │-2 -2│-2 -1│-2 0│-2 1│-2 2│
    ├─────┼─────┼────┼────┼────┤
    │-1 -2│-1 -1│-1 0│-1 1│-1 2│
    ├─────┼─────┼────┼────┼────┤
... │0 -2 │0 -1 │0 0 │0 1 │0 2 │ ...
    ├─────┼─────┼────┼────┼────┤
    │1 -2 │1 -1 │1 0 │1 1 │1 2 │
    ├─────┼─────┼────┼────┼────┤
    │2 -2 │2 -1 │2 0 │2 1 │2 2 │
    └─────┴─────┴────┴────┴────┘
                 ...

নোট করুন U Vএবং V Uযদি পৃথক জোড়া হয় U!=V

বিস্তারিত

  • যদি আপনার ভাষা নির্বিচারে বৃহত পূর্ণসংখ্যার সমর্থন করে না তবে এটি ভাল তবে আপনার অ্যালগরিদমটি নির্বিচারে বৃহত পূর্ণসংখ্যার ডেটা টাইপের সাথে কাজ করা উচিত। আপনার কোডটি এখনও কমপক্ষে ইনপুট মানগুলিকে সমর্থন করবে 2^31-1
  • আপনি যদি স্ট্রিং হিসাবে আউটপুট মুদ্রণ করতে বা ফেরত দিতে চান তবে কোনও নেতৃস্থানীয় 0বা +চিহ্ন চিহ্ন অনুমোদিত নয়। অন্যথায় আপনার ভাষার মান পূর্ণসংখ্যার উপস্থাপনা ভাল fine

উদাহরণ

যদি কাজের একটি অ-নেতিবাচক পূর্ণসংখ্যা নেয়ার bijective ফাংশন করতে হবে Nএবং আউটপুট এক পূর্ণসংখ্যা Xএকটি সমাধান ফাংশন হতে পারে

if (input mod 2 == 0) return N/2 else return -(N+1)/2,

কিছু ভাষায় প্রয়োগ করা হয়েছে। এই ফাংশনটি ফেরৎ X = 0 -1 1 -2 2...জন্য N = 0 1 2 3 4...


আউটপুট এর কোনও পূর্ণসংখ্যা বিভিন্ন ইনপুট জন্য পুনরাবৃত্তি করা যেতে পারে? যেমন 10=>11 12, 9=>10 1111 টি পুনরাবৃত্তি হওয়ায় এটি কি অবৈধ?
ব্রেইনস্টিল

1
যতক্ষণ না "বাইজেক্টিভ" সংজ্ঞায়িত করা হয়েছে "11 12" "10 11" এর মতো নয় এবং তাই বৈধ valid কারণ বাইজিক ফাংশনটি একটি ফাংশন হিসাবে সংজ্ঞায়িত করা হয় "যেখানে একটি সেটের প্রতিটি উপাদানকে অন্য সেটের ঠিক এক উপাদান দিয়ে যুক্ত করা হয় এবং অন্য সেটটির প্রতিটি উপাদান প্রথম সেটটির ঠিক একটি উপাদান দিয়ে যুক্ত হয়। সেখানে কোনও নেই are অবিযুক্ত উপাদান। "( এন.ইউইকিপিডিয়া.রোগ / উইকি / বাইজেকশন )। যদি আপনি আপনার ফাংশনটি "11 12" এর 10 এর "আউটপুট" এবং "10 11" এ 9 আউটপুট দেয়
জায়ান্ট্রি ট্রি

@ ব্রেনস্টিল আপনার উদাহরণটি বৈধ। কেবল (আদেশ করা) জোড়া পুনরাবৃত্তি করা যাবে না। জায়ান্ট্রি ট্রি সঠিক। প্রশ্নের আরও কিছু ব্যাখ্যা যুক্ত করেছেন।
এলোমেলো

এটি কি প্রদত্ত ভাষার পূর্ণসংখ্যার পরিসরের মধ্যে কোনও দ্বিধা হতে হবে বা এটি সমস্ত পূর্ণসংখ্যার জন্য কাজ করা উচিত?
flawr

1
@ লেজিওন ম্যাম্মালের কার্যটির একটি গাণিতিক বিবরণ ছিল: "আপনাকে একটি দ্বিপদী ফাংশনটি সংজ্ঞায়িত করতে হবে → চ: এন + → জেড ^ 2 $। - লেজিওনম্যামাল 978" " আমি মনে করি যে বিবৃতিতে কোথাও উপকার হবে
ব্রায়ান জে

উত্তর:


15

পাইথ, 15

u,-HyeGhGjQ2,ZZ

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

u             reduce
                lambda G,H:    [implicit]
  ,-HyeGhG         (H-2*G[-1],G[0])
  jQ2           base(input(),2)
  ,ZZ           (0,0)
              print result     [implicit]

একটি পাইথন অনুবাদ:

g=lambda Z,n:(n-2*Z[1],Z[0])
print reduce(g,binlist(input()),(0,0))

বা পুনরুক্তি:

(x,y)=(0,0)
for b in binlist(input()):
    (x,y)=(b-2*y,x)
print (x,y)

যেখানে binlistসংখ্যার মতো ডিজিটের তালিকায় রূপান্তর করে binlist(4) = [1,0,0]

তাহলে এটা কিভাবে কাজ করে? এটি আমার পাইথন দ্রবণের মতো বেস নেগেটিভ দুটিতে দুটি আন্তঃবাহিত সংখ্যার হিসাবে সংখ্যাটির বাইনারি অঙ্কগুলি ব্যাখ্যা করে ।এন

বাইনারি সংখ্যা জোড় ( x , y ) = ( বি 0 - 2 বি 2 + 4 বি 4 - 8 বি 6 + , বি 1 - 2 এর সাথে মিল রয়েছে) বি 3 + 4 বি 5 - 8 বি 7 + )

এন=...543210
(এক্স,Y)=(0-22+ +44-86+ +,1-23+ +45-87+ +)

আমরা এখনো শেষের ডিজিটটি প্রক্রিয়াজাত না করলে এর এন , আমরা সব সূচকের $ 1 $ দ্বারা উচ্চ আছে চাই, এন ' = ... 5 4 3 2 1 যুগল সংশ্লিষ্ট ( এক্স ' , Y ' ) = ( 1 - 2 বি 3 + 4 বি 5 - 8 বি 7 + , বি 2 - 2 বি 4)0এন

এন'=...54321
(এক্স',Y')=(1-23+ +45-87+ +,2-24+ +46-88+ +)

পুরাতন মানগুলির শর্তে একবার পড়ার পরে আমরা নতুন মানগুলি প্রকাশ করতে পারি0

(এক্স,Y)=(0-2Y',এক্স')

(এক্স,Y)(-2Y,এক্স)এন(এক্স,Y)


দ্রষ্টব্য যে ম্যাথজ্যাক্স সমর্থন অক্ষম করা হয়েছে। আপনি পঠনযোগ্যতার জন্য আপনার ব্যাখ্যাটি সম্পাদনা বিবেচনা করতে চাইতে পারেন।
অ্যালেক্স এ।

32

সিজেম, 24 22 21 বাইট

আমার মস্তিষ্কে অন্যান্য সমাধানগুলি ব্যবহার করা গণিতটি বুঝতে সমস্যা হয়। তবে আমার মস্তিষ্ক অবশ্যই বাইনারি বুঝতে পারে, তাই এখানে বিট ম্যানিপুলেশনের উপর ভিত্তি করে একটি আত্মা রাখা হয়েছে!

li4b2fmd2/z{)(\2b^}%p

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

ব্যাখ্যা

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

উদাহরণস্বরূপ, এর একটি ইনপুট দেওয়া 73, তার বাইনারি উপস্থাপনা uninterleaving 1001001bউত্পাদন করে 0 1|0(বিজোড়-স্থান বিট) এবং 1 0 0|1(এমনকি-স্থান বিট)। প্রথম মানটির একটি দৈর্ঘ্য রয়েছে 01b = 1এবং এর চূড়ান্ত মানের জন্য পরিপূরক হওয়া উচিত ~1 = -2এবং দ্বিতীয় মানটির পরিধি থাকা 100b = 4এবং পরিপূরক হওয়া উচিত নয়।

সঠিকতার অনানুষ্ঠানিক প্রদর্শন

আমি একটি পরীক্ষামূলক প্রোগ্রাম তৈরি করেছি যা প্রতিটি ইনপুট শূন্য থেকে কোনও ব্যবহারকারী-নির্দিষ্ট নম্বর বিয়োগের জন্য তার আউটপুটে 2 ডি গ্রিডে রাখে। আপনি এটি অনলাইনেও চেষ্টা করতে পারেন । এই প্রোগ্রামটির একটি আউটপুট এখানে আলগোরিদিম মানচিত্র দেখায় 0-99:

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

-8                      92 84 86 94                     
-7                      88 80 82 90                     
-6                      76 68 70 78                     
-5                   96 72 64 66 74 98                  
-4                60 52 28 20 22 30 54 62               
-3                56 48 24 16 18 26 50 58               
-2                44 36 12  4  6 14 38 46               
-1                40 32  8  0  2 10 34 42               
 0                41 33  9  1  3 11 35 43               
 1                45 37 13  5  7 15 39 47               
 2                57 49 25 17 19 27 51 59               
 3                61 53 29 21 23 31 55 63               
 4                   97 73 65 67 75 99                  
 5                      77 69 71 79                     
 6                      89 81 83 91                     
 7                      93 85 87 95                     
 8                                                      

ভরাট প্যাটার্নটি কিছুটা অদ্ভুত দেখাচ্ছে, তবে এটি বাস্তবে বাইজিক! 4 এর প্রতিটি ধারাবাহিক শক্তি সহ, এটি পূর্বের পাশের দৈর্ঘ্যের দ্বিগুণ সহ একটি স্কোয়ার পূরণ করে। উদাহরণস্বরূপ, অ্যালগোরিদম মানচিত্রগুলি এখানে কীভাবে রয়েছে 0-15:

      -2 -1  0  1  2

-2    12  4  6 14   
-1     8  0  2 10   
 0     9  1  3 11   
 1    13  5  7 15   
 2                  

এটি 8x8 বর্গক্ষেত্রের মাঝখানে 4x4 বর্গ তৈরি করে 0-63:

      -4 -3 -2 -1  0  1  2  3  4

-4    60 52 28 20 22 30 54 62   
-3    56 48 24 16 18 26 50 58   
-2    44 36 12  4  6 14 38 46   
-1    40 32  8  0  2 10 34 42   
 0    41 33  9  1  3 11 35 43   
 1    45 37 13  5  7 15 39 47   
 2    57 49 25 17 19 27 51 59   
 3    61 53 29 21 23 31 55 63   
 4                              

যা 16x16 বর্গের মাঝখানে 8x8 বর্গ তৈরি করে 0-255:

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

 -8     252 244 220 212 124 116  92  84  86  94 118 126 214 222 246 254    
 -7     248 240 216 208 120 112  88  80  82  90 114 122 210 218 242 250    
 -6     236 228 204 196 108 100  76  68  70  78 102 110 198 206 230 238    
 -5     232 224 200 192 104  96  72  64  66  74  98 106 194 202 226 234    
 -4     188 180 156 148  60  52  28  20  22  30  54  62 150 158 182 190    
 -3     184 176 152 144  56  48  24  16  18  26  50  58 146 154 178 186    
 -2     172 164 140 132  44  36  12   4   6  14  38  46 134 142 166 174    
 -1     168 160 136 128  40  32   8   0   2  10  34  42 130 138 162 170    
  0     169 161 137 129  41  33   9   1   3  11  35  43 131 139 163 171    
  1     173 165 141 133  45  37  13   5   7  15  39  47 135 143 167 175    
  2     185 177 153 145  57  49  25  17  19  27  51  59 147 155 179 187    
  3     189 181 157 149  61  53  29  21  23  31  55  63 151 159 183 191    
  4     233 225 201 193 105  97  73  65  67  75  99 107 195 203 227 235    
  5     237 229 205 197 109 101  77  69  71  79 103 111 199 207 231 239    
  6     249 241 217 209 121 113  89  81  83  91 115 123 211 219 243 251    
  7     253 245 221 213 125 117  93  85  87  95 119 127 215 223 247 255    
  8                                                                        

3
খুব চালাক! li4b2fmd2/পরিবর্তে ব্যবহার করে আপনি দুটি বাইট সংরক্ষণ করতে পারেন 0li2b+W%2/W%। এটি একই সংখ্যার দেয় তবে বিপরীত ক্রমে।
ডেনিস

@ ডেনিস এটিও খুব চালাক আমি সেই কৌশলটি ব্যবহার করার উত্তরটি আপডেট করেছি। ধন্যবাদ!
রানার 1112

12

পাইথন 2, 49

সম্পাদনা করুন: বেস -২ এর জন্য আরও ভাল এক-পদক্ষেপ পুনরাবৃত্তি ব্যবহার করে 49-এ উন্নত।

def f(n):x,y=n and f(n/2)or(0,0);return n%2-2*y,x

এখানে পাইথ সংস্করণ ব্যবহার করা হচ্ছে reduce

সম্পাদনা: পাল্টানোর দ্বারা 52 উন্নত বেস -2 থেকে সুষম তিন

পাইথন 2, 52

h=lambda n:n and n%2-2*h(n/4)
lambda n:(h(n),h(n/2))

পাইথন 2, 54

h=lambda n:n and-~n%3-1+3*h(n/9)
lambda n:(h(n),h(n/3))

এটি রানার 1212 এর সমাধানের মতো ডিজিট ইন্টারলাইভিং ব্যবহার করে তবে স্বাক্ষরিত বাইনারি পরিবর্তে সুষম ত্রৈমাসিকের সাথে ব্যবহার করে। পাইথনে অন্তর্নির্মিত বেস রূপান্তর নেই, সুতরাং কোডটি এটি পুনরাবৃত্তির সাথে প্রয়োগ করে।

সহায়ক ফাংশন h( 3এর স্থানে 9) একটি প্রাকৃতিক সংখ্যা নেয় এবং এটিকে তিনটি অঙ্কের থেকে অঙ্কের পরিবর্তনের সাথে সুষম ত্রৈমাসিকীতে রূপান্তর করে

0 -> 0 
1 -> +1
2 -> -1

সুতরাং, উদাহরণস্বরূপ, ১৯, যা বেসে 201 হয়, ভারসাম্যযুক্ত ত্রৈমাসিকে (-1) (0) (+ 1) হয়ে যায়, যা (-1) * 3 ^ 2 + (0) * 3 ^ 1 + (+ 1) * 3 ^ 0 = -8।

প্রতিটি পূর্ণসংখ্যাকে এনকোড করার জন্য ভারসাম্যযুক্ত ত্রৈমাসিকের যথেষ্ট পরিমাণ, এবং তাই প্রাকৃতিক সংখ্যা থেকে পূর্ণসংখ্যাকে একটি ম্যাপিং দেয়।

সংখ্যার পূর্ণসংখ্যার মানচিত্র করতে, আমরা অঙ্কগুলি আন্তঃবিভক্ত করি n। এটি করার জন্য, আমরা পরিবর্তনের পরিবর্তে পুনরাবৃত্তিমূলক পদক্ষেপ হিসাবে hঅন্য প্রতিটি অঙ্কের দিকে নজর n/9রেখেছি n/3। তারপরে, একটি স্থানাঙ্কের জন্য, আমরা nতল দ্বারা বিভাজন দ্বারা স্থানান্তরিত 3

এখানে প্রথম ৮১ টি আউটপুট রয়েছে যা অঞ্চলটি [-4,4] cover 2 জুড়ে রয়েছে।

0 (0, 0)
1 (1, 0)
2 (-1, 0)
3 (0, 1)
4 (1, 1)
5 (-1, 1)
6 (0, -1)
7 (1, -1)
8 (-1, -1)
9 (3, 0)
10 (4, 0)
11 (2, 0)
12 (3, 1)
13 (4, 1)
14 (2, 1)
15 (3, -1)
16 (4, -1)
17 (2, -1)
18 (-3, 0)
19 (-2, 0)
20 (-4, 0)
21 (-3, 1)
22 (-2, 1)
23 (-4, 1)
24 (-3, -1)
25 (-2, -1)
26 (-4, -1)
27 (0, 3)
28 (1, 3)
29 (-1, 3)
30 (0, 4)
31 (1, 4)
32 (-1, 4)
33 (0, 2)
34 (1, 2)
35 (-1, 2)
36 (3, 3)
37 (4, 3)
38 (2, 3)
39 (3, 4)
40 (4, 4)
41 (2, 4)
42 (3, 2)
43 (4, 2)
44 (2, 2)
45 (-3, 3)
46 (-2, 3)
47 (-4, 3)
48 (-3, 4)
49 (-2, 4)
50 (-4, 4)
51 (-3, 2)
52 (-2, 2)
53 (-4, 2)
54 (0, -3)
55 (1, -3)
56 (-1, -3)
57 (0, -2)
58 (1, -2)
59 (-1, -2)
60 (0, -4)
61 (1, -4)
62 (-1, -4)
63 (3, -3)
64 (4, -3)
65 (2, -3)
66 (3, -2)
67 (4, -2)
68 (2, -2)
69 (3, -4)
70 (4, -4)
71 (2, -4)
72 (-3, -3)
73 (-2, -3)
74 (-4, -3)
75 (-3, -2)
76 (-2, -2)
77 (-4, -2)
78 (-3, -4)
79 (-2, -4)
80 (-4, -4)

কোয়ার্টার-কাল্পনিক সাথে একটি বিকল্প কোডিং দীর্ঘ দেখা গেল, যদিও এটি খুব সুন্দর।

পাইথন 2, 63

h=lambda n:n and n%4+2j*h(n/4)
lambda n:(h(n).real,h(n).imag/2)

জটিল রূপান্তর হ'ল কম ছদ্মবেশী হ্যান্ডলিংয়ের ভাষায়, এটি সম্ভবত আরও ভাল পদ্ধতির হতে পারে। আমরা জটিল সংখ্যা আউটপুট করতে পারলে, আমরা করতে পারি:

পাইথন 2, 38

f=lambda n:n and n%2+n/2%2*1j-2*f(n/4)

1
আপনার মূল বেস -2 ফাংশনটি পাইথ উত্তর দেয় would L&b-%b2*2y/b4,yQy/Q2শুধুমাত্র 20 বাইট দীর্ঘ।
ডেনিস

4
@ ডেনিস আমি কেবল একটি 15-চর পাইথ সলিউশন লিখেছি।
xnor

ভারসাম্য টার্নারি এবং কোয়ার্টার-কাল্পনিক। আমার প্রিয় দুটি বেস। কেবল বেস-ই অনুসরণ করেছে।
ব্রায়ান মিন্টন

11

পাইথন 2, 98 বাইট

আসুন একটি সহজ পদ্ধতির মাধ্যমে শুরু করা যাক:

def f(N):
 x=a=0;b=2
 while N:x+=1j**b;b+=a<1;a=a or b/2;N-=1;a-=1
 return int(x.real),int(x.imag)

এটি কেবলমাত্র N2 ডি গ্রিডের উপরে দীর্ঘ একটি আয়তক্ষেত্রাকার সর্পিল ইউনিট গঠন করে, মূল থেকে শুরু করে এবং শেষ পয়েন্টের স্থানাঙ্কগুলি প্রদান করে।

ফাংশনটি দ্বিপ্রদীপক থেকে:

  • একটি দীর্ঘ পর্যাপ্ত সর্পিল দেওয়া প্রতিটি পয়েন্ট কভার করা যেতে পারে
  • প্রতিটি পয়েন্ট কেবল একবার সর্পিল দ্বারা ছেদ করা হবে

সর্পিলটি দেখতে এমন কিছু দেখায় (1 এর পরিবর্তে 0 থেকে শুরু না করে):

উলাম সর্পিল


@AlexA। 0**0 == 1পাইথনে, সুতরাং এটি ঠিক একই রকমif a == 0: a = b/2
grc

শীতল, ব্যাখ্যা করার জন্য ধন্যবাদ।
অ্যালেক্স এ।

@AlexA। দেখা যাচ্ছে a=a or b/2ছোট
grc

@ 0^0=1গণিত সমস্ত গণিতে, কেবল অজগর নয়।
দেনিথ

1
@ ডেইনেথ 0**0আসলে গণিতে অনির্দিষ্ট রূপ
Sp3000

8

ডিসি, 49

[1+2~2*1-*n]sm?dsa8*1+v1-2/dd1+*2/lar-dlmx32P-lmx

এটি গ্রিডে অ-নেতিবাচক পূর্ণসংখ্যাগুলি এভাবে সাজিয়ে শুরু হয়:

..| 
4 | 14
3 |  9 13
2 |  5  8 12
1 |  2  4  7 11
0 |  0  1  3  6 10
Y +-----------------
  X  0  1  2  3  4 ...

নোট করুন যে গ্রিড পজিশনগুলি কীভাবে ক্রমবর্ধমান এন দিয়ে ত্রিভুজভাবে পূর্ণ হয়। লক্ষ্য করুন যে ওয়াই = 0 লাইনে প্রদত্ত ত্রিভুজাকার সংখ্যা ক্রম রয়েছে N = X(X+1)/2। এটি একটি চতুর্ভুজ সমীকরণ যা সাধারণ সূত্র ব্যবহার করে সমাধান করা হয়, কেবলমাত্র + Ve মূল ব্যবহার করে, যাতে আমরা Y থেকে 0 থেকে এক্স নির্ধারণ করতে পারি Y এরপরে প্রতিটি এন এর জন্য অনন্য {এক্স, ওয়াই give দেওয়ার জন্য কিছু সাধারণ গাণিতিক পরিবর্তন is

এটি প্রয়োজনীয় দ্বিখণ্ডিত মানের সরবরাহ করে তবে এক্স এবং ওয়াই কেবল অ-নেতিবাচক, তবে প্রশ্নের জন্য সমস্ত সম্ভাব্য পূর্ণসংখ্যার প্রয়োজন। সুতরাং এক্স এবং ওয়াই ((t+1)/2)*((t+1)~2*2-1)সমস্ত সম্ভাব্য সংখ্যার জন্য ম্যাপযুক্ত।

dcনির্বিচারে নির্ভুলতা নম্বর রয়েছে তাই ইনপুট পরিসীমা 2^31-1কোনও সমস্যা নেই। এছাড়াও মনে রাখবেন ডিফল্ট স্পষ্টতা 0 দশমিক সংখ্যা, এবং sqrt()এবং /বৃত্তাকার নিচে যা আচরণ এখানে প্রয়োজন হয়।

আউটপুট:

$ for i in {0..10}; do dc biject.dc <<< $i; echo; done
0 0
0 -1
-1 0
0 1
-1 -1
1 0
0 -2
-1 1
1 -1
-2 0
0 2
$

5

মতলব, 54 বাইট

n=input('')+1;[i,j]=find(spiral(2*n)==n);disp([i,j]-n)

এখানে কীটি হ'ল এটি spiralস্বেচ্ছাচারিত আকারের সর্পিল ম্যাট্রিক্স তৈরি করে।

spiral(3)

আয়

ans =

 7     8     9
 6     1     2
 5     4     3

spiral4এন2এন104এন1052.91011এন=232


2

হাস্কেল, 78 74 বাইট

(concat[[(x,i-x),(x,x-1-i),(-1-x,x-1-i),(-1-x,i-x)]|i<-[0..],x<-[0..i]]!!)

পরীক্ষা রান:

*Main> mapM_ (print . (concat[[(x,i-x),(x,x-1-i),(-1-x,x-1-i),(-1-x,i-x)]|i<-[0..],x<-[0..i]]!!) ) [0..20]
(0,0)
(0,-1)
(-1,-1)
(-1,0)
(0,1)
(0,-2)
(-1,-2)
(-1,1)
(1,0)
(1,-1)
(-2,-1)
(-2,0)
(0,2)
(0,-3)
(-1,-3)
(-1,2)
(1,1)
(1,-2)
(-2,-2)
(-2,1)
(2,0)

এটি কীভাবে কাজ করে: নীচের ক্রমে সমস্ত জোড়কে প্রথম চতুর্ভুজ তালিকাভুক্ত করুন

  |
 2| #4
  |
 1| #2  #5
  | 
 0| #1  #3  #6
  +---------------
     0   1   2   3 

4 টি মৌলিক তালিকার একটি তালিকা তৈরি করতে অন্যান্য চতুর্ভুজগুলিতে প্রতিটি পয়েন্টটি আয়না করুন। সমস্তকে একটি একক তালিকায় সংযুক্ত করে নিনn তম উপাদানটি নিন।

সম্পাদনা করুন: ফাংশনটির কোনও নাম প্রয়োজন নেই, পুনরায় সাজানো গণিত। এক্সপ্রেশন।


doনোটেশন ব্যবহার করে আপনি 4 বাইট সংরক্ষণ করতে পারেন : এটি অনলাইনে চেষ্টা করুন!
ბიმო

1

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

(0!).succ
l!n=(last$(!).succ:[(,)|odd n])l$div n 2

অনলাইনে এটি ব্যবহার করে দেখুন বা এর বিপরীতটি দিয়ে দেখুন!

Ungolfed

ntoN2 n = 0 ! (n + 1)

xCounter ! remainingNum
  | odd remainingNum = (xCounter, div remainingNum 2)
  | otherwise        = (xCounter + 1) ! div remainingNum 2

ব্যাখ্যা

(এক্স,Y)এন22এক্স(2Y+ +1)-1এন(!)এক্সlxCountery

নোট করুন যে প্রক্রিয়াটি শুরু করার আগে আসল ফাংশন f( ntoN2) ইনপুটটিকে বাড়িয়ে তোলে।


1

05 এ বি 1 ই , 35 বাইট

>©DÝʒo®sÖ}àsÅÉʒ®sÖ}à<2÷‚εDÈi2÷ë>2÷(

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

ব্যাখ্যা

বিবেচনা

:এনএন×এনএন(এক্স,Y),
এক্স2এক্সএন+ +12Y+ +1এন+ +1-1(এক্স,Y)=2এক্স(2Y+ +1)-1

:এন×এনজেড×জেড(মি,এন)((মি),(এন)),
:এনজেডএন{এন2,এন এমন কি-এন+ +12,এন বিজোড়
:এনজেড×জেড

>©DÝʒo®sÖ}àsÅÉʒ®sÖ}à<2÷‚εDÈi2÷ë>2÷( # Full program

                                    # Implicit input: Integer n
>©                                  # Compute n+1 and save it to the register
  DÝ                                # Duplicate n+1 and push the list [0,...,n+1]
    ʒo®sÖ}                          # Only keep those numbers x so that 2^x divides n+1
          à                         # Get maximum element in the list.
           sÅÉ                      # Swap so that n+1 is on top and push [1,3,5,...,n+1]
              ʒ®sÖ}                 # Only keep those numbers z which divides n+1
                   à<2÷             # Compute y = (z-1)/2
                       ‚            # Push the pair [x,y]
                        ε           # Apply the function h to x (and y):
                           i        # if...
                         DÈ         # x is even
                            2÷      # then compute x/2
                              ë>2÷( # else compute -(x+1)/2
                                    # Implicit output: [h(x),h(y)]

বাহ, সুন্দর ব্যাখ্যা জন্য upvated। তবে অবশ্যই 05AB1E পাইথকে পরাস্ত করতে সক্ষম হবে?
ASCII-


0

গণিত, 46

SortBy[Tuples[Range[2#]-#,2],Norm][[#]]&[#+1]&

সাজান তাদের আদর্শ ভেক্টর, তারপর নিতে nতম করুন।


0

জাভাস্ক্রিপ্ট, 166 168 বাইট / অক্ষর

অন্যদের মতো একটি আয়তক্ষেত্রাকার সর্পিল ব্যবহার করে নতুন পদ্ধতি।

function f(n){return b=Math,k=b.ceil((b.sqrt(n)-1)/2),t=2*k+1,m=b.pow(t,2),t+=4,m-t>n?(m-=t,m-t>n?(m-=t,m-t>n?[k,k-(m-n-t)]:[-k+(m-n),k]):[-k,-k+(m-n)]):[k-(m-n),-k]}

আমি ম্যাথ.এসইতে এই উত্তরটি ব্যবহার করেছি, এটি জেএসে অনুবাদ করেছি এবং উগ্লিফাইজেএস ব্যবহার করে সংকুচিত করেছি ।

এই পদ্ধতির কোনও লুপ ব্যবহার করে না বা এটি কোনওভাবেই সর্পিল তৈরি করে না।

:এন0জেড2

আপডেট: স্টোরেজ করে 2 টি অক্ষর সংরক্ষণ করা Mathহয়েছে b

আপডেট 2: সমস্যাটি সমাধানের জন্য প্রতিস্থাপন t-=1করা t+=4হয়েছে(0)=(8)এন00


1) ঠিক একই প্রশ্নটি পুনরায় পোস্ট করা সত্যিই সাহায্য করবে না। 2) অন্য উত্তরটি অনুলিপি করা এবং তারপরে গল্ফিংয়ের জন্য একটি মিনিফায়ার ব্যবহার খুব বেশি হবে না :)
অনুকূলকরণ

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

@ অপ্টিমাইজার: 1) আমি পরামর্শ দিয়েছিলাম যে জায়ান্টটি ট্রি পুনরায় পোস্ট করা উচিত কারণ তিনি তার আসল, অবৈধ পদ্ধতির জন্য 3 (যোগ্য) ডাউনভোট পেয়েছেন। ২) তিনি ম্যাথ.এসই থেকে যে কোডটি নিয়েছেন তা এমনকি জাভাস্ক্রিপ্টও নয়, তাই তিনি এটি একটি মিনিফায়ারে অনুলিপি করার চেয়ে আরও বেশি কিছু করেছেন।
ডেনিস

@ ডেনিস লোকেরা তাদের নিম্নবিত্ত প্রত্যাহার করতে পারে, আপনি জানেন। এছাড়াও, কোডটি মিনিফায়ার করতে একটি মিনিফায়ার ব্যবহার করা সত্যই ইমোতে উত্সাহিত হয় না।
অপ্টিমাইজার

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