একটি এএসসিআইআই কিউবিড আঁকুন


14

তিনটি পূর্ণসংখ্যা> = 2 দেওয়া হয়েছে, একটি অর্থোগোনাল (মন্ত্রিসভা) প্রক্ষেপণে একটি ASCII ঘনক তৈরি করুন। তিনটি পূর্ণসংখ্যা কোণগুলি সহ উচ্চতা, প্রস্থ এবং গভীরতা (দৃশ্যমান অক্ষরে পরিমাপ করা হয়) উপস্থাপন করে। কোণগুলি 'ও' বা '+', নিখরচায় পছন্দ হওয়া উচিত।

w: 10, h: 5, d: 4 এইভাবে দেয়:

   o--------o
  /        /|
 /        / |
o--------o  |
|        |  o
|        | /
|        |/
o--------o

এখন এটিকে কিছুটা শক্ত করার জন্য, সমস্ত মুখগুলি হয় কঠিন, স্বচ্ছ বা অনুপস্থিত। আমরা মুখগুলি এই জাতীয়ভাবে অর্ডার করি:

   o--------o
  /        /|
 /    2   / |
o--------o 3|
|        |  o
|   1    | /
|        |/
o--------o

  ---
  |2|
-------
|5|1|3|
-------
  |4|
  ---
  |6|
  ---

এবং টোকেন, এস, টি বা এম এর একটি তালিকা সরবরাহ করুন মূল উদাহরণটি হ'ল:

w 10
h 5
d 4
S S S S S S

   o--------o
  /        /|
 /        / |
o--------o  |
|        |  o
|        | /
|        |/ 
o--------o

যদি একটি মুখ স্বচ্ছ হয় তবে আমরা এর পিছনে থাকা যে কোনও কিছুই দেখতে পাই:

T S S S S S

   o--------o
  /        /|
 /        / |
o--------o  |
|  o-----|  o
| /      | /
|/       |/
o--------o


T T T T T T

   o--------o
  /|       /|
 / |      / |
o--------o  |
|  o-----|--o
| /      | /
|/       |/
o--------o

অনুপস্থিত মুখগুলির জোড়গুলির জন্য, সংলগ্ন প্রান্ত বা কোণগুলি আর দৃশ্যমান নয়:

M M S S S S

   o--------o
  /|       /|
 / |      / |
o  |     o  |
|  o-----|  o
| /      | /
|/       |/
o--------o

M M S S M S

   o--------o
   |       /|
   |      / |
   |     o  |
   o-----|  o
  /      | /
 /       |/
o--------o

কোড গল্ফ, সংক্ষিপ্ততম কোড জয়! ট্রেলিং স্পেস এবং নিউলাইনগুলি ঠিক আছে, আপনি ইনপুট পদ্ধতি এবং ইনপুট ক্রম চয়ন করতে পারেন।


5
আপনার ইনপুট ফর্ম্যাটটি কতটা কঠোর? আমি 9 পরামিতি দিয়ে একটি ফাংশন করতে পারি?
লিফডেওয়েন

1
@LiefdeWen you're free to choose input method and input order। এবং অন্যথায় কিছুই বলে না, কোনও ডিফল্ট ইনপুট / আউটপুট পদ্ধতি ব্যবহার করা যেতে পারে।
ডিজাইমা

আমি কি স্বচ্ছ / শক্ত পতাকাগুলির জন্য বিটম্যাপ হিসাবে পূর্ণসংখ্যা নিতে পারি?
তিতাস

@ টিটাস ভাল .. ঠিক আছে। আমি অনুমান করি যে এটি যদি আপনি নিজের দ্বারা মূল্যবোধগুলি প্রকৃতপক্ষে পরীক্ষা করতে পারেন তবে এটি কিছুটা বিনোদনমূলক।
নিক্লাসজে

উত্তর:


5

কাঠকয়লা , 190 181 বাইট

