একটি ডিজিটাল প্লোটার তৈরি করুন


11

ডোনাল্ড এম মনরো রচিত ফোর্টরান 77 বইটি থেকে সমস্যাটি অভিযোজিত

ভূমিকা

ডিজিটাল প্লটিং মেশিনগুলি বিভিন্ন ধরণের অঙ্কন, গ্রাফ এবং অন্যান্য চিত্রের ফলাফলগুলি তৈরি করতে ব্যাপকভাবে ব্যবহৃত হয়। বেশিরভাগ এ জাতীয় মেশিনগুলি কেবলমাত্র X এবং Y দিক বা উভয় দিকের একক পদক্ষেপ হিসাবে কেবল নির্দিষ্ট দিকগুলিতে তাদের কলম স্থানান্তর করতে পারে। চিত্র 1 তে প্রদর্শিত আট দিকের একটিতে একটি সাধারণ মেশিন সরানো হবে:

চিত্র 1 ডুমুর। 1

চ্যালেঞ্জ

ট্রিগনোমেট্রিক ফাংশন ব্যতীত একটি প্রোগ্রাম লিখুন যা 0 থেকে 7 (অন্তর্ভুক্ত) হিসাবে সংখ্যাকে ইনপুট হিসাবে গ্রহণ করে এবং চিত্র 1 এ শেষ পয়েন্টগুলির সাথে সম্পর্কিত স্থানাঙ্কগুলি আউটপুট করে।

আউটপুটটি অ্যারের হিসাবে বা দুটি উপাদানের (যেমন (1, 0)বা [0,-1]) তালিকা হিসাবে থাকা উচিত

আই / ও এর সারণী

0 (1, 0)
1 (1, 1)
2 (0, 1)
3 (-1, 1)
4 (-1, 0)
5 (-1, -1)
6 (0, -1)
7 (1, -1)

জয়লাভ

বাইটস মধ্যে সংক্ষিপ্ত কোড


একটি rotate(x)ফাংশন একটি ত্রিকোণমিতিক ফাংশন হিসাবে গণনা করা হয়? (এটি কেবল xরেডিয়ানদের দ্বারা "ক্যানভাস" ঘোরায় )
ব্যবহারকারী 41805

@ ক্রিটিক্সী না, বিধিনিষেধ সম্পূর্ণরূপে cos, sin, tan, secইত্যাদি
বিটা ডেকে

আমি নিশ্চিত যে সম্পর্কিত কোনও প্রশ্ন রয়েছে যা নির্দিষ্ট আকারের বর্গক্ষেত্রের পরিধি অনুসরণ করে তবে আমি এটি খুঁজে পাচ্ছি না।
নীল

1
<s> </s> আমরা কি 0 টি সূচকের পরিবর্তে 1 সূচী করতে পারি?
জোনাথন অ্যালান

3
@ জোনাথন না, এটি 0 থেকে শুরু হতে হবে
বিটা ডিকায়

উত্তর:


5

জেলি , 8 বাইট

Hı*µḞ,ĊṠ

জটিল গাণিতিক ব্যবহার করার অনুমতি দেওয়া হয়েছে বলে মনে হয়।

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

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

Hı*µḞ,ĊṠ  Main link. Argument: n

H         Halve; yield n/2.
 ı*       Yield i^(n/2), where i is the imaginary unit. Since i = e^(iπ/2), this
          computes e^(inπ/4) = cos(nπ/4) + i×sin(nπ/4) = x + iy, where (x, y) is
          the coordinate pair of (nπ/4)/(2π) = n/8 turns along the unit circle.
   µ      Begin a new chain with argument z = x + iy.
    Ḟ     Real part of z; yield x.
      Ċ   Imaginary part of z; yield y.
     ,    Pair, yielding (x, y).
       Ṡ  Apply the sign function to x and y.

15

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

lambda n:1j**(n/2)*(1+n%2*1j)

সমন্বয়গুলি একটি জটিল সংখ্যা হিসাবে প্রদান করে।


ওহ্হ দারুন. জটিল সংখ্যা ব্যবহার করার কথা ভাবিনি!
হাইপারনিউটারিনো

অবশ্যই এটি একটি অর্থে ট্রিগনোমেট্রিক ফাংশন ব্যবহার করে।
পরিণত হয়েছে


7

গণিত, 24 বাইট

