Indyjska legenda opowiada historię domniemanego wynalazcy szachów, który zaimponował cesarzowi Indii swoją grą tak bardzo, że otrzymał nagrodę za wszystko, o co poprosił.
Mężczyzna powiedział, że chce dostać ryż. Chciał ziarna ryżu na pierwszy kwadrat szachownicy, dwa na drugi, cztery na trzeci, osiem na czwarty i tak dalej, aż do 64. kwadratu.
Cesarz był zdumiony, że mężczyzna poprosił o tak małą nagrodę, ale kiedy jego matematycy zaczęli liczyć, ostatecznie stracił jedną ze swoich prowincji.
Zadanie
Biorąc pod uwagę długość boku hipotetycznej szachownicy (która wynosi 8 na domyślnej szachownicy) oraz mnożnik między kwadratami (który w legendzie wynosi 2), obliczyć liczbę ziaren ryżu, które cesarz musi zapłacić człowiekowi.
Notatki
Długość boku zawsze będzie dodatnią liczbą całkowitą. Mnożnik może być dowolną liczbą wymierną.
Jeśli wybrany język nie może wyświetlać bardzo dużych liczb, jest w porządku, o ile Twój program może poprawnie przetwarzać mniejsze dane.
Również jeśli wybrany język zaokrągla większe wartości (z notacjami wykładniczymi), nie ma problemu, jeśli te wartości są w przybliżeniu poprawne.
Przypadki testowe
Input (side length, multiplier) => Output
8, 2 => 18446744073709551615
3, 6 => 2015539
7, 1.5 => 850161998.2854
5, -3 => 211822152361
256, 1 => 65536
2, 2 => 15
2, -2 => -5
Uwaga: wyraźna formuła
result = (multiplier ^ (side ^ 2) - 1) / (multiplier - 1)
Wykonuje się źle multiplier = 1
, jak
1 ^ (side ^ 2) - 1 = 0
1 - 1 = 0
0 / 0 != side ^ 2 (as it should be)
Punktacja
To jest golf golfowy. Najkrótsza odpowiedź w bajtach wygrywa.
If your language of choose can't display too large numbers, it's ok as long as your program can correctly process smaller inputs
Ostrożnie, to spowodowało problemy w przeszłości. meta.codegolf.stackexchange.com/a/8245/31716Odpowiedzi:
Galaretka , 4 bajty
Wykorzystuje to podejście sprytnej odpowiedzi APL @ APLDude .
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
MATL , 6 bajtów
Wypróbuj online!
źródło
APL, 10 bajtów
⎕
służy do dwukrotnego odczytu danych wprowadzanych przez użytkownika. Jeśli będziemy przechowywać długość boku w s i mnożnika w m , otrzymujemy następujący kod.A oto jak APL analizuje ten kod:
źródło
⊣⊥1⍴⍨⊢×⊢
(8 bajtów) Jako interaktywne polecenie REPL⎕⊥×⍳⎕*2
działa również (7 bajtów).Python, 40 bajtów
Generuje i ocenia ciąg podobny do
która koduje sumę jako wielomian Hornerized z
n*n
terminami.Wiele różnych metod dawało bardzo podobne liczby bajtów:
źródło
Pyth, 6 bajtów
1 bajt zapisany dzięki @FryAmTheEggman .
Wypróbuj online!
Zestaw testowy.
źródło
Haskell, 25 bajtów
Podsumowuje listę
[m^0, m^1, ..., m^(n*n-1)]
.źródło
JavaScript (ES2016 / ES7),
312928 bajtówTylko @Bassdrop Cumberwubwubwub i @6 wersja Kaizo ES6, ale z operatorem potęgowania. :) (Nie miałem wystarczającej reputacji, aby skomentować.)
Edycja:
/+(b-1)
zmieniono na/--b
(dzięki @Neil).Edycja: teraz używa curry (dzięki @MamaFunRoll).
źródło
+
Operator był test zapomniałem zmieniać się, więc można zgolić 1 bajt przez pominięcie go :)/--b
bajt lub dwa?Galaretka, 6 bajtów
Wypróbuj online!
źródło
MATLAB, 23 bajty
Sprawdź to tutaj !
źródło
JavaScript ES6,
59373534 bajtówDzięki @Kaizo za wygolenie aż 19 bajtów, @Neil za kolejne 2 i @gcampbell za jeszcze 1!
Wypróbuj tutaj
Pokaż fragment kodu
Alternatywne uszkodzone wersje
32 bajty
Przyczyny
NaN
dlab==1
.30 bajtów
Przyczyny
Infinity
dlab==1.5
.28 bajtów
Dane wyjściowe
1
dla niektórych prawidłowych przypadków testowych.Stara wersja na 59 bajtów
(a,b)=>Array(a*a).fill``.reduce((c,d,i)=>c+Math.pow(b,i),0)
źródło
/~-b
oczywiście nie jest dobre na ułamkoweb
, ale czy/--b
powinno działać, nie?(a,b)=>[...Array(a*a-1)].reduce(s=>s+=p*=b,p=1)
Java, 132 bajty
Bez golfa
Notatki
Wyjścia
źródło
R, 18 bajtów
Wyjaśnienie:
źródło
05AB1E , 5 bajtów
Kod:
Wyjaśnienie:
Wypróbuj online! .
źródło
Haskell, 30 bajtów
lub równie długi
Pierwsza wersja zaczyna się od
1
wielokrotnego mnożenia przezm
. Następnie sumuje pierwszen^2
liczby tej sekwencji. Druga wersja to wyraźna formuła, jak widać w innych odpowiedziach.źródło
n#m=sum$(m^)<$>[0..n*n-1]
?J, 10 bajtów
Stosowanie
Zaznaczam niektóre liczby całkowite
x
sufiksem, aby użyć rozszerzonych liczb całkowitych, aby uzyskać dokładne wyniki.Wyjaśnienie
źródło
#.*:$*
według APL Dude.Mathcad, [tbd] bytes (~ 11)
Wykorzystuje wbudowany operator sumowania Mathcada. Pokazuje także symboliczne uproszczenie procesora w celu wygenerowania dokładnej formuły.
Mathcad skutecznie obsługuje dwa silniki przetwarzania równolegle - jeden standardowy zmiennoprzecinkowy IEEE 64/80 bitów, a drugi proces symboliczny o dowolnej długości (MuPad). Standardowa ocena numeryczna jest oznaczona znakiem równości (=), a strzałka w prawo wskazuje ocenę symboliczną.
Schemat zliczania Mathcad jeszcze nie został ustalony, więc nie podano liczby bajtów.
ctl- $ wchodzi do operatora sumowania (Sigma), w tym pustych symboli zastępczych, aby wstawić zmienną sumowania, wartość początkową, wartość końcową i wyrażenie. Przybliżona liczba bajtów = 11.
źródło
PostgreSQL,
6766 bajtówSqlFiddleDemo
Wejście:
VALUES(side, multiplier)
EDYTOWAĆ:
Przeniesiono dane wejściowe do tabeli, wszystkie przypadki jednocześnie:
SqlFiddleDemo
Wynik:
źródło
TI-Basic, 19 bajtów
S
ma długość boku iM
jest mnożnikiem.źródło
Python, 40 bajtów
źródło
lambda l,m:(m**(l*l)-1)/(m-1)
Rubin: 39 bajtów
Test:
źródło
sum
funkcję? To się zmieniaPython, 41 bajtów
Zupełnie nowy w tej grze w golfa, krytyka mile widziana!
źródło
l**l
zamiast tego, co zrobiłem?l*l
w rzeczywistości, co jest krótsze niżl**2
.Jolf,
181510 bajtówDzięki Cᴏɴᴏʀ O'Bʀɪᴇɴ za uratowanie 3 bajtów i skierowanie mnie w kierunku mapowania
Wypróbuj tutaj!
źródło
CJam , 9 bajtów
Wejścia są w odwrotnej kolejności oddzielone znakiem nowej linii lub spacją.
Wypróbuj online!
źródło
PHP,
5854 bajtówTo po prostu używa formuły sumowania, aby pokazać wartość, po sprawdzeniu, czy mnożnik wynosi 1 (co zwraca NAN w formule).
źródło
Mathematica, 22 bajty
Tworzy zakres
{1, 2, ... s^2}
, odejmuje 1, aby utworzyć{0, 1, ..., s^2-1}
. Następnie podnieś każdego do mocym
robienia{m^0, m^1, ..., m^(s^2-1)}
i zwróć sumę.Alternatywnie, Mathematica może użyć jawnej formuły, biorąc swój limit. Wymaga to 29 bajtów.
źródło
Tr[#^Range[#2^2]/#]&
PARI / GP , 25 bajtów
Dłuższe, ale szybsze (35 bajtów):
Słodkie (30 bajtów):
źródło
C #, 56 bajtów
źródło
256, 1
?(Math.Pow(1, 256 * 256) - 1) / --1
= 0/0.Lua,
5447 bajtówUruchom z linii poleceń z długością boku tablicy jako pierwszym argumentem i mnożnikiem jako drugim.
Podziękowania dla user6245072 za zapisanie 6 bajtów i Katenkyo za zapisanie dodatkowego 1.
Oryginalna wersja 54-bajtowa:
źródło
l,m=...r=0 for i=0,l^2 do r=r+m^i end print(r)
c=1 d=1
=>a,b=...c=1g=1 for i=2,a^2 do c=c*b g=g+c end print(g)
. jeśli sugestia @ user6245072 działa, możesz zapisać bajt na tej samej zasadzie =>r=0l,m=...for i=0,l^2 do r=r+m^i end print(r)
r=0
il,m=...
jest w każdym razie obowiązkowa, więc się nie zmienia. Pętla powinna być,for i=0,l^2-1
ale to moja wina lol.𝔼𝕊𝕄𝕚𝕟, 11 znaków / 14 bajtów
Try it here (Firefox/WebKit Nightly only).
Tak, 𝔼𝕊𝕄𝕚𝕟 działa teraz w WebKit Nightly! Obsługa Chrome jest następna.
Wyjaśnienie
źródło
ZWROT , 32 bajty
Try it here.
Anonimowa lambda, która pozostawia wynik na Stack2. Stosowanie:
Wyjaśnienie
źródło