Z przykładu, który wyciągam, pierwsze są małe litery, tzn. Cyfry w bazie 62 to 0-9, az, AZ w tej kolejności?
sepp2k
Tak, dokładnie to wszystko.
Michiel de Mare
at 0:00, kochanie, idealnie.
Zacharý
Odpowiedzi:
4
dc - 43 znaki
[sb[58-]s_[lb~dZ39*+dB3<_9+rd0<xrP]dsxxk]sf
Możemy to trochę skrócić, jeśli założymy, że stos zawiera tylko dwa argumenty.
[[58-]s_dSb~dZ39*+dB3<_9+SadLbr0<fLaPc]sf
Jako samodzielny program potrzebujemy tylko 37 znaków:
?o[58-]s_[O~dZ39*+dB3<_9+rd0<xrP]dsxx
Zamiast używać [39+]sz9<z, po prostu używamy Z39*+, co doda 39 dla liczby jednocyfrowej i 78 dla liczby dwucyfrowej. Zamiast tego 113używamy B3( ADrównież działa).
dc -e'[sr[lr~rd0<x]dsxxk[39+]sa[58-]sb[d9<ad78<b48+anz0<p]dspxIP]sf' -e'351837066319 31 lfx'
lub:
dc -f base.dc -e '351837066319 31 lfx'
Objaśnienie: Bierzemy liczbę i bazę na stosie. srzapisuje bazę w rejestrze r. Funkcja rekurencyjna [lr~rd0<x]dsxxrozkłada liczbę TOSna cyfry w bazie register r. Pierwszą cyfrą jest zawsze 0, usuwana ze stosu przez k(ustaw dokładność, która domyślnie wynosi również 0, więc jest równoważna nop). Następnie funkcja rekurencyjna [48+d57<ad122<banz0<p]dspxwypisuje każdą cyfrę w ASCII za pomocą funkcji a ( [39+]sa) i b ( [58-]sb). IPwypisuje nowy wiersz. Funkcja jest przechowywana w rejestrze fi można ją wywołać przez lfx.
Jeśli przesuniesz 48+ do końca, uratujesz dwa (57 i 122 oba upuszczają postać). Drobnym niedopatrzeniem jest również to, że jako funkcja nie można zakładać, że na stosie nie ma nic innego, ale problem zostałby usunięty, jeśli scalono się pętle (co zaoszczędziłoby również kilka znaków).
Lub 53 + 46 = 99 znaków, jeśli chcesz przekierować inne części programu przez lewy dolny róg.
11p01-\>:11g%\11g/:#v_$>:1+!#v_:45+`!#v_:75*`!#v_ v
^ < ^, $# +"0" < +"'" <-":"<
Najpierw umieść liczbę do przeliczenia na stosie, a następnie podstawkę i wprowadź tę funkcję od lewego górnego rogu w prawo. Wyśle ci ciąg (ponieważ Befunge nie obsługuje zmiennych ciągów) i odejdzie od dołu w $dół. Wymaga (1,1)komórki do przechowywania radix.
Np. Dla podanego przykładu wstaw 351837066319do wejścia i uruchom:
BC_BASE_MAX jest udokumentowany jako 16. Nie wiem, jaki cud sprawia, że dane wyjściowe trafiają na przykładowe dane wejściowe, ale generuje śmieci (tj. Znaki inne niż alfanum) dla większości innych baz.
JB
@JB: którego komputera używasz? GNU bc powinien działać. sysconf(_SC_BC_BASE_MAX)zwraca 99 w moim systemie, 16 to minimum wymagane.
ninjalj
@JB: zauważ także, że poprzednie wersje, w których znajdował się błąd, właśnie przejrzałem wymagania dotyczące pytań.
ninjalj
bc 1.06. Teraz, kiedy o tym wspominasz, dostałem postać ze strony podręcznika, ale źle ją odczytałem. 16 to wejściowy limit bazowy. Podstawowy limit wyjściowy to 999. Najpierw spróbowałem na wcześniejszej wersji, zobaczmy to teraz.
JB
1
Myślę, że ten wypisuje wielkie litery dla zasad 11-16 zamiast małych. Możesz zapisać kilka przy konwersji bazowej, używając dczamiast bc.
Można to zagrać w golfa na wiele innych sposobów, na przykład usuwając białe spacje, skracając nazwy zmiennych, usuwając niepotrzebny kod (jak let) i redukując ten dość długi ciąg znaków
Jo King
To pytanie jest oznaczone kodem golfowym , więc powinieneś starać się maksymalnie skrócić swój kod. Szybka gra w golfa o rzeczach, o których wspomniałem, może sprawić, że 125 bajtów , i jest o wiele więcej do skrócenia
at 0:00
, kochanie, idealnie.Odpowiedzi:
dc - 43 znaki
Możemy to trochę skrócić, jeśli założymy, że stos zawiera tylko dwa argumenty.
Jako samodzielny program potrzebujemy tylko 37 znaków:
Zamiast używać
[39+]sz9<z
, po prostu używamyZ39*+
, co doda 39 dla liczby jednocyfrowej i 78 dla liczby dwucyfrowej. Zamiast tego113
używamyB3
(AD
również działa).źródło
Ruby 1,8 - 75 znaków, z rekurencją.
Bez rekurencji
(oba oparte na rozwiązaniu Dogberta 1.9).
źródło
Python - 86
Kredyt należny Hoa Long Tam za lewę za importowanie łańcucha
źródło
Python,
9399EDYCJA : dodano „lub” 0 dla pustej wielkości ciągu
źródło
dc, 61 znaków
Uruchom jako:
lub:
Objaśnienie: Bierzemy liczbę i bazę na stosie.
sr
zapisuje bazę w rejestrze r. Funkcja rekurencyjna[lr~rd0<x]dsxx
rozkłada liczbęTOS
na cyfry w bazieregister r
. Pierwszą cyfrą jest zawsze 0, usuwana ze stosu przezk
(ustaw dokładność, która domyślnie wynosi również 0, więc jest równoważna nop). Następnie funkcja rekurencyjna[48+d57<ad122<banz0<p]dspx
wypisuje każdą cyfrę w ASCII za pomocą funkcji a ([39+]sa
) i b ([58-]sb
).IP
wypisuje nowy wiersz. Funkcja jest przechowywana w rejestrzef
i można ją wywołać przezlfx
.źródło
Rubin -
727059 znakówBez rekurencji 70 znaków
Test
źródło
Haskell, 109 znaków
źródło
Befunge - 53 x 2 = 106 znaków
Lub 53 + 46 = 99 znaków, jeśli chcesz przekierować inne części programu przez lewy dolny róg.
Najpierw umieść liczbę do przeliczenia na stosie, a następnie podstawkę i wprowadź tę funkcję od lewego górnego rogu w prawo. Wyśle ci ciąg (ponieważ Befunge nie obsługuje zmiennych ciągów) i odejdzie od dołu w
$
dół. Wymaga(1,1)
komórki do przechowywania radix.Np. Dla podanego przykładu wstaw
351837066319
do wejścia i uruchom:źródło
Golfscript - 32 znaki
źródło
Rubinowy 1,9 -
807468t = -> n, b {d = ? 0 ..? 9 ,? a ..? z, *? A ..? Z; s = ''; (s = d [n% b] + s; n / = b) podczas gdy n> 0; s}
Z „0” dla pustego ciągu,
958982 znaków:Ruby 1.9 - niestety działa tylko do bazy 36:
źródło
]+[
„sz,
.Bash, 79 znaków
źródło
sysconf(_SC_BC_BASE_MAX)
zwraca 99 w moim systemie, 16 to minimum wymagane.dc
zamiastbc
.Python 2 , 66 bajtów
Wypróbuj online!
źródło
Burleska , 4 bajty
Wypróbuj online!
Na szczęście wbudowany w burleskę
źródło
Perl 5
-Minteger -ap
, 52 bajtyWypróbuj online!
źródło
JavaScript 170 bajtów
źródło
let
) i redukując ten dość długi ciąg znaków