En Yüksek Zar


19

Meydan okuma:

Burada bir dizinin ilk 100 maddesi var:

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,...

Bu dizi nasıl oluşur? İlk önce aralıktaki sayıya sahibiz [6, 1](tek bir kalıbın en yüksekten en alçağa mümkün olan tüm değerleri). Daha sonra rakamlara sahibiz [66..61, 56..51, 46..41, 36..31, 26..21, 16..11](en yüksekten en alta doğru iki zarın bütünleşik birleşik değerleri). Vb
Bu, OEIS sekansı A057436 ile ilgilidir: Sadece 1'den 6'ya kadar olan rakamları içerir , ancak sekansta geriye doğru sıralanan eşit miktarda rakamlı tüm sayılar içerir.

Zorluk, yukarıdaki sırayla işleviniz / programınız için bu üç seçenekten birini seçmektir:

  1. Bir girdisi alın ve bu dizinin değerini sıfırlayın; burada 0-indeksli veya 1-indeksli olabilir.nn
  2. Bir girdisi alın ve bu dizinin ilk veya değerlerini verin.nnn+1
  3. Dizideki değerleri süresiz olarak çıktılar.

Tabii ki, herhangi bir makul çıktı formatı kullanılabilir. Dizeler / tamsayılar / ondalık sayılar / vb. Olabilir; (sonsuz) bir liste / dizi / akış / vb. olabilir; STDOUT için boşluk / virgül / satırsonu / diğer sınırlayıcı ile çıktı alınabilir; Lütfen vs. Cevabınızda kullandığınız G / Ç ve seçeneği belirtin!

Genel kurallar:

  • Bu , bayt en kısa cevap kazanır.
    Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine izin vermeyin. 'Herhangi bir' programlama dili için olabildiğince kısa bir cevap bulmaya çalışın.
  • Varsayılan I / O kuralları ile cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyonlar / yöntem, uygun parametreler ve dönüş tipi, tam programlar ile kullanılabilir. Çağrınız.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin (örn. TIO ).
  • Ayrıca, cevabınız için bir açıklama eklemeniz şiddetle tavsiye edilir.

Seçenek 1'i seçerseniz bazı büyük test durumları:

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
Önerilen düzenlemeye göre, kolmogorov karmaşıklık etiketi sekanslara uygulanmaz, sadece sabit, sonlu, sabit bir çıktıya uygulanır. Bir dizi sonsuza kadar devam eder.
mbomb007

@ Mbomb007'nin söylediklerine ek olarak, bir girdiye dayalı n'inci veya ilk n / n + 1 değerlerinin çıktısına da izin veririm, oysa KC zorluklarında hiçbir zaman girdi olmaz.
Kevin Cruijssen

Yanıtlar:



12

Perl 6 , 24 23 bayt

Nwellnhof sayesinde -1 bayt

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

Çevrimiçi deneyin!

Diziyi boşluklarla / satırsonlarıyla sınırsız olarak ayrılmış olarak verir. Ya da, birkaç bayt için bunun yerine dizine ekleyebileceğimiz tembel bir sonsuz listeye sahip olabiliriz.

Perl 6 , 27 bayt

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

Çevrimiçi deneyin!

Açıklama:

{                         }    # 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 bayt

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

Çevrimiçi deneyin!

Diziyi süresiz yazdırır

  • -9 @Kirill L. sayesinde

1
@ tk3: ikinci parametre olmadan, n basamaklı elemanların alt dizisinin son değerini, n + 1 basamaklı elemanların alt dizisinin ilk değeri ile birleştirir. ör.6 5 4 3 2 166 65 64...
digEmTüm

6

Bash, 31 bayt

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

TIO

yorumlardan güncelleme, n'inci değer 1 dizinli, + GNU araçları + perl, 64 bayt, 7 bayt @manatwork sayesinde kaydedildi

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

64 bayt


Pek destek yok, ama 2 çözeltide tüm deyimin alıntı iki kattan noktalı virgül kaçmak için kısadır: bc<<<obase=6\;$1. Ama geçersen dckaçacak bir şey yok dc<<<6o$1p.
manatwork

teşekkürler gerçekten 7bayt kaydeder ama bijektif numaralandırma nedeniyle hala bir mix bash perl (66bytes) çalışmıyordc<<<6o$1p|perl -pe '1while s/(.)0/($1-1).6/e;s/0//'|tr 1-6 654321
Nahuel Fouilleul

