最高のサイコロ


19

チャレンジ:

ここには、シーケンスの最初の100項目があります。

6,5,4,3,2,1,66,65,64,63,62,61,56,55,54,53,52,51,46,45,44,43,42,41,36,35,34,33,32,31,26,25,24,23,22,21,16,15,14,13,12,11,666,665,664,663,662,661,656,655,654,653,652,651,646,645,644,643,642,641,636,635,634,633,632,631,626,625,624,623,622,621,616,615,614,613,612,611,566,565,564,563,562,561,556,555,554,553,552,551,546,545,544,543,542,541,536,535,534,533,...

このシーケンスはどのように形成されますか?最初に範囲内の[6, 1]数値を取得します(単一のダイで可能な最高値から最低値までのすべての値)。次に、数字[66..61, 56..51, 46..41, 36..31, 26..21, 16..11](最高から最低までの2つのサイコロのすべての可能な連結値)があります。その他
これはOEISシーケンスA057436に関連しています。1〜6の数字のみが含まれますが、同じ量の数字を持つすべての数字がシーケンスの後方にソートされます。

課題は、上記のシーケンスを使用して、機能/プログラムにこれらの3つのオプションのいずれかを選択することです。

  1. 入力を取得し、このシーケンスの番目の値を出力します。0インデックスまたは1インデックスのいずれかです。nn
  2. 入力を受け取り、このシーケンスの最初のまたは値を出力します。nnn+1
  3. シーケンスから値を無期限に出力します。

もちろん、合理的な出力形式を使用できます。文字列/整数/小数/などとして可能性があります。(無限の)リスト/配列/ストリーム/などとして。space / comma / newline / other区切り文字を使用してSTDOUTに出力できます。などなど。答えには、使用しているI / Oとオプションを明記してください。

一般的なルール:

  • これはであるため、バイト単位の最短回答が優先されます。
    コードゴルフ言語では、コードゴルフ以外の言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。
  • デフォルトのI / Oルールを使用した回答には標準ルールが適用されるため、STDIN / STDOUT、関数/メソッド、適切なパラメーター、戻り値型、完全なプログラムを使用できます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。
  • 可能であれば、コードのテストへのリンク(TIOなど)を追加してください。
  • また、回答の説明を追加することを強くお勧めします。

オプション1を選択した場合の大きなテストケース:

n         0-indexed output    1-indexed output

500       5624                5625
750       4526                4531
1000      3432                3433
9329      11111               11112
9330      666666              11111
9331      666665              666666
10000     663632              663633
100000    6131232             6131233

1
提案された編集によると、kolmogorovの複雑度タグはシーケンスには適用されず、一定の有限の固定出力にのみ適用されます。シーケンスは永遠に続きます。
mbomb007

@ mbomb007の発言に加えて、入力に基づいてn番目の値または最初のn / n + 1値を出力することもできますが、KCチャレンジには入力がありません。
ケビンクルーッセン

回答:



12

Perl 6の24の 23バイト

nwellnhofのおかげで-1バイト

{.put;.[]X~(6...1)}...*

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

スペース/改行で無限に区切られたシーケンスを出力します。または、さらに数バイトの場合、代わりにインデックスを作成できるレイジーな無限リストを作成できます。

Perl 6、27バイト

{flat {@=.[]X~(6...1)}...*}

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

説明:

{                         }    # Anonymous code block
 flat                          # Return the flattened
                      ...*       # Infinite sequence
      {              }             # Defined as
         .[]                       # The previous element arrayified
            X~                     # Each concatenated with
              (6...1)              # All of 6 to 1
       @=                          # Arrayified


6

R、43バイト

p='';repeat cat(p<-sapply(p,paste0,6:1),'')

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

シーケンスを無期限に印刷します

  • -9 @Kirill Lに感謝します。

1
@ tk3:2番目のパラメーターを指定しないと、n桁の要素のサブシーケンスの最後の値と、n + 1桁の要素のサブシーケンスの最初の値が連結されます。例6 5 4 3 2 166 65 64...
digEmAll

6

バッシュ、31バイト

f()(x+={6..1};eval echo $x;f);f