NωA⁻ω²ςNηA⁻η²γNδA⁻δ²χA⪪S αF›⊟αMF⟦ςγςγ⟧«oκ↶»F∧›⊟αM²«oς↷³oχ↷¹»F∧›⊟αM²«↷³oχ↷³oγ↶»M⁻ωδ⁻δηF⁼§α²SG↗δ↓η↙δ↑η F∧›⊟αM²«↶¹oχ↷³oγ↷»F⁼§α¹SG↗δ←ω↙δ→ω F∧›⊟αM²«↶¹oχ↶³oς»F⁼§α⁰SUO±ωη ↷F›⊟αMF⟦γςγς⟧«oκ↷

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। সম্পাদনা করুন: আমার শর্তগুলি অনুকূল করে 9 টি বাইট সংরক্ষণ করা হয়েছে। কাঠকয়ালের কোনও elseচিহ্ন নেই, সুতরাং ifকমান্ডের সর্বদা দুটি বিকল্প থাকে, যদি না তারা কোনও ব্লক বা প্রোগ্রামের শেষে হয়। এটি এড়াতে, আমি এর for (<bool>)পরিবর্তে ব্যবহার করি if (<bool>)যার একইরূপ প্রভাব থাকে যখন অভিব্যক্তিটি কেবল 0 বা 1 এর মান থাকতে পারে তবে একটি বাইট সংরক্ষণ করে। (ক্রম আমি অর্জন করতে এক্সপ্রেশন পরিবর্তন করতে যাতে তারা সবসময় ছিল সত্য যখন শরীরের প্রয়োজন মৃত্যুদন্ড কার্যকর করা হয়েছিল।) আমি নিখুত সক্ষম ছিল if (<bool>) for (<int>)মধ্যে for (And(bool, int))


পবিত্র খ্রিস্ট ও_ও। কাঠকয়লা ব্যবহার করে কীভাবে ঘনকটি আঁকতে হয় তা আমি নিজেও বুঝতে পারি না। গিথুব উদাহরণ ফোল্ডারে আপনি একটি সাধারণ কিউব আঁকার জন্য একটি উদাহরণ স্থাপন করতে পারেন? এক যে অনুকূলিত হয়েছে? আমি আমার মতটি তুলনা করতে চাই ... 50 বাইট উত্তরটি যা হওয়া উচিত ছিল তার উত্তর।
ম্যাজিক অক্টোপাস আরন

@ কারাসোকম্পুটিং দুঃখিত, "সাধারণ ঘনক্ষেত" দ্বারা আপনি কী বোঝাতে চেয়েছেন তা সম্পর্কে আমি অস্পষ্ট, এবং আমি নিজেই চারকোলের লেখক নই, তাই আমি উদাহরণ যোগ করতে পারি না।
নীল

তুমি না ?! পবিত্র বোকা, কে? আমি সত্যই ভেবেছিলাম আপনি ছিলেন। এছাড়াও, আমি একটি কাঠকয়লা অবদানকারী হতে বলব। আপনি গিথুব সহজেই এক হতে পারে :)। আপনি অবশ্যই ভাষায় প্রতিভাবান। এবং "সাধারণ কিউব" দ্বারা আমি চ্যালেঞ্জের প্রথমার্ধটিকে বোঝায়, কেবলমাত্র একটি X * Y * Z এসকিআইআই ঘনক তৈরি করে।
ম্যাজিক অক্টোপাস উরন

যতদূর আমি বলতে পারি @Carusocomputing ASCII- কেবলমাত্র প্রধান অবদানকারী, যদিও এসোলাং উইকিতে দ্বিতীয় অবদানকারীকে কৃতিত্ব দেওয়া হয়।
নীল

খুব কমপক্ষে আমি তাদের কয়েকটি উদাহরণের সাথে তাদের সাথে যোগাযোগ করব, আপনি এটি অন্য কারও চেয়ে দেখেছেন। আমি আপনার কোডটির আরও ব্যাখ্যা পেতে চাই, আমি এখন আপনার কাঠকয়ালের উত্তরগুলি কিছুটা সময় অনুসরণ করেছি কারণ ভাষাটি আমার কাছে আকর্ষণীয়।
যাদু অক্টোপাস উরন

2

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

পূর্ণসংখ্যার হিসাবে প্রস্থ, উচ্চতা এবং গভীরতা এবং অক্ষরের অ্যারে হিসাবে মুখগুলি গ্রহণ করে।

