Zostało to zainspirowane funkcją, którą niedawno dodałem do mojego języka Add ++ . Dlatego prześlę krótką odpowiedź w Add ++, ale nie zaakceptuję jej, jeśli wygra (to niesprawiedliwe)
Czy nie nienawidzisz, gdy możesz pomnożyć liczby, ale nie łańcuchy? Więc powinieneś to poprawić, prawda?
Masz napisać funkcję lub pełny program, który pobiera dwa niepuste ciągi jako dane wejściowe i wyjściowe ich zwielokrotnionej wersji.
Jak pomnożyć ciągi? Powiem ci!
Aby pomnożyć dwa ciągi, bierzesz dwa ciągi i porównujesz każdy znak. Znak o najwyższym punkcie kodowym jest następnie dodawany do wyniku. Jeśli są równe, po prostu dodaj znak do wyniku.
Ciągi nie mają zagwarantowanej równej długości. Jeśli długości są różne, długość końcowego ciągu jest długością najkrótszego ciągu. Dane wejściowe zawsze będą 0x20 - 0x7E
pisane małymi literami i mogą zawierać dowolny znak w drukowanym zakresie ASCII ( ), z wyjątkiem wielkich liter.
Możesz generować dane w dowolnym rozsądnym formacie, takim jak łańcuch, lista itp. Bądź rozsądny, liczby całkowite nie są rozsądnym sposobem na wyjście w tym wyzwaniu.
Przy wejściach hello,
i world!
tak to działa
hello,
world!
w > h so "w" is added ("w")
o > e so "o" is added ("wo")
r > l so "r" is added ("wor")
l = l so "l" is added ("worl")
d < o so "o" is added ("worlo")
! < , so "," is added ("worlo,")
Tak więc końcowy wynik hello,
i world!
byłby worlo,
!
Więcej przypadków testowych
(bez kroków)
input1
input2 => output
programming puzzles & code golf!?
not yet graduated, needs a rehaul => prtgyetmirgduuzzlesneedsde rolful
king
object => oing
blended
bold => boln
lab0ur win.
the "super bowl" => the0usuwir.
donald j.
trumfefe! => trumlefj.
To jest golf golfowy, więc wygrywa najkrótszy kod! Luok!
Odpowiedzi:
Haskell, 11 bajtów
Wypróbuj online!
Nic wielkiego do wyjaśnienia.
źródło
zipWith
jest zbyt dziwny. Jest to dość powszechny funkcjonalny prymityw. Pomysł „skompresowania” dwóch list pojawia się w wielu problemach, a kiedy to zrobisz, często chcesz zastosować jakąś funkcję w wynikowych elementach 2-elementowych, stąd część „z”.05AB1E , 4 bajty
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
ø€à
powinienem działać, ale nie działa.Perl 6 , 22 bajtów
Jako bonus akceptuje dowolną liczbę multipleksów, nie tylko dwie.
źródło
Japt , 16 bajtów
Przetestuj online! Pobiera dane wejściowe jako tablicę dwóch ciągów.
Brak wbudowanych min i max boli Japt tutaj, ale wciąż udaje mu się uzyskać dość przyzwoity wynik ...
Wyjaśnienie
źródło
Galaretka , 5 bajtów
Wypróbuj online!
Jak to działa
Przykład
Niech s = zmiksowane, a t = pogrubione .
ż
daje["bb", "lo", "el", "nd", 'd', 'e', 'd']
. Ostatnie trzy elementy to postacie.«
jest wektoryzującym, dynamicznym minimum, więc daje['b', 'l', 'e', 'd', 'd', 'e', 'd']
.œ-"
usuwa dokładnie jedno wystąpienie n- tego znaku w drugiej tablicy z n- tego ciągu / znaku w pierwszej tablicy, uzyskując wynik["b", "o", "l", "n", "", "", ""]
.œ-
to wielosetowy atom odejmujący , a szybkie"
powoduje, że jest on wektoryzowany.Po wydrukowaniu oznacza to po prostu boln .
źródło
PHP> = 7,1, 52 bajtów
PHP Sandbox Online
PHP> = 7,1, 69 bajtów
PHP Sandbox Online
PHP> = 7,1, 70 bajtów
PHP Sandbox Online
źródło
for(;$t=min(~$argv[1][$i],~$argv[2][$i++]);)echo~$t;
.Alice , 8 bajtów
Wypróbuj online!
Wyjaśnienie
Alice ma również ten operator (który nazwałam superimpose ), ale nie ogranicza on wyjścia do długości krótszego ciągu (zamiast tego dołączane są pozostałe znaki dłuższego ciągu). Ma jednak również operator do obcięcia dłuższego z dwóch ciągów do długości krótszego.
źródło
Siatkówka , 28 bajtów
Wypróbuj online!
Wyjaśnienie
{
Mówi Retina uruchomić cały program w pętli, dopóki nie uda się zmienić ciąg roboczy.O
czyni to etap sortowania, który domyślnie sortuje niepuste linie.^
Opcja odwraca wynik. W efekcie otrzymujemy odwrotny rodzaj dwóch linii, jeśli nie są one puste, umieszczając linię z większą wiodącą postacią na górze.Odrzuć puste linie, jeśli takie istnieją.
Jeśli pozostała tylko jedna linia, jedna z nich była pusta, a drugą usuwamy również, aby zatrzymać proces.
Tutaj odbywa się wiele konfiguracji. To dopasowuje (
M
) pierwszy znak w ciągu roboczym (^.
), zwraca go (!
), drukuje bez końcowego linefeed (\
), a następnie przywraca ciąg roboczy do poprzedniej wartości (*
). Innymi słowy, po prostu wypisujemy pierwszy znak łańcucha roboczego (który jest maksymalnym znakiem wiodącym) bez faktycznej zmiany łańcucha.Na koniec usuwamy pierwszy znak z każdej linii, aby następna iteracja przetworzyła następny znak.
źródło
G`.
jest to niepotrzebne, chociaż powoduje to wyświetlenie dodatkowego nowego wiersza, który możesz usunąć za pomocą^.+¶$
lub poprzedzając a\
na początku odpowiedzi.\
).C, 58 bajtów
Wypróbuj online
źródło
f(s,t)char*s,*t;{
daje taką samą długość.JavaScript (ES6),
4745 bajtówDogodnie
c>b[i]
zwraca wartość false po zakończeniub
. Edycja: Zapisano 2 bajty dzięki @ETHproductions.źródło
Galareta , 6 bajtów
Wypróbuj online!
źródło
żṢ€Ḋ€
iżṢ€ZṪ
oba zapisują bajt.Mathematica, 78 bajtów
Jest już inna odpowiedź w Mathematica . Ta odpowiedź przyjmuje dane wejściowe jako listę ciągów, więc
/@
można jej użyć#
zamiast{##}
. I możemy po prostuMap
długą nazwę funkcji na obiekcie zamiast przypisywać ją do zmiennych. (w rzeczywistości każda nazwa wbudowanego symbolu Mathematica jest używana maksymalnie raz w funkcji)źródło
Java 8,
12412011763 bajtów-4 bajty dzięki @ Khaled.K .
-3 bajty dzięki @Jakob .
Dane wejściowe to dwie tablice znaków i kończy się na znaku
ArrayIndexOutOfBoundsException
.Wyjaśnienie:
Wypróbuj tutaj.
źródło
C #,
8178 bajtówC # ma domyślny wpływ
char
naint
konwersję (ponieważ achar
jest w rzeczywistościint
pod spodem), co jest miłe i zamiast szukać najkrótszego ciągu po prostu spróbuj aż do niepowodzeniaźródło
a=>b=>
, kompilując do aFunc<string, Func<string, string>>
. Możesz usunąć nawiasy klamrowe wokół pętli for, aby zaoszczędzić 2 bajty.C# has implicit char to int conversion
jest prawdziwa, ponieważ achar
jest anint
pod spodem.sizeof(int) == 4
alesizeof(char) == 2
.MATL , 8 bajtów
Dane wejściowe to tablica komórek ciągów znaków w formacie
{'abcd' 'efg'}
Wypróbuj online!
Nawiasem mówiąc, działa to również dla więcej niż dwóch ciągów .
Wyjaśnienie
Rozważ wejście
{'blended' 'bold'}
. Stos pokazano do góry nogami, poniżej znajdują się nowsze elementy.źródło
R, 103 bajty
Kod:
Przypadki testowe:
źródło
Python 2 ,
474434 bajtów-3 bajty dzięki musicman523. -10 bajtów dzięki Blenderowi.
Pobiera dane wejściowe jako listę ciągów.
Wypróbuj online!
źródło
V ,
28, 24, 21 bajtówWypróbuj online!
Hexdump:
Trzy bajty zapisane dzięki @ nmjcman101!
Wyjaśnienie:
źródło
dG
konieczne? Czy mimo to wszystkie nowe wiersze nie są usuwaneÍî
?CJam , 12 bajtów
Dane wejściowe to lista dwóch ciągów. Program kończy pracę z błędem (po wygenerowaniu właściwego wyniku), jeśli dwa ciągi mają różne długości.
Wypróbuj online!
Wyjaśnienie
źródło
Clojure, 31 bajtów
Tak, jeśli chodzi o skład funkcji :) Zwraca sekwencję znaków zamiast ciągu, ale w Clojure działają one w ten sam sposób, z wyjątkiem drukowania lub dopasowywania wyrażeń regularnych.
Niestety
max
nie działa z postaciami.źródło
max
nie działa, alemax-key
działa.#(map(partial max-key int)% %2)
Jest to jednak dokładnie taka sama liczba bajtów.(ffirst (sort-by second ...)
.JavaScript (ES2015),
666349 bajtówWyjaśnienie:
Poprzednie wersje:
źródło
Siatkówka ,
5536 bajtówWypróbuj online! Objaśnienie: Linia zawiera prefiks, który przechowuje wynik. Podczas gdy oba ciągi wciąż mają znaki, dane wejściowe są sortowane, a wiodący znak z najwyższym punktem kodowym jest przenoszony do wyniku, podczas gdy drugi wiodący znak jest usuwany. Ostatecznie wynik jest drukowany.
źródło
Łuska , 2 bajty
Wypróbuj online!
„Ungolfed” / Wyjaśnione
Wykorzystuje to,
zip f
aby skrócić krótszą listę, tak że zawsze istnieją dwa argumentyf
, np .zip f [1,2] [3,4,5] == zip f [1,2] [3,4] == [f 1 3, f 2 4]
:źródło
Kotlin,
504137 bajtów-9 bajtów ze składnią odwołania do funkcji -4 bajtów z funkcją rozszerzenia
Jeśli s i x są w zakresie, a nie w funkcji, ta metoda ma tylko 16 bajtów
Próbny
źródło
PowerShell, 75 bajtów
Zapisz jako plik .ps1 i uruchom
Poprzednio 78 bajtów:
źródło
J, 25 bajtów
wyjaśnienie
połowa bajtów idzie na rozwiązywanie, upewniając się, że oba wejścia mają krótszą długość wejściową (chciałbym zobaczyć ulepszenie w tej części, jeśli ktoś ją ma):
<.&#
jest minimalną z dwóch długości i{."1,:
bierze tyle znaków z obu rzędów 2-rzędowej tabeli składającej się z lewego łańcucha ułożonego na prawym.Użyj czasownika Under,
&.
aby przekonwertować każdy znak na jego indeks ascii, weź maksymalnie dwie liczby, a następnie przekonwertuj z powrotem na znaki.Wypróbuj online!
źródło
[:>./&.(3&u:)<.&#$&>;
u:
był dla mnie TIL.Java 8 + Eclipse Collections,
7064 bajtówa
ib
obaMutableList<Character>
pochodzą z kolekcji Eclipse.źródło
Dodaj ++ , 8 bajtów
Wypróbuj online!
W wersjach od 0.4 do 1.11
^
wykładniki dwóch liczb lub „mnożą” dwa ciągi, w zależności od typu argumentów.źródło
Mathematica, 102 bajty
wkład
źródło
L@a~Min~L@b
oszczędza jeden bajtAPL (Dyalog) , 22 bajty
Bierze dwa (lub więcej!) Ciągi jako właściwy argument.
Wypróbuj online!
{
anonimowa funkcja, w której właściwy argument jest reprezentowany przez ⍵⎕UCS
Symbole z U nicode C haracter S i które odpowiadają⌈⌿
maksymalna wartość w każdej kolumnie⎕UCS
wskazuje kod z U nicode C haracter S i dla↑
matrified (macierz z listy ciągów)⍵
argumenty↑¨⍨
każda ograniczona do⌊/
minimum≢¨
długości⍵
argumentów}
źródło