एक डिजिटल प्लॉटर का निर्माण करें


11

समस्या डोनाल्ड एम। मोनरो की पुस्तक फोरट्रान 77 से अनुकूलित है

परिचय

डिजिटल प्लॉटिंग मशीनों का व्यापक रूप से चित्र, रेखांकन और अन्य चित्रात्मक परिणामों के विभिन्न रूपों का उत्पादन करने के लिए उपयोग किया जाता है। इस तरह की अधिकांश मशीनें अपने पेन को केवल कुछ दिशाओं में स्थानांतरित कर सकती हैं, आमतौर पर एक्स और वाई दिशा में एकल कदम या दोनों। एक विशिष्ट मशीन अंजीर में दिखाए गए आठ दिशाओं में से एक में जाएगी।

आकृति 1 चित्र 1

चुनौती

त्रिकोणमितीय कार्यों के बिना एक प्रोग्राम लिखें जो इनपुट के रूप में 0 से 7 (समावेशी) से एक संख्या लेता है और अंजीर में समापन बिंदुओं के संगत निर्देशांक को आउटपुट करता है। 1।

आउटपुट दो तत्वों के साथ एक सरणी या सूची के रूप में होना चाहिए (यानी (1, 0)या [0,-1])

I / O की तालिका

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रेडियंस द्वारा घुमाता है )
user41805

@ क्रिकी नहीं, प्रतिबंध पूरी तरह से cos, sin, tan, secआदि पर है
बीटा

मुझे पूरा यकीन है कि एक संबंधित प्रश्न है जिसमें निर्दिष्ट आकार के एक वर्ग की परिधि का पालन करना शामिल है, लेकिन मुझे यह नहीं मिल रहा है।
नील

1
<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)

एक जटिल संख्या के रूप में निर्देशांक लौटाता है।


ओह अच्छा। मैं भी जटिल संख्या का उपयोग करने के बारे में नहीं सोचा था!
हाइपरनेत्रिनो

बेशक यह एक अर्थ में त्रिकोणमितीय कार्यों का उपयोग करता है।
को बंद कर दिया

@ceasedtoturncounterclockwis ज़रूर, लेकिन यह समीकरण को सरल करता है जब तक कि वे अब मौजूद न हों।
निधि मोनिका का मुकदमा

7

गणितज्ञ, 24 बाइट्स

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

शुद्ध कार्य, उपयोग करना Signऔर यह जानना कि कुछ परबोलस कहाँ जाते हैं।


6

सी, 103 86 74 74 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

@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

जावास्क्रिप्ट (ईएस 6), 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]

X और Y अलग-अलग निर्देशांक खोजने के लिए कुछ सरल गणनाओं का उपयोग करते हुए Naive दृष्टिकोण ...


1
आपका वर्तमान संस्करण 4 और 5 के लिए गलत जवाब देता है, लेकिन मैं या तो लगता है r&&(r<4)-(r>4)या r%4&&1-(r&4)/2अपने पुराने संस्करण पर एक बाइट बचाने।
नील

@ नील हम्म, मुझे नहीं लगता कि यह एक आसान फिक्स है, इसलिए मैं सिर्फ एक वैकल्पिक संस्करण पर स्विच करूँगा। हालांकि अन्य टिप के लिए धन्यवाद :-) यह देखने में गोल्फ लगता है, लेकिन मुझे यह नहीं दिखता ...
ETHproductions

मुझे लगता है कि मैं थोड़ा और मुंडा हूं, फिर भी अभी तक बहुत कम नहीं हुआ है: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 बाइट्स

मैं अभी भी पूरी तरह आश्वस्त हूं कि छोटी है, लेकिन मुझे अभी तक कुछ नहीं मिला है, इसलिए मैंने सोचा कि मैं इसे पोस्ट करूंगा

+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 द्वारा n शिफ्ट किए जाने पर की जाती है।

Ideone पर ऑनलाइन आउटपुट।

सी, 53 बाइट्स

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

कॉमा के बिना आउटपुट एक पुनरावर्ती कॉल का उपयोग करके और भी अधिक कॉम्पैक्ट होने में सक्षम था।

Ideone पर ऑनलाइन आउटपुट।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.