ASCII में पासा के परिणाम ड्रा करें


25

यदि ASCII में क्यूब के आकार की मौत के साथ किया जाता है, तो पासा टॉस का यादृच्छिक परिणाम दिखाएं।

$ dice

परिणाम में से एक में होना चाहिए

-----
|   |
| o |
|   |
-----

-----
|o  |
|   |
|  o|
-----

-----
|o  |
| o |
|  o|
-----

-----
|o o|
|   |
|o o|
-----

-----
|o o|
| o |
|o o|
-----

-----
|o o|
|o o|
|o o|
-----

4
आपने यहां मीट्रिक को परिभाषित नहीं किया है। क्या इसका मतलब कोड गोल्फ होना है? यह हमेशा पहेली लैब चैट या मेटा पर रेत बॉक्स में संभावित कार्यों पर चर्चा करने के लायक है ताकि आप लाइव होने से पहले इस प्रकार के प्रश्नों को संबोधित कर सकें।
dmckee

क्षमा करें, मुझे लगा कि मीट्रिक हमेशा वर्णों की संख्या होती है? चैट पर मुझे इशारा करने के लिए धन्यवाद और फिर मेटा पर सैंड बॉक्स। अगर यह सवाल उसके चेहरे पर सपाट है तो मैं इसे हटा दूंगा मैं इसे अभी करने से नफरत करता हूं, बस अगर किसी ने पहले ही इस पर काम करना शुरू कर दिया हो।
जोनास एल्फ्रॉस्टेम

आह ... ध्यान दें कि साइट का नाम "प्रोग्रामिंग पहेलियाँ और कोड गोल्फ" (और हाँ, मुझे लगा कि यह दूसरे तरीके से बेहतर स्कैन किया गया है, भी)। आपको वन-लाइनर्स , किंग-ऑफ-द-हिल टूर्नामेंट और कोड-चैलेंज (बाकी सब कुछ, लेकिन आप अभी भी जीतने के लिए एक उद्देश्य मीट्रिक स्थापित करने वाले हैं) मिलेगा , इसलिए यह कहना और उपयुक्त लागू करना आवश्यक है टैग।
dmckee

13
XKCD # 221 के अनुसार , alert('-----\n|o o|\n| |\n|o o|\n-----');एक सही कार्यक्रम है।
जमिनप

9
यदि आप एससीआई-कला टैग हटाते हैं, तो मैं अपना 39char-solution print("⚀⚁⚂⚃⚄⚅"(util.Random.nextInt(6)))(utf-art) पेश कर सकता हूं ।
उपयोगकर्ता अज्ञात

जवाबों:



25

पायथन, 112 110 चार्ट

from random import*
r=randrange(6)
C='o '
s='-----\n|'+C[r<1]+' '+C[r<3]+'|\n|'+C[r<5]
print s+C[r&1]+s[::-1]

6
एरे इंडेक्सर में तुलना करने वाले पूरी तरह से प्रभावशाली हैं!
जोनास एल्फ्रॉस्टेम

2
डिट्टो! मुझे पसंद है कि आपने मरने की समरूपता का उपयोग कैसे किया :)
सिस्टम डाउन

क्या आप कुछ का उपयोग कर सकते हैं id(0)%7%6? यह एक समान वितरण नहीं होने जा रहा है, लेकिन यह काफी छोटा है ...
एनएबीबी

@ नब: यह बहुत यादृच्छिक नहीं है। विशेष रूप से, यह अक्सर रन से रन के लिए समान होता है, इसलिए यह यादृच्छिक पासा रोल उत्पन्न करने में बहुत उपयोगी नहीं होगा।
कीथ रान्डेल



5

पायथन, 109 यूनिकोड वर्ण

#coding:u8
print u"鱸헓ȅ᪮ԅ᪅餠☏汁끝鐸즪聗K糉툜㣹뫡燳闣≆뤀⩚".encode("u16")[2:].decode("zlib").split("\n\n")[id(list())%7-1]

नोट: इसमें यादृच्छिक फ़ंक्शन का उपयोग नहीं किया गया है, इसलिए यह ऐसा यादृच्छिक नहीं होगा जैसा अन्य करते हैं।


