Wyzwanie:
W wybranym języku programowania zaakceptuj liczbę całkowitą jako dane wejściowe w bazie 10 i wyślij ją w notacji ujemnej , znanej również jako baza -10
Przykładowy algorytm:
Jest to algorytm pobrany z Wikipedii w celu konwersji bazy 10 na dowolną bazę ujemną w VB.NET :
Function toNegativeBase(Number As Integer , base As Integer) As System.Collections.Generic.List(Of Integer)
Dim digits As New System.Collections.Generic.List(Of Integer)
while Number <> 0
Dim remainder As Integer= Number Mod base
Number = CInt(Number / base)
if remainder < 0 then
remainder += system.math.abs(base)
Number+=1
end if
digits.Insert(0, remainder)
end while
return digits
end function
Oczywiście możesz użyć dowolnego algorytmu, o ile spełnia on wyzwanie
Przykładowe wejścia / wyjścia:
Wejście:
12
Wynik:
192
Inny przykład:
Wejście:
2048
Wynik:
18168
Reguła:
Nie wolno używać żadnych wbudowanych metod, które rozwiązują ten problem, które istnieją w języku programowania
To jest golf golfowy , więc wygrywa najkrótszy kod!
code-golf
math
base-conversion
P. Ktinos
źródło
źródło
[0, 1, 8, 1, 6, 8]
byłby akceptowalny wynik dla danych wejściowych2048
?Odpowiedzi:
JavaScript (ES6),
514537 bajtówPrzypadki testowe
Pokaż fragment kodu
źródło
Japt , 11 bajtów
Przetestuj online!
Wyjaśnienie
źródło
Partia, 82 bajty
Podział partii jest obcinany do zera, więc jeśli reszta jest ujemna, muszę dodać 1 (a także dodać 10 do reszty), aby to zrekompensować. Cyfry są następnie kumulowane,
%2
aż wynik wyniesie zero.źródło
Galaretka , 9 bajtów
Jest to odwrotność brutalnej siły odwrotna do liczby całkowitej ujemnej.
Wypróbuj online!
Jak to działa
źródło
Pyth - 9 bajtów
Niech to ma płaczące emoji.
Pakiet testowy .
źródło
Python 3, 35 bajtów
Port Pythona w algorytmie Arnaulda .
Alternatywnie, dla 102 bajtów funkcja ogólna wykorzystująca algorytm oryginalnego postu:
źródło
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
.k
lubn
gdzie indziej w kodzie?-n//10
robi-(n//10)
: negujen
, a następnie dzieli piętro przez10
, co zaokrągla w dół w kierunku ujemnej nieskończoności, a nie 0. Przeciwnie,0-n//10
robi0-(n//10)
, który najpierw dzieli piętro przez 10, a następnie neguje. Z jakiegokolwiek powodu Python traktuje jednoznaczną negację z wyższym priorytetem niż binarny minus. Zobacz tę tabelę pierwszeństwa . W golfa spotkałem już tę samą sytuację.Galaretka , 10 bajtów
Wypróbuj online!
tło
Przekształcanie listy nieujemnych z podstawy b na liczbę całkowitą można osiągnąć przez złożenie w lewo za pomocą funkcji x, y ↦ bx + y . Aby przekonwertować i liczbę całkowitą na bazę b , musimy po prostu odwrócić tę funkcję, tj. Znaleźć wyrażenie dla bx + y ↦ x, y .
W Pythonie (i przez rozszerzenie Jelly) wynik działania modulo jest zawsze nieujemny, więc (bx + y)% | b | = y .
Również dzielenie liczb całkowitych zawsze zaokrągla w dół, upewniając się, że jeśli q = n / d i r = n% d , równość n = qd + r . Jeśli s jest znakiem b , to (sx) | b | + y = bx + y , więc sx = (bx + y) / | b | i dlatego s ((bx + y) / | b |) = x.
Jak to działa
źródło
SimpleTemplate , 147 bajtów
To jest język szablonów, nad którym pracuję.
W żadnym wypadku nie jest przeznaczony do gry w golfa.
Brakuje nawet kompletnej podstawowej matematyki, ale umożliwia bezpośrednie pisanie małych fragmentów PHP.
To rozwiązuje ten problem.
To rzuca wiele ostrzeżeń.
Kod jest „kompilowany” do PHP.
Nie golfowany, z białymi miejscami na śmieci:
W razie potrzeby można dodać wyjaśnienie krok po kroku, ale uważam, że jest to dość proste.
Zrzeczenie się :
Ostatnie zatwierdzenie, w momencie pisania tej odpowiedzi, miało miejsce 01.01.2017, 20:36 UTC + 00: 00.
To działa na commit 140e56ff38f45fa4fd40fd3ec382094e707b1bad od 23:27 UTC + 00: 00.
To jest wersja używana do uruchomienia tej odpowiedzi.
Kod PHP jest dostępny w dniu https://raw.githubusercontent.com/ismael-miguel/SimpleTemplate/140e56ff38f45fa4fd40fd3ec382094e707b1bad/SimpleTemplate.php
Polecam uruchomić to z ostatnią wersją, ale ta działa dobrze dla tego pytania.
Jak biegać?
Utwórz plik z kodem i uruchom go w następujący sposób:
Wartość zostanie wyświetlona na ekranie.
źródło
PHP,
7167 bajtówlub 62 bajty dla portu odpowiedzi Arnaulda :
źródło
Mathematica, 49 bajtów
Definiuje funkcję
d
przyjmującą jeden argument liczby całkowitej i zwracającą ciąg znaków. Algorytm rekurencyjny - wygląda jak ten sam algorytm w odpowiedzi Arnaulda . Działa również na liczbach ujemnych. (Zwraca pusty ciąg „0”, jeśli wartość wejściowa wynosi 0.) Uwaga dla golfistów Mathematica: używanie±
wymaga jednego dodatkowego zestawu nawiasów, a zatem nie wydaje się być krótszy.źródło
C, 68 bajtów
Zamiast wydrukować wynikową liczbę, program po prostu ją zwraca. Oczywiście jest to odpowiedź Arnaulda , jedyną różnicą jest to, że ponieważ C nie jest językiem interpretowanym, czułem, że powinienem uczynić go pełnym programem, a nie tylko funkcją.
źródło
f
wychodzi poza zakres, gdy funkcja powraca, chyba że jestem naprawdę głupi.Rdza, 88 bajtów
To tylko rekurencyjna wersja algorytmu podanego w pytaniu.
źródło