Sign@{12-8#+#^2,4#-#^2}&

খাঁটি ফাংশন, ব্যবহার করে Signএবং নির্দিষ্ট প্যারাবোলা কোথায় যায় তা জেনে।


6

সি, 103 86 74 73 70 বাইট

12 15 বাইট সংরক্ষণের জন্য @orlp কে ধন্যবাদ !

f(n){n="biM1*#?["[n]/7;printf("%c%d %d",n&8?32:45,n/4&1,n%2*~-(n&2));}

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


1
"\16\17\13\7\6\5\9\15"[n] == "pw[1*#?i"[n]/7
orlp

ধন্যবাদ! যদিও স্ট্রিংটি আসলে "biM1*#?[", কারণ "\16\17\13\7\6\5\9\15"মানগুলিতে অষ্টাল সংখ্যা হয়, সুতরাং 16 == 14 দশমিক, 17 == 15 এবং আরও।
স্টেডিবক্স

1
!!(n&4) == n/4&1
orlp

1
n&2?n&1:-(n&1) == n%2*~-(n&2)
orlp


4

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

r=>[1-(6800>>r*2&3),(425>>r*2&3)-1]

দুটি সাধারণ সন্ধানের টেবিল ব্যবহার করে যা প্রতিটি "ডিজিট" এ একটি যুক্ত করার পরে বেস 4-তে 8 টি এন্ট্রি এনকোড করে। সরল সন্ধানের টেবিলগুলি ব্যবহার করে বিকল্প সংস্করণ:

r=>["22100012"[r]-1,"12221000"[r]-1]

পুরানো সংস্করণ (@ নীলকে 4 বাইট সংক্ষিপ্ত ধন্যবাদ):

r=>[r>2&r<6?-1:r<2|r>6,r>4?-1:r%4&&1]

এক্স এবং ওয়াই স্থানাঙ্কগুলি পৃথকভাবে সন্ধান করতে কিছু সাধারণ গণনা ব্যবহার করে নিষ্ক্রিয় পদ্ধতির ...


1
আপনার বর্তমান সংস্করণটি 4 এবং 5 এর জন্য ভুল উত্তর দেয় তবে আমার মনে হয় r&&(r<4)-(r>4)বা হয় r%4&&1-(r&4)/2আপনার পুরানো সংস্করণে একটি বাইট সংরক্ষণ করুন।
নীল

@ নীল হুম, আমি মনে করি না এটি একটি সহজ সমাধান তাই আমি কেবল একটি বিকল্প সংস্করণে স্যুইচ করব। যদিও অন্যান্য টিপটির জন্য ধন্যবাদ :-) এটি গল্ফযোগ্য দেখাচ্ছে তবে আমি কীভাবে দেখছি না ...
ETH প্রোডাকশনগুলি

আমি মনে করি আমি আরও কিছুটা চাঁচা করেছি, এখনও এখনও যথেষ্ট ছোট নয় যদিও:r=>[r>2&r<6?-1:r<2|r>6,r>4?-1:r%4&&1]
নিল

আপনি এটি দিয়ে একটি বাইট সংরক্ষণ করতে পারেন n=>[(s='22100012')[n]-1,s[n+6&7]-1]
আর্নৌল্ড

3

টিআই-বেসিক, 23 বাইট

Prompt X
e^(i(pi)X/4
round({real(Ans),imag(Ans)},0

ধরে নিই আপনার ক্যালকুলেটর রেডিয়ান মোডে রয়েছে; যদি প্রোগ্রামে থাকা দরকার তবে এটি 25 বাইট।


আমি মনে করি ডিফল্টভাবে রেডিয়ান মোড চালু আছে, সুতরাং আপনার ভাল হওয়া উচিত।
কনর ও'ব্রায়েন

1

জেলি , 13 12 বাইট

আমি আরও দৃ confident় আত্মবিশ্বাসী যে সেখানে আরও ছোট, তবে আমি এখনও কিছু পাইনি, তাই ভেবেছিলাম আমি এটি পোস্ট করব

+2,ị6400b3¤’

এটি অনলাইন চেষ্টা করুন! অথবা একটি পরীক্ষা স্যুট দেখুন

কিভাবে?

+2,ị6400b3¤’ - Main link: n                        e.g. 7
+2           - n+2                                      9
  ,          - paired with n: [n+2,n]                   [9,7]
          ¤  - nilad followed by link(s) as a nilad      9th         7th
    6400     -     6400                                  v           v
        b3   -     to base 3: [2,2,2,1,0,0,0,1]         [2,2,2,1,0,0,0,1]
   ị         - index into (1-indexed and modular)       [2,0]
           ’ - decrement (vectorises)                   [1,-1]

একটি বিকল্প পদ্ধতি , এছাড়াও 12 বাইট :

_/,+/Ṡ  - Link 1: get next coordinate: current coordinate (list) e.g. [-1,-1]
_/      - reduce by subtraction                                       0
   +/   - reduce by addition                                         -2
  ,     - pair                                                        [0,-2]
     Ṡ  - sign (vectorises)                                           [0,-1]

2BÇ⁸¡ - Main link: n
2B    - 2 in binary: [1,0]
    ¡ - repeat
   ⁸  - left argument (n) times:
  Ç   -     last link (1) as a monad

1

সি, 66 বাইট

f(n){printf("%d %d\n",(n-2)%4?n>2&n<6?-1:1:0,(n-4)%4?n>4?-1:1:0);}

পরীক্ষার কোড

main(i)
{for(i=0;i<8;++i) f(i);}

ফলাফল

1 0
1 1
0 1
-1 1
-1 0
-1 -1
0 -1
1 -1

0

সি, 56 বাইট

d(n){printf("%d,%d",n+2&3?n+2&4?-1:1:0,n&3?n&4?-1:1:0);}

দু'বার সরল বাইনারি অনুসন্ধান করা। প্রথম অনুসন্ধানটি এন দ্বারা স্থানান্তরিত 2 দ্বারা করা হয়।

আইডিয়নে অনলাইন আউটপুট।

সি, 53 বাইট

r;p(n){r?0:p(r=n+2);r=!printf("%d ",n&3?n&4?-1:1:0);}

কমা ব্যতীত আউটপুট পুনরাবৃত্তি কল ব্যবহার করে আরও বেশি সংক্ষেপণ করতে সক্ষম হয়েছিল।

আইডিয়নে অনলাইন আউটপুট।

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