5

पर्ल, 74 वर्ण

के साथ भागो perl -M5.010

$-=rand 6;$_="-----
|0 2|
|4";s/\d/$->$&?o:$"/ge;say$_,$-&1?$":o,~~reverse

(ध्यान दें कि लिस्टिंग में नई सूचियाँ स्ट्रिंग का हिस्सा हैं, न कि केवल सुगमता के लिए सम्मिलित की गई हैं।)

यदि आप अपने आप को सोच रहे हैं कि $->$ऑपरेशन क्या करता है, तो निम्नलिखित पठन नोट्स सहायक हो सकते हैं:

  • चर $-स्वचालित रूप से अपने निर्दिष्ट मान को पूर्णांक में काट देता है।

  • चर $"एक एकल स्थान के लिए पूर्व निर्धारित है।

  • oएक नंगेपन (प्रतिनिधित्व "o") है।


4

पहली बार गोल्फर

अजगर, 161 वर्ण

from random import*
n=randint(1,7)    
o,x='o '
a='-'*5
b=(x,o)[n>3]
d=(x,o)[n>5]
c=(x,o)[n>1]    
print a+'\n|'+c+x+b+'|\n|'+d+(x,o)[n%2]+d+'|\n|'+b+x+c+'|\n'+a

4

आम लिस्प 170

(let*((r(random 6))(a "-----
|")(c "o")(d " ")(e "|
|")(f(concatenate 'string a(if(< r 1)d c)d(if(< r 3)d c)e(if(> r 4)c ))))(concatenate 'string f(if(evenp r)c d)(reverse f)))

ध्यान दें कि newlines महत्वपूर्ण हैं। इन मूर्खतापूर्ण "आधुनिक" भाषाओं के विपरीत, कॉमन लिस्प सक्सेसनेस पर पठनीयता का पक्षधर है, इसलिए हमारे पास एक स्ट्रिंग में एक चरित्र को संदर्भित करने के लिए बोझिल "कॉन्टेनेट 'स्ट्रिंग ..." कंस्ट्रक्शन और कोई सक्सेसफुल तरीका नहीं है।


4

जावास्क्रिप्ट ( 169 168 141 137)

r=Math.random()*6|0;s='-----\n|'+(r>0?'o ':'  ')+(r>2?'o':' ')+'|\n|'+(r-5?' ':'o');alert(s+(r%2?' ':'o')+s.split('').reverse().join(''))

alertयह सही-सही नहीं दिखता क्योंकि यह निश्चित-चौड़ाई वाला फ़ॉन्ट नहीं है, लेकिन बाकी का आश्वासन दिया गया है कि यह सही है, या किसी <pre>टैग को छोड़ कर और परीक्षण करके writeln:-)

प्रमाण: http://jsfiddle.net/d4YTn/3/ (केवल JS 1.7-संगत ब्राउज़र में काम करता है, जैसे FF2 +)

क्रेडिट: Math@minitech से हैक चाल और @Keith से प्रिंट तर्क मर जाते हैं।

संपादित करें : Math@minitech से चाल निकालें क्योंकि यह वास्तव में इसे लंबे समय तक बना दिया :-)

संपादन 2 : 17 वर्ण सहेजें। पासा समरूपता का लाभ लेने के लिए @Keith से उधार चाल। यादृच्छिक संख्या को int में परिवर्तित करने के लिए चाल का उपयोग करें।

संपादित करें 3 : 1+यादृच्छिक संख्या को 1-6 से 0-5 तक शिफ्ट करने के लिए निकालें और 2 वर्णों को सहेजें। नतीजतन, मैं भी बदल सकते हैं r%2-1करने के लिए r%2और एक अन्य 2 वर्ण सहेजें।

संपादित 4 : jsfiddle फिर से काम कर रहा है। अद्यतित :-)


E4X! और मैं विश्वास नहीं कर सकता कि क्रोम इसका समर्थन नहीं करेगा!
Ry-

हेह, मैंने तुम्हें आखिरकार हरा दिया :)
Ry-

