パワーボール番号を選択してください!


34

パワーボールは、現在のジャックポット(2016年1月11日現在)が過去最大の宝くじ賞金であり、約15億ドル(米ドル)であるため、最近注目を集めているアメリカの宝くじです。)であるます。

パワーボールプレーヤーは、69個の白いボールから5つの異なる番号を選択し、26個の赤いボールから1つの「パワーボール」を選択します。彼らは勝つ彼らの5つの白いボールの選択肢は、任意の順序で描かれたものと一致した場合にジャックポットを、そして彼らは正しい「パワーボール」の数を選択した場合。

したがって、ジャックポットを獲得する可能性は1 (69 choose 5)*(26 choose 1)または((69*68*67*66*65)/(5*4*3*2*1))*26であり、これは292,201,338に1です

最新の抽選で誰もジャックポットを獲得しませんでした2016年1月9日のが、おそらく2016年1月13日午後10時59分(ET)に誰かが次の抽選に勝つでしょう。

チャレンジ

入力を行わず、1から69までの5つの異なる乱数を出力し、次に1から26までの1つのランダムな「パワーボール」番号を出力する、パワーボールの描画をシミュレートするプログラムまたは関数を作成します。初期番号)。

「Powerball」番号は常に出力の最後の番号である必要がありますが、最初の5つの番号の順序は重要ではありません。

6つの数値は、スペースで区切られた、または改行で区切られた10進数で出力れる必要があり、オプションの単一の末尾の改行があります。コンマ、角括弧、およびその他の文字は出力に使用できません。

したがって、これらは有効な出力になります(最後の図面の番号を使用):

32 16 19 57 34 13
32
16
19
57
34
13

すべての292201338の可能な結果は、均一な確率で可能になるはずです。組み込みの擬似乱数ジェネレータを使用し、それらがこの標準を満たしていると仮定することができます。

Python 2または3で機能する、参照されていない参照実装です。

import random
print(' '.join(map(str, random.sample(range(1,70), 5) + [random.randint(1, 26)])))

バイト単位の最短コードが優先されます。


私はパワーボールと提携しておらず、実際にプレイすることを提案していないことに注意してください。しかし、ここのプログラムのいずれかによって生成された数字から何かを獲得した場合、私たちはそれについて聞いてみたいと確信しています。:D


12
ここで誰かがジャックポットを獲得した場合、賞金の分配を要求する機会を逃しました。
アレックスA.

5つの数字は順番に並んでいる必要がありますか?
ニール

@Neil「「パワーボール」番号は常に出力の最後の番号である必要がありますが、それ以外の場合、最初の5つの番号の順序は重要ではありません。」
カルビンの趣味

3
誰も混乱していないと思いますが、実際にはチャレンジでは整数を意味します
jpmc26

1
@CanadianLuke最初の5つの数字の順序は重要ではありません。5! = 5*4*3*2*15つのことを整理する方法があるので、それを考慮に入れます。
カルビンの趣味

回答:


29

Dyalog APL、10バイト

(5?69),?26

ダイアディック?は[1、⍵]の⍺異なる乱数であり、モナディック?は単一の乱数です。

ここで試してみてください


0ベースのインデックス付けのために1を追加する必要があることを除いて、Jとほぼ同じです1+(5?69),?26
randomra

13

CJam、16バイト

69,mr5<26mr+:)S*
69,   range(69)
mr    shuffle the generated array
5<    first 5 elements
26mr  random number 0..25
+     concat to array
:)    increment each array element
S*    join with spaces

オンラインでお試しください。


1
:)見知らぬ人の笑顔があなたをほんの少し幸せにすることができるように、私は物事を少しだけ大きくする方法が好きです。
ファンドモニカの訴訟

1
:)宝くじに当たったらきれいになると思います。+1
アークトゥルス

9

MATL、10バイト

69 5Zr26Yr

言語/コンパイラの現在のバージョン(9.2.0)を使用します。

コンパイラをMatlabで実行すると:

>> matl
 > 69 5Zr26Yr
 > 
66
59
64
56
29
12

Octaveでコンパイラを実行する場合:

>> matl
 > 69 5Zr26Yr
 >
2 69 41 44 23
22

最初の5つの数字は、改行ではなくスペースで区切られています。これはrandsample、Matlabの動作とは異なる動作をするOctaveの基本機能によるものです(新しいバージョンのコンパイラで修正されました)。とにかく、チャレンジでは改行とスペースの両方が許可されます。

編集(2016年4月4日)オンラインで試してみてください!

説明

69 5Zr    % randsample(69,5), without replacement by default. Gives a 5x1 column vector
26Yr      % randi(26). Gives single number
          % implicit display

