Olimpik Halka Dizisi


18

Meydan okuma:

Bir dizin tamsayısı verildiğinde nya nbu sekanstaki 'öğeyi çıktılayın ya da sekansı endekse ve indeks dahil çıktılayın n:

25,25,7,28,29,20,21,22,23,14,35,26,7,28,29,20,16,29,12,15,28,21,14,17,30,13,16,29,12,15,28,21,10,6,12,18,15,11,7,13,19,17,13,9,15,21,18,14,10,16,22,19,15,11,17,23,20,16,12,18,24,21,17,13,19,25,23,19,15,21,27,24,20,16,22,28,25,21,17,23,29,16,13,9,15,21,18,14,10,16,22,20,16,12,18,24,21,17,13,19

Bu dizi nasıl çalışır?

Not: Bu açıklamada, dizin n1 dizinli.
Numaralarını Put 1yoluyla xuzunluğunun iki satırda n*6 - 1, xiçinde basamak toplamı o anda geçerli yineleme ve kullanılan numaraların uzunluğuna bağlıdır ve nbu iki sıranın 'inci / en sağdaki Olimpiyat Yüzüklerin.

Sekanstaki ilk sayı aşağıdaki gibi hesaplanır:

The length of the lines are 5 (because 1*6 - 1 = 5):
12345
67891(0)

Then leave the digits in an Olympic Rings pattern:
1 3 5
 7 9

And sum them:
1+3+5+7+9 = 25

Böylece n=1sonuçlanır 25.

Sekanstaki ikinci sayı aşağıdaki gibi hesaplanır:

The length of the lines are 11 (because 2*6 - 1 = 11):
12345678910
11121314151(6)

Then leave the digits in the second/right-most Olympic Rings pattern:
      7 9 0 
       4 5

And sum them:
7+9+0+4+5 = 25

Böylece n=2sonuçlanır 25.

Sekanstaki üçüncü sayı aşağıdaki gibi hesaplanır:

The length of the lines are 17 (because 3*6 - 1 = 17):
12345678910111213
14151617181920212(2)

Then leave the digits in the third/right-most Olympic Rings pattern:
            1 2 3
             0 1

And sum them:
1+2+3+0+1 = 7

Böylece n=3sonuçlanır 7.

vb.

Zorluk kuralları:

  • Dizideki n'inci öğeyi çıkardığınızda, girdiyi 1 dizinli yerine 0 dizinli olarak almanıza izin verilir, ancak hesaplamalarının veya n*6 - 1olacağını unutmayın .(n+1)*6 - 1(n+1)*5 + n
  • Uzunluğa ulaştığımızda, ilk satırın sonunda birden fazla basamaktan oluşan tek sayılar ayrılabilir n*5 + n-1, bu nedenle 2 veya daha fazla basamağa sahip bir sayının kısmen 1. satırın arka kısmı olması ve kısmen satır 2'nin önde gelen kısmı.

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 mümkün olduğunca kısa bir cevap bulmaya çalışın.
  • Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyon / yöntemi uygun parametreler ve dönüş tipi, tam programlar ile kullanmanıza izin verilir. Çağrınız.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, gerekirse bir açıklama ekleyin.

Test senaryoları:

İşte test senaryolarının 1-1.000'lik bir macunu , bu yüzden bunlardan herhangi birini seçmekten çekinmeyin.

Bazı ek yüksek test senaryoları:

1010:   24
1011:   24
2500:   19
5000:   23
7500:   8
10000:  8
100000: 25

1*5 + 1-1 = 5? Olmamalı mı 1*5 + 5 - 1 = 9?
NieDzejkob

@NieDzejkob Hayır, n=1öyle n*5 + n-1olur 1*5 + 1-1, ki bu da olur 5 - 0 = 5.
Kevin Cruijssen

n * 5 + n - 1eşit değil n * 6 - 1mi?
Brian H.

@BrianH. Haklısın, gerçekten öyle. Martin Retina'nın cevabını gördükten sonra da fark ettim. Bu kısa formülü kullanmak için meydan okuma açıklamasını düzenledim.
Kevin Cruijssen

Yanıtlar:


4

Kabuk , 16 bayt

ΣĊ2ṁ↑_5↑2CṁdN←*6

Çevrimiçi deneyin!

H.PWiz sayesinde -3 bayt .

(Rushed) açıklaması:

ΣĊ2ṁ↑_5↑2CṁdN←*6⁰
Σ                 Sum
 Ċ2                Drop every second element
   ṁ↑_5             Map "take last 5 elements", then concatenate
       ↑2            Take first 2 elements
         C            Cut x into sublists of length y
          ṁdN          [1,2,3,4,5,6,7,8,9,1,0,1,1,1,2,1,3,...] (x)
             ←         Decrement (y)
              *6        Multiply with 6
                ⁰        First argument

@KevinCruijssen Tuhaf, çünkü sadece bir tane ekleyecektim. Ancak yine de bir cevap kabul etmenizi önermiyorum. ;-)
Outgolfer Erik

@KevinCruijssen Her ne kadar çok iyi bir atm olmamasına rağmen acele bir açıklama ekledim ...
Outgolfer Erik

Benim için yeterince iyi, kabul etti. Ve kişisel olarak, gerçekten gerekli olmasa da, zorlukları kabul etmeyi tercih ediyorum. Birisi sizinkinden daha kısa bir cevap gönderirse, elbette tekrar değiştireceğim.
Kevin Cruijssen

@KevinCruijssen Buna karşı ana hedef, daha kısa bir cevap gönderildikten sonra olan şey değildir, ancak birisinin başka bir cevap göndermekten vazgeçmesi gerekebilir. Her neyse, çağrınız.
Outgolfer Erik

5

Retina , 70 68 62 bayt

.+
10**
.
$.>`
~(`.+
6*$+*
)`.(.+)
L`.{$.1}
%,-6`.

,2,9`.
*
_

Çevrimiçi deneyin!

açıklama

N girişini arayalım, 3örnek olarak kullanacağız .

.+
10**

10**Kısa için 10*$&*_hangi bir dizeyle girişi değiştirir 10n çizgi.

.
$.>`

Şimdi her alt çizgiyi, o alt çizgiye kadar olan ve bu alt çizgiyi içeren dizenin uzunluğu ile değiştiriyoruz. Yani bu sadece 1 ile 10n arasında bir araya getirilmiş sayı ile sonuçlanır ( 10n her zaman gerekli uzunlukta iki satırı doldurmak için yeterlidir).

~(`.+
6*$+*

Eval! Bu ve sonraki aşama, daha sonra bu birleştirilmiş tamsayı dizisine karşı çalıştırılan başka bir programın kaynak kodunu oluşturur.

Bu programı oluşturmak için, bu aşama ilk olarak tamsayıları 6n altçizgi dizesiyle değiştirir ( $+programın orijinal girdisini ifade eder).

)`.(.+)
L`.{$.1}

Daha sonra bu çizgi yerine L`.{…}burada, bir 6n-1 (hatlarında baktığımız uzunluğu). Bu nedenle niceliği orijinal girdiye bağlı olan bir normal ifade oluşturduk.

Bu program değerlendirildiğinde, en az iki tane olacak olan 6n-1 uzunluğundaki parçalarla eşleşir . Örnek girdimiz için aşağıdakilerle 3sonuçlanır:

12345678910111213
14151617181920212
22324252627282930

Şimdi sadece ilgili rakamları çıkarmamız gerekiyor.

%,-6`.

İlk olarak, her satırda ( %) son beş basamak ( ,-6) hariç tümünü kaldırıyoruz . Bu bize

11213
20212
82930

En sonunda:

,2,9`.
*

Tekli olarak 2ilk ondaki diğer basamakları ( ) genişletiriz ( 9, bu 0 tabanlıdır). Bunlar Olimpiyat Halkaları pozisyonlarında olanlar olur.

_

Ve sonuç olarak ortaya çıkan altçizgi sayısını, toplamı ve sonucu ondalık sayıya çeviririz.


59 bytes Biraz dağınık olsa da
H.PWiz

@ H.PWiz Girdi için çalışmıyor gibi görünüyor 1.
Martin Ender

Oh evet, bu olacak-7
H.PWiz


3

Japt , 33 32 30 29 28 27 bayt

Oh, bu hoş değil!

Çıkışlar , n dönem,, 1-endekslendi.

*6É
*2 õ ¬òU mt5n)¬¬ë2 ¯5 x

Dene


açıklama

                         :Implicit input of integer U           :e.g., 3
*6É    
*6                       :Input times 6                         :18
  É                      :Subtract 1                            :17
   \n                    :Assign the above to variable U

*2 õ ¬òU mt5n)¬¬ë2 ¯5 x
*2 õ                     :[1,U*2]                               :[1,2,3,...,33,34]
     ¬                   :Join to a string                      :"123...3334"
      òU                 :Partitions of length U                :["123...13","1415...212","22324...30","31323334"]
         m               :Map
          t5n)           :  Get last 5 characters               :["11213","20212","82930","23334"]
              ¬          :Join to a string                      :"11213202128293023334"
               ¬         :Split to an array                     :["1","1","2","1","3","2","0","2","1","2","8","2","9","3","0"],["2","3","3","3","4"]]
                ë2       :Get every second element              :["1","2","3","0","1","8","9","0","3","3"]
                   ¯5    :Get first 5 elements                  :["1","2","3","0","1"]
                      x  :Reduce by addition                    :7
                         :Implicit output of result


2

Python 3, 129123 bayt

p=lambda r,x='',i=1:sum(map(int,str(x[6*r-2]+x[6*r-4]+x[6*r-6]+x[12*r-4]+x[12*r-6])))if len(x)>12*r-2else p(r,x+str(i),i+1)

Çevrimiçi Deneyin

Bu hemen hemen berbat, ama işe yarıyor.


2

05AB1E , 22 21 20 bayt

6*<xLJsô2£íε5£}SāÉÏO

Çevrimiçi deneyin!

açıklama

6*<                    # push input*6-1
   xL                  # leave it on the stack while pushing [1 ... 12*input-2]
     J                 # join the numbers to a single string
      sô               # split the string into pieces of size input*6-1
        2£             # take the first 2 such pieces
          í            # reverse each string
           ε5£}        # take the first 5 chars of each
               S       # split to a single list of digits
                ā      # push range [1 ... len(list)]
                 ÉÏ    # keep only the numbers in the list of digits which are odd in this
                   O   # sum

Alternatif 21 bayt yaklaşımı

6*<©·LJƵYS24S®-ì®-(èO

@KevinCruijssen: Elbette. Ben açıklama eklemeden önce biraz daha denemek ve golf niyetindeydim, ama gerçekten burada zaman yoktu :)
Emigna

Teşekkürler! Ve çoğu insan bir açıklama eklemeden önce mümkün olduğunca golf oynamayı tercih ettiğini biliyorum, ancak 15+ saat içinde cevabınız için bir güncelleme olmadığından, sadece bir açıklama talep edeceğimi düşündüm. :) Güzel cevap, btw!
Kevin Cruijssen

2

Jöle , 19 bayt

×6’µḤD€Ẏsḣ2ṫ€-4Ẏm2S

Çevrimiçi deneyin!

×6’µḤD€Ẏsḣ2ṫ€-4Ẏm2S Arguments: n (1-indexed)
×6                  Multiply by 6
  ’                 Decrement
   µ                Call that value N and start a new chain with argument N
    Ḥ               Double
      €             Create an inclusive range from 1 to 2N and call this link on it
     D               Get the decimal digits of each integer in the range
       Ẏ            Concatenate the lists of digits
        s           Split into length-N chunks
         ḣ2         Get the first two elements
            €-4     Map this link over the length-2 list with right argument -4
           ṫ         Get elements from this index onwards (supports negative indices too)
               Ẏ    Concatenate the two length-5 lists into one length-10 list
                m2  Take every second element starting from the first
                  S Sum

Bir açıklama eklemeyi düşünür müsünüz?
Kevin Cruijssen

@KevinCruijssen emin, ama genellikle istek üzerine yaparım, aksi takdirde diğer zorlukları cevaplamaya, başka şeyler yapmaya ya da uyumaya odaklanıyorum: P
Outgolfer Erik




1

Java 8, 138 111 109 bayt

n->{String s="";int r=0,i=1;for(n=n*6-1;i<3*n;s+=i++);for(i=5;i>0;r+=s.charAt(n+n*(i%2^1)-i--)-48);return r;}

Elbette kendi zorluğumu cevaplamam gerekecek. :)
Meydan okuma açıklamasında test sonuçlarını oluşturmak için kullandığım ilk kodumu kaybettim, bu yüzden daha yeni başladım.

Açıklama:

Çevrimiçi deneyin.

n->{                               // Method with integer as both parameter and return-type
  String s="";                     //  Temp String
  int r=0,                         //  Result-sum, starting at 0
      i=1;                         //  Index integer, starting at 1
  for(n=n*6-1;                     //  Replace the input with `n*6-1`
      i<3*n;                       //  Loop from 1 up to 3*n (exclusive)
      s+=i++);                     //   And append the temp-String with `i`
  for(i=5;i>0;                     //  Loop from 5 down to 0 (exclusive)
    r+=                            //   Add to the result-sum:
       s.charAt(               )-48);
                                   //    The character at index X, converted to a number,
                n+n*(i%2^1)-i--    //    with X being `n-i` (i=odd) or `n+n-i` (i=even)
  return r;}                       //  Return the result-sum
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.