दो अक्षर, अब, आपकी |0चाल का उपयोग करते हुए :-)
Ry-

यह मेरे लिए क्रोम में काम करता है।
pimvdb

4

जावास्क्रिप्ट, 215 213 212 145 135

r=Math.random()*6|0;alert('-----\n|'+[r>2?'o o':r?'o  ':'   ',r%2?r>3?'o o':'   ':' o ',r>2?'o o':r?'  o':'   '].join('|\n|')+'|\n-----');

मेलमोकब मारो, लेकिन मैंने अपना मूल समाधान पूरी तरह से बदल दिया। यदि आप चाहते हैं कि यह अच्छा दिखे, तो Google Chrome या कुछ और का उपयोग alertकरें console.log, और इसे बदल दें ।

संपादित करें: कुछ पात्रों को बचाने के लिए उधार दिया गया है।


@ मिनिटेक: बीटीडब्लू, आपकी M=Mathचाल जिसे मैंने चुराने की कोशिश की वास्तव में एक पात्र लंबे समय तक
मेलमोकब

@ मल्लमोकब: मुझे पता है, मैंने सोचा था कि मैं मूल रूप से इसका इस्तेमाल
करूंगा

@ मिनिटेक: आप दो चरों को बचा सकते हैं[s.substr(0,3),s.substr(3,3),s.substr(6,3)].join('|\n|')
मेलमोकब

1
@ मेलमोकब: नोप; sएक सरणी है। मैं पुनः आरंभ और पुनः प्रयास करने जा रहा हूं।
Ry-

@ मिनिटेक: यहां हम फिर से आते हैं :-) प्रतियोगिता द्वारा सर्वश्रेष्ठ उत्तर का विकास। अब मैं 137 से नीचे आ गया हूं, लेकिन आप मेरी एक चाल को उधार ले सकते हैं और संभवतः 10 चार्ट बचा सकते हैं।
मेलामोकब

3

PHP 119 126 128 131 188 201 213 234 239

<?$c=($r=rand()%6)%2?$r>4?'o ':'  ':' o';$b=$r>0?$r<3?'o  ':'o o':'   ';echo$a="-----\n|$b|\n|$c",substr(strrev($a),1);

समापन ?>को छोड़ा जा सकता है, जिससे आप 2 वर्णों को बचा सकते हैं।
Ry-

आप $rकिसी अन्य वर्ण को सहेजने के लिए घोषणा को इनलाइन कर सकते हैं । के बाद अंतरिक्ष echoभी छोड़ा जा सकता है। आप $a128 के बराबर लाकर भी, इसके आरंभ को इनलाइन कर सकते हैं। लाइन को सीधे \nदो अन्य वर्णों के साथ सहेजने के बजाय उन्हें सीधे स्ट्रिंग में तोड़ दिया जाता है ।
जोय

3

सी - 215

#include <time.h>
#include <stdlib.h>
main(){char a[]=A,b[]=B,c=3,d=(srand(time(0)),rand()%6+1),e=d-2;if(d==1)a[5]=C;else{while(--e>-1)a[b[D[d-3]-48+e]-48]=C;a[0]=a[10]=C;}p(E);while(--c>-1)p("|%s|\n",a+c*4);p(E);}

इसके साथ संकलन:

cl /DA="\"   \0   \0   \"" /DB="\"5282582468\"" /DC='o' /DD="\"0136\"" /DE="\"+---+\n\"" /Dp=printf dice.c

1
क्या वह छंटनी कमांड-लाइन पर उन सभी झंडों के साथ धोखा है? मैं इसे / DA / DB / DC .. बात नहीं समझता।
मेलामोकब

मेरा कंपाइलर /Dस्विच को नहीं समझता है ... कृपया कंप्लीशन कमांड में रैंडम डिफाइन लगाकर धोखा न खाएं।
फ़ूजएक्सएक्सएल जूल

3

पायथन 133

import random as R
i=R.randint(1,6)
a='   ';b='0 0'
A='-----\n|'+((a,'0  ')[i>1],b)[i>3]+'|\n|'
print A+((a,' 0 ')[i%2],b)[i>5]+A[::-1]

