একটি ASCII মারা রোল


16

এই চ্যালেঞ্জে আপনাকে অবশ্যই একটি এলোমেলো ডাই রোলের অসি-আর্ট আউটপুট করতে হবে।

এটার মত:

   ________
  /\       \
 /  \   6   \
{ 4  }-------}
 \  /   5   /
  \/_______/

দয়া করে মনে রাখবেন:

   ________
  /\       \
 /  \   3   \
{ 4  }-------}
 \  /   5   /
  \/_______/

এটি অবৈধ আউটপুট, কারণ এটি ডাইতে কোনও সম্ভাব্য ফলাফল নয়

আছে 6(faces that could be up)*4(faces that could be the left face after the top is determined)*1(faces that could be the right face after the other two are determined)= ডাই রোলস 24 সম্ভাবনার।

আপনার প্রোগ্রামকে অবশ্যই এই ডাই রোলগুলির মধ্যে একটি এসিআই আর্ট আকারে তৈরি করা হবে (উপরের মতো xy এবং zs দ্বারা প্রতিস্থাপিত নীচের চিত্রের মতো), প্রতিটি আউটপুট> 0 সংঘটিত হওয়ার সম্ভাবনা থাকলেও সম্ভাবনাগুলি তা করে না এমনকি সমান হতে হবে (বাস্তব জীবনের বিপরীতে তাদের ট্রিক ডাইস হওয়ার অনুমতি রয়েছে)। আপনার প্রোগ্রামটি একটি অবৈধ ডাই রোল, বা নন ডাই রোল আউটপুট দিতে পারে না। আপনার প্রোগ্রামের একটি বৈধ রোল আউটপুট করার সম্ভাবনা 1 থাকতে হবে

দয়া করে মনে রাখবেন যে প্রথম ইমেজের মতো আপনার ডাই ডান হাতের ডাই হওয়ার দরকার নেই। (ডান এবং বাম হাত মরা জাল বর্ণনা)

right-handed die
   ________
  /\       \    net
 /  \   z   \     _|4|_ _
{ x  }-------}   |6|2|1|5|
 \  /   y   /      |3|
  \/_______/


left handed die
   ________
  /\       \    net
 /  \   y   \     _|3|_ _
{ x  }-------}   |6|2|1|5|
 \  /   z   /      |4|
  \/_______/

যদি আপনার ডাই বাম হাতে থাকে তবে নিম্নলিখিতটি বৈধ আউটপুট, তবে যদি আপনার ডাই ডান হাত হয়:

   ________
  /\       \
 /  \   2   \
{ 1  }-------}
 \  /   3   /
  \/_______/

আপনি বাম হাত বা ডান হাত বেছে নিতে পারেন, আপনার মরা সামঞ্জস্য হতে হবে: এটি বাম থেকে ডানে বা বিপরীতে পরিবর্তন করতে পারে না

নীচে ডাই জন্য বৈধ আউটপুট একটি তালিকা। এক্সওয়াইজেডের অবস্থানের জন্য উপরের ছবিগুলি দেখুন:

X-Y-Z
-----
5-4-1
1-5-4
4-1-5

5-6-4
4-5-6
6-4-5

5-3-6
6-5-3
3-6-5

5-1-3
3-5-1
1-3-5

2-6-3
3-2-6
6-3-2

2-4-6
6-2-4
4-6-2

2-1-4
4-2-1
1-4-2

2-3-1
1-2-3
3-1-2

আবার এটি , তাই কম বাইট ভাল


4
অন্য দু'জনকে প্রদত্ত তৃতীয় ডাই মুখের জন্য সূত্রে উত্সাহিতদের আগ্রহী হতে পারে ।
এক্সনর

@ এক্সনর এবং এ জাতীয় হিসাবে আমি মনে করি এটি একটি দৃ strong় যুক্তি যে এই প্রশ্নটি একটি নকল
ডিজিটাল ট্রমা

1
এই প্রক্ষেপণে কিউব আঁকার কোনও ASCII আর্ট থাকার পরেও আমি জানি না। যদিও ছোট আকারের সাথে, আমি জানি না পাইথনের মতো ভাষাগুলিতে হার্ডকডিংয়ের চেয়ে কেউ আরও ভাল করতে পারে কিনা।
এক্সনর


@ এক্সনর প্রকৃতপক্ষে, সেখানে কিছু 7 এবং 8 চরের সিকোয়েন্স সহ।
জোনাথন অ্যালান

উত্তর:


8

পাইথন 3, 197 196 192 বাইট

from random import*;c=choice;r=range(1,7);u=c(r);l=c(list(set(r)-{u,u^7}));print(r'''   ________
  /\       \
 /  \%4d   \
{ %d  }-------}
 \  /%4d   /
  \/_______/'''%(u,l,3*u*l*(u*u-l*l)%7))

