tło
Większość ludzi tutaj powinna znać kilka podstawowych systemów: dziesiętny, binarny, szesnastkowy, ósemkowy. Na przykład w systemie szesnastkowym, numer 12345 16 stanowiłoby
1*16^4 + 2*16^3 + 3*16^2 + 4*16^1 + 5*16^0
Zauważ, że zazwyczaj nie oczekujemy, że podstawa (tutaj 16
) zmieni się z cyfry na cyfrę.
Uogólnienie tych zwykłych systemów pozycyjnych pozwala na użycie innej podstawy liczbowej dla każdej cyfry. Np. Jeśli zmienilibyśmy system dziesiętny i dwójkowy (zaczynając od podstawy 10 w najmniej znaczącej cyfrze), liczba 190315 [2,10] reprezentowałaby
1*10*2*10*2*10 + 9*2*10*2*10 + 0*10*2*10 + 3*2*10 + 1*10 + 5 = 7675
Oznaczamy tę bazę jako [2,10]
. Najbardziej wysunięta na prawo podstawa odpowiada najmniej znaczącej cyfrze. Następnie przechodzisz przez bazy (po lewej), przechodząc przez cyfry (po lewej), owijając się, jeśli jest więcej cyfr niż baz.
Więcej informacji można znaleźć na Wikipedii .
Wyzwanie
Napisz program lub funkcję, która na podstawie listy cyfr D
podstawy wejściowej I
i bazy wyjściowej O
przekształca liczbę całkowitą reprezentowaną przez D
z bazy I
na bazę O
. Możesz pobrać dane wejściowe za pomocą argumentu STDIN, ARGV lub funkcji i albo zwrócić wynik, albo wydrukować go do STDOUT.
Możesz założyć:
- że numery w
I
iO
są większe niż1
. I
iO
są niepuste.- czy numer wejściowy jest prawidłowy w danej bazie (tj. żadna cyfra nie jest większa niż jej podstawa).
D
może być pusty (reprezentujący 0
) lub może mieć zera na początku. Twój wynik nie powinien zawierać wiodących zer. W szczególności wynik reprezentujący 0
powinien zostać zwrócony jako pusta lista.
Nie wolno używać żadnych wbudowanych ani zewnętrznych funkcji konwersji bazowej.
To jest kod golfowy, wygrywa najkrótsza odpowiedź (w bajtach).
Przykłady
D I O Result
[1,0,0] [10] [2] [1,1,0,0,1,0,0]
[1,0,0] [2] [10] [4]
[1,9,0,3,1,5] [2,10] [10] [7,6,7,5]
[1,9,0,3,1,5] [2,10] [4,3,2] [2,0,1,1,0,1,3,0,1]
[52,0,0,0,0] [100,7,24,60,60] [10] [3,1,4,4,9,6,0,0]
[0,2,10] [2,4,8,16] [42] [1,0]
[] [123,456] [13] []
[0,0] [123,456] [13] []
źródło
[]
jeśli wejście jest[0]
Odpowiedzi:
CJam, 45 lat
W końcu znalazłem dobre zastosowanie
j
.Jak to działa
Long ArrayList Block j
wykonuje blok, który przyjmuje liczbę całkowitą jako parametr, iLong j
wywoła ten blok rekurencyjnie w bloku. Będzie także przechowywać wartości zwrócone przez blok w wewnętrznej tablicy, która jest inicjowana przez parametr array. Blok nie wykona bloku, jeśli dane wejściowe są już w tablicy, a zamiast tego zostanie zwrócona wartość z tablicy.Więc jeśli zainicjuję go tablicą pustej tablicy, pusta tablica zostanie zwrócona dla wejścia 0, a blok zostanie wykonany dla dowolnego innego wejścia.
CJam,
4948Dane wejściowe powinny być
O I D
.Przykłady:
Jak to działa
źródło
_{}?
sztuczka jest naprawdę fajna .{}e|
jest taki sam.j
? :)CJam,
62615957 bajtówOdczytuje tablice wejściowe
[O I D]
od STDIN. Wypróbuj online.Jak to działa
Przypadki testowe
Zauważ, że puste łańcuchy i puste tablice są nierozróżnialne dla CJam, więc
[]p
drukuje""
.źródło
Python 2 - 318
Przypadkowo pomieszałem kolejność argumentów, więc musiałem je odwrócić. Popracuję nad plastrem-fu, aby później listy działały w innym kierunku, zmarnowałem już całą przerwę na lunch: pNaprawiony
źródło
APL, 78
Przykłady:
źródło
{{⍵↓⍨1⍳⍨×⍵}(99⍴⎕)⊤⍵⊥⍨⎕⍴⍨⍴⍵}
bierze D jako właściwy argument, a następnie prosi o I i O.Python 2 - 122
Bardzo proste, nie udało mi się znaleźć żadnych specjalnych sztuczek golfowych na tym.
Nie golfowany:
Edycja: 116-bajtowa wersja programu dzięki FryAmTheEggman
Ta wersja akceptuje dane oddzielone przecinkami, np
[1,9,0,3,1,5], [2,10], [10]
źródło
k2 -
8374 znakFunkcja przyjmująca jeden argument. To było po prostu znacznie lepiej dostosowane do K niż J, dlatego nie używam J. To byłby po prostu mnóstwo śmieci do boksowania / rozpakowywania i nikt tego nie chce. Jest to w dialekcie k2 (może wymagać pewnej adaptacji do pracy w implementacji Kona typu open source), ale zmienię to na k4, jeśli będę mógł tam grać w golfa krócej.
Zauważę, że stoję tutaj za wybrednością i mówię, że jedną listę pozycji należy wprowadzić jako taką.
,2
to lista jednego elementu, którym jest skalar2
. Często skalary i listy 1-elementowe są wymienne, ale w tym golfie istnieje logika polegająca na przyjmowaniu argumentów listy.Aby wyjaśnić golfa, podzielę go na dwie części.
F
jest golfem,L
jest główną pętlą obliczającą wynik. Dokładny mechanizm zapętlania jestL
stosowany wielokrotnie do argumentów, aż drugi argument wyniesie zero, a następnie ten wynik jest zwracany. (To jest.[L]/
część.)Przez wybuch:
W akcji:
źródło
Perl 6 , 67 bajtów
Spróbuj
Rozszerzony:
Jeśli nie masz pewności, co zmniejsza trójkąt:
Gdybym mógł cofnąć dane wejściowe i odwrócić dane wyjściowe, byłoby 47 bajtów.
Spróbuj
źródło