Teraz, gdy wiemy, jak prawidłowo wyrównać i trójkątować liczbę, nauczymy się, jak ją równoległobokować. Aby wykonać równoległobok liczby, najpierw układamy go jako równoległobok, układając go na sobie kilka razy równy liczbie cyfr, które ma, i dodając spacje, aby był równoległobokiem. Więc 123
utworzy:
123
123
123
Teraz bierzemy każdą liczbę poziomą i pionową i dodajemy ją 123+123+123+1+12+123+23+3
, która jest równa 531
, co jest równoległobokiem 123
.
Twoje zadanie:
Napisz program lub funkcję, która po podaniu liczby jako wejścia zwraca równoległobok liczby.
Wejście:
Nieujemna liczba całkowita lub nieujemna liczba całkowita reprezentowana przez ciąg.
Wynik:
Równoległobok liczby całkowitej.
Przypadki testowe:
1234567 -> 10288049
123 -> 531
101 -> 417
12 -> 39
Punktacja:
To jest golf golfowy , najniższy wynik w bajtach wygrywa!
Odpowiedzi:
MATL , 12 bajtów
Dane wejściowe to ciąg znaków. Wypróbuj online!
Wyjaśnienie
Rozważ dane wejściowe
'123'
jako przykład.Kod duplikuje input (
t
) i buduje macierz tożsamości (Xy
) o wielkości dwukrotnie większej niż długość wejściowa (nE
):następnie odwraca go do góry nogami (
P
):Łańcuch wejściowy, interpretowany jako kody ASCII cyfr, jest równoważny numerycznemu wektorowi wiersza
Pełnowymiarowy dwuwymiarowy splot (
Y+
) powyższego wektora i macierzy dajeInterpretacja tych liczb z powrotem jako kody ASCII (
c
) daje następującą macierz znaków , przy czym char 0 jest reprezentowany jako spacja:Transpozycja (
!
) przekształca to wInterpretacja każdego wiersza jako liczby (
U
) daje numeryczny wektor kolumnyi zsumowanie go (
s
) daje wynik końcowy,531
.źródło
Siatkówka , 22 bajty
Wypróbuj online! Link zawiera przypadki testowe. Objaśnienie: Pierwszy etap dzieli numer wejściowy na każdą cyfrę i obejmuje wszystkie wyłączne prefiksy i sufiksy włącznie, podając liczby pionowe, a także oryginalny numer wejściowy powtórzony dla każdej cyfry, podając liczby poziome. Pozostałe etapy po prostu sumują uzyskane liczby.
źródło
05AB1E ,
12 118 bajtówJestem
pewien,żemożnadalej grać w golfa - porady mile widziane!-1 bajt dzięki Erikowi Outgolferowi (unikaj zawijania, ale używając konkatenacji),
a następnie ...
-3 więcej bajtów dzięki Adnanowi (unikaj mnożenia przez długość-1 poprzez wektoryzację dodawania i odejmowanie danych wejściowych na końcu)
Wypróbuj online!
W jaki sposób?
źródło
«
do połączenia sufiksów i prefiksów:g<*¹.s¹η«O+
.s¹η++Oα
powinien działać przez 8 bajtówHaskell ,
9078767164635957 bajtówWypróbuj online!
źródło
g x=sum[x+div x a+mod x a|(a,_)<-zip((10^)<$>[1..])$show x]
.g x=sum[x+div x(10^a)+mod x(10^a)|(a,_)<-zip[1..]$show x]
jest jeszcze krótszy.g x=sum[x+x`div`10^a+x`mod`10^a|(a,_)<-zip[1..]$show x]
.Łuska ,
1312 bajtówWypróbuj online!
Wyjaśnienie
źródło
Neim , 7 bajtów
Strzec się. Zawiera węże:
S𝐬𝕤
Wypróbuj online!
źródło
S𝐬𝕤
” Lol ..𝐗𝔻
Python 3 ,
8570 bajtówDla danych wejściowych 12345:
Podsumowuje wycinki danych wejściowych 1 + 2345 + 12345, 12 + 345 + 12345, 123 + 45 + 12345, 1234 + 5 + 12345, stosując indeksowanie ciągów do indeksu (r) = 1,2,3,4 przed rzutowaniem na liczbę całkowitą i dodaje do 12345 * 2
Specjalne podziękowania dla:
-14 Bajtów @Jonathan Allen
-1 bajt @ovs
Wypróbuj online!
źródło
(len(n)+1)
można zagrać w golfa do-~len(n)
(~x
is-1-x
), a następnie można zaoszczędzić kolejny bajt za pomocą-i(n)*~len(n)
. Następnie możesz uczynić to wszystko anonimową funkcją:lambda n,i=int:sum(i(n[:r])+i(n[r:])for r in range(1,len(n)))-i(n)*~len(n)
(74 bajty)f=lambda n,r=1,i=int:n[r:]and i(n[r:])+i(n[:r])+f(n,r+1)or-i(n)*~len(n)
Japt ,
1511 bajtów-4 bajty dzięki @Shaggy.
Pobiera dane wejściowe jako ciągi znaków.
Wypróbuj online!
Wyjaśnienie
Podziel tablicę wejściową na cyfry (
¬
) i zamapuj według (£
) następującej funkcji, gdzie Y jest indeksem.["1", "2", "3"]
Wartość wejściowa (domyślna) ze
Y
spacjami (ç
) wstawionymi (i
) na początku. Jest to przypisane doU
.["123", " 123", " 123"]
Połącz to ze sobą obrócone o 90 ° w prawo (
1
czas). Następnie sum (x
).["123", " 123", " 123", " 1", " 12", "123", "23 ", "1 "]
->531
.źródło
Japt ,
3118 bajtów-13 bajtów dzięki @ETHproductions
To podejście nie działa dobrze przy użyciu Japt. Rozwiązanie Justina jest znacznie lepsze.
Wyjaśnienie:
Wypróbuj online!
źródło
Ul
U
funkcji, a środkowy element w tablicy może zostać skondensowanyUå+ x
, co myślę, że sprowadza cię do 23 bajtów.mx x
naxx
? :-)Rubin ,
6155 + 1 = 56 bajtówUżywa
-n
flagi. Dane wejściowe ze STDIN.Wypróbuj online!
źródło
102033
program drukuje,728714
gdy poprawna jest wartość729702
.02033
)JavaScript,
7774 bajtówZaoszczędź 3 bajty dzięki Value Ink
źródło
Pyth ,
2019 bajtówMoje obecne podejście do prefiksu (mam nadzieję, że golf dalej).
Pakiet testowy lub wypróbuj alternatywne podejście z tą samą liczbą bajtów .
Wyjaśnienie
Aby lepiej zrozumieć tę koncepcję, weźmy przykład
"123"
.Najpierw otrzymujemy prefiksy wejścia. To są
['1', '12', '123']
.Następnie otrzymujemy prefiksy odwróconego wejścia, tj .:
['3', '32', '321']
i odwracamy każdy, stąd otrzymujemy['3', '23', '123']
.Łączymy dwie listy i konwertujemy każdy element na liczbę całkowitą, więc otrzymujemy
[3, 23, 123, 1, 12, 123]
.Po zsumowaniu listy wynik jest następujący
285
.Produkt
P
jest długością wejścia - 1 (tj2
) Pomnożona przez jego całkowitą reprezentację (2 * 123 = 246
).Na koniec sumujemy dwa wyniki:
285 + 246
stąd otrzymujemy531
, który jest poprawnym wynikiem.Pyth , 20 bajtów
Pakiet testowy.
Wyjaśnienie
Wyjaśnienie, które nastąpi po dalszym golfie.Na razie nie udało mi się zagrać w golfa (mam jednak pomysły).źródło
q / kdb +, 34 bajty
Rozwiązanie:
Przykłady:
Wyjaśnienie:
źródło
Galaretka , 18 bajtów
Wypróbuj online!
źródło
Swift 3 , 213 bajtów
Nie można przetestować online, ponieważ działa wolno i upływa limit czasu. Możesz go wypróbować na Swift Playgrounds, jeśli chcesz go przetestować.
Przykładowy przebieg
Wejście:
Wynik:
źródło
Galaretka , 12 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako ciąg. Tworzy „równoległobok” jako macierz znaków, a następnie ocenia każdy wiersz i kolumnę, aby uzyskać sumę liczb.
Wyjaśnienie
źródło
C (gcc) ,
958481 bajtów (78 +-lm
flaga kompilatora)Cześć! To moje pierwsze zgłoszenie, mam nadzieję, że nie złamałem żadnej zasady.
Wypróbuj online!
Bez golfa, bez ostrzeżeń:
źródło
-lm
do funkcji matematycznych potrzebne są tylko niektóre środowiska wykonawcze C, takie jak npglibc
. Kompilacja np. Z MinGW (przy użyciu Microsoftmsvcrt.dll
), nie byłaby potrzebna. Więc nie jesteś pewien, czy trzeba go tutaj dodać? W każdym razie, jeśli go dodasz, utworzy 3 bajty;)-lm
jest potrzebny dopow()
funkcji z gcc. Próbowałem pracować bez niego, ale nie mogłem znaleźć rozwiązania wykorzystującego mniej niż 6 bajtów (pow + flaga kompilatora). Nie mogłem znaleźć zasad dotyczących włączania flag do liczby bajtów i wiem, że zdałem sobie sprawę z fałszywego założenia, że-
postać nie jest liczona. W tej chwili dodaję bajt +1.-lm
nie jest wymagane,gcc
ale przez fakt, żeglibc
nie zawiera funkcji matematycznych w głównej bibliotece.msvcrt.dll
robi, więc kompilowanie wgcc
systemie Windows z dziełami bez-lm
. To dręczące i nie jestem do końca pewien, co mają do powiedzenia reguły w tym zakresie.Java 8,
147137126116114 bajtów-13 bajtów (137 → 126 i 116 → 114) dzięki @ OlivierGrégoire .
Wyjaśnienie:
Wypróbuj tutaj.
źródło
n->{Integer l=(n+"").length(),s=n*l,i=0;for(;++i<l*2;)s+=l.valueOf((n+"").substring(l<i?i-l:0,i<l?i:l));return s;}
. Jest to przesuwane okno z min-max, aby zmniejszyć liczbę połączeń z drogiminew Integer(....substring(...))
Math.max(0,i-l)
na0>i-l?0:i-l
iMath.min(i,l)
nai>l?l:i
. Modyfikuję teraz. Ach, widzę, że zredagowałeś swój komentarz po skopiowaniu 126 bajtów odpowiedzi. ;)R ,
168162103 bajty-6 bajtów, nie używając c ()
-59 bajtów dzięki @Giuseppe
Wypróbuj online!
Pobiera dane wejściowe jako ciąg.
Jestem absolutnie pewien, że należy wprowadzić ulepszenia, przede wszystkim w wykorzystaniu siły R ... ale w wyzwaniu polegającym na manipulowaniu strunami staram się zobaczyć, jak to zrobić.
Edycja: O wiele lepiej teraz, gdy nie powtarzam złego pomysłu!
źródło
substr
jawnie zamiast zapętlania, co pozwoliłoby zaoszczędzić kilka bajtów.Perl 5 , 53 + 1 (-n) = 54 bajtów
Wypróbuj online!
źródło
Mathematica, 77 bajtów
źródło