5

MATL , 11 bayt

`6:P!V@Z^DT

Değerleri süresiz olarak verir.

Çevrimiçi deneyin!

açıklama

`      % 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

Haskell , 28 bayt

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

Çevrimiçi deneyin!

Sonsuz sayı listesi oluşturur l. Bir bayt kullanmak <$>ve <*>kesmek:

29 bayt

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

Çevrimiçi deneyin!

Bu yaklaşım, Haskell Output All String yanıt sabit giriş dizesi "654321" ile benzerdir ve boş dize çıkışını, tercih edildiği yeri değiştirerek atlar.

30 bayt

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

Çevrimiçi deneyin!


Bu harika! 0(Veya "") ' dan başlamanın daha kısa olduğunu gördüm , ancak sonuçta olmamak için ucuz bir yol bulamadım ...
Christian Sievers

4

05AB1E , 10 bayt

Diziyi süresiz olarak çıktılar.

¸[6LRâJD»,

Çevrimiçi deneyin!

açıklama

¸           # 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
¸Başlangıçta asla boş bir dize içeren bir liste oluşturduğunu bilmiyordum . Ve test senaryolarını oluşturmak için kullandığım çözümden 2 bayt daha kısa, bu yüzden elbette benden +1. :)
Kevin Cruijssen



3

Brachylog , 13 11 bayt

2 bayt için Fatalize'a teşekkürler

6~d{⟧₁∋}ᵐẉ⊥

Süresiz çıktılar. Çevrimiçi deneyin!

n

açıklama

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

Bir Brachylog rulosundasınız!
Şubat'ta

1
Prolog: olarak adlandırıldıkları gibi, hata odaklı bir döngü kullanarak 2 bayt kaydedebilirsiniz 6~d{⟧₁∋}ᵐẉ⊥. Temelde programınızı tüm çözümleri yazdırmaya zorlayacak "false" ile sonlandırırsınız.
Şubat'ta

Oh güzel. Evet, çok keyif aldım!
DLosc


2

Japt, 14 bayt

İşlev yöntemlerini ve / veya Kartezyen ürünü kullanarak daha kısa bir çözüm olmalı ama (şimdilik?) En iyi yönetebileceğim, Arnauld'un JS çözümünün bir limanı olduğundan, onu da onayladığınızdan emin olun.

©ß´Uz6)s+6-Uu6

Deneyin veya terimleri test edin0-1000


2

Wolfram Dili (Mathematica) , 88 78 bayt

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

Çevrimiçi deneyin!

@IanMiller sayesinde 4 + 6 bayt kurtardı

Liste 1 endekslidir, n'inci sayıyı çıkarır.


1
4 karakteri kaydetmek için Range [6,1, -1] değerini 7-Range @ 6 ile değiştirebilirsiniz
Ian Miller

