Jest to inspirowane odpowiedzią 05AB1E autorstwa Magic Octupus Urn .
Biorąc pod uwagę dwa argumenty, dodatnią liczbę całkowitą i ciąg / listę znaków:
- Przetłumacz liczbę na base-n, gdzie n jest długością łańcucha.
- Dla każdego znaku zamień każdy wygląd indeksu tego znaku w liczbie podstawowej n na ten znak.
- Wydrukuj lub zwróć nowy ciąg.
Przykłady:
Input:
2740, ["|","_"]
2740 -> 101010110100 in base 2
-> Replace 0s with "|" and 1s with "_"
Output: _|_|_|__|_||
Input:
698911, ["c","h","a","o"]
698911 -> 2222220133 in base 4
-> Replace 0s with "c", 1s with "h", 2s with "a", and 3s with "o"
Output -> "aaaaaachoo"
Input:
1928149325670647244912100789213626616560861130859431492905908574660758972167966, [" ","\n","|","_","-"]
Output:
__ __
| |_| |
___| |___
- - - -
- - - - - - -
- - - - - - - -
_______________
Input: 3446503265645381015412, [':', '\n', '.', '_', '=', ' ', ')', '(', ',']
Output:
_===_
(.,.)
( : )
( : )
Zasady:
- IO jest elastyczny .
- Możesz wziąć liczbę w dowolnej bazie, o ile jest ona spójna między danymi wejściowymi
- Lista znaków musi być jednak indeksowana przez 0, gdzie 0 to pierwszy znak, a n-1 to ostatni
- Możliwymi znakami mogą być dowolne znaki ASCII do wydruku oraz białe znaki, takie jak tabulatory i znaki nowej linii
- Podana lista znaków będzie miała długość z zakresu
2-10
włącznie. Oznacza to, że najmniejsza podstawa jest binarna, a największa jest dziesiętna ( nie ma tu przykrych liter ) - Standardowe luki są zabronione
- Nie wahaj się odpowiedzieć, nawet jeśli Twój język nie obsługuje większych przypadków testowych.
Ponieważ jest to kod-golf , wygrywa najkrótszy kod dla każdego języka. ( Wiem, że wszystkie języki gry w golfa mają wbudowane jeden bajt ;)
code-golf
ascii-art
base-conversion
Jo King
źródło
źródło
Odpowiedzi:
05AB1E ,
76 bajtówPonieważ została zainspirowana odpowiedzią 05AB1E, odpowiedź podana w 05AB1E wydaje się odpowiednia. :)
-1 bajt dzięki @Enigma , usuwając foreach i robiąc to pośrednio.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
gв¹sèJ
aby zapisać bajt.¹sè
sobie ... (Wiedziałem, że zmiana na?
aJ
da w tym przypadku ten samJava 8,
7250 bajtów-22 bajty dzięki @ OlivierGrégoire , zwracając
IntStream
zamiast drukowania bezpośrednio.Wypróbuj online .
Wyjaśnienie:
źródło
a->n->n.toString(a.length).chars().map(c->a[c-48])
(50 bajtów), ponieważ „IO jest elastyczny”String f(char[]a,int n){return n>0?f(a,n/a.length)+a[n%a.length]:"";}
(69 bajtów) rekurencyjny, dla zabawy.Python 3 , 49 bajtów
Nie mogę jeszcze komentować, więc zamieszczam odpowiedź w języku Python 2 dostosowaną do języka Python 3.5.
źródło
Japt, 2 bajty
Może przyjąć drugie wejście jako tablicę lub ciąg znaków. Pomija 2 ostatnie przypadki testowe, ponieważ liczby przekraczają maksymalną liczbę całkowitą JavaScript. Wymień
s
sięì
do wyjścia tablicę znaków zamiast.Spróbuj
źródło
Haskell ,
4039 bajtówWypróbuj online!
Ponieważ
Int
typ Haskella jest ograniczony9223372036854775807
, nie udaje się to w przypadku większych liczb.-1 bajt dzięki Laikoni .
Nie golfił
Wypróbuj online!
źródło
cycle
zamiastmod
!div n(length l)
zapisuje bajt.MATL , 2 bajty
Wypróbuj online!
Dane wejściowe to liczba i ciąg znaków.
Nie udaje się przekroczyć liczb z
2^53
powodu precyzji zmiennoprzecinkowej.Wyjaśnienie
Co
YA
wiadomo, wbudowana (podstawowa konwersja z określonymi symbolami docelowymi).źródło
JavaScript (ES6), 48 bajtów
Pobiera dane wejściowe w składni curry
(c)(n)
, gdzie c jest listą znaków, a n jest liczbą całkowitą.Bezpieczny tylko dla n <2 53 .
Wypróbuj online!
JavaScript (ES6), 99 bajtów
Z obsługą dużych liczb całkowitych
Pobiera dane wejściowe w składni curry
(c)(a)
, gdzie c jest listą znaków, a a jest liczbą cyfr dziesiętnych (jako liczb całkowitych).Wypróbuj online!
źródło
x86 32-bitowy kod maszynowy (32-bitowe liczby całkowite): 17 bajtów.
(zobacz także inne wersje poniżej, w tym 16 bajtów dla wersji 32-bitowej lub 64-bitowej, z konwencją wywoływania DF = 1).
Dzwoniący przekazuje argumenty do rejestrów, w tym wskaźnik do końca bufora wyjściowego (jak moja odpowiedź C ; zobacz to w celu wyjaśnienia i wyjaśnienia algorytmu) . Wewnętrzny glibc
_itoa
robi to , więc nie jest on przeznaczony tylko do gry w golfa kodu. Rejestry przekazujące arg są zbliżone do x86-64 System V, z tym wyjątkiem, że mamy arg w EAX zamiast EDX.Po powrocie EDI wskazuje na pierwszy bajt łańcucha C zakończonego na 0 w buforze wyjściowym. Zwykle rejestrem wartości zwracanej jest EAX / RAX, ale w języku asemblera można użyć dowolnej konwencji wywoływania dogodnej dla funkcji. (
xchg eax,edi
na końcu dodaje 1 bajt).Dzwoniący może obliczyć jawną długość, jeśli chce, z
buffer_end - edi
. Ale nie sądzę, abyśmy mogli usprawiedliwić pominięcie terminatora, chyba że funkcja faktycznie zwróci zarówno wskaźniki początkowe + końcowe, jak i wskaźnik + długość. Pozwoliłoby to zaoszczędzić 3 bajty w tej wersji, ale nie sądzę, aby było to uzasadnione.idiv
. Pozostałe argumenty nie są domyślnymi operandami.)dec edi
, więc musi być w niskim 4GiB)nasm -felf32 ascii-compress-base.asm -l /dev/stdout | cut -b -30,$((30+10))-
(Ręcznie edytowane w celu zmniejszenia komentarzy, numeracja linii jest dziwna).Zaskakujące jest to, że najprostsza wersja zasadniczo bez kompromisów prędkości / rozmiaru jest najmniejsza, ale
std
/cld
kosztuje 2 bajty,stosb
aby przejść w kolejności malejącej i nadal przestrzegać wspólnej konwencji wywoływania DF = 0. (A STOS zmniejsza się po przechowywaniu, pozostawiając wskaźnik wskazujący jeden bajt za niski na wyjściu z pętli, co kosztuje dodatkowe bajty do obejścia.)Wersje:
Wymyśliłem 4 znacząco różne sztuczki implementacyjne (używając prostego
mov
load / store (powyżej), używająclea
/movsb
(schludny, ale nie optymalny), używającxchg
/xlatb
/stosb
/xchg
i takiego, który wchodzi do pętli z nakładającym się instrukcją. Zobacz kod poniżej) . Ostatni potrzebuje0
znaku końca w tablicy odnośników, aby skopiować jako terminator łańcucha wyjściowego, więc liczę to jako +1 bajt. W zależności od wersji 32/64-bitowej (1-bajtowejinc
lub nie) oraz od tego, czy możemy założyć, że zestawy wywołujące DF = 1 (stosb
malejąco) lub cokolwiek innego, różne wersje są (powiązane) najkrótsze.DF = 1 do przechowywania w kolejności malejącej sprawia, że wygrana dla xchg / stosb / xchg, ale dzwoniący często tego nie chce; Wydaje się, że przenoszenie pracy na osobę dzwoniącą jest trudne do uzasadnienia. (W przeciwieństwie do niestandardowych rejestrów przechodzących argumenty i zwracających wartość, które zwykle nie kosztują dodatkowego programu wywołującego asm). Ale w 64-bitowym kodzie
cld
/scasb
działainc rdi
, unikając obcięcia wskaźnika wyjściowego do 32-bitowego, więc czasami niewygodne jest zachowanie DF = 1 w 64-bitowych funkcjach czyszczenia. . (Wskaźniki do statycznego kodu / danych są 32-bitowe w plikach wykonywalnych innych niż PIE x86-64 w Linuksie i zawsze w ABI Linux x32, więc w niektórych przypadkach można używać wersji x86-64 używającej 32-bitowych wskaźników.) ta interakcja sprawia, że interesujące jest spojrzenie na różne kombinacje wymagań.nostring
) .stosb_edx_arg
lubskew
) ; lub z przychodzącym DF = dontcare, pozostawiając ustawione: 16 + 1Bstosb_decode_overlap
lub 17Bstosb_edx_arg
stosb_decode_overlap
) , 18B (stosb_edx_arg
lubskew
)x86-64 z 64-bitowymi wskaźnikami, inna obsługa DF: 16B (DF = 1
skew
) , 17B (nostring
z DF = 1, używającscasb
zamiastdec
). 18B (stosb_edx_arg
zachowanie DF = 1 z 3 bajtamiinc rdi
).Lub jeśli pozwolimy na powrót wskaźnika do 1 bajtu przed ciągiem, 15B (
stosb_edx_arg
bezinc
końca). Wszystko gotowe do ponownego wywołania i rozwinięcia kolejnego łańcucha do bufora z inną bazą / tabelą ... Ale to miałoby większy sens, gdybyśmy nie zachowali zakończenia0
, a ty możesz umieścić ciało funkcji w pętli, więc to naprawdę osobny problem.x86-64 z 32-bitowym wskaźnikiem wyjściowym, DF = 0 konwencja wywoływania: brak poprawy w stosunku do 64-bitowego wskaźnika wyjściowego, ale
nostring
powiązanie 18B ( ) teraz.skew
). Lub ustawić DF = 1 i pozostawić, 17B dlaskew
z,std
ale niecld
. Lub 17 + 1B dlastosb_decode_overlap
zinc edi
na końcu zamiastcld
/scasb
.Z konwencją wywoływania DF = 1: 16 bajtów (IA32 lub x86-64)
Wymaga DF = 1 na wejściu, pozostawia to ustawienie. Mało prawdopodobne , przynajmniej na podstawie funkcji. Robi to samo co powyższa wersja, ale z xchg, aby uzyskać resztę do / z AL przed / po XLATB (wyszukiwanie tabeli z R / EBX jako bazą) i STOSB (
*output-- = al
).Z normalnym DF = 0 na konwencji wejścia / wyjścia, / / wersja ma 18 bajtów dla kodu 32 i 64-bitowych i 64-bitowych jest czyste (współpracuje z 64-bitowego wskaźnika wyjściowego).
std
cld
scasb
Zauważ, że argumenty wejściowe znajdują się w różnych rejestrach, w tym RBX dla tabeli (dla
xlatb
). Zauważ też, że ta pętla zaczyna się od zapisania AL, a kończy na ostatnim znaku, który nie został jeszcze zapisany (stądmov
na końcu). Pętla jest więc „wypaczona” w stosunku do innych, stąd nazwa.Podobna nieskrzywiona wersja przekracza EDI / RDI, a następnie go naprawia.
Próbowałem alternatywnej wersji tego z
lea esi, [rbx+rdx]
/movsb
jako wewnętrzną pętlę. (RSI jest resetowane przy każdej iteracji, ale zmniejsza się RDI). Ale nie może użyć xor-zero / stos do terminatora, więc jest o 1 bajt większy. (I to nie jest 64-bitowe czyszczenie dla tabeli odnośników bez prefiksu REX na LEA.)LUT z jawną długością i terminatorem 0: 16 + 1 bajtów (32-bit)
Ta wersja ustawia DF = 1 i pozostawia to w ten sposób. Liczę dodatkowy wymagany bajt LUT jako część całkowitej liczby bajtów.
Fajną sztuczką jest tutaj dekodowanie tych samych bajtów na dwa różne sposoby . Wchodzimy w środek pętli z resztą = podstawa i iloraz = liczba wejściowa i kopiujemy terminator 0 na swoje miejsce.
Za pierwszym razem przez funkcję pierwsze 3 bajty pętli są zużywane jako wysokie bajty disp32 dla LEA. To, że LEA kopiuje bazę (moduł) do EDX,
idiv
produkuje resztę do późniejszych iteracji.Drugi bajt
idiv ebp
toFD
, który jest kodem op dlastd
instrukcji, że ta funkcja musi działać. (To było szczęśliwe odkrycie. Patrzyłem na todiv
wcześniej, co odróżnia się odidiv
używania/r
bitów w ModRM. Drugi bajtdiv epb
dekodowania jakocmc
, który jest nieszkodliwy, ale nie jest pomocny. Ale za pomocąidiv ebp
tego możemy faktycznie usunąćstd
górę funkcji).Zauważ, że rejestry wejściowe są jeszcze raz różne: EBP dla bazy.
Ta nakładająca się sztuczka dekodowania może być również używana z
cmp eax, imm32
: zajmuje tylko 1 bajt, aby skutecznie przeskoczyć do przodu o 4 bajty, tylko flagi clobbering. (Jest to straszne z punktu widzenia wydajności procesorów, które wyznaczają granice instrukcji w pamięci podręcznej L1i, BTW).Ale tutaj używamy 3 bajtów, aby skopiować rejestr i przejść do pętli. Zwykle zajęłoby to 2 + 2 (mov + jmp) i pozwoliłoby nam wskoczyć do pętli tuż przed STOS zamiast przed XLATB. Ale wtedy potrzebowalibyśmy osobnego STD i nie byłoby to zbyt interesujące.
Wypróbuj online! (z
_start
dzwoniącym, który wykorzystujesys_write
wynik)Najlepiej jest debugować, aby uruchomić go poniżej
strace
lub zrzucić dane wyjściowe, aby zobaczyć, czy\0
w odpowiednim miejscu znajduje się terminator i tak dalej. Ale możesz zobaczyć, że to faktycznie działa i produkowaćAAAAAACHOO
za wkład(W rzeczywistości
xxAAAAAACHOO\0x\0\0...
, ponieważ zrzucamy z bufora 2 bajty wcześniej do stałej długości. Widzimy więc, że funkcja zapisała bajty, które powinna, i nie nadepnęła na bajty, których nie powinna. wskaźnik początkowy przekazany do funkcji był drugim przedostatnimx
znakiem, po którym następowały zera.)źródło
Galaretka , 4 bajty
Wypróbuj online!
ṃ
jest do tego dosłownie wbudowany. Pozostałe trzy bajty odpowiadają indeksowaniu Jelly na podstawie jednego.źródło
ṃ
„ Dekompresja bazy; konwertuje x na długość bazy (y), a następnie indeksuje na y ” . Czy dotyczy to wyjątkowych przypadków, w których podstawa, na którą chcesz przekonwertować, i długość łańcucha / liczby całkowitej / listy są równe? Kiedy go szukam, mogę znaleźć tylko trzy odpowiedzi: 1 ; 2 ; 3 . Trochę dziwne, wbudowane w codzienne wyzwania związane z golfem. : S“sspspdspdspfdspfdsp”
, ale z“çƥ÷£ḟ’ṃ“spdf”¤
tobą oszczędzasz sześć bajtów. Jest to szczególnie przydatne w przypadku 250 podstawowych liczb JellyPython 2 ,
4948 bajtów-1 bajt dzięki Jo King
Wypróbuj online!
Alternatywna wersja (nie kończy się dla dużych liczb),
4543 bajtów-2 bajty dzięki Jo King
Wypróbuj online!
źródło
Węgiel ,
31 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 2 bajty dzięki tylko @ ASCII. Poprzednia wersja przed dodaniem wbudowanego 8 bajtów:
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
θη
? Wygląda trochę myląco. Dlaczego nie usunąć go całkowicie i odejść⍘
?D , 112 bajtów
Wypróbuj online!
To jest port odpowiedzi C ++ HatsuPointerKun
Stylem wywołania jest
u(ulong(n), to!(char[])(b))
, gdzien
i gdzieb
są argumenty lewy i prawyD określone rzeczy
Niestety musimy zaimportować,
std.conv
aby wykonać konwersje dowolnego typu powyżej bardzo podstawowej konwersji typu.Korzystając z systemu szablonów golfy i nadając tej funkcji wymagane typy (dlatego wywoływanie jej nie jest po prostu
u(n,b)
), możemy skracać wystąpienie każdego z nichchar[]
iulong
je1
bajtować wewnątrz funkcji.D inicjuje dla nas nasze typy, więc
C t;
jest krótkiC t=cast(char[])([])
to!C
konwertuje liczbę całkowitąn%l
na tablicę znaków (używając punktów kodowych) i~
jest konkatenacjąforeach(ref c;t)
jest jakfor(... : ...)
pętla C ++ , ale trochę dłużej.ref
jest jak&
, traktuje sięc
jako skopiowane przez odniesienie (tzn. możemy modyfikowaćt
). Na szczęście D określa typc
bez żadnego słowa kluczowego oznaczającego typ.źródło
C ++,
150144 bajtów,uint64
dane wejściowe-6 bajtów dzięki Zacharýowi
Użycie zmiennej do przechowywania rozmiaru zwiększyłoby liczbę bajtów o 1
Aby wywołać funkcję:
Pierwsza liczba, druga to ciąg znaków (tablica znaków)
Przypadki testowe :
źródło
#include
, możesz zmienić;;
na sprawiedliwy;
i'0'
możesz być48
for
pętlą:for(;n;n/=b.size())t=std::to_string(n%b.size())+t;
b.size()
to się nie zmienia w tej pętli.Gałązka, 66 bajtów
Utworzono plik,
macro
który należyimport
edytować w szablonie.Oczekiwane wartości:
Dla pierwszych argumentów (
n
):W przypadku drugiego argumentu (
c
):Jak używać:
.twig
plik{% import 'file.twig' as uncompress %}
uncompress.d()
Niegolfowany (niefunkcjonalny):
Możesz przetestować ten kod na: https://twigfiddle.com/54a0i9
źródło
Pyth,
987 bajtówZapisano bajt dzięki hakr14 i kolejne dzięki Mr. Xcoder.
Wypróbuj tutaj
Wyjaśnienie
źródło
m@Qd
z@LQ
vz
goE
.C89, sygnowany w ograniczonym zakresie
int n
,6453 bajtówchar **out
i zmodyfikuj, zamiast brać i zwracaćchar *
Przyjmuje liczbę jako
int
, tablicę odnośników jako tablicę + długość.Dane wyjściowe są zapisywane w pliku
char *outbuf
. Dzwoniący przekazuje (przez odniesienie) wskaźnik na koniec bufora. Funkcja modyfikuje ten wskaźnik, aby wskazywał pierwszy bajt ciągu po powrocie.Jest to poprawne C89 i działa poprawnie nawet przy włączonej optymalizacji. tzn. nie zależy od
-O0
zachowania gcc, gdy spada z końca funkcji innej niż void lub ma inne UB.Przekazywanie wskaźnika na koniec bufora jest normalne dla zoptymalizowanej funkcji typu int->, takiej jak wewnętrzna glibc
_itoa
. Widzieć tę odpowiedź, aby uzyskać szczegółowe wyjaśnienie dzielenia liczb całkowitych na cyfry za pomocą pętli div / mod, tak jak my tutaj, zarówno w C, jak i x86-64 asm. Jeśli podstawa ma potęgę 2, możesz przesunąć / maskować, aby najpierw wyodrębnić cyfry MSD, ale w przeciwnym razie jedyną dobrą opcją jest najpierw cyfra najmniej znacząca (z modulo).Wypróbuj online! . Wersja bez golfa:
W tej wersji o jawnej długości wejście to taki,
char table[]
który nie potrzebuje kończącego bajtu 0, ponieważ nigdy nie traktujemy go jako łańcucha. To może byćint table[]
dla nas wszystkich. C nie ma kontenerów, które znają swoją długość, więc wskaźnik + długość to normalny sposób na przekazanie tablicy o rozmiarze. Więc wybieramy to zamiast koniecznościstrlen
.Maksymalny rozmiar bufora wynosi około
sizeof(int)*CHAR_BIT + 1
, więc jest mały i ma stałą czasową kompilacji. (Używamy tak dużo miejsca z base = 2 i wszystkimi bitami ustawionymi na 1.) np. 33 bajty dla 32-bitowych liczb całkowitych, w tym0
terminator.C89, podpisany
int
, tabela jako łańcuch C o niejawnej długości, 65 bajtówTo jest to samo, ale dane wejściowe są ciągiem o niejawnej długości, więc musimy sami znaleźć tę długość.
źródło
Bash + podstawowe narzędzia , 49 bajtów
Wypróbuj online!
Komentarze / wyjaśnienia
To pobiera argumenty wiersza poleceń jako dane wejściowe (liczba w bazie 10, a następnie pojedynczy ciąg z listą znaków) i wysyła na standardowe wyjście. Znaki specjalne, takie jak spacja, nowa linia itp., Można wprowadzać w notacji ósemkowej (na przykład
\040
spacja) lub\n
w nowej linii,\t
w tabulacji lub w dowolnej innej sekwencji zmiany znaczenia, któraecho -e
itr
interpretować identycznie.Wiele bajtów dotyczy obsługi znaków specjalnych i większych przypadków testowych. Jeśli będę musiał obsługiwać tylko nieprzyjemne znaki, a liczby będą małe (na przykład pierwszy przypadek testowy), zrobią to następujące 24 bajty:
Wykorzystuje to rozszerzenie parametrów,
${#2}
aby uzyskać liczbę znaków w ciągu, buduje program dc do konwersji podstawowej, a następnie przesyła przekonwertowaną liczbętr
.Nie będzie to jednak obsługiwać znaków nowej linii, spacji ani tabulatorów, więc aby poradzić sobie z sekwencjami ucieczki bez wpływu na bazę, liczę znaki
wc -c
po interpretacji ucieczekecho -en
. Rozszerza to program do 38 bajtów:Niestety, dc ma irytującą „cechę”, w której jeśli wypisuje dużą liczbę, będzie owijać ją liniowo ukośnikiem + sekwencją nowej linii, więc większe przypadki testowe mają tę dodatkową moc wyjściową. Aby go usunąć, przepuszczam dane wyjściowe dc,
tr -dc 0-9
aby usunąć znaki nienumeryczne. I oto jesteśmy.źródło
dc -e${#2}o$1p|tr 0-9 "$2"
aby wziąć dane wejściowe dosłownie zamiast w postaci \, aby mógł obsługiwać spacje, aletr
nie ma opcji, aby na przykład nie traktować go-
jako znaku zakresu. Jeśli dane wejściowe-
nie znajdują się na jednym końcu łańcucha, są łamane. Być może możesz użyćsed "y/0123456789/$2/"
. Nie, nie sądzę, GNUsed
wymaga , aby oba argumentyy
były tej samej długości i wydaje się, że dusi się na nowej linii.APL (Dyalog Unicode) ,
14 1312 bajtówWypróbuj online!
Infix milcząca funkcja; nie może obsłużyć największego przypadku testowego z powodu reprezentacji zmiennoprzecinkowej.
Zaoszczędzono
12 bajty dzięki @ Adám!13 bajtów dla nagłówka dodane:(Zapomniałem, że to nie dotyczy ).⎕IO←0
: I ndex O Rigin = 0⎕FR←1287
: C loat R ePresentation = 128 bitów.W jaki sposób?
źródło
Attache , 17 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Płótno , 7 bajtów
Wypróbuj tutaj!
Proste wdrożenie:
Zestaw znaków wejściowych może być również ciągiem, o ile nie zawiera nowej linii, ponieważ Canvas nie ma znaku nowej linii i automatycznie konwertuje go na obiekt 2D.
źródło
Stax ,
65 bajtówUruchom i debuguj
Wyjaśnienie:
źródło
SOGL V0.12 , 10 bajtów
Wypróbuj tutaj!
Dość długo, biorąc pod uwagę, że pomysł jest w dużej mierze zaimplementowany w języku: tutaj , wchodząc
podaje skompresowany ciąg przy użyciu tej metody.
źródło
Ruby , 31 bajtów
Wypróbuj online!
źródło
Stax , 2 bajty
Uruchom i debuguj
:B
to instrukcja, która to robi. Normalnie działałby na „ciąg” * zamiast tablicy „ciągów”. W końcu oznacza to, że wynikiem jest tablica tablic jednoznakowych. Ale produkcja i tak domyślnie spłaszcza się.* Stax tak naprawdę nie ma typu łańcucha. Tekst jest reprezentowany przez tablice liczb całkowitych punktów kodowych.
źródło
J , 12 bajtów
W jaki sposób?
Wypróbuj online!
źródło
Wolfram Language (Mathematica) , 49 bajtów
Wypróbuj online!
źródło
C (gcc) , 110 bajtów
Wypróbuj online!
Opis:
źródło
sprintf
. Moja wersja C ma 53 bajty , a bufor wyjściowy jest dostarczany przez program wywołujący. Możesz to zrobićstrcpy
na końcu, jeśli chcesz skopiować bajty na początek bufora.CJam , 11 bajtów
Wypróbuj online! Pobiera dane wejściowe jako liczbę, następnie nową linię, a następnie znaki w sztuce ASCII.
Wyjaśnienie
źródło
liq
na początku, a to oszczędza 3 bajty!JavaScript, 39 bajtów
Rozwiązanie Port of Rod's Python .
Wypróbuj online
źródło
n
64-bitowej, prawda? (Python ma wbudowane liczby całkowite o dowolnej dokładności, ale liczby JS są liczbamidouble
zmiennoprzecinkowymi o naturalnej precyzji, które można przekonwertować na liczby całkowite). Wydaje się, że nie działa w przypadku większych przypadków testowych w pytaniu, takich jak 1928149325670647244912100789213626616560861130859431492905908574660758972167966. Och, ale pytanie pozwala na takie odpowiedzi. Nadal należy zauważyć.SimpleTemplate , 86 bajtów
Wow, to było ogromne wyzwanie!
Było to utrudnione z powodu braku bezpośredniego dostępu do określonych indeksów, gdy indeks jest zmienną.
Błąd również wydłużył go, wymagając przechowywania wartości w zmiennej.
Oczekiwane wartości:
Pierwszym argumentem (
argv.0
) może być:Drugi argument (
argv.1
) może być:Jak to działa
Działa w ten sposób:
C
na tablicę zawierającą:C
"{@echoA."
"}"
join
funkcji PHP )To powoduje na przykład
C
zawarcie"{@echoA.0}{@echoA.1}..."
C
Nie golfowany:
Możesz wypróbować ten kod na: https://ideone.com/NEKl2q
Optymalny wynik
Gdyby nie było błędów, byłby to najlepszy wynik, uwzględniający ograniczenia (77 bajtów):
źródło