รูเล็ตรัสเซีย


28

เขียนโปรแกรมที่เล่นรูเล็ตรัสเซีย!

หากโปรแกรมเริ่มทำงาน

  • ควรมีโอกาส 5 ใน 6 ของการสิ้นสุดโดยปกติหลังจากการพิมพ์ "ฉันรอดชีวิต!"
  • ควรมีโอกาส 1 ใน 6 ของโปรแกรมที่ล้มเหลว (การแบ่งกลุ่มความผิด ฯลฯ )

ไม่มีอินพุตและไม่อนุญาตเอาต์พุตอื่น

การสุ่มต้องยุติธรรม: ต้องมีการแจกแจงความน่าจะเป็นแบบเดียวกัน นี่หมายความว่าตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้น (หรือ RNG ที่ไม่มีเมล็ด) MOD 6 จะไม่เพียงพอ

หากโซลูชันทำงานกับระบบปฏิบัติการ / แพลตฟอร์มเฉพาะระบบเดียวคุณจะได้รับการลงโทษ 6 ไบต์จากคะแนน

รหัสที่สั้นที่สุดชนะไม่น้อยกว่า 10 วันหลังจากคำตอบที่ถูกต้องครั้งแรก


1
เราสามารถพึ่งพารันไทม์พื้นฐานเพื่อความยุติธรรมแม้ว่าจะไม่ได้รับประกันในเอกสารอย่างชัดเจนหรือไม่? เช่นงูหลามที่อาจจะนำมาใช้เป็นrandrange(5) randrange(MAX_INT)%6
ugoren

เพื่อสร้างแรงบันดาลใจความคิดสร้างสรรค์คุณอาจพิจารณาให้โบนัสแก่โซลูชันที่ไม่ต้องพึ่งพาการหารด้วยศูนย์
โม่

อาจกล่าวได้ว่าโบนัสควรเกี่ยวข้องกับการหารคะแนนด้วย 2
Joe Z.

1
@ JoeZeng: นั่นคงเป็นเรื่องมากเกินไป โดยปกติคุณสามารถทำให้เป็นข้อผิดพลาดที่แตกต่างกันเช่นการอ้างอิงตัวชี้โมฆะเป็นต้นสำหรับค่าใช้จ่ายเพียงไม่กี่ตัวอักษร
vsz

ฉันเห็น. ฉันไม่ได้มีประสบการณ์มากเกินไปในการสร้างเงื่อนไขการให้คะแนนสำหรับปริศนากอล์ฟรหัสดังนั้นฉันยังคงเรียนรู้สิ่งต่าง ๆ เช่นนั้น
Joe Z.

คำตอบ:


4

05AB1E , 13 12 ไบต์

6LΩiFë“IЖd!

-1 ขอบคุณไบต์@Emigna

05AB1E จริง ๆ แล้วไม่น่าจะผิดพลาดได้เลย แต่เนื่องจากรุ่นใหม่ของ 05AB1E ยังคงมีปัญหาบางอย่างเมื่อเทียบกับรุ่นเก่าฉันจึงสามารถนำข้อผิดพลาดนั้นไปใช้กับความท้าทายนี้ได้

ลองออนไลน์

คำอธิบาย:

6L          # Create the list [1,2,3,4,5,6]
  Ω         # Get a random choice from this list
   i        # If it is 1:
    F       #  Do a ranged loop, which currently results in a "(RuntimeError) Could not
            #  convert  to integer." error when no argument is given
   ë        # Else:
    IЖd!  #  Push dictionary string "I survived!" (which is output implicitly as result)

ดู 05AB1E นี้เคล็ดลับของฉัน (ส่วนวิธีการใช้พจนานุกรม? )จะเข้าใจว่าทำไมเป็น“IЖd!"I survived!"


ดูเหมือนว่า5ÝΩz“IЖd!ควรจะทำงาน 1 / 0 = 0แต่เห็นได้ชัด
Magic Octopus Urn

1
@ MagicOctopusUrn ใช่ 05AB1E แทบจะไม่ผิดพลาดเลยนอกจากตัวต่อเก่า ๆ.0ที่เคยใช้ในการแบ่ง 0 ข้อผิดพลาดให้กับ STDERR ในรุ่นเก่าของ 05AB1E ฉันไม่รู้ด้วยซ้ำถึงข้อผิดพลาดในมรดก 05AB1Eเลย . รุ่นใหม่ยังคงมีข้อผิดพลาดค่อนข้างมากซึ่งฉันใช้โอกาสของฉันที่นี่ ;)
Kevin Cruijssen