TIO

コメントからの更新、n番目の値は1インデックス付き、+ GNUツール+ perl、64バイト、@ manatworkのおかげで7バイト節約

dc<<<6o$1p|perl -pe 's/(.)0/($1-1).6/e?redo:s/0//'|tr 1-6 654321

64バイト


あまり役に立ちませんが、2番目のソリューションでは、式全体を二重引用符で囲むよりもセミコロンをエスケープする方が短くなりますbc<<<obase=6\;$1。ただし、に切り替えた場合dc、エスケープするものはありません:dc<<<6o$1p
マナトワーク

おかげで確かに7バイトは節約できますが、全単射の数え方が原因で、混合bash perl(66バイト)がまだ機能していませんdc<<<6o$1p|perl -pe '1while s/(.)0/($1-1).6/e;s/0//'|tr 1-6 654321
Nahuel Fouilleul

5

MATL、11バイト

`6:P!V@Z^DT

値を無期限に出力します。

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

説明

`      % Do...while
  6:   %   Push [1 2 3 4 5 6]
  P    %   Flip: gives [6 5 4 3 2 1]
  !    %   Transpose: turns the row vector into a column vector
  V    %   Convert the number in each row to the corresponding char
  @    %   Push current iteration index, starting from 1
  Z^   %   Cartesian power. Gives a matrix where each row is a Cartesian tuple
  D    %   Display immediately
  T    %   Push true. This is used as loop condition, to give an infinite loop
       % End (implicit)

5

ハスケル、 38 34バイト

数の無限リスト:

d=[6,5..1]
l=d++[10*m+n|m<-l,n<-d]

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

それぞれが38バイトを使用する文字列の無限リストを提供する2つの初期のソリューション:

[1..]>>=sequence.(`replicate`"654321")

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

do n<-[1..];mapM id$[1..n]>>["654321"]

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


A 36; あなたのバージョンに基づいたバイトバージョンreplicate
dfeuer


5

Haskell、28バイト

l=(+).(10*)<$>0:l<*>[6,5..1]

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

数値の無限リストを生成しますl。を使用<$><*>てバイトを切り取ります:

29バイト

l=[10*n+d|n<-0:l,d<-[6,5..1]]

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

このアプローチは、Haskellの「すべての文字列を出力する」固定入力文字列「654321」に似ており、先頭に追加する場所を変更して空の文字列出力をスキップします。

30バイト

l=[n++[d]|n<-"":l,d<-"654321"]

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


それは素晴らしいことです!0(または"")から始める方が短いと思いましたが、結果に含まれない安価な方法を見つけられませんでした...
Christian Sievers

4

05AB1E、10バイト

シーケンスを無期限に出力します。

