ডেথ বাই শক প্রোব: এ তো অনেক ডাইস


20

ওয়েবকমিক ডারথস অ্যান্ড ড্রয়েডস-এ , কমিকটি নির্ভর যে কল্পিত রোলপ্লেইং ক্যাম্পেইনে আর 2-ডি 2 বাজানো পিট একবার দাবি করেছে (সতর্কতা: লিঙ্কযুক্ত কমিকের সম্ভাব্য বিলোপকারী) দাবি করেছে যে, ফ্যানাস্ট্যাকোরিয়ার হারানো অর্বকে তার সাথে বেঁধে দেওয়া হয়েছে শক তদন্ত, তিনি এখন একটি সম্পূর্ণ 1048576d4 খুঁজে বের করতে পারেনক্ষতির (জিএম এটি নিশ্চিত করেছেন বা অস্বীকার করেননি।) যেহেতু এটি যুক্তিসঙ্গতভাবে স্পষ্ট হওয়া উচিত যে এতগুলি ডাইস রোল করার জন্য প্রায় কেউই ধৈর্য ধারণ করতে পারে না, তার জন্য এটি করার জন্য একটি কম্পিউটার প্রোগ্রাম লিখুন, মোট মূল্যকে কিছুটা যুক্ত করে আউটপুট করে তোলেন বিন্যাস। এন্ট্রিগুলিকে রান টাইম ব্রেকিং সম্পর্ক সহ প্রোগ্রামের আকার (সংক্ষিপ্ততম প্রোগ্রাম, বাইট গণনা অনুসারে, জিত) দ্বারা স্থান দেওয়া হবে run উত্তরটি পুরো প্রোগ্রাম বা কোনও ফাংশন সংজ্ঞা হতে পারে।

প্রতি ভাষা স্কোর

Pyth

মালটিসেন - 8 বাইট *

জাকুব - 10 বাইট

APL

অ্যালেক্স এ - 10 বাইট

CJam

অপ্টিমাইজার - 11 বাইট

জে

গেমস - 12 বাইট **

Clip10

Ypnypn - 12 বাইট **

কে

জন - 13 বাইট

টিআই -84 বেসিক

সুপারজেডি ২২৪ - ১ by বাইট *

আর

মিকিটি - 23 বাইট

অষ্টক / ম্যাটল্যাব

ওবেলে - 24 বাইট

Pari / জিপি

চার্লস - 25 বাইট **

উল্ফর্যাম / ম্যাথামেটিকাল

LegionMammal978 - 27 বাইট

পার্ল

নটকি - 29 বাইট

AsciiThenAnsii - 34 বাইট

চুনি

হেইগিন - 32 বাইট **

কনফিউজড এমআর_সি - ৫১ বাইট **

কমোডোর বেসিক

চিহ্ন - 37 বাইট **

পিএইচপি

ইসমাইল মিগুয়েল - 38 বাইট

VBA

শন চশায়ার - 40 বাইট **

শক্তির উৎস

নচট - 41 বাইট **

জাভাস্ক্রিপ্ট

র‌্যাল্ফ মার্শাল - 41 বাইট

edc65 - 54 বাইট (ES6 কার্যকারিতা সমস্ত ব্রাউজারে উপলব্ধ নয়।)

অ্যাপ্লিকেশন Lua

cryptych - 51 বাইট

জাভা

রবউ - 52 বাইট **

জিওবিটস - 65 বাইট

সি

Functino - 57 বাইট

পাইথন

কার্পেট পাইথন - 58 বাইট

Postgre / SQL এর

অ্যান্ড্রু - 59 বাইট **

দ্রুতগতি

Skrundz - 69 বাইট

GoatInTheMachine - 81 বাইট

Haskell,

জিটা - 73 বাইট **

ActionScript

ব্রায়ান - 75 বাইট **

> <>

কনফিউজড এমআর_সি - 76 বাইট

যাওয়া

ক্রিস্টোফার সল-স্টোরগার্ড - 78 বাইট

সি শার্প

ব্র্যান্ডন - 91 বাইট **

অ্যান্ড্রু - 105 বাইট

ইয়ান - 148 বাইট

আঁচড়ের দাগ

সুপারজেডি 224 - 102 বাইট

সি ++

মাইচেলফ্রান্সিস বুস্টিলোস - 154 বাইট

Polyglots

ইসমাইল মিগুয়েল (জাভাস্ক্রিপ্ট / অ্যাকশনস্ক্রিপ্ট 2) - 67 বাইট


শীর্ষ 10 সামগ্রিকভাবে

Maltysen
অ্যালেক্স এ
Jakube
অপ্টিমাইজার
/uʎs / Ypnypn (অর্ডার অনিশ্চিত)
JohnE
SuperJedi224
MickyT
Oebele

সতর্কতা - একটি * দিয়ে চিহ্নিত এন্ট্রিগুলি খুব কম।

প্রোগ্রামযুক্ত চিহ্নিত ** আমি এখনও সঠিকভাবে পরীক্ষা করতে সক্ষম হইনি


অপেক্ষা করুন, আমাকে কি তালিকার ডাইস রোল বা কেবল সমস্ত রোলগুলির যোগফল দিতে হবে?
মালটিসেন

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

2
একটি ভাল সময় বিচারের জন্য এই সমস্যাটি খুব দ্রুত করা যায়।
isaacg

12
ম্যানুয়ালি সাবমিশনের তালিকাটি আপ টু ডেট না রেখে আপনি স্ট্যাক স্নিপেট লিডারবোর্ড তৈরি করতে আপনার হাত চেষ্টা করতে পারেন।
অ্যালেক্স এ।