1
ฉันคิดถึงคนเก่า.0มากกว่าหนึ่งครั้งมันทำให้ใครบางคนไป "วัด ... ทำไมจึงเป็นคำสั่ง"
Magic Octopus Urn

11

PHP 38 ไบต์

<?~$$s[rand(+$s=sssss,5)]?>I survived!

วางก่อนสตริงที่ไม่ใช่ตัวเลขจะมีการประเมินเพื่อ+ 0ควรrand(0,5)กลับมา5, $s[rand(0,5)]จะเป็นสตริงที่ว่างเปล่า (ตั้งแต่$sเป็นเพียงห้าตัวอักษรยาว) และต่อมา$$s[rand(0,5)]จะเป็นตัวแปร uninitialized ความพยายามที่จะคว่ำจะหยุดในประเภทของตัวถูกดำเนินการที่ไม่สนับสนุน ค่าอื่นใด0-4จะส่งคืนsและเนื่องจาก$sถูกกำหนดไว้คุณจะรอดชีวิต

หมายเหตุ: ณ PHP เวอร์ชัน 4.2.0, เครื่องกำเนิดไฟฟ้าจำนวนสุ่มเมล็ดโดยอัตโนมัติ



6

ทับทิม, 24-28

p rand(6)<5?"I survived!":1/0

ประมาณ 6 ครั้งในแต่ละครั้งจะมี ZeroDivisionError

แม้จะเป็นเวอร์ชั่นที่สั้นกว่าด้วย 24 ตัวอักษร (ขอบคุณ ugoren และ histocrat):

6/rand(6);p"I survived!"

หากคุณไม่ยอมรับ"ในผลลัพธ์ฉันก็ต้องการตัวละครเพิ่มอีก 3 ตัว ตัวเลือกแรก ( puts) เพิ่มขึ้นบรรทัดใหม่ตัวที่สอง ( $><<) ไม่ขึ้นบรรทัดใหม่:

6/rand(6);puts"I survived!"
6/rand(6);$><<"I survived!"

มีเป็นคำถามเกี่ยวกับตัวเลขแบบสุ่มในทับทิมที่ SO เมล็ดพันธุ์ด้วยsrandจะถูกเรียกโดยอัตโนมัติเมื่อเมล็ดอยู่จากเวลาปัจจุบันหากยังไม่ได้เรียก (ดูความคิดเห็น Julians )


Primo มีความคิดที่เป็นโบนัสพิเศษเพื่อแก้ปัญหาเหล่านั้นที่ไม่ต้องพึ่งพาหารด้วยศูนย์

ทางออกแรกของฉันสามารถสั้นลงได้ (28 ตัวอักษร) ด้วย a undefined local variable or method ``a' for main:Object (NameError)

p rand(6)<5?"I survived!":a

6/rand(6)สามารถแม้จะสั้นลงด้วย
ugoren

Ruby ทำการเพาะเมล็ด RNG โดยอัตโนมัติหรือไม่?
vsz

คุณสามารถตัดอีกสามตัวอักษรโดยการลบการควบคุมการไหล:1/rand(6);p "I survived!"
ฮิสโทแคต

@ugoren / histocrat ขอบคุณสำหรับคำแนะนำของคุณฉันได้ปรับแก้ปัญหาของฉัน
Knut

ไบต์อีกสำหรับคุณ: ไม่มีพื้นที่สีขาวต้องระหว่างและp "I survived!"โดยการนับของฉันนั่นเป็นเพียง 24 ไบต์
โม่

6

Dyalog APL - 25 22 21 20 Charachters

'I Survived!'⊣1÷6⊤?6

พิมพ์DOMAIN ERRORเป็นข้อผิดพลาดเนื่องจากการหารด้วยศูนย์

การแก้ปัญหาที่ไม่หารด้วยศูนย์สั้นที่สุดที่ฉันสามารถทำได้คือ 23 ตัวอักษร

('I Survived!'1)[~6⍷?6]

มันพ่น INDEX ERROR

ลองที่นี่

แบบอักษร APL ที่นี่