এটি আদর্শের উপর পরীক্ষা করুন

ডান-হাতি (সোয়াপিং দ্বারা একটি ন্যাটা লোক সুইচ u*uসঙ্গে l*lশেষ লাইনটি দিকে)

মারতে হবে - তবে আসুন পাশা ঘূর্ণায়মান দীর্ঘশ্বাস ফেলুন - বিশেষ করে যেহেতু আমার ASCII গল্ফ করার সমস্ত প্রচেষ্টা কাঁচা হওয়া এবং পুরানো-স্কুল ফর্ম্যাটিং ব্যবহার ব্যতীত সংরক্ষণে ব্যর্থ হয়েছে;
- একটি n00b জন্য আরও গল্ফিং টিপস খুশি প্রশংসা।


1
আপনি from random import*এবং ব্যবহার করে 1 বাইট সংরক্ষণ করতে পারেন c=choice
অ্যাক্রোলিথ

@ দাগ হাগলেনি - এখন আমি এই সাদা স্থানটি মিস করতে পারিনি *; Ta!
জোনাথন অ্যালান

1
পিপিসিজিতে আপনাকে স্বাগতম! প্রথম প্রথম পোস্ট!
GamrCorps

ধন্যবাদ @ গ্যামার কর্পস - আমি কিছুক্ষণের জন্য কিছুটা বোঝাতে চাইছি ... এখন আমার কাছে সুরক্ষিত প্রশ্নে একটি অর্থপূর্ণ সমাধান পোস্ট করতে পারব ...: ডি
জোনাথন অ্যালান

2
3 স্পেস এবং তার পরিবর্তে পরিবর্তে %dব্যবহার %4dকরুন এবং এটি আপনার জন্য এটি সঠিকভাবে প্যাড করবে। আপনি ডাইয়ের অন্যান্য অংশের জন্যও এটির পক্ষে সক্ষম হতে পারেন।
কালি

5

সি, 177

f(r){r=rand()%24;r=(5545>>r%4*3&63^256-(r*2&8))*513>>r/8*3;printf("   ________\n  /\\%9s /  \\%4d   \\\n{ %d  }-------}\n \\  /%4d   /\n  \\/_______/","\\\n",7&r,7&r/8,7&r/64);}

পরীক্ষা প্রোগ্রামে

f(r){r=rand()%24;
r=(5545>>r%4*3&63^256-(r*2&8))*513>>r/8*3;
printf("   ________\n  /\\%9s /  \\%4d   \\\n{ %d  }-------}\n \\  /%4d   /\n  \\/_______/","\\\n",7&r,7&r/8,7&r/64);}

j;
main(){
    for(j=99;j--;puts(""))f();
}

ব্যাখ্যা

r=                    \\after calculation, assign to r (in order to use only one variable.)
(5545>>r%4*3&63       \\5545 is 12651 in octal. Select 2 digts for the equator
^256-(r*2&8))         \\if 4's bit of r is 0, prepend 4=256/64. Else prepend 3 and reverse one of the faces by xoring with 7. 256-8 = 248 = 3*64+7*8.
*513                  \\now we have a 3 digit octal number. duplicate all digits by multiplying by 1001 octal.
>>r/8*3               \\rightshift 0,1 or 2 digits to rotate. 

5

জাভাস্ক্রিপ্ট 238 232 207 201 বাইট

var r=24*Math.random()|0,o=r%3,b=r-o,v="123513653263154214624564";console.log(`   ________
  /\\       \\
 /  \\   %s   \\
{ %s  }-------}
 \\  /   %s   /
  \\/_______/`,v[r],v[b+(o+1)%3],v[b+(o+2)%3])

যা যখন নিরপরাধ হয়:

var r = 24 * Math.random() | 0,
    o = r % 3,
    b = r - o,
    v = "123513653263154214624564";
console.log(
`   ________
  /\\       \\
 /  \\   %s   \\
{ %s  }-------}
 \\  /   %s   /
  \\/_______/`,

    v[r],
    v[b+(o+1)%3]
    ,v[b+(o+2)%3]
)

অ্যালগরিদম

বিবেচনা করুন যে একটি ডাইর 8 টি কোণার ছেদগুলির প্রত্যেকটিতে ছেদকৃত ডাই মুখের মানগুলি স্থির রয়েছে তবে 3 টি ঘূর্ণনের যে কোনওটিতে প্রদর্শিত হতে পারে। উদাহরণস্বরূপ "1", "2", "3" কোণে দেখার সময়, ডাই একটি কোণ সম্পর্কে এবং বিপরীত কোণের বাইরে ঘুরানো যেতে পারে "1", "2" বা "3" দেখানোর জন্য এএসসিআইআই আর্টের শীর্ষে।