1
আমি এই শিরোনামটি একেবারে পছন্দ করি।
ASCIIThenANSI

উত্তর:


10

পাইথ - 9 8 বাইট

র্যান্ডিন্টের সংমিশ্রণের সুস্পষ্ট সহজ পদ্ধতি ব্যবহার করে। আমাকে মিনিট উপলব্ধি করা টুক 1048576ছিল 2^20, এখন আমি সত্যিই মূঢ় মনে। আমাকে ইশারা করে বাইট সংরক্ষণের জন্য @Jakube ধন্যবাদ 2^20 = 4^10

smhO4^4T

রানটাইমটি ভয়াবহ, এটি এখনও আমার কম্পিউটারে শেষ হয়েছে, সুতরাং এটি অনলাইনে চালানোর কোনও মানে নেই তাই এখানে 2^10একটি: এখানে অনলাইনে চেষ্টা করে দেখুন

s        Summation
 m       Map
  h      Incr (accounts for 0-indexed randint)
   O4    Randint 4
  ^4T    Four raised to ten

4
8 বাইট সম্ভব। 2^20 = 4^10
জাকুবে

@ জাকুব টিপটির জন্য ধন্যবাদ :)
মাল্টেসেন

এটি আমার জন্য অবিলম্বে শেষ হয়।
কার্সিজিনিট

@ কারসিজেনিকেট আপনি আমার দেওয়া লিঙ্কটি সম্পর্কে কথা বলছেন? এটি পরিবর্তিত এক, কেবল যোগফল 1024d4
মাল্টেসেন

@ মালটিসেন ওফস, দুঃখিত। হ্যাঁ, এটা।
কারসিজিনিট

9

পার্ল - 48 44 37 39 34 বাইট

$-+=rand(4)+1for(1..2**20);print$-

কোনও পেছনের নিউলাইন ছাড়াই যোগফল মুদ্রণ করে। (ধন্যবাদ মালটিসেন) এর পরিবর্তে এবং মুদ্রণের চারপাশে উদ্ধৃতিগুলি সরিয়ে
4 বাইট সংরক্ষণ করা হয়েছে 2**20
কোডটি পুনরায় সাজিয়ে আরও 7 বাইট সংরক্ষণ করা হয়েছে (ধন্যবাদ থাইলন!)
2 বাইট হারিয়েছে কারণ আমার পুরানো কোডটি 0-4 তৈরি করেছে (এটি 1-4 হওয়া উচিত)।
আবার, কেক এবং নটকিকে ধন্যবাদ 5 টি বাইট সংরক্ষণ করুন।

অবহেলিত, সঠিকভাবে লিখিত কোড:

my $s = 0
$s += int( rand(4) + 1 ) for (1 .. 2**20);
print "$s";

একটি টাইমার হুক আপ করা কিছুটা কঠিন ছিল, তবে শেষ পর্যন্ত এটি কাজ করে চলেছি।
সুপারজেডি ২২৪

2
যেহেতু আমরা সতর্কতাগুলির প্রতি যত্নশীল নই ... 1. s + = int র্যান্ড (5) (1..2 ** 20) এর জন্য; প্রিন্ট
থাইলন

3
int(rand(5))0 থেকে 4
টির মধ্যে

@ নটকি ঠিক আছে, ধন্যবাদ আমি এখনই এটি সম্পাদনা করেছি।
ASCIIThenANSI

$s+=int rand(4)+1for(1..2**20);print$sইনট এর জন্য প্রথম বন্ধনী সরিয়ে ফেলা আমার জন্য কাজ করে, একটি স্ট্রোক সংরক্ষণ করে।
Caek

7

এপিএল, 11 10 বাইট

+/?4⍴⍨2*20

এটি কেবল 1 থেকে 4 এর মধ্যে 2 20 = 1048576 এলোমেলো পূর্ণসংখ্যার যোগফলের যোগফল গ্রহণ করে ।

+/           ⍝ Reduce by summing a
  ?          ⍝ random integer
   4⍴⍨       ⍝ array with values between 1 and 4
      2*20   ⍝ of length 2^20

আপনি আগে এবং পরে টাইমস্ট্যাম্প মুদ্রণ করে ট্রাইএপিএলে এটি বেঞ্চমার্ক করতে পারেন । এটি প্রায় 0.02 সেকেন্ড সময় নেয়।

মেরিনাস এবং এফইউজেডএক্সএক্সএলকে একটি বাইট ধন্যবাদ সংরক্ষণ করা!


এক এবং 5 ??? একটি ডি 4 আপনাকে 1, 2, 3 বা 4 দিতে পারে You আপনি পাচ্ছেন না 5
লরেন পেচটেল

@ লরেনপেকটেল: দুঃখিত, আমার খারাপ। যে ইশারা জন্য ধন্যবাদ। এটা এখন ঠিক। আমার ক্লান্ত মস্তিষ্ক
অ্যালেক্স এ।

একটি বাইট সংরক্ষণ করুন:+/?4⍴⍨2*20
মেরিনাস

ছোট উন্নতি: +/?4⍴⍨2*20পরিবর্তে ব্যবহার করুন।
FUZxxl

1
ঘটনাচক্রে, এই উত্তরটি কোনওভাবেই গল্ফ হয় না: এটি প্রযোজনার এপিএল কোডে ঠিক একইভাবে লেখা হবে।
FUZxxl

7

টিআই -84 বেসিক, 17 বাইট