1
Codegolf kuralları için anonim bir işlev olarak da yazabilirsiniz: (l = d = c = 7-Menzilli @ 6; [Uzunluk @ c <#, d = Düzleştir [(10 # + l) & / @ d]; c = c ~ ~ d;]; c [[#]]) &
Ian Miller

@IanMiller teşekkürler! Biçimle ilgili kuralların ne olduğundan emin değildim.
Kai

2

Mathematica, 56 bayt

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

65(6n-1)


+1, bu korkunç bir overkill ama kısalık için mükemmel çalışıyor!
Kai

@JonathanFrech Mathjax'ımı düzelttiğiniz için teşekkürler. Ben burada matematik nasıl biraz farklı olarak etkinleştirmek için emin değildi.se
Ian Miller

Orijinal düzenlemenin bu kullanıcı tarafından yapıldığını lütfen unutmayın .
Jonathan Frech

Hata! @ Geza-kerecsenyi'ye teşekkürler.
Ian Miller

1

Pip -l , 16 bayt

x:YP6-,6W1PxCP:y

Diziyi süresiz olarak çıktılar. Çevrimiçi deneyin!

açıklama

-lListeleri kendi satırına her öğe ile basılır O bayrağın araçlarının; bir öğenin kendisi bir liste ise, öğeleri ayırıcı olmadan birleştirilir. Liste [1 [2 3] [4 [5 6]]]şu şekilde yazdırılır:

1
23
456

Temizlendiğinde:

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

İlk döngü tekrarında sonra xbenziyor [[6;6];[6;5];[6;4];...;[1;1]]; ikinci yinelemeden sonra [[[6;6];6];[[6;6];5];[[6;6];4];...;[[1;1];1]]; ve bunun gibi. Alt listeleri düzleştirme konusunda endişelenmemize gerek -lyok , çünkü bunu bizim için etkili bir şekilde yapıyor.


1

Kömür , 18 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. 1 endeksli. Açıklama:

Nθ

Giriş n

Wθ«

nSıfır oluncaya kadar tekrarlayın .

←I⊕﹪±θ⁶

-nModuloyu azaltın 6, ardından sonucu artırın ve sağdan sola çıktı alın.

≔÷⊖θ⁶θ

Azaltma nve tamsayı onu böler 6.


1

Retina 0.8.2 , 36 bayt

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

Çevrimiçi deneyin! Bağlantı, test senaryolarını içerir. 1 endeksli. Açıklama:

.+
$*_

Tekli'ye dönüştür. (Retina 1 burada 2 bayt tasarruf eder.)

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

Tekrarlanan divmod ile bijektif baz 6 dönüştürün. Not bu kullanımı +ekstre hane her zaman düzenli bir taban 6 dönüştürülmesi için Ocak 05-06, 0 yerine kadar bir sayı olduğu anlamına gelir. ( (_{6})*daha hızlıdır ancak bölümü ayıran bayt maliyeti.)

T`7-1`d

Rakamları, 6'lar önce ve 1'ler sürecek şekilde çevirin. (7 veya 0 yok ama bu dkısayolu kullanmama izin veriyor .


1

Cubix , 22 bayt

Bu işlem diziyi süresiz olarak verir. Genel fikir, 6 - 1 eklenmiş bir taban numarasına sahip olmasıdır. Her ekleme için sonuç, sırayla kullanılmak üzere yığının altına itilen 10 ile çarpılır. Baz daha sonra açılır ve bir sonraki baz başlar.

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

Çevrimiçi deneyin!

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

İzle


1

C # (.NET Core) , sonsuz baskı, 181 180 88 bayt.

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;}

Ne yazık ki sonsuz sürümde yazılı olarak düzgün çıktı yerine repl.it dondurur (Ben program gibi olması gerektiği gibi çıktı vermediği gibi repl.it bir hata olduğuna inanıyorum), bu yüzden test etmek isteyen herkes ihtiyacı bir bilgisayar. Döngünün önüne bir okuma eklerseniz repl.it içinde de çalışır.

Elbette konsola çıktılar.

Herhangi bir sonlu sistemde, kod büyük olasılıkla bellek yetersiz hatası ile çökecektir.

@Dana'nın lambda kodunu kullanmak için kod elden geçirildi.

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)+" ");

Çevrimiçi deneyin!


Bu kadar iyi golf oynayıp oynamadığımı bilmiyorum.
Stackstuck

Gereksiz k ++ 'ı kaldırarak bir bayt kaydedildi.
Stackstuck

(ayrıca, golf yardımını büyük ölçüde memnuniyetle karşılıyorum, bu konuda çok yeniyim.)
Stackstuck

2
Hoş geldiniz :) C # ile golf oynamak
dana

1

İleri (gforth) , 63 bayt

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

Çevrimiçi deneyin!

0 endeksli çıkışlar n. Değer

açıklama

N, 6'dan küçükse, N - 6'nın mutlak değerini girin. Aksi takdirde, N'yi 6'ya bölmenin katsayısını ve kalanını alın. İşlevi bölüm üzerinde özyinelemeli olarak çağırın, sonra kalanını çağırın.

Kod Açıklaması

: 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 karakter, 54 bayt

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

çözümü APL ... testinde dana /codegolf//a/179980 ile aktarın :

  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 #, baştan yazdırma n, ??? bayt

Lambda ifadesi için @dana'ya teşekkür ederiz.

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)+" ");

İşlem: Saymak istediğiniz tam sayıya eşit komut satırı 0. bağımsız değişkeniyle çalıştırın. ( a[0]Aksi halde komut satırı args dizisine bir başvuru olduğu ve bu saymak nasıl bilmiyorum belirtilmelidir.)


Kodun bir kısmı tam bir program veya işlev yerine bir snipper olduğundan, Visual C # Interactive Compiler? Test koduyla birlikte çevrimiçi deneyin bağlantısını da ekleyebilir misiniz ? Not: Geçerli bayt sayınız 102
Kevin Cruijssen

Kahretsin, ne haltta çalışmıyor .
Stackstuck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.