vহার্ড কোডগুলি মরা মুখগুলি যা প্রতিটি কোণে ছেদ করে, bএটি একটি এলোমেলো কোণার শুরুতে একটি অফসেট এবং oকোণার ডেটাগুলির মধ্যে ঘোরানো শুরু। ASCII আর্টটি console.logফর্ম্যাট স্ট্রিং ব্যবহার করে কনসোলটিতে লেখা হয় ।


আপনি সম্ভবত `উদ্ধৃতি ব্যবহার করে কয়েকটি বাইট মুণ্ডন করতে পারেন যা \nসমস্ত সময় লেখার পরিবর্তে আক্ষরিক নিউলাইন অক্ষরের ব্যবহারের অনুমতি দেয় ।
নীল

@ নীল সবচেয়ে প্রশংসা করেছেন, এটি ভাল কাজ করেছে। ';'
অনুসরণও

4

টিএসকিউএল 308 বাইট

DECLARE @ char(87)=(SELECT
REPLACE(REPLACE(REPLACE('   ________
  /\       \ 
 /  \   7   \ 
{ 8  }-------}
 \  /   9   /
  \/_______/',7,a),8,b),9,3*ABS(a*a*a*b-a*b*b*b)%7)
FROM(SELECT*,SUBSTRING(REPLACE(STUFF(123456,a,1,''),7-a,''),CAST(RAND()*4as int)+1,1)b
FROM(SELECT CAST(RAND()*6as int)+1a)x)x)PRINT @

280 বাইট (সার্ভার ম্যানেজমেন্ট স্টুডিওতে: ক্যোয়ারী - পাঠ্যের ফলাফল)

SELECT
REPLACE(REPLACE(REPLACE('   ________
  /\       \ 
 /  \   7   \ 
{ 8  }-------}
 \  /   9   /
  \/_______/',7,a),8,b),9,3*ABS(a*a*a*b-a*b*b*b)%7)
FROM(SELECT*,SUBSTRING(REPLACE(STUFF(123456,a,1,''),7-a,''),CAST(RAND()*4as int)+1,1)b
FROM(SELECT CAST(RAND()*6as int)+1a)x)x

দ্রষ্টব্য: মুদ্রণ এবং ঘোষিত অংশটি সরিয়ে - এবং ফলাফলটি সরাসরি নির্বাচন থেকে আউটপুট করুন। তবে এটি কাজ করবে না

বেহালা


হতে পারে আপনি ABS(a^3*b-a*b^3)4 বাইট সংরক্ষণ করতে পরিবর্তন করতে পারেন ? (আমি নিশ্চিত নই - এই ভাঁড়িতে কাজ করছে বলে মনে হচ্ছে তবে এটি আমাকে কখনও একটি, র, সি = 5,1,3 এর একটি রোল দিচ্ছে যাতে আমার ভুল হতে পারে)
জোনাথন অ্যালান

@ জোনাথান অ্যালান আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ। ক্ষতিকারক টিএসকিউএল এ পাওয়ার (ক, ৩) লেখা হয়। a এর আলাদা অর্থ রয়েছে
t-clausen.dk

4

জাভাস্ক্রিপ্ট, 251 বাইট

r="replace";a=()=>(0|Math.random()*6)+1;b=(x,y)=>3*x*y*(x*x+6*y*y)%7;u=()=>{x=a(),y=a();z=b(x,y);if(z==0)u();return"   ________\r\n  \/\\       \\\r\n \/  \\   1   \\\r\n{ 2  }-------}\r\n \\  \/   3   \/\r\n  \\\/_______\/"[r](1,x)[r](2,y)[r](3,z);}

u();
এটি ব্যবহার করে কল করুন এটি দীর্ঘ তবে এটি একটি উত্তর, এবং আমি দীর্ঘ সময় উত্তর দিইনি।


আদর্শের উপর আউটপুট পরীক্ষার উপরের-বামে একটি জায়গা মিস করা
জোনাথন অ্যালান

a=()=>(0|Math.random()*6)+1;8
traktor53

3

রুবি, 150 বাইট

সমস্ত স্ট্রিং বিন্যাস অপব্যবহার !!!

শেষ সংখ্যাটি পাওয়ার সূত্রের ক্রেডিট এখানে @xnor এ যায় ।

u=1+rand(6)
l=([*1..6]-[u,u^7]).sample
$><<'%11s
  /\%8s
 /  \%4d%4s
{ %d  }%s}
 \  /%4d%4s
  \/%s/'%[?_*8,?\\,u,?\\,l,?-*7,3*u*l*(u*u-l*l)%7,?/,?_*7]

না - সূত্রের কৃতিত্ব xnor এ যায়
জোনাথন অ্যালান

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