মোট পদচিহ্ন - প্রোগ্রাম শিরোনামের আকার = 17 বাইট

রান সময়: অজানা, ছোট সংখ্যক রোলগুলির পারফরম্যান্সের ভিত্তিতে 5-6 ঘন্টা অনুমান করা হয়েছে (সুতরাং, মূলত, খুব ভাল নয়)

Σ (randInt (1,4), এ, 1,2 ^ 20

1
এটি টিআই -৪৪ চালানোর জন্য +1 1 আমার ধারণা সময় এখানে কোনও সমস্যা নয়, এগুলি এখন 30-40 বছরের পুরানো ক্যালকুলেটর।
এসসিআইথেনানসি

আমি অনুমান করি যে ইউনিফর্মের চেয়ে সাধারণ বন্টনকে নমুনা দেওয়ার জন্য কোনও ফাংশন আছে? অনেক দ্রুত হওয়া উচিত be
বেন ভয়েগট

@ বেনভয়েগ্ট: যেহেতু এটি পাশা ঘূর্ণায়মান অনুকরণ করার জন্য বোঝানো হয়েছে, তাই সাধারণ বিতরণ উপযুক্ত নয়; এটি অভিন্ন হতে হবে।
অ্যালেক্স এ।

2
@ অ্যালেক্সা: কেন্দ্রীয় সীমাবদ্ধতা উপপাদ্যটি সরবরাহ করে যে অনেকগুলি ইউনিফর্ম ডাইসের যোগফল একটি সাধারণ বিতরণ থেকে পৃথক হয়। সুতরাং এটি নির্ভর করে যে আমরা "সিমুলেটিং রোলিং" সম্পর্কে পেডেন্টিকের উপরে আছি।
বেন ভয়েগট

1
@ মিআইরাইট, আমি ভেবেছিলাম এটি কেবল যোগাযোগের জন্য। কমপক্ষে আমি এএএ ব্যাটারি ব্যবহার করেছি।
আর্টুরো টরেস সানচেজ

7

আর, 32 24 23 21 বাইট

সম্পাদনা: as.integerএবং ব্যবহৃত পূর্ণসংখ্যা বিভাগ থেকে মুক্তি পেয়েছি %/%। কিছুটা গতি বাড়িয়ে দিন।

নমুনা টিপের জন্য অ্যালেক্স এ-কে ধন্যবাদ এবং ... r=

sum(sample(4,2^20,T))

দিয়ে পরীক্ষিত

i = s = 0
repeat {
i = i + 1
print(sum(sample(4,2^20,r=T)))
s = s + system.time(sum(sample(4,2^20,r=T)))[3]
if (i == 10) break
}
print (s/10)

আউটপুট

[1] 2621936
[1] 2620047
[1] 2621004
[1] 2621783
[1] 2621149
[1] 2619777
[1] 2620428
[1] 2621840
[1] 2621458
[1] 2620680
elapsed 
   0.029 

খাঁটি গতির জন্য নিম্নলিখিতটি মাইক্রোসেকেন্ডগুলিতে সম্পূর্ণ হয়। তবে আমি নিশ্চিত নই যে এর পক্ষে আমার যুক্তি সঠিক হয়ে উঠেছে। ফলাফল এলোমেলো পদ্ধতির সাথে সামঞ্জস্যপূর্ণ প্রদর্শিত হয়। লজ্জা এটি একটি দীর্ঘ দৈর্ঘ্য।

sum(rmultinom(1,2^20,rep(1,4))*1:4)

আমি আমার মেশিনে একটি টাইমিং রান করেছি

system.time(for(i in 1:1000000)sum(rmultinom(1,2^20,rep(1,4))*1:4))
                   user                  system                 elapsed 
7.330000000000040927262 0.000000000000000000000 7.370000000000345607987 

আপনি ব্যবহার করে একটি দম্পতি বাইট সংরক্ষণ করতে পারবেন sample()স্থানে runif(), অর্থাত্ sum(sample(4,2^20,r=T))
অ্যালেক্স এ।

আমার কম্পিউটারে কিছুটা বেঞ্চমার্কিং করেছে এবং sample()আসলে খুব দ্রুত!
অ্যালেক্স এ।

@AlexA। ধন্যবাদ যখন আমি কোনও কম্পিউটারের কাছাকাছি আসছি তখন পরীক্ষা এবং পরিবর্তিত হবে
মিকিটি

এই বা অন্য কোনও কিছুতে নয় তবে আপনার প্রয়োজন নেই r=T, Tপ্রতিস্থাপনের জন্য ঠিক আছে ।
জিউসেপ

1
@ জিউস্পেপ, ধন্যবাদ .. এটি সত্যিই একটি পুরানো ছিল
মিকিটি

6

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

আমরা অপারেটিং সিস্টেম থেকে 1048576 এলোমেলো অক্ষর পাই, প্রতিটির 2 বিট নিই এবং সেগুলি যুক্ত করি। osলাইব্রেরিটি ব্যবহার করা লাইব্রেরি ব্যবহারের মাধ্যমে কয়েকটি অক্ষর সংরক্ষণ করবে বলে মনে হচ্ছে random

import os
print sum(1+ord(c)%4 for c in os.urandom(1<<20))

এটি আমার পিসিতে প্রায় 0.2 সেকেন্ড সময় নেয়।


6

সিজেম, 12 11 বাইট

YK#_{4mr+}*

এটি বেশ সোজা foward:

YK                  e# Y is 2, K is 20
  #                 e# 2 to the power 20
   _                e# Copy this 2 to the power 20. The first one acts as a base value
    {    }*         e# Run this code block 2 to the power 20 times
     4mr            e# Get a random int from 0 to 3. 0 to 3 works because we already have
                    e# 2 to the power 20 as base value for summation.
        +           e# Add it to the current sum (initially 2 to the power 20)

কিন্তু এর সৌন্দর্য এটি খুব দ্রুত এটিও! আমার মেশিনে (এবং জাভা সংকলক ব্যবহার করে ) এটি গড়ে 70 মিলিসেকেন্ডে লাগে।

অনলাইন সংস্করণ আমার মেশিনে 1.7 সেকেন্ড প্রায় সময় লাগে।

আপডেট : ডকম্যাক্সকে ধন্যবাদ 1 বাইট সংরক্ষিত


অনলাইন সংস্করণটি এখানে কম্পিউটারগুলি থেকে প্রায় 6 সেকেন্ড সময় নিচ্ছে, তবে সম্ভবত এটি কেবল নেটওয়ার্ক এবং / অথবা ম্যাকবুকগুলি স্কুলটি ব্যবহারের জন্য জোর দেয়। আমি ঘরে ফিরে আবার চেষ্টা করব।
সুপারজেডি ২২৪

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

3
আমি যদি কিছু মিস করি না (তবে দুঃখের সাথে সিজেএম এবং আমার কাছে খুব সাধারণ), 0 দিয়ে সিড করার পরিবর্তে 2 ^ 20 রানের জন্য 1 যোগ করার পরিবর্তে, 1 বাইট বাঁচানোর জন্য 2 ^ 20 দিয়ে বীজ:YK#_{4mr+}*
ডকম্যাক্স

@ ডকম্যাক্স আপনি ঠিক বলেছেন ধন্যবাদ!
অপ্টিমাইজার

+1 টি; আমি এই সঠিক উত্তরটি পোস্ট করতে যাচ্ছিলাম ( 4A#পরিবর্তে বাদে YK#) তবে আপনি আমাকে এতে মারধর করেছেন। :)
ইলমারি করোনেন

6

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

গড় সময় <100 ম্যাসি। পরীক্ষার জন্য স্নিপেট চালান (ফায়ারফক্সে)

// This is the answer
f=t=>(i=>{for(t=i;i--;)t+=Math.random()*4|0})(1<<20)|t

// This is the test
test();

function test(){
  var time = ~new Date;
  var tot = f();
  time -= ~new Date;
  
  Out.innerHTML = "Tot: " + tot + " in msec: " + time + "\n" + Out.innerHTML;
}
<button onclick="test()">Repeat test</button><br>
<pre id=Out></pre>

ব্যাখ্যা

কোনও পরিসংখ্যান প্যাকেজ অন্তর্নির্মিত না থাকায়, জাভাস্ক্রিপ্টে 1 মিলিয়ন র‌্যান্ডম সংখ্যার যোগফল অর্জনের সবচেয়ে সংক্ষিপ্ত উপায়টি এক মিলিয়ন বারের জন্য এলোমেলো () কল করা। তাই সহজ

f=()=>{
   var t = 0, r, i
   for (i=1<<20; i--; ) 
   {
      r = Math.random()*4 // random number between 0 and 3.9999999
      r = r + 1 // range 1 ... 4.999999
      r = r | 0 // truncate to int, so range 1 ... 4
      t = t+r
   }
   return t
}

এখন, এক মিলিয়ন বারের জন্য 1 যুক্ত করা 1 মিলিয়ন যোগ করার চেয়েও সমান, বা আরও ভাল, যোগফলটি 1 মিলিয়ন দিয়ে শুরু করুন এবং তারপরে বাকী যুক্ত করুন:

f=()=>{
   var t, r, i
   for (t = i = 1<<20; i--; ) 
   {
      r = Math.random()*4 // random number between 0 and 3.9999999
      r = r | 0 // truncate to int, so range 0 ... 3
      t = t+r
   }
   return t
}

তারপরে গল্ফ, অস্থায়ী ভেরিয়েবল আর ড্রপ করুন এবং স্থানীয় ভেরিয়েবলগুলির ডিক্লেয়ারেশন ড্রপ করুন। tএকটি প্যারামিটার, যেমন একটির ঘোষণাকে সংক্ষিপ্ত করতে প্রয়োজন fiবিশ্বব্যাপী (খারাপ জিনিস)

f=t=>{
   for(t=i=1<<20;i--;) 
      t+=Math.random()*4|0
   return t
}

তারপরে একটি নামহীন অভ্যন্তরীণ ফাংশন ব্যবহার করে 'ফিরে' এড়াতে একটি উপায় সন্ধান করুন। পার্শ্ব প্রতিক্রিয়া হিসাবে, আমরা অন্য প্যারামিটার লাভ করি যাতে কোনও গ্লোবাল ব্যবহৃত হয় না

f=t=>(
  (i=>{ // start inner function body
     for(t=i;i--;)t=t+Math.random()*4|0 // assign t without returning it
   })(1<<20) // value assigned to parameter i
  | t // the inner function returns 'undefined', binary ored with t gives t again
) // and these open/close bracket can be removed too

ক্রোমে কাজ করে না। এফএফ পরীক্ষার বিষয়ে।
সুপারজেডি ২২৪

অবশ্যই. ক্রোম হ'ল ES5
21

1
এর কিছু ES6 সমর্থন রয়েছে (যার বেশিরভাগটি শুধুমাত্র ক্রোম থেকে পরীক্ষামূলক জাভাস্ক্রিপ্ট সক্ষম করে: is পতাকাগুলি পাওয়া যায়) তবে তীর ফাংশনগুলি এখনও সমর্থন করে না
সুপারজেডি ২২৪

5

পার্ল, 29

প্রয়োজনীয় দৈর্ঘ্যের একটি সারণী উত্পন্ন করে।

print~~map{0..rand 4}1..2**20

আমি এটিতে একটি সিনট্যাক্স ত্রুটি পেয়েছি।
সুপারজেডি ২২৪

এটির জন্য পার্লের একটি নতুন যথেষ্ট সংস্করণ প্রয়োজন (স্মার্টম্যাচ অপারেটরটি 5.10.1 এ চালু হয়েছিল এবং আমি মনে করি এটি পরে ডিফল্টরূপে উপলব্ধ করা হয়নি)।
চিহ্নিত করুন

~~স্মার্টম্যাচ নয়, স্কেলার প্রসঙ্গে জোর দেওয়ার জন্য কেবল একটি ডাবল বিট বিপরীত। একটি চরিত্র দীর্ঘ পথ হবে print$x=map...। স্মার্ট ম্যাচের সাথে অস্পষ্টতার কারণে এটি নতুন সংস্করণগুলিতে সতর্ক হতে পারে তবে এটি আমার সিস্টেমে এবং এখানে সতর্কতা ছাড়াই কাজ করবে বলে মনে হচ্ছে: আদর্শ one.com/LAIWzq
nutki

হ্যাঁ, এটি আইডিয়নে কাজ করে। আমি এটি আপনাকে দেব।
সুপারজেডি ২২৪

5

জে (12 বাইট, প্রায় 9.8 মিলিসেকেন্ড)

+/>:?4$~2^20

আমি সন্দেহ করি এটি বেশিরভাগ মেমরি ব্যান্ডউইথ-সীমাবদ্ধ: আমি এটি একটি একক কোরও সর্বোচ্চ অর্জন করতে পারি না ...

আপনি নিম্নলিখিত কোড সহ এটি পরীক্ষা করতে পারেন:

   timeit =: 13 : '(1000 * >./ ($/x) 6!:2"0 1 y)'
   4 20 timeit '+/>:?4$~2^20'
9.90059

এটি 20 টি ট্রেলের 4 টি গ্রুপে এটি চালায় এবং দ্রুততম গ্রুপে অ্যাভারেজ সময়ের মিলি সেকেন্ডের সংখ্যা ফিরে আসে। এখানে একজন দোভাষী পাওয়া যাবে


4

পাইথ, 10 বাইট

u+GhO4^4TZ

এটিতে @ মাল্টেসেনের পাইথ সলিউশনটির চেয়ে কিছুটা বেশি বাইট রয়েছে। তবে এটি আমার ল্যাপটপে 8.5 সেকেন্ডের মধ্যে চলেছে, যখন @ মাল্টেসেনের সমাধান 20 মিনিটের চলমান সময়ে কোনও সমাধান দেয় না।

তবে এখনও অনলাইন সংকলকটির জন্য কিছুটা ধীর।

ব্যাখ্যা

u     ^4TZ   start with G = 0, for H in 0, ... 4^10-1:
                G = 
 +GhO4              G + (rand_int(4) + 1)
             result is printed implicitly 

আজ বিকেলে এই পরীক্ষা করবে।
সুপারজেডি ২২৪

4

জাভা, 65

যেহেতু আমরা ভাষা অনুসারে স্কোর তালিকাভুক্ত করেছি, তাই জাভাটিকে মিশ্রণে ফেলে দিচ্ছি না কেন? এখানে গল্ফ করার মতো খুব বেশি কিছু নেই, কেবল একটি সরল লুপ, তবে আমি আমার প্রথম প্রয়াস থেকে কয়েকজনকে চেপে ধরতে পেরেছিলাম:

int f(){int i=1<<20,s=i;while(i-->0)s+=Math.random()*4;return s;}

আজ বিকেলে এই পরীক্ষা করবে।
সুপারজেডি ২২৪

সমস্যা নেই. এটি (ধীর) পিসিতে প্রায় 80 মিমি লাগে, তবে আপনি কীভাবে সময় ব্যবহার করছেন তা আমি জানি না।
জিওবিটস

আমি বিশ্বাস করি না যে আপনার প্রোগ্রামটি একটি সঠিক মডেল। এটি আমার পরীক্ষায় কিছু রোলগুলিতে 0 যুক্ত করতে এবং করতে পারে। যেহেতু আমি এটি বুঝতে পেরেছি সর্বাধিক ডি 4 এর 1,2,3,4 (কোনও 0 সম্ভাব্য নয়)।

4
@ ব্যবহারকারী39526 s(মোট যোগফল) থেকে শুরু হয় 1<<20( রোলসের সংখ্যা)। এটি প্রতিটি রোলটিতে একটি যোগ করার সমতুল্য। Randomizer ছোঁড়ার যখন 0, এটা ইত্যাদি ঘূর্ণিত একটা 1,
Geobits

আপনার জাভা 8 এ আপগ্রেড করা উচিত! কোডগলফ.স্ট্যাকেক্সেঞ্জিং.com
a/

4

মতলব, 24

প্রথম জমা!

sum(randi([1,4],1,2^20))

আমি রেন্ডি ([1,4], 1024) ব্যবহার করার আশা করেছিলাম যা 1048576 উপাদানগুলির একটি ম্যাট্রিক্স দেয় তবে তারপরে আমার একটি দ্বিগুণ যোগফল প্রয়োজন যা এর চেয়ে বেশি অক্ষর লাগে takes

প্রশ্নে উল্লিখিত চলমান গতি সম্পর্কে, timeitআমাকে রানটাইমটি প্রায় 0.031 সেকেন্ডের কথা বলে। সুতরাং, বেশ তাত্ক্ষণিক।


আমি অনলাইনে অক্টেভের মাধ্যমে 0.04 থেকে 0.05 সেকেন্ড পাচ্ছি।
সুপারজেডি ২২৪

4

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

import System.Random
f=fmap sum.(sequence.replicate(2^20))$randomRIO(1,4)

ব্যবহার:

$ ghci sourcefile.hs
ghci> f
2622130

4

সি #: 105 বাইট

using System.Linq;class C{int D(){var a=new System.Random();return new int[1<<20].Sum(i=>a.Next(1,5));}}

ভাল, আমি এটি দুটি বার ভুল হলেও পছন্দ করি। এটি 1 << 20, 2 << 20 নয়। এবং র্যান্ডম.নেক্সটসের দ্বিতীয় প্যারামিটারটি The *exclusive* upper bound of the rangeতাই 5
edc65

@ edc65 এই ত্রুটিগুলি ধরার জন্য ধন্যবাদ। আমি উত্তর আপডেট করেছি।
অ্যান্ড্রু

1
আপনি aএর new System.Random()ভিতরে থাকা এবং সরানোর মাধ্যমে 9 টি অক্ষর বাঁচাতে পারেন Sum। অবশ্যই, এটি Randomপ্রতিবারই নতুন তৈরি করবে , তবে এর ফলাফল দেওয়ার পরে কে যত্ন করে?
LegionMammal978

@ লিজিওনম্যামাল ৯78৮ আপনি যদি বারবার নতুন এলোমেলো তৈরি করেন তবে ফলাফলটি বেশিরভাগ ক্ষেত্রেই এলোমেলো
edc65

@ edc65 এ কারণেই আমি সেই পথে যাই নি। আমি পরামর্শটি অনুসরণ করলে কী হয় তা পরীক্ষা করার সুযোগ পাইনি।
অ্যান্ড্রু

4

পিএইচপি, 38 37 বাইট

এটি একটি খুব সাধারণ ধারণা ব্যবহার করে: তাদের সমস্তটি যোগ করুন!

এছাড়াও, আমি লক্ষ্য করেছি যে 1048576এটি 10000000000000000000বাইনারি, সমতুল্য 1<<20

কোডটি এখানে:

while($i++<1<<20)$v+=rand(1,4);echo$v

আপনার ব্রাউজারে পরীক্ষা করুন ( খুব ছোট পরিবর্তন সহ):

$i=$v=0;while($i++<1<<20)$v+=rand(1,4);printf($v);

কোডের সমস্ত পরিবর্তনগুলি মন্তব্যে ব্যাখ্যা করা হয়েছে।


আপনি এর ;পরেecho$v
মার্টিজেন

@ মার্তিজন আমি এটি সেখানে রেখেছি কারণ বেশিরভাগ সময় পিএইচপি এটি সম্পর্কে অভিযোগ করে। তবে আমি এখন এটি সরিয়েছি। এটি স্যান্ডবক্স.অনলাইনফ্পফিউনকশনস.কম এ কাজ করে এবং এটি যথেষ্ট।
ইসমাইল মিগুয়েল

4

গণিত, 30 27 বাইট

Tr[RandomInteger[3,2^20]+1]

গাণিতিকের বেশ দীর্ঘ কার্যকরী নাম রয়েছে ...


3

সি, 57 বাইট

main(a,b){for(b=a=1<<20;a--;b+=rand()%4);printf("%d",b);}

এই কোডটি ... একবার কাজ করে। আপনার যদি কখনও সেই ডাইসগুলি আবার রোল করতে হয় তবে আপনাকে srand(time(0))14 বাইট যুক্ত করে সেখানে প্রবেশ করতে হবে ।


আপনি যুক্ত করতে হবে কেন srand(time(0))? (দুঃখিত, আমি সি ব্যবহার করি না)
ASCIIThenANSI

@ এএসসিআইথেনানসি সি এর randবীজের অনেকগুলি বাস্তবায়ন এটি প্রতিটি রানকে একই মান হিসাবে দেখায় । srandtime(0)
আরএনজি

আপনি যদি আরম্ভ করেন a=b=1<<20তবে আপনি এড়িয়ে যেতে পারেন 1+, এটি 4 বাইট সংরক্ষণ করে।
নটকি

এছাড়াও, intআগে mainপ্রয়োজন হয় না।
নটকি

কারও কাছে ইঙ্গিত t=0, তারপরে t=t (...) +11048576 বার: আবার চিন্তা করুন! (আমার উত্তর দেখুন, শেষ পর্যন্ত)
edc65

3

PostgreSQL, 59 বাইট

select sum(ceil(random()*4)) from generate_series(1,1<<20);

আমি সামান্য সমস্যাটি স্বীকার করব যা random()তাত্ত্বিকভাবে ঠিক শূন্য তৈরি করতে পারে, সেই ক্ষেত্রে ডাই রোলটি শূন্য হবে।


আপনার ;কাছে ক্যোয়ারিটি শেষ করার দরকার নেই কারণ এটি একমাত্র
মিকিটি

3

রুবি, 32 বাইট

(1..2**20).inject{|x|x-~rand(4)}

আরও পঠনযোগ্য আকারে:

(1..2**20).inject(0) do |x|
  x + rand(4) + 1
end

এটি 1 থেকে 1048576 পর্যন্ত একটি পরিসীমা তৈরি করে এবং তারপরে ব্লকের উপর বহুবার পুনরাবৃত্তি হয়। প্রতিটি বারের ব্লকটি পূর্ববর্তী পুনরাবৃত্তি থেকে মান হিসাবে চালিত হয় x(প্রাথমিকভাবে 0, এর জন্য ডিফল্ট inject)। প্রতিটি পুনরাবৃত্তি এটি 0 এবং 3 (অন্তর্ভুক্ত) এর মধ্যে একটি এলোমেলো সংখ্যা গণনা করে, একটি যুক্ত করে যাতে এটি একটি ডি 4 ঘূর্ণায়মানের অনুকরণ করে এবং মোটটিতে যোগ করে।

আমার মেশিনে এটি চালানো বেশ দ্রুত ( 0.25 real, 0.22 user, 0.02 sys)।

আপনি যদি রুবি ইনস্টল করে ফেলেছেন তবে এটি দিয়ে এটি চালাতে পারেন ruby -e 'p (1..2**20).inject{|x|x+rand(4)+1}'( pএই পদ্ধতিতে চালিত হওয়ার সময় আউটপুটটি দেখার প্রয়োজন হয়, যদি আপনি এটির যত্ন নেন না বা এটি আইআরবির ভিতরে চালান যেখানে ফলাফল স্ক্রিনে মুদ্রিত হয়) তোমার জন্য). আমি এটি রুবি ২.১..6 এ পরীক্ষা করেছি।

বিট twiddling হ্যাক যে প্রতিস্থাপন জন্য histocrat ধন্যবাদ x + rand(4) + 1দিয়ে x-~rand(4)


1
আপনি এটি ব্যাখ্যা করতে পারেন কিভাবে এটি কাজ করে?
ASCIIThenANSI

প্রথম অনলাইন দোভাষী আমি দেখতে পেলাম যে প্রকৃতপক্ষে দাবিটি লোড করতে চায় যে পদ্ধতিটি র‌্যান্ড () বিদ্যমান নেই। আমি অন্য একটি খুঁজে পেতে চেষ্টা করব।
সুপারজেডি ২২৪

ঠিক আছে, আমি খুঁজে পেয়েছি যা কাজ করে।
সুপারজেডি ২৪

বিট টুইডলিং হ্যাক: x-~rand(4)এর সমান x+rand(4)+1
হিস্টোক্র্যাট

এছাড়াও, আপনি প্রতিস্থাপন করতে পারেন 2**20সঙ্গে 4e10
হিস্টোক্র্যাট

3

প্যারি / জিপি, 25 বাইট

সত্যই, এখানে গল্ফ করার দরকার নেই - এটি জিপিতে গণনা করার সোজা উপায়। এটি আমার মেশিনে 90 মিলিসেকেন্ডে চলে। উত্তোলন +1প্রায় 20 মিলিসেকেন্ড সংরক্ষণ করে।

sum(i=1,2^20,random(4)+1)

কেবল মজাদার জন্য: যদি কেউ পারি পারফরম্যান্সের জন্য অনুকূলিত হয় ,

inline long sum32d4(void) {
  long n = rand64();
  // Note: __builtin_popcountll could replace hamming_word if using gcc
  return hamming_word(n) + hamming_word(n & 0xAAAAAAAAAAAAAAAALL);
}

long sum1048576d4(void) {
  long total = 0;
  int i;
  for(i=0; i<32768; i++) total += sum32d4();
  return total;
}

মোট অপারেশন গণনার পরিমাণ খুব কম - যদি জর্জনস্দের 64৪ -বিট শব্দ প্রতি ~ 27 চক্রের প্রয়োজন হয় (কেউ কি এটি যাচাই করতে পারে?), তবে পিওপিসিএনটি সহ একটি প্রসেসরের প্রায় 0.5 চক্র / বিট নিতে হবে, বা ফাইনালের জন্য কয়েকশো মাইক্রোসেকেন্ড নিতে হবে সংখ্যা।

এলোমেলো সংখ্যক অনুরূপ বা উচ্চ মানের ব্যবহারের পদ্ধতিগুলির মধ্যে এটির কাছাকাছি-সর্বোত্তমতম খারাপ-কেস পারফরম্যান্স থাকা উচিত। ক্ষেত্রে একসাথে মিলিয়ন রোল - এবং (মূলত) পাটিগণিত কোডিং দিয়ে নির্বাচন করে গড় গতি বাড়িয়ে তোলা সম্ভব হবে ।


3

জাভাস্ক্রিপ্ট, 55 53 50 47 41 বাইট

for(a=i=1<<20;i--;)a+=(Math.random()*4)|0

আমি বুঝতে পারি নি যে নন-এলোমেলো সংখ্যাগুলি একটি পরিচিত বিরক্তিকর, তাই আমি অনুভব করেছি যে আমার একটি আসল সমাধান পোস্ট করা উচিত। অসম্মান মানে না।

ভাষ্য: উপরের অন্যদের দ্বারা উল্লিখিত হিসাবে আপনি নিজের উত্তরে রোলের সংখ্যাটি শুরু করে প্রতিটি রোলটিতে +1 এড়িয়ে যেতে পারেন এবং একটি = 0, i = 1 << 20 না লিখে আপনি দুটি বাইট সংরক্ষণ করেন এবং অন্য 2 কারণ আপনি প্রতিটি রোলটিতে +1 যোগ করেন না। পার্সিয়ান্ট ফাংশন ম্যাথ.ফ্লুর হিসাবে একই কাজ করে তবে এটি 2 টি অক্ষর ছোট।


লক্ষ্য করুন এই উত্তরটি এক মূলত SuperJedi224 এবং @Andrew দ্বারা মন্তব্য করা থেকে সম্পূর্ণ ভিন্ন
রালফ মার্শাল

আরও কয়েকটি অক্ষর কেটে ফেলতে আপনি দুটি বন্ধনী এবং শেষ সেমিকোলন (এবং কেবলমাত্র সর্বশেষটি) দুটি সরাতে পারেন। এছাড়াও, বর্তমান সংস্করণটি 52 টি নয়, কেবল 50 টি অক্ষর
সুপারজেডি 224

সুপারজেডি - পরামর্শের জন্য ধন্যবাদ। আমি ভেবেছিলাম আমি বন্ধনী ব্যতীত এটি চেষ্টা করেছিলাম কেবল সমস্যা তৈরির জন্য, তবে সম্ভবত আমার অন্যরকম সমস্যা হয়েছিল। যা-ই হোক না কেন, আমি মনে করি এটি যতটা পাবে তেমনই ভাল।
রাল্ফ মার্শাল

a+=parseInt(Math.random()*4)সংক্ষিপ্ত হতে পারে a+=1+Math.random()*4&71+শুধুমাত্র হলে আপনি যত্ন যদি এটা ছুয়ে 0 বা না।
ইসমাইল মিগুয়েল

আপনি এটিকে গল্ফ করতে পারেন: for(a=i=1<<20;i--;)a+=(Math.random()*4)|0এটি কেবল 41 বাইট
সুপারজেডি ২৪

2

ক্লিপ 10 , 12 বাইট

r+`m[)r4}#WT

         #4T    .- 4^10 = 1048576             -.
   m[   }       .- that many...               -.
     )r4        .-          ...random numbers -.
r+`             .- sum                        -.

আমার মেশিনে চালাতে প্রায় 0.6 সেকেন্ড সময় লাগে।


2

যান, 78 বাইট

Golfed

import."math/rand";func r()(o int){for i:=2<<19;i>=0;i--{o+=Intn(4)+1};return}

এটির উপর এখনও কাজ করতেছি

অনলাইনে এখানে চালান http://play.golang.org/p/pCliUpu9Eq


দুর্ভাগ্যক্রমে, golang.org খেলার মাঠ সময় ক্রিয়াকলাপ যথাযথভাবে প্রয়োগ করে না এবং repl.it এখনই লোড করতে চায় না। আমি আজ বিকেলে এটি সম্পর্কে আমি কী করতে পারি তা দেখতে পাব।
সুপারজেডি ২২৪

2

যান, 87 বাইট

নিষ্পাপ সমাধান

import"math/rand";func r(){o,n:=0,2<<19;for i:=0;i<n;i++{o+=rand.Intn(4)};println(o+n)}

অনলাইনে এখানে চালান: http://play.golang.org/p/gwP5Os7_Sq

গো খেলার খেলার মাঠ যেভাবে কাজ করে তার কারণে আপনাকে ম্যানুয়ালি বীজ পরিবর্তন করতে হবে (সময় সবসময় একই থাকে)


2

কমোডোর বেসিক, 37 বাইট

1F┌I=1TO2↑20:C=C+INT(R/(1)*4+1):N─:?C

PETSCII বিকল্পগুলি: = SHIFT+E, /= SHIFT+N, =SHIFT+O

নিম্ন পাশা গণনা সহ রানের ভিত্তিতে আনুমানিক রানটাইম: 4.25 ঘন্টা।

এটি Cএকটি পূর্ণসংখ্যা তৈরি করে, এলোমেলো সংখ্যার অন্তর্নিহিত বৃত্তাকার পেয়ে দুটি বাইট বন্ধ করে দেওয়ার চেষ্টা করতে প্ররোচিত হয়। তবে কমোডোর বেসিকের পূর্ণসংখ্যার পরিসীমা -32678 থেকে 32767 - পর্যাপ্ত নয়, যখন মধ্যম উত্তর 2621440 হয়।



2

রুবি, 51 47 অক্ষর

x=[];(2**20).times{x<<rand(4)+1};p x.inject(:+)

আমি এটি করার আগে আমি সমস্ত উত্তর দেখেছিলাম এবং the sum(2**20 times {randInt(4)}) কৌশলটি সত্যিই আটকে গেছে, তাই আমি এটি ব্যবহার করেছি।

> <>, 76 টি অক্ষর

012a*&>2*&1v
|.!33&^?&:-<
3.v < >-:v >
   vxv1v^<;3
  1234    n+
  >>>> >?!^^

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


আমি আপনাকে <> উত্তরের জন্য একটি +1 দেব।
সুপারজেডি 224

2

সুইফট, 64 বাইট

চালাক কিছুই নয়, সুইফটে গল্ফ করা শক্ত ...

func r()->Int{var x=0;for _ in 0..<(2<<19) {x+=Int(arc4random()%4)+1;};return x;}

সংস্করণ 2 (খুব দেরিতে)

var x=0;for _ in 0..<(2<<19){x+=Int(arc4random()%4)+1;};print(x)

2

জাভা (জাভা 8) - 52

int f(){return new Random().ints(1<<20,1,5).sum();}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.