関連するMatlab関数を参照してください:randsampleおよびrandi


7

ルビー、33 32

p *[*1..69].sample(5),rand(26)+1

Rubyには、置換せずに配列からランダムな値を選択する組み込みメソッドsampleがあります。QPaysTaxesには、括弧が必要ないことを指摘してくれてありがとう。


括弧が必要ですか?10をドロップし、pと*の間にスペースを入れることで、バイトをトリムできると思います。今チェックしています。編集:テストされ、それが動作することを知っています。
ファンドモニカの訴訟

はい、ありがとうございます。pある時点で割り当てたirbインスタンスでテストを行っていましたが、実際にはそのバージョンの構文解析が中断されていました。
-histocrat

6

R、30 29バイト

cat((s=sample)(69,5),s(26,1))

このsample関数は、入力から単純なランダムサンプリングを実行します。単一の整数が最初の引数として指定されている場合、サンプリングは1から引数まで行われます。サンプルサイズは2番目の引数です。置換なしのサンプリングのデフォルトオプションを採用しています。

オンラインで試す


あなたが使用して、2つの全体のバイトを保存することができますc代わりにcat
ディーン・マクレガー

@DeanMacGregor提案に感謝しますが、ここでの提出は、STDOUTに書き込む完全なプログラムか、値を返す関数でなければなりません。この場合、前者を選択しました。を使用する場合c、これはスニペットに過ぎず、デフォルトでは許可されていません。
アレックスA.

ええ、わかりました。私は熱心なゴルファーではないので、私はそれをよく知らなかった。
ディーンマックレガー

@DeanMacGregor問題ありません。とにかく提案をありがとう。:)
アレックスA.

6

Python 3.5、63バイト

from random import*
print(*sample(range(1,70),5),randint(1,26))

基本的には、ゴルフのリファレンス実装です。最後ではない引数に飛び散るには3.5が必要であることに注意してください。


6

オクターブ、35 32バイト

Calvin's Hobbies ans =は、関数を使用するときに問題ないことを確認しました。

@()[randperm(69)(1:5),randi(26)]

それはMemmingのに類似点がある答えを、それがオクターブでのみ可能です直接インデックスを使用し、それはだ5私はそれがとにかく投稿の価値があった考え出して、7バイト短いです。

randperm(69)1から69までの数字をランダムに並べたリストを作成します。リストに直接インデックスを付けて(MATLABでは不可能)、このように最初の5つの数値のみを取得することができます(1;5)。リストの後randi(26)には、1〜26の単一の数値が返されます。

古い:

disp([randperm(69)(1:5),randi(26)])

結果のリストはを使用して表示されますdisp


6

PowerShell v2 +、31 27バイト

1..69|Random -c 5;Random 27

Get-Randomv1には存在しなかったため、バージョン2以降が必要です(これGet-は暗黙的であり、-Maximum位置的です)。出力は改行で区切られます。

ゴルフをしていない:

Get-Random -InputObject (1..69) -Count 5
Get-Random -Maximum 27

Random -ma 27ちょうどことができるRandom 27ように-Maximum位置0で一致している
マット・

@Mattありがとう-忘れてた。
AdmBorkBork


4

MATLAB、40

x=randperm(69);disp([x(1:5) randi(26)])

知っている。それは退屈なソリューションです。


4

PHP、69バイト

<?foreach(array_rand(range(1,69),5)as$k)echo$k+1," ";echo rand(1,26);

とても簡単な答えです。1-69を生成しrange、その後、使用array_randアレイから5つのランダムキーを取得し、アウトエコー$k+11-26からのランダム整数をエコー次いで、値(0インデックス付きの)。


4

C#、 153バイト 140バイト

「McKay」のおかげで:

string.Join(" ",Enumerable.Range(1,69).OrderBy(e=>Guid.NewGuid()).Take(5).Concat(Enumerable.Range(1,26).OrderBy(e=>Guid.NewGuid()).Take(1)))

153バイトのソリューション:

string.Join(" ",Enumerable.Range(1,69).OrderBy(e=>Guid.NewGuid()).Take(5))+" "+string.Join(" ",Enumerable.Range(1,26).OrderBy(e=>Guid.NewGuid()).Take(1))

Linqを使用した簡単なソリューションとGUIDを使用したシャッフル。


1
パワーボール番号の部分に文字列結合を必要とせず、デリゲートによって順序をキャッシュするか、パワーボール番号にランダムを使用してさらに多くのバイトを保存します
-pinkfloydx33

