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.