3

एफ # - 165 161 अक्षर

(System.Random()).Next 6|>fun x->[for y in[x>0;x%2=0;x>2;x=5]->if y then"o"else" "]|>fun[a;b;c;d]->printf"-----\n|%s %s|\n|%s%s%s|\n|%s %s|\n-----"a c d b d c a

3

अजगर 108 114 119 121 122 129

WTF! 1 समाधान की तरह लग रहा है ?! लेकिन iam नहीं ... धोखेबाज़

108

import random as R
i=R.randint(1,6)
X=' 0'
A='-----\n|%s %s|\n|'%(X[i>1],X[i>3])+X[i>5]
print A+X[i%2]+A[::-1]

119

import random as R
i=R.randint(1,6)
X=' 0';a=X[i>5]
A='-----\n|%s %s|\n|%s|'%(X[i>1],X[i>3],a+X[i%2]+a)
print A+A[-6::-1]

3

perl - 111 103 101

$n=int rand 6;
($t="-----\n|0 1|\n|232|\n|1 0|\n-----\n")=~s/(\d)/5639742>>6*$1>>$n&1?o:$"/eg;
die$t;

1
प्रयोग करने के लिए +1 dieके बजाय print/say
MBX


3

हास्केल, 154 162 167 172 वर्ण

import System.Random
main=randomRIO(1::Int,6)>>=putStrLn. \x->let{h="-----\n|"++c(>1):' ':c(>3):"|\n|"++[c(>5)];c f|f x='o'|True=' '}in h++c odd:reverse h

यह पायथन वन के समान विचार का उपयोग करता है।

पठनीय संस्करण:

import System.Random

main = do
    x <- randomRIO (1 :: Int, 6)
    putStrLn (render x)

render x = str ++ check odd ++ reverse str
  where
    str = concat
        [ "-----\n|"
        , check (> 1)
        , " "
        , check (> 3)
        , "|\n|"
        , check (> 5)
        ]
    check f = if f x then "o" else " "


2

PHP 126 127 179

<?$x=($r=rand(1,6))>3?"o o":($r<2?"   ":"o  ");$z=$r>5?"o o":($r%2==0?"   ":" o ");$v="-----\n|$x|\n";echo"$v|$z|".strrev($v);

एक और PHP समाधान। मैं ओलेग द्वारा लगभग एक ही समाधान के लिए आया था।


2

पायथन (153)

यह अब तक का सबसे छोटा सबमिशन नहीं है, मुझे लगा कि यह अच्छा लग रहा है :)

import random as r
print"""-----
|%c %c|
|%c%c%c|
|%c %c|
-----"""%tuple(
r.choice([
"   o   ",
"o     o",
"o  o  o",
"oo   oo",
"oo o oo",
"ooo ooo"]))

2

क्यू (120 वर्ण)

dice:{(`t`e`l`c`r`w!5 cut"-----|   ||o  || o ||  o||o o|")(,/)(`t;(`e`c`e;`l`e`r;`l`c`r;`w`e`w;`w`c`w;`w`w`w)(*)1?6;`t)}

उपयोग:

dice[]

2

सी, 168 164 163 चार

क्षमा करें, यदि मुझे पार्टी में थोड़ी देर हो गई है, लेकिन चूंकि कोई जवाब अभी तक स्वीकार नहीं किया गया है, और केवल अन्य सी समाधान कुछ लंबा था, यहां ...

#include<stdio.h>
main(){srand(time(0));char*o="O ",r=rand()%6,i=o[r<1],j=o[r<3],k=o[r<5];printf("-----\n|%c %c|\n|%c%c%c|\n|%c %c|\n-----\n",i,j,k,o[r&1],k,j,i);}

आप शामिल को हटा सकते हैं और अन्य 18 वर्णों को बचा सकते हैं, लेकिन फिर यह चेतावनी के बिना संकलन नहीं करता है।

संपादित करें : user23241 की कमांड-लाइन ट्रिक का
उपयोग करके , सबसे छोटा C कोड जो परिणाम उत्पन्न करता है (संकलक चेतावनी के बिना) केवल 12 वर्ण है:

#include I
M

कम से कम यदि आप धोखा देते हैं और संकलन करने के लिए निम्न कमांड लाइन का उपयोग करते हैं:

gcc -DI="<stdio.h>" -DM="main(){srand(time(0));char*o=\"O \",r=rand()%6,i=o[r<1],j=o[r<3],k=o[r<5];printf(\"-----\n|%c %c|\n|%c%c%c|\n|%c %c|\n-----\n\",i,j,k,o[r&1],k,j,i);}" dice.c -o dice


1

पीएचपी: 1284

यह मेरा दूसरा कोडगॉल्फ है, और मैं वास्तव में कोड उत्परिवर्तन और गेमिंग मानदंड के मिलान की कमी का लक्ष्य नहीं बना रहा था।

आप 4 पक्षीय पासा और साथ ही 6 पक्षीय उत्पन्न कर सकते हैं।

शायद बाद में मैं इसे छोटा कर दूंगा और इसे थोड़ा और गतिशील बनाऊंगा।

function draw_dice($numdice=1,$sides=4)
{
/* Verify acceptable parameters. */
if($sides<4){die("You must choose 4 sides or greater.");}
if($numdice<1){die("You must have at least one dice.");}
/* End verification */
$a=' ';
$b=' ';
$c=' ';
$d=' ';
$e=' ';
$f=' ';
$g=' ';
$h=' ';
$i=' ';
$j=' ';

switch($sides)
{
case $sides%2==0:
if($sides==4)
{
$ran=rand(1,$sides);
switch($ran)
{
case 1:
$e="o";
break;
case 2:
$a="o";
$j="o";
break;
case 3:
$b="o";
$g="o";
$j="o";
break;
case 4:
$a="o";
$c="o";
$g="o";
$j="o";
break;
}
echo "<div style='text-align:center;display:inline-block;'>";
echo " - <br/>";
echo "| |<br/>";
echo "|$a$b$c|<br/>";
echo "| $d$e$f |<br/>";
echo "|  $g$h$i$j  |<br/>";
echo "---------<br/>";
echo "</div>";

}

if($sides==6)
{
$ran=rand(1,$sides);
switch($ran)
{
case 1:
$e="o";
break;
case 2:
$a="o";
$i="o";
break;
case 3:
$a="o";
$i="o";
$e="o";
break;
case 4:
$a="o";
$c="o";
$g="o";
$i="o";
break;
case 5:
$a="o";
$c="o";
$g="o";
$i="o";
$e="o";
break;
case 6:
$a="o";
$c="o";
$d="o";
$f="o";
$g="o";
$i="o";
break;
}
echo "-----<br/>";
echo "|$a$b$c|<br/>";
echo "|$d$e$f|<br/>";
echo "|$g$h$i|<br/>";
echo "-----<br/>";
}

if($sides!==4&&$sides!==6)
{
die("Only 4 and 6 sided are supported at this time.");
}

break;

case $sides%2==1:
die("Must have even number of sides.");
break;
}

}

draw_dice(1,4);

आउटपुट 4 पक्षीय:

    - 
   | |
  |o o|
 |     |
|  o  o  |
---------

आउटपुट 6 पक्षीय:

-----
|o  |
| o |
|  o|
-----

1

जावास्क्रिप्ट 220 बाइट्स

r=(1+Math.random()*6|0).toString(2).split("").reverse();b=r[1];c=r[2];s=[[b|c,0,c],[b&c,1&r[0],b&c],[c,0,b|c]];"-----\n|"+s.map(function(v){return v.map(function(w){return w?"o":" "}).join("")}).join("|\n|")+"|\n-----";

1

रूबी, १३३ 132 १३० ११ 119 ११ 112 १११ १११ ११s चरस,

जीवन में मेरा दूसरा गोल्फ। मैंने मैजिक नंबर का इस्तेमाल किया है। कोई सलाह कृपया?

r=?-*5+"
|"+((a=:ghklm[rand 6])?a.to_i(36).to_s(2).tr("10","o "):"    o").insert(3,"|
|")
$><<r+r[0,14].reverse