ฉันต้องการยอมรับ แต่ดูเหมือนจะไม่ทำงาน พิมพ์ไม่กี่ครั้ง " I survived" แต่หลังจากพิมพ์DOMAIN ERRORครั้งเดียวจะพิมพ์ต่อไปเท่านั้น แม้ว่าฉันจะโหลดไซต์ใหม่ทั้งหมดมันจะไม่รอดอีกต่อไป
vsz

@ vsz แปลกมาก ... มันทำงานได้ใน Dyalog APL WS ของฉันและฉันจำได้ว่าทดสอบด้วย TryAPL เมื่อฉันทำเสร็จแล้ว มันยังใช้งานได้กับล่ามของฉัน แต่ไม่ได้อยู่ในเว็บไซต์ หากสิ่งนี้ช่วยได้: dl.dropbox.com/u/9086539/apl.png
MrZander

1
1÷0เป็นDOMAIN ERRORใน Dyalog แต่ใน NGN / APL มัน ผลลัพธ์จาก?6คือ 1..6 เมื่อ⎕IO←1(ค่าเริ่มต้นใน Dyalog) และ 0..5 เมื่อ⎕IO←0(เฉพาะตัวเลือกใน ngn / apl) ใน Dyalog, PRNG ⎕RLสามารถเมล็ดโดยการตั้งค่า เริ่มแรกมันมีค่าเริ่มต้นที่กำหนดไว้ล่วงหน้าบางส่วน หากคุณตั้งค่า⎕RL←0PRNG จะได้รับการคาดการณ์ล่วงหน้าอีกครั้งจากระบบปฏิบัติการ TryAPL จะใช้ Dyalog และไม่สนับสนุน?ฟังก์ชั่น
ngn

1
มีความเป็นไปได้ค่อนข้างมากที่มีบางอย่างเปลี่ยนไปในบางครั้งเรากำลังอัปเดตซอฟต์แวร์ที่อยู่เบื้องหลัง TryAPL หรือทดลองใช้งานคุณสมบัติต่างๆของเว็บไซต์ ฉันเข้าร่วมหรือไม่ ถ้าฉันบอกคุณฉันจะต้องฆ่าคุณ ...
เอาละ

1
นี่คือวิธีแก้ปัญหา 18 ตัวอักษร: 'ฉันรอดชีวิตมาได้!' ⊣÷⍟? 6
ngn

5

Python, 96

from ctypes import*
from random import*
randrange(5)or pointer(c_int())[9**9]
print'I survived!'

หากrandrange(5)ส่งคืน 0 python จะหยุดทำงานเนื่องจากข้อผิดพลาดในการแบ่งกลุ่ม


5

vba, 27

?1/int(6*rnd),"I Survived!"

ใช้ในหน้าต่างทันที
เมื่อล้มเหลวจะมีหน้าต่างระบุข้อผิดพลาด
การหารด้วยศูนย์
ปรากฏขึ้น


ที่ขาดหายไป!ในข้อความ
steenslag

@steenslag แก้ไขแล้ว
SeanC

@SeanCheshire ฉันได้เสนอทางเลือกให้กับคำตอบของคุณ
Gaffi

5

Befunge - 48 ตัวอักษร

 v >91+"!devi"v
/?>?<v"I surv"<
 / / :
   :,_@#

การสุ่มของ Befunge เพียงอย่างเดียวคือ?โอเปอเรเตอร์ซึ่งจะส่งคุณไปยังทิศทางหนึ่งในสี่ทิศทางที่เป็นไปได้ ( 1/4โอกาส) เมื่อปิดกั้นเส้นทางหนึ่งหรือสองเส้นทางคุณจะมี1/3หรือมี1/2โอกาสและเมื่อรวมสิ่งเหล่านี้เข้าด้วยกันคุณจะได้รับ1/6โอกาสในการออกจากโปรแกรม "มีชีวิต"

โปรแกรมขัดข้องโดยทำการหารด้วยศูนย์ ฉันเดาว่ามันเป็นเรื่องเฉพาะของการนำไปใช้งานสิ่งที่จะเกิดขึ้น (บน Wikipedia มันบอกว่าโปรแกรมควรถามคำตอบที่ต้องการ) แต่befungee.pyแบบของการล่มหรือออกจากความโกรธ:

$ for i in {1..6} ; do ./befungee.py roulette.befunge ; done
Error (1,2): integer division or modulo by zero
Error (3,2): integer division or modulo by zero
Error (1,2): integer division or modulo by zero
I survived!
Error (0,1): integer division or modulo by zero
I survived!