また、文字列の連結ではなくシーケンスを連結する場合、space3回を指定する必要はありません。これも同様に効率的です。例string.Join(" ", ....take(5).Concat(....Take(1)))
マッケイ


2

Brachylog、40バイト

1:5e,68{I`random(I)+1=Z`Z=w,"
"w}\;25:1&

説明

Brachylogには乱数の組み込み機能がありません(まだ...)ので、そのためにSWI-Prolog述語を使用する必要がありますrandom/1。バッククォートを使用してBrachylogにSWI-Prologコードを入力できます。

1:5e,                             \  § Enumerate from 1 to 5 using \ (backtrack), which
                                     § evaluates to false and thus constructs a loop

     68{                         }   § Declare sub-predicate 1 and call it with 68 as input

        I`random(I)+1=Z`             § Z is the arithmetic expression 'random(I) + 1' where
                                     § I is the input of the sub-predicate

                        Z=w,         § Evaluate Z and write it
                            "\n"w    § Write a new line

;                                    § Else (we will reach this after the 5th iteration of
                                     § the enumeration, since \ is always false)

25:1&                                § Call the sub-predicate 1 with 25 as input

2

JavaScript(ES6)、106 86 84バイト

F=(s=new Set,r=Math.random)=>s.size<5?F(s.add(r()*69+1|0)):[...s,r()*26|0+1].join` `

JavaScriptでランダムにランダムにサンプリングすることはできないため、これは、一意の値のみを保持するSetを作成し、5つの一意の乱数が追加されるまで乱数(1-69)を再帰的に追加し、乱数(1-26)その後、参加してすべてを返します。


2

エリクサー、83バイト

Enum.reduce Enum.take_random(1..69,5)++[Enum.random(1..26)],fn(x,a)->"#{a} #{x}"end

IO.puts整数の配列を単にingするとき、Elixirは整数を文字として解釈するため、目的のパワーボール番号の代わりに文字列を出力します。そのため、整数配列を文字列に減らす必要があります。


2

ルビー、 47 43 39バイト

puts *(1..69).to_a.sample(5),rand(26)+1

もっとゴルフができると思いますが、このコードがどれだけきれいに見えるかを考え終えたら、その作業に取り掛かります。

それは他のすべてとほとんど同じように機能します:1から69までの数字の配列を取り、それらをシャッフルし、最初の5つを取得し、それらを出力し、1から26までの乱数を出力します。

これを投稿する前に、いくつかの反復を行いました。

puts (1..69).to_a.shuffle.first(5).join(' ')+" #{rand(26)+1}"  #61
puts (1..69).to_a.shuffle[0..5].join(' ')+" #{rand(26)+1}"     #58
puts (1..69).to_a.shuffle[0..5].join('<newline>'),rand(26)+1   #52
puts *('1'..'69').to_a.shuffle[0..5],rand(26)+1                #47
puts *('1'..'69').to_a.sample(5),rand(26)+1                    #43

(どこ <newline>実際の改行に置き換えられます)

編集:おっと、既存のRubyの答えが表示されませんでした。私はつまずいsampleて答えを編集するためにスクロールダウンしていましたが、それを見たのです...まあ。私の最終スコアは43バイトですが、ゴルフを少し続けて自分がどれだけうまくできるかを確認します。


2

Mathematica、64バイト

StringRiffle@Append[Range@69~RandomSample~5,RandomInteger@25+1]&

とても簡単です。


出力には、中括弧とコンマがあります。
チャールズ

上記の理由のために-1無効
CalculatorFeline

StringJoin=""<>##&
CalculatorFeline

@CatsAreFluffy今回は実際に修正されました。ちょうど私の機能を混乱させた...
LegionMammal978

Range / RandomSampleのみを使用し、RandomIntegerを使用する代わりに2つのリストに転置する場合は、短縮できると思います。RandomSample [範囲[#1]、#2]&ようなもの@@@ {{69,5}、{26,1}}]
Xanderhall

1

Perl 5、59バイト

{say for(sort{-1+2*int rand 2}1..69)[0..5];say$==1+rand 25}

それはサブルーチンです。次のように使用します。

perl -M5.010 -e'sub f{...}f'

-E代わりに使用できます-M5.010 -e
-andlrc

あなたは置き換えることができカント-1+2*int rand 2rand>.5?1:-1
andlrc

そして、次のものに置き換えること;say$==でさらにいくつかを保存できるはずではありません,$==
andlrc

@ dev-nullありがとう!-M5.010私はそれを略し気にしませんでしたので、とにかくカウントされません。別のコンマの代わりにコンマを試してみたが、sayうまくいかなかったと思う。しかし、新しいソート規則は良いアイデアです、ありがとう。機会があればテストして、編集します。
msh210

1

PHP、65バイト

<?=join(' ',array_rand(array_flip(range(1,69)),5))." ".rand()%26;

このページの他のPHPの回答に感謝します。私は自分でプログラムを作成しましたが、それはサムスカンチが書いたものとまったく同じ答えであることが判明したため、数バイトを節約するためにさらに一歩進めました。

ここで配列を別の配列に追加する方法を誰かが理解できれば、その後パワーボール番号に参加するのに必要な5バイト未満です、私はそれを大いに感謝します、それは私を夢中にさせます!私が思いつく最高のものは、のようなステートメントを持っているafter array_randとbefore joinですが、+[5=>rand()%25]それはafterを連結するだけの余分なバイトです。

<?=                                                              // This represents an inline 'echo' statement
                                  range(1,69)                    // Get an array of all numbers from 1 to 69 inclusive
                       array_flip(           )                   // Swap the keys and values.
            array_rand(                       ,5)                // Get a random subset of five keys.
   join(' ',                                     ).rand()%26     // Concatenate the array with spaces, along with the powerball number

コマンドラインから実行します。サンプル:

C:\(filepath)>php powerball.php

出力:

 12 24 33 67 69 4

1

PARI / GP、71 70バイト

apply(n->print(n),numtoperm(69,random(69!))[1..5]);print(random(26)+1)

[1..69]のランダムな順列を生成し、最初の5つを取ります。

残念ながら、これはランダム性の非効率的なユーザーであり、3.5の情報理論的な理想と比較して平均87バイトのエントロピーを消費します。これは主に、最初の5つのメンバーだけではなく置換全体が生成されるため、およびパーマが順序付けられるためです(lg 5!=〜7ビットを失う)。さらに、random算術コーディングを使用するのではなく、拒否戦略を使用します。(これは、PARIがブレントのxorgenを使用しているためです。このxorgenは十分に高速であるため、より複雑な戦略によるオーバーヘッドはほとんど価値がありません。)

現在の(2.8.0)バージョンのgpでは機能しない「明白な」変更が3つあります。randomそしてprint、変数に保存するprintことができ、匿名->関数を介してではなく、直接呼び出すことができます。

r=random;apply(p=print,numtoperm(69,r(69!))[1..5]);p(r(26)+1)

これらを合わせて9バイト節約できます。残念ながら、両方の関数は引数なしで有効であるため、保存されるのではなくすぐに評価されるため、これらは目的の出力を計算しません。


0

Intel x86マシンコード、85バイト

¿I ±‰ø1Ò»E ÷óB‰Ðè+ ‰þÑç÷ƒÇþÉ„Éuâ‰ø1Ò» ÷óB‰Ðè
 0ä͸ ͱëÆÔ
00†Äˆã´ÍˆØÍ° ÍÃ

そうだとすれば、同じ数字を印刷することもあります。キーを押してもう一度試してください。

コンパイル:

nasm file.asm -o file.bin

必ずvmにマウントするために、フロッピーサイズに揃えてください(最後にゼロを追加します)(オペレーティングシステムは必要ありません)。

分解:

BITS 16
ORG 0x7c00

mov di,73 ;starting seed
mov cl,5 ;we need five numbers

loop:

mov ax,di

xor dx,dx
mov bx,69
div bx
inc dx
mov ax,dx

call print_rnd_number

mov si,di
shl di,1
add di,si
add di,7

dec cl

test cl,cl
jne loop

mov ax,di

xor dx,dx
mov bx,26
div bx
inc dx
mov ax,dx

call print_rnd_number

xor ah,ah
int 0x16
mov ax,0x0002
int 0x10
mov cl,5
jmp loop

print_rnd_number:
aam
add ax,0x3030
xchg al,ah
mov bl,ah
mov ah,0x0E
int 0x10
mov al,bl
int 0x10
mov al,' '
int 0x10
ret

6
プログラミングパズルとコードゴルフへようこそ!マシンコードを見るのはいつも印象的ですが、繰り返し数字を出力する場合は、提出が無効であると思います。
デニス

1
はい、そうですが、これを共有したかっただけです:)
ByteBit

2
私は理解していますが、最近これについて議論しました。コミュニティのコンセンサスは、無効な回答は修正するか削除する必要があるというものでした。
デニス

あなたが修正したら、私はダウンボートします。pingしてください。
リルトシアスト

0

C、142バイト

i,x[6],n;main(j){for(srand(time(0));i<6;n-i?0:printf("%d ",x[i]),i++)for(x[n=j=i]=(69-i/5*43)*(rand()/2147483647.)+1;i<6&&j--;)i-=x[i]==x[j];}

より多くのゴ​​ルフの機会があるべきだと感じるので、このソリューションにひどく満足していません。明日も新鮮な目で見ます。ここで試してみてください


0

Swift、165バイト

import UIKit;var a=[Int]();for i in 0...5{func z()->Int{return Int(arc4random_uniform(i<5 ?68:25)+1)};var n=z();while i<5&&a.contains(n){n=z()};a.append(n);print(n)}

Xcode Playgroundですぐに実行できます。

編集:ここでの現在の問題は、arc4random_uniformが何らかの形で同じ数を引き続けている場合、whileループでこれを永久に実行することが理論的に可能であるということです。かなりの期間、そのようなことが起こる可能性は、おそらくパワーボールに勝つ可能性よりも優れています。


重複する値がないことをどのように保証しますか?
スーパーキャット

@supercat、以前はなかったが、今ではそうだ。
-timgcarlson

0

Perl 6の 32の   31バイト

# space is necessary so that the parens denote a list
# rather than being part of the call to `put`
put (pick(5,1..69),(1..26).pick) # 32 bytes
# 25 35 57 67 62 24␤

文字列を返す関数に変えると、4バイト(put␠)を削除できますが、3({~ })を追加するだけです

{~(pick(5,1..69),(1..26).pick)} # 31 bytes

使用法:

say {...}().perl; # use .perl to prove it returns a string
# "25 35 57 67 62 24"

関数が値のリストを返すことを許可されている場合、次も機能します。

(それ以外の場合は上記と同じですが、{ }

  • 単一のフラットリストを返す関数

    {|pick(5,1..69),(1..26).pick} # 29 bytes
    # (25,35,57,67,62,24)
  • サブリストの最初の5つの数字を含むリストを返す関数

    {pick(5,1..69),(1..26).pick} # 28 bytes
    # ((25,35,57,67,62),24)
  • サブリストの最初の5つのリストと、別のサブリストのパワーボールを返す関数

    {pick(5,1..69),pick 1,1..26} # 28 bytes
    # ((25,35,57,67,62),(24,))

0

真剣に、35バイト

ゴルフ言語での答えの私の最初の試み。

必要以上に長く感じる。
繰り返しはWで削除される可能性がありますが、オンラインインタープリターでは壊れているようで、テストされていないコードを投稿したくありません。

残念{リストでは機能しません。

コード:

:70:1xi J{. J{. J{. J{. J{.:26:Ju.

六角ダンプ:

3a37303a317869204a7b2e204a7b2e204a7b2e204a7b2e204a7b2e3a32363a4a752e7f

説明:

:70:1x                       # Push a list of the numbers 1-69
i                            # Explode list
 J{.                         # rotate stack random(len(stack)) times and pop/print
 J{. J{. J{. J{.             # same thing 4 more times
:26:Ju.                      # print random number in 1-26
                             # (7F) unprintable, terminate without explicit printing

オンライン通訳


0

Lua、96バイト

テーブル内に値を入れてテーブルとしてセットを使用し、テーブル内table[value]=truthy/falsyにあるかどうかを確認できるようにする単純なソリューション。

テーブルの最初の値を設定する必要があるため、5バイトが失われます。そうしないwhile(o[n])と、ループ内に入らずn、ランダム関数を使用する前に単純に出力されます。Luaは1ベースのテーブルを使用するので、最初の値をセルに強制的に追加する必要[0]があります1。そうしないと、aを出力できませんでした。

m,n,o=math.random,0,{[0]=0}for i=1,5 do while(o[n])do n=m(69)end o[n]=0 print(n)end print(m(26))

ゴルフをしていない:

m,n,o=math.random,0,{[0]=0}
for i=1,5
do
  while(o[n])
  do
    n=m(69)
  end
  o[n]=0
  print(n)
end
print(m(26))

0

C ++、252バイト

ゴルフ:

#include<iostream>
#include <random>

int main(){std::random_device rd;std::mt19937 gen(rd());std::uniform_int_distribution<> dis(1,69);for(int c=0;c<=5;c++){std::cout<<dis(gen)<<" ";}int x=dis(gen);while(x>26||x<1){x=dis(gen);}std::cout<<x;return 0;}

ゴルフをしていない:

#include<iostream>
#include <random>

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 69);
    for(int c = 0; c <= 5; c++){
        std::cout<<dis(gen)<<" ";
    }
    int x = dis(gen);
    while (x > 26 || x < 1){
        x = dis(gen);
    }
    std::cout<<x;
    return 0;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.