Dane wejściowe:
lista / tablica liczb całkowitych, dla których każdy element należy do zakresu 2-36
.
Dane wyjściowe:
Suma liczb całkowitych (jako podstawa 10), gdzie każda następna liczba całkowita znajduje się w podstawie poprzedniej wartości (zaczynając od zwykłej podstawy 10).
Przykład:
załóżmy, że mamy dane wejściowe takie jak to: [4, 12, 34, 20, 14, 6, 25, 13, 33]
Mamy więc taką sumę:
4 (4 in base-10) +
6 (12 in base-4 ) +
40 (34 in base-12) +
68 (20 in base-34) +
24 (14 in base-20) +
6 (6 in base-14) +
17 (25 in base-6 ) +
28 (13 in base-26) +
42 (33 in base-13)
= 235
Wyjaśnienie podstawy matematycznej:
Rozważyłem założenie, że każdy wie, jak działa podstawa, ale podam krótki przykład, jak to działa, na wszelki wypadek. Weźmy34 in base-12
na przykład, skąd mamy40
?
1-34 in regular base-10:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
So, from 1 to 34 is 34 steps in base-10
1-34 in base-12:
1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 2A, 2B, 30, 31, 32, 33, 34
So, from 1 to 34 is 40 steps in base-12
Oto być może przydatny kalkulator.
Zasady konkursu:
- Rozmiar tablicy będzie w rozsądnym zakresie (jak
1-100
/ patrz przypadki testowe). - Przypadki testowe nigdy nie będą zawierały liczb całkowitych, których bieżąca wartość jest niepoprawna dla poprzedniej podstawy (tzn. Nigdy nie będziesz mieć czegoś takiego jak
19 in base-6
lub6 in base-6
, ponieważ podstawa-6 zawiera tylko cyfry0-5
). - Możesz wziąć dane wejściowe w dowolny sposób. Może być jako tablica int, jako ciąg oddzielony przecinkami / spacjami itp. Twoje wywołanie. (Możesz także wziąć odwróconą tablicę int, co może być przydatne w przypadku języków programowania opartych na stosie).
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki kod-golfowe zniechęcały Cię do zamieszczania odpowiedzi w językach innych niż golfowe. Spróbuj znaleźć możliwie najkrótszą odpowiedź dla dowolnego języka programowania. - Do odpowiedzi odnoszą się standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
Przypadki testowe:
[4, 12, 34, 20, 14, 6, 25, 13, 33] -> 235
4+ 6+ 40+ 68+ 24+ 6+ 17+ 28+ 42
[5, 14, 2, 11, 30, 18] -> 90
5+ 9+ 2+ 3+ 33+ 38
[12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 12, 2, 11, 3, 10, 2, 10] -> 98
12+ 13+ 11+ 9+ 8+ 7+ 6+ 5+ 4+ 3+ 5+ 2+ 3+ 3+ 3+ 2+ 2
[36, 36] -> 150
36+ 114
code-golf
math
base-conversion
Kevin Cruijssen
źródło
źródło
Odpowiedzi:
05AB1E ,
765 bajtówWykorzystuje kodowanie 05AB1E .
Zaoszczędzono 1 bajt, korzystając z nowego wbudowanego narzędzia,
š
jak sugerował Kevin CruijssenWyjaśnienie
Lista wejściowa jest pobierana w odwrotnej kolejności, na co pozwala specyfikacja wyzwania.
Wypróbuj online!
Zmodyfikowane testsuite
źródło
š
zamiast¸ì
. Ponadto wyjaśnienie brzmi „ dołącz ” zamiast „ dołącz ”. :)Python 3, 40 bajtów
Testy są w idealnym stanie
map(str, a)
tworzy generator,G
który wywołujestr
każdą wartość wa
, konwersja na ciągimap(int, G, [10]+a)
tworzy generator, który wzywaint(g, v)
do parG
i[10]+a
int(g, v)
przekształca ciągg
z bazy liczb całkowitychv
(jeśliv
jest w[2,36]
ig
jest poprawny)sum
robi to, co mówi na puszceźródło
Python 2, 48 bajtów
Testy są w idealnym stanie
zip(a,[10]+a)
przemierza par wartości wa
, a poprzednią wartość lub10
na pierwszym w nawróconego wezwanie do łańcucha,backticks
int
x
s
int(s, y)
konwertuje ciągs
z bazy całkowitejy
(jeżeliy
jest[2,36]
is
jest ważna)sum
robi to, co jest napisane na puszceźródło
Perl,
353433 bajtówObejmuje +2 za
-ap
Uruchom z listą liczb na STDIN:
basemix.pl
:Czekałem od wieków na możliwość wykorzystania tego nadużycia ...
Wyjaśnienie
Numery wejściowe mogą mieć maksymalnie 2 cyfry. Liczba
xy
w bazieb
jest po prostub*x+y
. Zamierzam użyć wyrażenia regularnego,/.$/
więc pierwsza cyfra kończy się na,$`
a ostatnia cyfra na$&
, więc wkład do sumy wynosi$&+$b*$`
.Nadużywam faktu, że
for
nie lokalizuje poprawnie zmiennych wyrażenia regularnego (jak na przykładmap
iwhile
czyń), więc wyniki dopasowania w poprzedniej pętli są nadal dostępne w bieżącej pętli. Więc jeśli jestem ostrożny w kolejności, w jakiej wykonuję operacje, baza jest dostępna jako"$`$&"
, z wyjątkiem pierwszej pętli, w której potrzebuję, aby baza była 10. Więc używam"$`$& 10"
zamiast tegoPierwszy sposób
$&
działa, jest również nadużyciem, ponieważ jest faktycznie zmieniany,/.$/
dopóki jest już na stosie i oczekuje na dodanie.Ostateczna nadużycie jest
}{
na końcu, który zmienia pętlę rysującą się-p
oddo
Co oznacza
$_
, że druk będzie niezdefiniowany, ale nadal dodaje,$\
w którym zgromadziłem sumę. Jest to również standardowa sztuczka golfowa umożliwiająca przetwarzanie po pętliźródło
PHP,
5351 bajtówIteruje na wejściu, konwertując każde wejście na wariant łańcucha. Następnie przyjmuje wartość całkowitą, używając poprzedniego numeru jako podstawy. Dla pierwszego numeru baza nie zostanie ustawiona, PHP zacznie od 10 (wywnioskowane z formatu liczb).
Działaj w ten sposób (
-d
dodano tylko dla estetyki):Poprawki
źródło
Galaretka , 7 bajtów
Wypróbuj online!
źródło
ṖḌ
zF
Java, 86 bajtów
Testowanie i nie golfista
źródło
JavaScript ES6,
454241 bajtówKonwencjonalnie
parseInt(x,0) === parseInt(x,10)
.edycja : Zapisano 1 bajt dzięki @ETHproductions
źródło
&&s
go|s
.const g
się tylkog
Pure Bash, 38
Lista wejściowa jest podana w wierszu poleceń.
for i;
automatycznie iteruje parametry wejściowe (równoważne zfor i in $@;
).Ideone.
źródło
Java 7,
1098986 bajtówGrał w golfa 20 bajtów dzięki @cliffroot (z czego 12 z powodu głupiej pomyłki, którą popełniłem).
Kod niepoznany i testowy:
Wypróbuj tutaj.
Wydajność:
źródło
p
? Suma może być obliczona w ten sposób, prawdar+=r.valueOf(""+a[i],a[i-1])
?+""
zamiastvalueOf
i usunął niepotrzebne zmienne -int c(int[]a){for(Integer i=1;i<a.length;a[0]+=i.valueOf(a[i]+"",a[++i-2]));return a[0];}
10
ip
odwrócony. Zrozumiałem błąd i naprawiłem go, ale ponieważ część String jest teraz zwykłą bazą-10, mogę rzeczywiście usunąćtoString
i po prostu użyć+""
.. Dzięki, a także dzięki za grę w golfa w innych rzeczach, -20 bajtów. Naprawdę muszę odpowiedzieć, że nie możesz więcej grać w golfa (nie, że nie doceniam tego!Właściwie 12 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
CJam , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Haskell,
6559 bajtówPrzetestuj na Ideone .
źródło
Matlab, 68 bajtów
Niezbyt kreatywne rozwiązanie, ale oto:
Testy:
źródło
function s=r(x);...
JavaScript (ES6),
544840 bajtówZastosowałem podejście rekurencyjne.
Zaoszczędź 6 bajtów, dzięki Lmis!
Zaoszczędź 8 kolejnych bajtów dzięki Neilowi!
źródło
parseInt(a,b)
zamiast,parseInt(a[0],b)
ponieważparseInt
konwertuje pierwszy argument na ciąg i ignoruje wszystko, zaczynając od pierwszego niepoprawnego znaku (tj. „,”).a[0]?stuff():0
zamiasta.length&&stuff()
f=([b,...a],c)=>b?parseInt(b,c)+f(a,b):0
slice
funkcjiPerl 6 ,
5250 bajtówWyjaśnienie:
źródło
Python 2, 52 bajty
Przetestuj na Ideone .
źródło
Julia, 63 bajtów
Analizuje każdą liczbę (oprócz pierwszej), biorąc poprzedni element jako podstawę i sumy. Dodaje pierwszy element na końcu
źródło
Ruby, 52 bajty
bez golfa
stosowanie
źródło
Scala, 67 bajtów
Wyjaśnienie:
źródło
Mathematica, 59 bajtów
Chciałbym, żeby nazwy funkcji Mathematiki były krótsze. Ale poza tym jestem szczęśliwy.
Na przykład,
daje
235
.{##,0}
jest listą argumentów wejściowych z dołączonym 0 (reprezentujących cyfry);{10,##}
jest listą argumentów wejściowych z 10 poprzedzającymi (reprezentującymi podstawy). Tej parze list możnaTranspose
skojarzyć każdą cyfrę z jej bazą iFromDigits
(yay!) Konwertuje każdą parę cyfra-zasada na liczbę całkowitą base-10, której wyniki są sumowaneTr
.źródło
Common Lisp, 83
Detale
The
loop
Konstrukt przyjmuje „V”, a następnie w konstrukcji iteracji, gdzie v jest wyrazem być oceniane po raz pierwszy zmienna iteracji jest obliczana i W jest wartości wyrażenia dla kolejnych iteracji. Deklaracje są przetwarzane jedna po drugiej, podobnie jakbase
pierwsza „10”, a następnie iteracja poprzedniego elementustring
listylist
.sum
Kluczowe oblicza sumę: liczba całkowita odczytu zstring
z bazową b , gdzie b jest liczbą całkowitą analizowany zbase
łańcucha, w bazie 10.#1=
i#1#
są zapisy do zdefiniowania i stosowanie zmiennych reader: pierwszy wpływa na wyrażenie s do zmiennej, drugi zastępuje odwołanie tym samym obiektem. To oszczędza niektóre znaki dla długich nazw.Przykład
źródło
Japt
-x
, 7 bajtówSpróbuj
źródło