5

J, 18

'I survived!'[q:?6

ล้มเหลวdomain errorเมื่อพยายามแยกตัวประกอบ 0


J หว่าน RNG ของมันโดยอัตโนมัติหรือไม่?
vsz

@vsz ?ใช่ด้วย คุณสามารถใช้?.สำหรับเมล็ดคงที่
randomra

4

C, 67 65 62 ตัวอักษร

rand()%8ไม่สูญเสียความยุติธรรม การล่มในกองt=0ให้เป็นจริงสำหรับ 1 และ 2 (ลองอีกครั้ง) ให้ค่าเท็จสำหรับ 3..7 (รอดชีวิต)
แก้ไข:รุ่นก่อนหน้าใช้ตัวแปรชั่วคราวซึ่งจบลงด้วยความไม่จำเป็นอย่างสมบูรณ์ 2/(rand()%8)ใช้เงื่อนไขที่จำเป็นทั้งสองอย่าง

main(){
        for(srand(time(0));2/(rand()%8););
        puts("I survived!");
}

มันทำ "ไม่อนุญาตให้ใช้เอาต์พุตอื่น"
vsz

@ vsz อย่างใดพลาดมัน แต่อย่างไรก็ตามด้วย gcc / Linux มันไม่ได้พิมพ์อะไรเลย นอกจากนี้การปฏิบัติตามมาตรฐานอย่างเคร่งครัดข้อกำหนดนี้เป็นไปไม่ได้เพราะพฤติกรรมที่ไม่ได้กำหนดอาจพิมพ์อะไรก็ได้
ugoren

@vsz แก้ไขแล้ว - ไม่มีเอาต์พุตพิเศษในทุกกรณี ใช้ได้กับการปรับให้เหมาะสมและสั้นกว่า 2 อักขระ
ugoren

4

T-SQL 56 44 40 + 6

 if 1/cast(ceiling(rand()*6)-1as int)<2print'I Survived!'

เครดิตฌอนเชสเชียร์ในการโทรหานักแสดงที่ไม่จำเป็น

 if 1/ceiling(rand()*6-1)<2print'I Survived!'

ให้เครดิตข้อความส่วนตัวจาก Sean Cheshire สำหรับคำแนะนำในการเปลี่ยนเพดานสู่พื้น

 if 1/floor(rand()*6)<1print'I Survived!'

ข่าวสารเกี่ยวกับความตาย: ข่าวสารเกี่ยวกับ 8134 ระดับ 16 สถานะ 1 สาย 3 หารด้วยข้อผิดพลาดที่พบ


1
-1และceilingไม่จำเป็น castจะตัดทอน
SeanC

ฉันกำลังทดสอบว่าเพดานสามารถลบออกได้โดยไม่ละเมิดข้อกำหนดสำหรับการแจกแจงแบบเดียวกันหรือไม่เอกสารบอกว่า rand () ส่งคืนค่า
ทศนิยม

ฉันอยากรู้ว่าเพดานสามารถลบออกจากรายการแรกของฉันได้หรือไม่ ฉันไม่สามารถตรวจสอบจากเอกสารประกอบ T-SQL ได้ว่าฟังก์ชัน rand () จะส่งคืน 1 หรือไม่ ดังนั้นฉันจึงวนลูปประมาณ 50 ล้านครั้งเพื่อทดสอบฟังก์ชั่น rand () ไม่เคยส่งคืน 1 ครั้ง แต่การลบเพดานจากรายการแรกของฉันจะยังคงเป็น 47 ไบต์ดังนั้นรายการที่สองของฉันจึงสั้นกว่า เก็บเพดานและนำตัวหล่อออก
อิสระ

ฉันสงสัยว่าคุณทดสอบสคริปต์นี้มากกว่า 20 ครั้งแล้ว สิ่งนี้จะไม่ส่งคืนผลลัพธ์ที่คาดหวังเสมอไป 1 ใน 6 สิ่งนี้จะล้มเหลวและไม่ส่งคืนเอาต์พุต ไวยากรณ์นี้จะใช้งานได้: 0 / floor (rand () * 6) = 0
t-clausen.dk

3

Javascript, 42

(Math.random()*6|0)?alert('i survived!'):b

ค่า bitwise หรือ floor ผลลัพธ์ของการคูณจึงมีค่าระหว่าง 0 ถึง 5 0 ได้รับการ casted โดยนัยเป็นเท็จดังนั้นใน 5 จาก 6 กรณีการแจ้งเตือนจะปรากฏในกรณีที่ 6 มีbการอ้างอิงบางอย่างล้มเหลวในกระบวนการ


3

การใช้การหารปกติด้วยวิธีศูนย์:

Perl 5.8 เวอร์ชั่น

1/(int rand 6)&&print "I survived!"

Perl 5.10 เวอร์ชั่น

1/(int rand 6)&&say "I survived!"

เมื่อล้มเหลวสิ่งเหล่านี้จะแสดง:

Illegal division by zero at -e line 1.

การใช้ฟังก์ชั่นอวยพรที่ใช้สำหรับการสร้างวัตถุใน Perl

Perl 5.8 เวอร์ชั่น

print (int rand 6?"I survived!":bless me);

Perl 5.10 เวอร์ชั่น

say (int rand 6?"I survived!":bless me);

เมื่อล้มเหลวสิ่งเหล่านี้จะแสดง:

Can't bless non-reference value at -e line 1.

3
คำแนะนำเล็กน้อย: กำจัดวงเล็บตรรกะ&&และช่องว่างเพิ่มเติม ใช้~~แทนintการบังคับค่าปริพันธ์ ผลลัพธ์คือ:1/~~rand 6;print"I survived!"
ardnew

3

GolfScript, 21 ตัวอักษร

,6rand/;'I survived!'

ชอบคำตอบส่วนใหญ่คนนี้มีโอกาสหนึ่งในหกของการชนกับ ZeroDivisionError ทางออกที่สั้นที่สุดที่ฉันสามารถจัดการได้โดยไม่ใช้การหารด้วยศูนย์คือ 23 ตัวอักษร:

5,6rand=+;'I survived!'

ซึ่งมีโอกาสที่ 1/6 ของ crashing undefined method `+' for nil:NilClass (NoMethodError)กับ

(ป.ล. ในขณะที่พัฒนาสิ่งนี้ฉันพบสิ่งที่อาจเป็นข้อบกพร่องในล่าม GolfScript: รหัสเช่น0,1>ปรากฏขึ้นเพื่อให้nilค่าในกองซึ่งภายหลังจะผิดพลาดโปรแกรมหากคุณพยายามทำอะไรกับค่าที่ยกเว้น pop มันออกและ ทิ้งมันไปด้วย;โชคไม่ดีที่ความจริงที่ว่าฉันจำเป็นต้องใช้ค่าใด ๆ เพื่อทำให้เกิดความผิดพลาดหมายความว่าแม้การใช้ประโยชน์จากข้อผิดพลาดนี้ไม่ได้ช่วยให้ฉันได้รับต่ำกว่า 23 ตัวอักษร)


แน่นอนว่าดูเหมือนเป็นแมลง 5,5>ทิ้ง[]ไว้บนกองซ้อนซึ่งน่าจะเป็นสิ่งที่ควรทำ แต่4,5>ทิ้งnilไว้ หากคุณไม่ลบมันออกล่ามจะผิดพลาดจริง ๆ ในขณะที่พยายามส่งออก ผลข้างเคียงที่น่าสนใจคือ4,6rand>+;'I survived!'เป็นวิธีการแก้ไขที่ถูกต้อง บางคนอาจแจ้งให้ทราบอย่างชัดเจน
โม่

1
ฉันรายงานสิ่งนี้แล้วและได้รับการแก้ไขแล้ว (พร้อมกับข้อผิดพลาดอื่นที่ฉันสะดุด) ในล่าม GolfScript รุ่นล่าสุด
Ilmari Karonen

3

Python 70 ตัวอักษร

ด้วยแรงบันดาลใจจากคำตอบของ GRC

from random import*
if randrange(5)<1:exec'()'*9**5
print'I survived!'

randrange (5) ส่งคืนค่าระหว่าง 0 ถึง 5
ถ้ามันคืนค่า 0, Python หยุดทำงานในขณะที่พยายาม exec (ute) สตริงของรหัสที่มีวงเล็บ 9 ^ 5 ชุด


3

PHP - 30 ไบต์

<?rand(0,5)?:~[]?>I survived!

ต้องใช้ PHP 5.4+ สำหรับไวยากรณ์ของอาร์เรย์แบบสั้นแนวคิดตัวดำเนินการที่ไม่ถูกต้องถูกขโมยไปอย่างไร้ยางอายจาก @primo

ตามที่ระบุไว้เป็นเมล็ดที่โดยอัตโนมัติเมื่อใช้งานครั้งแรกrand()


การหารด้วยศูนย์ไม่ได้หยุดเพียงแค่สร้างคำเตือนเท่านั้นเช่นเดียวกับข้อความ 'ฉันรอดชีวิต!' นอกจากนี้ไม่ได้เป็นเครื่องแบบกระจายเป็นrand()%6 32768 = 2 (mod 6)อย่างไรก็ตามrand(0,5)||~$aสำหรับ 30 ไบต์เป็นและจะทำงานร่วมกับรุ่น PHP ทั้งหมด (นิพจน์ที่สองในไตรภาคเป็นตัวเลือกเฉพาะใน 5.3.0+)
โม่

@primo Guess ฉันกำลังมองหา stack trace เมื่อฉันตรวจสอบการหารด้วยศูนย์เดียวไม่ได้สังเกตว่ามันยังพิมพ์อยู่ ฉันรู้ว่าชวเลข ternary เป็น 5.3+ แต่ผมมีความสนใจในการสนับสนุนไม่นานจากวันรุ่น :)
ลีห์

ที่ฉันเห็นด้วยกับ ไม่มีอาร์กิวเมนต์ที่ถูกต้องสำหรับการใช้น้อยกว่า 5.3 ณ จุดนี้ 5.4, ​​ฉันยังคงถือหมายเลขปรับปรุงตัวเลขสองหลักอยู่
primo

1
ฉันนับ 29 ไบต์
ติตัส

3

Befunge, 38

v>25*"!devivrus I",,,,,,,,,,,@
?^
v
?^
<1

ตรงไปตรงมาสวย การกระแทกจะกระทำโดยการกด 1 วินาทีลงในสแต็กจนกว่าจะล้น ฉันใช้ความพยายามสองสามครั้งในการตัดคอมม่า 11 อันออกไปและแทนที่พวกมันด้วยลูปที่มีประสิทธิภาพมากขึ้นเพื่อพิมพ์ทุกอย่าง แต่ไม่สามารถทำได้ต่ำกว่า 11 ตัว

โปรดทราบว่าการนับตัวอักษรใน Befunge นั้นยุ่งยากเล็กน้อย ... ตัวอย่างเช่นมีเพียงหนึ่งตัวอักษรในบรรทัดที่สาม แต่ฉันนับหนึ่งพิเศษที่นั่นเนื่องจากการดำเนินการสามารถเดินทางผ่านตำแหน่งนั้นได้


ฉันเชื่อว่านั่นเป็นสถิติของจุลภาคติดต่อกันมากที่สุดที่ฉันเคยเห็นในรายการ
Joe Z.

จากนั้นฉันก็ดูว่า Befunge ทำงานอย่างไรและฝ่ามือใบหน้า
Joe Z.

2

CMD Shell (Win XP หรือใหม่กว่า), 40 +6

ฉันแค่ทำสิ่งนี้เพราะ DOS ไม่ใช่สิ่งที่ควรคำนึงถึงสำหรับการตีกอล์ฟและช่องว่างนั้นสำคัญ

set/a1/(%RANDOM% %% 6)&&echo I Survived!

เมื่อความล้มเหลวมันจะพิมพ์

หารด้วยศูนย์ข้อผิดพลาด


2

R, 50 44 42 36 36

ifelse(!is.na(sample(c(NA,1:5),1)),'I Survived!',)

ifelse(floor(runif(1,0,5))>0,'I Survived!',)

ifelse(floor(runif(1,0,5)),'I Survived!',)

ifelse(sample(0:5,1),'I Survived!',)

ข้อความแจ้งความผิดพลาด:

เกิดข้อผิดพลาดใน ifelse (! is.na (1 / ตัวอย่าง (c (NA, 1: 5), 1))), "I Survived!",): อาร์กิวเมนต์ "no" หายไปโดยไม่มีค่าเริ่มต้น


ฉันลอง R แล้วทำให้มันล้มเหลว - if(1/0)"I Survived!"ยังพิมพ์I Survived
SeanC

ซึ่งแตกต่างจากภาษาอื่น ๆ R ไม่ถือว่า 1/0 เป็นข้อผิดพลาดทางคณิตศาสตร์และไม่หยุดการทำงานมันแค่ส่งกลับค่า inf สำหรับ 1/0 ฉันคิดว่า @vsz ต้องการข้อผิดพลาดร้ายแรงสำหรับรอบนี้ แต่หากสมมุติว่า vsz นับว่าเป็นข้อผิดพลาดแห่งความตายฉันสามารถทำให้โปรแกรมของฉันเหลือ 41 ตัวอักษร: ifelse (ตัวอย่าง (c (NA, 1: 5), 1), 'I Survived',)
อิสระ


2

Javascript, 40 chars

ใน Javascript กลเม็ดแบบแบ่งเป็นศูนย์ไม่ได้ผล: มันแค่คืนค่า Infinity ดังนั้นการอ้างอิงตัวแปรที่ไม่มีอยู่:

alert(6*Math.random()|0?"I survived!":f)

ไม่สั้นมาก แต่สนุก :)



2

TI-BASIC (TI-84 + / SE), 36 ไบต์

startTmr→rand:1/(1<randInt(1,6:"I survived!

ไม่มีการป้อนข้อมูลตามที่ความท้าทายระบุ
เอาต์พุตคือI survived!ถ้าสำเร็จDIVIDE BY 0ข้อผิดพลาดเป็นอย่างอื่น

DIVIDE BY 0หน้าจอข้อผิดพลาดลักษณะเช่นต่อไปนี้:

ERR:DIVIDE BY 0
1:Quit
2:Goto

การเลือกตัวเลือกใดตัวเลือกหนึ่ง (และกลับสู่หน้าจอหลักหาก2เลือก) จะปรากฏขึ้นErrorหลังจากการเรียกโปรแกรม

ตัวอย่าง:

prgmCDGFE
           Error
prgmCDGFE
I survived!
prgmCDGFE
I survived!
prgmCDGFE
           Error

คำอธิบาย:

startTmr→rand:1/(1<randInt(1,6:"I survived!   ;full program

startTmr→rand                                 ;store the current time into "rand"
                                              ; this is necessary because "rand" is 0 after
                                              ; factory reset, the default state for TI-BASIC
                                              ; submissions
                   randInt(1,6                ;get a random integer in [1,6]
                 1<                           ;is greater than 1?  1 if true, 0 if false
              1/(                             ;divide 1 by the result
                                              ; throws "DIVIDE BY 0" error if result was
                                              ; false
                               "I survived!   ;leave this string in "Ans"
                                              ;implicitly print "Ans"

หมายเหตุ:

  • TI-BASIC เป็นภาษาโทเค็น จำนวนไบต์ไม่เท่ากับจำนวนอักขระ

  • ตัวอักษรตัวพิมพ์เล็กมีสองไบต์ในแต่ละ

    • ตัวอักษรตัวพิมพ์เล็กสามารถเปิดใช้งานโดยใช้นี้โปรแกรมการชุมนุม
  • startTmrเป็นคำสั่งในเครื่องคิดเลข TI-84 + และ TI-84 + SE เท่านั้น เครื่องคิดเลขดังกล่าวมีระบบปฏิบัติการที่แตกต่างกัน


2

Python ขนาด 53 ไบต์

ต่อไปนี้เป็นโปรแกรมขนาดสั้นขนาด 53 ไบต์ของไพ ธ อน:

import time
[0][time.time()%6<1]
print("I survived!")

สวัสดีและยินดีต้อนรับ โปรดทราบว่าในกฎสำหรับการท้าทายนี้ระบุว่า "MOD 6 จะไม่เพียงพอ" แม้ว่าฉันจะไม่คุ้นเคยกับ Python แต่ดูเหมือนว่าฉันจะใช้ Modulo อยู่ที่นี่
Shaun Bebbers

1
@ShaunBebbers ข้อความอ้างอิงคือ "นี่หมายถึงตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้น (หรือ RNG ที่ไม่มีเมล็ด) MOD 6 จะไม่เพียงพอ" แต่เมตาโพสต์นี้บอกว่าโมดูโลเวลาปัจจุบันนั้นเพียงพอสำหรับ PRNG สำหรับรหัสกอล์ฟ
Stephen

ความเข้าใจผิดของฉันในตอนนั้น
Shaun Bebbers

1

Java, 149

public class R{public static void main(String[]s){int[]a={1,1,1,1,1};System.out.println(a[new java.util.Random().nextInt(7)]>0?"I survived!":"");}}

ล้มเหลวด้วยข้อผิดพลาด "Array out of bounds" จัดการเพื่อโกนอักขระบางตัวโดยใช้วัตถุสุ่มที่ไม่ระบุชื่อ (ไม่มีการนำเข้า)


1

Groovy, 39

1/new Random().next(6);print"I survived!"

เลือกตัวเลขสุ่มระหว่าง 0 ถึง 5 รวม ถ้า 0 ให้หารด้วยข้อยกเว้นศูนย์


1

Python (56), Haskell (77)

สิ่งนี้จะขัดข้องด้วย IndexError เมื่อจำนวนที่สร้างคือ 1:

จากการนำเข้าแบบสุ่ม *
พิมพ์ ['ฉันรอดชีวิต!'] [1 / randint (1,7)]

โซลูชัน Haskell มีแนวคิดเดียวกัน:

ระบบนำเข้าสุ่ม
main = putStrLn. (["ฉันรอดชีวิต!"] !!). div 1 = << randomRIO (1,6)

1

Python, 59 55 53, 65 59 56

import os
1/(ord(os.urandom(1))%6)
print"I survived!"

ZeroDivisionErrorเมื่อord(os.urandom(1))%6ประเมินเป็น 0

import os
print(["I survived!"]*5)[ord(os.urandom(1))%6]

IndexErrorเมื่อord(os.urandom(1))%6ประเมินถึง 5


บันทึก 5 ตัวละครด้วยการเปลี่ยนการนำเข้า: import random as rจากนั้นใช้r.randint
Steven Rumbalski

1
หรือบันทึก 8 ตัวอักษรโดยเปลี่ยนการนำเข้าเป็นimport osจากนั้นใช้ord(os.urandom(1))%6เป็น int แบบสุ่มของคุณ
Steven Rumbalski

บันทึก 1 printตัวละครโดยการเอาพื้นที่หลัง
Steven Rumbalski

1

VBA - 39/46

ฉันไม่ชอบผลลัพธ์ตัวเลขของ Sean Cheshire (แม้ว่าจะยังเป็นคำตอบที่ดี แต่ในทางเทคนิคแล้วมันล้มเหลวNo input, and no other outputs are allowed.จากข้อมูลจำเพาะ ... ) รวมทั้งเขาใช้/0ดังนั้นนี่คือทางเลือกของฉัน:

?Mid("I Survived!",IIf(Int(6*Rnd),1,0))

วิธีนี้จะช่วยแก้ปัญหาRun-time error '5': Invalid procedureเมื่อพยายามเข้าถึงอักขระ 0 (VBA คือการจัดทำดัชนีแบบ 1)

n="I Survived!":If Int(6*Rnd) Then ?n Else ?-n

สิ่งนี้จะแก้ไขเป็น a Run-time error '13': Type mismatchเมื่อใช้สวิตช์เชิงลบกับสตริง


1

Japt v1.4.5, 16 ไบต์

6ö
ªí
`I s¨viv!

ลองมัน

-1 ไบต์ขอบคุณ @Shaggy!

พ่นTypeError: U.í is not a functionเมื่อจำนวนสุ่มในช่วงเป็น[0,6)0



ที่จริงแล้วอาจเป็นความคิดที่จะใช้ v1.4.5 สำหรับกรณีนี้ในกรณีที่ ETH เพิ่มN.í()วิธีการเป็น v1.4.6
Shaggy

อัปเดต - Japt พยายามอย่างหนักเพื่อไม่ให้ผิดพลาดในโปรแกรมแปลก ๆ ฉันพยายามหาวิธีอ้างอิงตัวแปรที่ไม่มีอยู่ (นิยาม AZ) แต่ไม่ได้พิจารณาเรียกวิธีที่ไม่มีอยู่
dana

ใช่N.í()เป็น "ไปที่" ของฉันสำหรับการโยนข้อผิดพลาด (มันเคยเป็นN.y()) มีวิธีอื่นในการรับข้อผิดพลาด แต่มีประโยชน์น้อยมาก
Shaggy

ตอนนี้ทำไมฉันไม่คิดที่จะใช้บรรทัดที่สาม! : \
ปุย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.