(w,h,d,l,M=(n,F)=>[...Array(n+1).keys()].map(F),a=M((L=w--+d)*(h--+--d),i=>++i%L?' ':`
`),D=(t,Y=0,X=d,W=t&1?d:w,H=t&2?d:h,F=l[t>>2])=>F>'R'&&M(W,i=>M(H,j=>a[p=L*(Y+j-i*(t&1))+X+i-(t&2?j:0)]=(x=!(i&&i-W)|2*!(j&&j-H))?' |-o|/o/-o'[t%4*3+x]:a[F>'S'?p:0])))=>D(20)&D(D(14,h)&D(17,d,0),d,D(9,d,w)&D(6))||a.join``

কিভাবে?

এম () ফাংশন একটি প্রদত্ত পরিসরে একটি প্রদত্ত কলব্যাক এফ প্রক্রিয়া করে [0 ... n]

M = (n, F) => [...Array(n + 1).keys()].map(F)

পরিবর্তনশীল একটি একটি ফ্ল্যাট অ্যারের আকারের একটি গ্রিড প্রতিনিধিত্বমূলক ঝুলিতে (W + D) X (জ + D-1) । এটি প্রাথমিকভাবে নিউলাইনগুলি দিয়ে শেষ হওয়া শূন্যস্থানগুলির সারি দ্বারা পূর্ণ।

a = M((L = w-- + d) * (h-- + --d), i => ++i % L ? ' ' : '\n')

ডি () ফাংশনটি কিউবয়েডের মুখ 'আঁকতে' ব্যবহৃত হয়।

প্যারামিটার টির দুটি অন্তত উল্লেখযোগ্য বিট মুখের প্রকারটি ধরে রাখে:

  • 0 = পিছনে / সামনের
  • 1 = বাম / ডান
  • 2 = নীচে / শীর্ষ

# 2 থেকে # 4 বিট 0-ভিত্তিক মুখ সূচকটি ধারণ করে।

D = (                                           // given:
  t, Y = 0, X = d,                              // - the type and the initial coordinates
  W = t & 1 ? d : w,                            // - the drawing width
  H = t & 2 ? d : h,                            // - the drawing height
  F = l[t >> 2]                                 // - the character representing the status
) =>                                            //
  F > 'R' &&                                    // provided that the face is not missing:
  M(W, i =>                                     // for each i in [0...W]:
    M(H, j =>                                   //  for each j in [0...H]:
      a[                                        //    update the output
        p = L * (Y + j - i * (t & 1)) +         //    at position p
            X + i - (t & 2 ? j : 0)             //
      ] =                                       //    with either:
      (x = !(i && i - W) | 2 * !(j && j - H)) ? //    - '|', '-' or '/' on edges
        ' |-o|/o/-o'[t % 4 * 3 + x]             //    - or 'o' on vertices
      :                                         //
        a[F > 'S' ? p : 0]                      //    - or a space on solid faces
    )                                           //    - or the current character on
  )                                             //      transparent faces

মুখগুলি নিম্নলিখিত ক্রমে আঁকা:

D(5 * 4 + 0, 0, d)  // face #5 (rear)
D(3 * 4 + 2, h, d)  // face #3 (bottom)
D(4 * 4 + 1, d, 0)  // face #4 (left)
D(2 * 4 + 1, d, w)  // face #2 (right)
D(1 * 4 + 2, 0, d)  // face #1 (top)
D(0 * 4 + 0, d, 0)  // face #0 (front)

ডেমো


1

এসওজিএল ভি0.11 , 200 194 193 192 190 বাইট

b³@*⁶
ž}1}X⁵
;aκ⁴
2-³
* o1Ο²
d=?a³:?∫:¹
be.Aā6∫D,ζLI%:C?abe"DCa∫:c+H⁴d+ /ž}{"a+Hy"e³┐²čž|"b³┌²žz"EBAøp”,ōkB°s9θW=*↑(⅜⅞~υ=\⁰ōwūΧ►ΣΤP░¶Ο⁽◄Φ7⅟▲s#‘┌Θdwι+#¶ŗ!!6c=?6d=?2aI⁶e³∙ž}5¹b+⁴Ie³@∙⁵}4¹2+⁴⁶⁵

ক্রমে ইনপুট নেয়

width
height
depth
down-face
left-face
back-face
top-face
right-face
front-face

বাঁধা!
এখানে চেষ্টা করুন! (সঙ্কোচিত মানটি V0.12 সামঞ্জস্যপূর্ণ হিসাবে পরিবর্তিত হয়েছে)

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