आउटपुट:

ice@distantstar ~/virt % ruby ./golf.rb
-----
|o o|
|   |
|o o|
-----
ice@distantstar ~/virt % ruby ./golf.rb
-----
|o o|
|o o|
|o o|
-----
ice@distantstar ~/virt % ruby ./golf.rb
-----
|   |
| o |
|   |
-----
ice@distantstar ~/virt % 

1

विमस्क्रिप्ट - 169 चारकार्टर्स

ध्यान दें कि यह शुद्ध विम नहीं है क्योंकि विम में कोई बिल्ट यादृच्छिक संख्या जनरेटर नहीं है। ऐसे एक्सटेंशन हैं जिन्हें निश्चित रूप से इसके लिए डाउनलोड किया जा सकता है, लेकिन जब से मैं एक डैनहैंड लिनक्स मैन हूं, मैंने सोचा, क्यों न इसके बजाय शेल वातावरण पर भरोसा किया जाए।

कोड

norm5a-^[YPo|   |^[YPP
let x=system('echo $RANDOM')%6+1
if x<2
norm jllro
el
norm lrolljj.k
if x>3
norm k.hjj
en
if x>2
norm h.k
en
if x>5
norm .l
en
if x>4
norm l.
en
en

व्याख्या

  • पहली पंक्ति "बॉक्स" उत्पन्न करती है जो मरने का प्रतिनिधित्व करती है।
  • दूसरी पंक्ति पर्यावरण से एक यादृच्छिक संख्या लाती है और मॉड्यूलर अंकगणित का उपयोग करके इसे पासा के लिए एक वैध संख्या माना जाता है।
  • शेष पंक्तियाँ मरने वाले चेहरे के चारों ओर घूमती हैं o। ध्यान दें कि इसका मतलब कम से कम वर्णों के लिए अनुकूलित होना है, न कि कम से कम आंदोलनों की (यानी किस्ट्रोक्स के घुमावों में तेज़ तरीके होंगे यदि मैं इसे मैन्युअल रूप से कर रहा था- ifमेरे सिर में सभी कर रहा है )।
  • हमेशा की तरह, ^एक शाब्दिक नहीं है ^बल्कि एक भागने के क्रम का संकेत है।

परिक्षण

बदलें RANDOMकरने के लिए DICEVALUE, बचाने में VimScript कोड dice.vimहै, तो इस खोल स्क्रिप्ट उस पर, चलाने के तर्क जो भी नंबर आप परीक्षण करना चाहते हैं के रूप में दे रही है:

#!/bin/sh
for DICEVALUE in $@; do
    export DICEVALUE
    vim -S dice.vim
done

1

गणितज्ञ 166 161 146 143 वर्ण

a="O  ";b=" O ";c="  O";d="   ";e="O O";RandomInteger@{1, 6}/.Thread@Rule[Range@6,{{d,b,d},{a,d,c},{a,b,c},{e,d,e},{e,b,e}, {e,e,e}}]//MatrixForm

नमूना आउटपुट:

पंज


मैट्रिक्स ब्रेसिज़ अपमान हैं, तो आप की जगह ले सकती MatrixFormसाथ TableFormकोड में।


1

PHP 5.4, 107 बाइट्स

<?$r=rand(1,6);$d=[' ','o'];$o='+---+
|'.$d[$r>1].' '.$d[$r>3].'|
|'.$d[$r>5];echo$o.$d[$r%2].strrev($o);

102 बाइट्स *

<?$r=rand(1,6);$d=' o';$o='+---+
|'.$d[$r>1].' '.$d[$r>3].'|
|'.$d[$r>5];echo$o.$d[$r%2].strrev($o);

** दुर्भाग्य से, 102 बाइट संस्करण मुद्दों के कास्टिंग की वजह से देखती है boolकरने के लिए intजब स्ट्रिंग का अनुक्रमण $d। इसके अलावा, यह ठीक काम करता है। *


बाइट काउंट क्रमशः 105 और 100 लगते हैं।
12Me21

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