¸[6LRâJD»,

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

説明

¸           # initialize the stack with a list containing the empty string
 [          # loop
  6L        # push [1 ... 6]
    R       # reverse
     â      # cartesian product
      J     # join each inner list
       D    # duplicate (saving a copy for next iteration)
        »,  # join on newline and print

1
¸最初は知らなかったが、空の文字列を含むリストを作成します。また、テストケースの生成に使用したソリューションよりも2バイト短いため、もちろん+1です。:)
ケビンクルーッセン



3

Brachylog13 11バイト

2バイトのFatalizeに感謝

6~d{⟧₁∋}ᵐẉ⊥

無期限に出力します。オンラインでお試しください!

n

説明

6~d           Start with a number, all of whose digits are 6's
              Brachylog considers these in the order 6, 66, 666, 6666...
   {   }ᵐ     Map this predicate to each of those digits:
    ⟧₁         1-based reverse range: [6,5,4,3,2,1]
      ∋        The output digit must be a number in that range
              Brachylog considers possible outputs in this order: 6, 5, 4, 3, 2, 1, 66, 65...
         ẉ    Write a possible output with newline
          ⊥   Force the predicate to fail and backtrack to the next possibility

あなたはBrachylogロールを使用しています!
致命的

1
Prolog:で呼び出されるように、障害駆動型ループを使用して2バイトを節約できます6~d{⟧₁∋}ᵐẉ⊥。プログラムは基本的に「false」で終了し、すべてのソリューションを強制的に印刷します。
致命的

いいね はい、私はそれをたくさん楽しんでいます!
DLosc



2

Wolfram言語(Mathematica)88 78バイト

(l=d=c=7-Range@6;While[Length@c<#,d=Flatten[(10#+l)&/@d];c=c~Join~d;];c[[#]])&

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

@IanMillerのおかげで4 + 6バイト節約

リストには1のインデックスが付けられ、n番目の数値が出力されます。


1
あなたが範囲置き換えることができます[6,1、-1] 6 @ 7レンジで4つの文字を保存する
イアン・ミラー

1
codegolfルールの場合、匿名関数として記述することもできます:(l = d = c = 7-Range @ 6; While [Length @ c <#、d = Flatten [(10#+ l)&/ @ d]; c = c〜Join〜d;]; c [[#]])&
Ian Miller

@IanMillerありがとう!このフォーマットに関する規則が何であるかはわかりませんでした。
カイ

2

Mathematica、56バイト

Flatten[FromDigits/@Tuples[7-Range@6,#]&/@Range@#][[#]]&

65(6n1


+1、それは恐ろしい過剰殺人ですが、簡潔さのために完全に機能します!
カイ

@JonathanFrech mathjaxを修正してくれてありがとう。math.seとは少し異なるため、ここで有効にする方法がわかりませんでした
Ian Miller

元の編集はこのユーザーによるものであることに注意してください。
ジョナサンフレッチ

おっと。@ geza-kerecsenyiにも感謝します。
イアンミラー

1

ピップ -l、16バイト

x:YP6-,6W1PxCP:y

シーケンスを無期限に出力します。オンラインでお試しください!

説明

-lリストはそれ自身のライン上の各項目で印刷されていることをフラグ手段と アイテム自体がリストである場合、その要素はセパレータなしで連結されます。たとえば、リスト[1 [2 3] [4 [5 6]]]は次のように印刷されます。

1
23
456

それがクリアされた状態で:

x:YP6-,6W1PxCP:y
      ,6          Range(6): [0 1 2 3 4 5]
    6-            Subtract each element from 6: [6 5 4 3 2 1]
  YP              Yank that value into the y variable, and also print it
x:                Assign that value also to x
        W1        While 1 (infinite loop):
           xCP:    Assign to x the cartesian product of x with
               y   the list [6 5 4 3 2 1]
          P        Print it

最初のループ反復の後、x次のようになり[[6;6];[6;5];[6;4];...;[1;1]]ます。2回目の反復の後、[[[6;6];6];[[6;6];5];[[6;6];4];...;[[1;1];1]]; 等々。サブリストをフラット化することを心配する必要はありません-l。それは効果的に行われるからです。


1

、18バイト

NθWθ«←I⊕﹪±θ⁶≔÷⊖θ⁶θ

オンラインでお試しください!リンクは、コードの詳細バージョンです。1インデックス。説明:

Nθ

入力 n

Wθ«

nがゼロになるまで繰り返します。

←I⊕﹪±θ⁶

-nmoduloを減らして6から、結果と出力を右から左に増やします。

≔÷⊖θ⁶θ

デクリメントしn、整数で除算し6ます。


1

Retina 0.8.2、36バイト

.+
$*_
+`(_*)\1{5}(_+)
$1$.2
T`7-1`d

オンラインでお試しください!リンクにはテストケースが含まれます。1インデックス。説明:

.+
$*_

単項に変換します。(Retina 1はここで2バイトを節約します。)

+`(_*)\1{5}(_+)
$1$.2

divmodを繰り返して全単射の基数6に変換します。を使用+すると、抽出された数字は、通常の基数6の変換では0〜5ではなく、常に1〜6の数値になることに注意してください。((_{6})*高速ですが、商を抽出するバイトがかかります。)

T`7-1`d

6が最初になり、1が最後になるように数字を入れ替えます。(7または0はありませんが、これによりdショートカットを使用できます。


1

Cubix、22バイト

これにより、シーケンスが無期限に出力されます。一般的な考え方は、ベース番号に6-1を追加することです。加算ごとに、結果に10を乗算して出力します。これは、シーケンスの後半で使用されるスタックの一番下にプッシュされます。その後、ベースがポップされ、次のベースが開始されます。

..w.06+ONo*w;|uW!(pq;;

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

    . .
    w .
0 6 + O N o * w
; | u W ! ( p q
    ; ;
    . .

実行する


1

C#(.NET Core)、無限印刷、181 180 88バイト。

string[] s=new string[]{" "},t;int i,j,k,l=1;while(true){j=l;t=new string[l=6*j];for(i=6;i>0;i--)for(k=(6-i)*j;k<l;)t[k]=i+s[k++%j];
for(k=0;k<l;)System.Console.Write(t[k++]);s=t;}

悲しいことに、書かれているように無限バージョンで適切に出力する代わりにrepl.itをフリーズします(プログラムが本来のようにループするように出力されないので、repl.itのエラーだと思います)。コンピューター。ループの先頭に読み取りを追加すると、repl.itでも機能します。

明らかに、コンソールへの出力。

有限システムでは、コードは最終的にメモリ不足エラーでクラッシュする可能性があります。

@danaのラムダを使用するようにコードを修正しました。

int f(int n)=>n-->0?f(n/6)*10+6-n%6:0;for(int i=0;++i>0;)System.Console.Write(f(i)+" ");

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


これをうまくやったかどうかはわかりません。
Stackstuck

不要なk ++を削除して1バイトを節約しました。
Stackstuck

(また、私はゴルフの援助を大いに歓迎します、私はこれに非常に新しいです。)
Stackstuck

2
ようこそ:) C#でのゴルフに興味がある場合は、この投稿でヒントを確認してください。codegolf.stackexchange.com
dana

1

Forth(gforth)、63バイト

: f recursive dup 6 < if 6 - abs 1 .r else 6 /mod 1- f f then ;

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

0インデックス付き出力n番目の値

説明

Nが6未満の場合、N-6の絶対値を出力します。それ以外の場合、Nを6で割った商と剰余を取得します。商に対して関数を再帰的に呼び出し、剰余に対して呼び出します。

コードの説明

: f                 \ start a new word definition
  recursive         \ declare that this word is recursive so we can call it from itself
  dup 6 <           \ check if n is less than 6
  if                \ if it is:
    6 - abs 1 .r    \ subtract 6, get the absolute value, then print with no appended space
  else              \ else if it's greater than 6:
    6 /mod          \ get the quotient and remainder of dividing n by 6
    1-              \ subtract 1 from the quotient (because we're 0-indexed)
    f               \ call f on the result
    f               \ call f on the remainder (shortcut to format and print, it's always < 6)
  then              \ end the if/else
;                   \ end the word definition

1

APL(NARS)、27文字、54バイト

{0>⍵-←1:0⋄(6-6∣⍵)+10×∇⌊⍵÷6}

dana /codegolf//a/179980によるAPLのソリューションの翻訳...テスト:

  f←{0>⍵-←1:0⋄(6-6∣⍵)+10×∇⌊⍵÷6}
  f 500
5625
  f¨750 1000 9329 9331 10000 100000
4531 3433 11112 666666 663633 6131233 
  f¨⍳9
6 5 4 3 2 1 66 65 64 

0

C#、最初からnまで印刷、??? バイト

ラムダ式の@danaの功績。

int f(int n)=>n-->0?f(n/6)*10+6-n%6:0;for(int i=0;i<int.Parse(a[0]);)System.Console.Write(f(++i)+" ");

操作:カウントする整数に等しいコマンドラインの0番目の引数で実行します。(これはa[0]、それ以外の点では言及されていないコマンドライン引数配列への参照であり、それを数える方法がわかりません。)


コードの一部は完全なプログラムや関数ではなくスニッパーなので、Visual C#Interactive Compilerを使用していると思いますか?おそらく、オンラインで試してみるリンクとテストコードを追加しもらえますか?PS:あなたの現在のバイト数は102です
ケビンCruijssen

ああくそ、それがされていない作業で何が一体
Stackstuck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.