„Pomnóż” dwa ciągi

29

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 - 0x7Episane 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 więc wygrywa najkrótszy kod! Luok!

Cairney Coheringaahing
źródło
35
To jest maksimum elementarne ciągów, prawda? To nie wygląda na pomnożenie.
xnor
5
Nitpick: PPCG ukończyło studia, po prostu nie dostaliśmy jeszcze nowego projektu.
Dennis

Odpowiedzi:

53

Haskell, 11 bajtów

zipWith max

Wypróbuj online!

Nic wielkiego do wyjaśnienia.

nimi
źródło
7
I myślałem, że Mathematica ma dziwne wbudowane
funkcje
@ Mr.Xcoder Mathematica ma zipWith, nazywa się MapThread
michi7x7
2
@ Mr.Xcoder nie zipWithjest 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”.
Jonasz
8

05AB1E , 4 bajty

øΣà?

Wykorzystuje kodowanie 05AB1E . Wypróbuj online!

Adnan
źródło
Czuję, że ø€àpowinienem działać, ale nie działa.
Magic Octopus Urn
Wygląda bardziej na pytanie niż odpowiedź lol
Stan Strum
6

Perl 6 , 22 bajtów

{[~] [Zmax] @_».comb}

Jako bonus akceptuje dowolną liczbę multipleksów, nie tylko dwie.

Sean
źródło
6

Japt , 16 bajtów

ñl g îUy ®¬ñ oÃq

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

 ñl g îUy ®   ¬ ñ oà q
Uñl g îUy mZ{Zq ñ o} q
                        // Implicit: U = input array     ["object", "king"]
       Uy               // Transpose the strings of U.   ["ok", "bi", "jn", "eg", "c ", "t "]
          mZ{      }    // Map each string Z to
             Zq ñ o     //   the larger of the two chars. (Literally Z.split().sort().pop())
                        //                               ["o", "i", "n", "g", "c", "t"]
                     q  // Join into a single string.    "oingct"
Uñl g                   // Sort the two input strings by length and take the shorter.
      î                 // Trim the previous result to this length.
                        //            "king"î"oingct" -> "oing"
                        // Implicit: output result of last expression
ETHprodukcje
źródło
6

Galaretka , 5 bajtów

żœ-"«

Wypróbuj online!

Jak to działa

żœ-"«  Main link. Arguemts: s, t (strings)

ż      Zipwith; form all pairs of corresponding characters from s and t.
       If one of the strings is longer than the other, its extra characters are 
       appended to the array of pairs.
    «  Dyadic minimum; get all minima of corresponding characters.
       This yields the characters themselves for unmatched characters.
 œ-"   Zipwith multiset subtraction; remove a single occurrence of the minimum from
       each character pair/singleton.
       This yields the maximum for pairs, but an empty string for singletons.

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 .

Dennis
źródło
Tak więc, to jest spakowanie, następnie biorąc wielowątkową różnicę czegoś, wtedy są jakieś fajne podwójne cytaty o tajemniczym znaczeniu, a na końcu minimum. Fajnie ... Wyjaśnienie, proszę? : D
Leo
1
Dodałem działający przykład.
Dennis
6

PHP> = 7,1, 52 bajtów

for(;$t=min(~$argv[1][$i],~$argv[2][$i++]);)echo~$t;

PHP Sandbox Online

PHP> = 7,1, 69 bajtów

for([,$a,$b]=$argv;(~$c=$a[$i])&&~$d=$b[$i++];)$r.=max($c,$d);;echo$r;

PHP Sandbox Online

PHP> = 7,1, 70 bajtów

for([,$a,$b]=$argv;(~$c=$a[$i])&&~$d=$b[$i++];)$r.=$c>$d?$c:$d;echo$r;

PHP Sandbox Online

Jörg Hülsermann
źródło
1
Nieco golfed: for(;$t=min(~$argv[1][$i],~$argv[2][$i++]);)echo~$t;.
user63956,
6

Alice , 8 bajtów

/oI\
@m+

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.

/   Reflect to SE, switch to Ordinal. The IP bounces diagonally up and down
    through the code.
m   Truncate, doesn't really do anything right now.
I   Read a line of input.
    The IP bounces off the bottom right corner and turns around.
I   Read another line of input.
m   Truncate the longer of the two input lines to the length of the shorter.
+   Superimpose: compute their elementwise maximum. 
o   Output the result.
@   Terminate the program.
Martin Ender
źródło
6

Siatkówka , 28 bajtów

{O^`
G`.
^.+$

M!\*`^.
Rm`^.

Wypróbuj online!

Wyjaśnienie

{O^`

{Mówi Retina uruchomić cały program w pętli, dopóki nie uda się zmienić ciąg roboczy. Oczyni 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.

G`.

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.

M!\*`^.

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.

Rm`^.

Na koniec usuwamy pierwszy znak z każdej linii, aby następna iteracja przetworzyła następny znak.

Martin Ender
źródło
Kiedy skomentowałeś, jak wysokie są monolity, przyszło mi do głowy, że moja odpowiedź na to pytanie była zdecydowanie za długa i być może transponowałem nieefektywnie. Po przyjrzeniu się, jak działała Twoja sugestia transpozycji, zdecydowałem, że w końcu to pytanie nie jest odpowiednie. Potem wymyśliłem nowe podejście, które pozwoliło mi zaoszczędzić 19 bajtów ... a następnie przewinąłem w dół, by znaleźć lepszą wersję ...
Neil
Możesz zapisać 3 bajty, ponieważ 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.
Neil
@Neil Oh dobra uwaga. Mógłbym również użyć najnowszego zatwierdzenia (którego jeszcze nie ma w TIO i prawdopodobnie nie będzie przez jakiś czas), w którym ustawiłem drukowanie bez domyślnego podawania linii (mógłbym również upuścić drugi \).
Martin Ender
6

C, 58 bajtów

f(char*s,char*t){putchar(*s>*t?*s:*t);*++s&&*++t&&f(s,t);}

Wypróbuj online

  • -8 bajtów @Steadybox
Khaled.K
źródło
Darn, f(s,t)char*s,*t;{daje taką samą długość.
aschepler
6

JavaScript (ES6), 47 45 bajtów

f=
(a,b)=>a.replace(/./g,(c,i)=>c>b[i]?c:[b[i]])
<div oninput=o.textContent=f(a.value,b.value)><input id=a><input id=b><pre id=o>

Dogodnie c>b[i]zwraca wartość false po zakończeniu b. Edycja: Zapisano 2 bajty dzięki @ETHproductions.

Neil
źródło
Tutaj w moim telefonie komórkowym powyższego kodu nie można wykonać. Na pulpicie komputera powyższe przykłady, jak mówię, mogą działać poprawnie, ale nie pozwalają na zmianę danych wejściowych funkcji ... Dlaczego zamiast tego nie używać Tio?
RosLuP,
@RosLuP Gdy dane wejściowe są proste (w tym przypadku 2 użądlenia), wolę użyć fragmentu stosu, który normalnie ułatwia zmianę danych wejściowych, a dane wyjściowe są również dynamicznie aktualizowane.
Neil,
5

Mathematica, 78 bajtów

FromCharacterCode[Max/@Thread[#~Take~Min[Length/@x]&/@(x=ToCharacterCode@#)]]&

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 prostu Mapdł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)

użytkownik202729
źródło
5

Java 8, 124 120 117 63 bajtów

a->b->{for(int i=0;;i++)System.out.print(a[i]>b[i]?a[i]:b[i]);}

-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.

a->b->{                       // Method with two char-array parameters and no return-type
  for(int i=0;;i++)           //  Loop `i` from 0 up indefinitely (until an error is given)
    System.out.print(         //   Print:
      a[i]>b[i]?a[i]:b[i]);}  //    The character that has the highest unicode value
Kevin Cruijssen
źródło
4

C #, 81 78 bajtów

a=>b=>{var s="";try{for(int q=0;;q++)s+=a[q]>b[q]?a[q]:b[q];}catch{}return s;}

C # ma domyślny wpływ charna intkonwersję (ponieważ a charjest w rzeczywistości intpod spodem), co jest miłe i zamiast szukać najkrótszego ciągu po prostu spróbuj aż do niepowodzenia

LiefdeWen
źródło
1
Pokonaj mnie do tego! Zachowaj jednak jeden bajt z currya=>b=> , kompilując do a Func<string, Func<string, string>>. Możesz usunąć nawiasy klamrowe wokół pętli for, aby zaoszczędzić 2 bajty.
TheLethalCoder,
Uwaga dodatkowa: C# has implicit char to int conversionjest prawdziwa, ponieważ a charjest anint pod spodem.
TheLethalCoder,
@TheLethalCoder: Niezupełnie. sizeof(int) == 4ale sizeof(char) == 2.
rekurencyjny
4

MATL , 8 bajtów

otX>cwA)

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.

o    % Implicitly input a cell array of strongs. Convert to numeric
     % vector of code points. This right-pads with zeros if needed
     %   STACK: [98 108 101 110 100 101 100;
                 98 111 108 100   0   0   0]
tX>  % Duplicate. Maximum of each column
     %   STACK: [98 108 101 110 100 101 100;
                 98 111 108 100   0   0   0],
                [98 111 108 110 100 101 100]
c    % Convert to char
     %   STACK: [98 108 101 110 100 101 100;
                 98 111 108 100   0   0   0],
                'bolnded'
w    % Swap
     %   STACK: 'bolnded'
                [98 108 101 110 100 101 100;
                 98 111 108 100   0   0   0]
A    % All: gives true (shown as 1) for columns containing only nonzeros
     %   STACK: 'bolnded'
                [1 1 1 1 0 0 0]
)    % Use as logical index (mask). Implicitly display
     %   STACK: 'boln'
Luis Mendo
źródło
4

R, 103 bajty

Kod:

n=min(sapply(y<-strsplit(scan(,"",sep="\n"),""),length));cat(mapply(max,el(y)[1:n],y[[2]][1:n]),sep="")

Przypadki testowe:

> n=min(sapply(y<-strsplit(scan(,"",sep="\n"),""),length));cat(mapply(max,el(y)[1:n],y[[2]][1:n]),sep="")
1: programming puzzles & code golf!?
2: not yet graduated, needs a rehaul
3: 
Read 2 items
prtgretmirgduuzzlesneedsde rolful
> x <- scan(,"",sep=NULL)
1: asd asd 
3: 
Read 2 items
> n=min(sapply(y<-strsplit(scan(,"",sep="\n"),""),length));cat(mapply(max,el(y)[1:n],y[[2]][1:n]),sep="")
1: king
2: object
3: 
Read 2 items
oing
> n=min(sapply(y<-strsplit(scan(,"",sep="\n"),""),length));cat(mapply(max,el(y)[1:n],y[[2]][1:n]),sep="")
1: lab0ur win.
2: the "super bowl"
3: 
Read 2 items
the0usuwir.
djhurio
źródło
Co? Max tak działa? TIL
JAD
1
79 bajtów!
Giuseppe,
4

Python 2 , 47 44 34 bajtów

-3 bajty dzięki musicman523. -10 bajtów dzięki Blenderowi.

Pobiera dane wejściowe jako listę ciągów.

lambda a:''.join(map(max,zip(*a)))

Wypróbuj online!

całkowicie ludzki
źródło
4

V , 28, 24 , 21 bajtów

Í./&ò
dd{JdêHPÎúúx
Íî

Wypróbuj online!

Hexdump:

00000000: cd2e 2f26 f20a 6464 7b4a 64ea 4850 cefa  ../&..dd{Jd.HP..
00000010: fa78 0acd ee                             .x...

Trzy bajty zapisane dzięki @ nmjcman101!

Wyjaśnienie:

Í             " Globally substitute:
 .            "   Any character
  /           " With:
   &          "   That character
    ò         "   And a newline
dd            " Delete this line
  {           " Move to the first empty line
   J          " Delete this line
    dê        " Columnwise delete the second word
      HP      " Move to the first line, and paste the column we just deleted
        Î     " On every line:
         úú   "   Sort the line by ASCII value
           x  "   And delete the first character
Í             " Remove all:
 î            "   Newlines
DJMcMayhem
źródło
Czy to dGkonieczne? Czy mimo to wszystkie nowe wiersze nie są usuwane Íî?
nmjcman101
@ nmjcman101 Jest potrzebny, jeśli łańcuchy mają różne długości.
DJMcMayhem
3

CJam , 12 bajtów

q~z{1/~e>o}%

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

q~              e# Read input and evaluate
  z             e# Zip: list of strings of length 2, or 1 if one string is shorter
   {      }%    e# Map this block over list
    1/          e# Split the string into array of (1 or 2) chars
      ~         e# Dump the chars onto the stack
       e>       e# Maximum of two chars. Error if there is only one char
         o      e# Output immediately, in case the program will error
Luis Mendo
źródło
3

Clojure, 31 bajtów

#(map(comp last sort list)% %2)

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 maxnie działa z postaciami.

NikoNyrh
źródło
maxnie działa, ale max-keydziała. #(map(partial max-key int)% %2)Jest to jednak dokładnie taka sama liczba bajtów.
madstap
Och, spoko, zapomniałem o tym. O wiele prostsze niż na przykład (ffirst (sort-by second ...).
NikoNyrh
3

JavaScript (ES2015), 66 63 49 bajtów

a=>b=>[...a].map((c,i)=>c>b[i]?c:b[i]||'').join``

Wyjaśnienie:

a=>b=>                       // Function with two string parameters
  [...a]                     // Split a into array of characters
    .map((c, i) =>           // Iterate over array
      c>b[i] ? c : b[i]||'') //   Use the character with the larger unicode value until the end of the larger string
    .join``                  // Join the array into a string

Poprzednie wersje:

//ES2015
a=>b=>[...a].map((c,i)=>c>b[i]?c:b[i]).slice(0,b.length).join``    //63
a=>b=>a.split``.map((c,i)=>c>b[i]?c:b[i]).slice(0,b.length).join`` //66
a=>b=>a.split``.map((c,i)=>c>b[i]?c:b[i]).slice(0,Math.min(a.length,b.length)).join``   //85
a=>b=>{for(i=-1,c='';++i<Math.min(a.length,b.length);)c+=a[i]>b[i]?a[i]:b[i];return c}  //86
a=>b=>{for(i=-1,c='';++i<Math.min(a.length,b.length);)c+=a[d='charCodeAt'](i)>b[d](i)?a[i]:b[i];return c}   //105
a=>b=>a.split``.map((c,i)=>c[d='charCodeAt']()>b[d](i)?c:b[i]).slice(0,Math.min(a.length,b.length)).join``  //106

//With array comprehensions
a=>b=>[for(i of a.split``.map((c,i)=>c>b[i]?c:b[i]))i].slice(0,b.length).join``                             //79
a=>b=>[for(i of a.split``.map((c,i)=>c>b[i]?c:b[i]))i].slice(0,Math.min(a.length,b.length)).join``          //98
a=>b=>[for(i of ' '.repeat(Math.min(a.length,b.length)).split``.map((_,i)=>a[i]>b[i]?a[i]:b[i]))i].join``   //105
a=>b=>[for(i of Array.apply(0,Array(Math.min(a.length,b.length))).map((_,i)=>a[i]>b[i]?a[i]:b[i]))i].join`` //107
a=>b=>[for(i of a.split``.map((c,i)=>c[d='charCodeAt']()>b[d](i)?c:b[i]))i].slice(0,Math.min(a.length,b.length)).join``        //119
a=>b=>[for(i of ' '.repeat(Math.min(a.length,b.length)).split``.map((_,i)=>a[d='charCodeAt'](i)>b[d](i)?a[i]:b[i]))i].join``   //124
a=>b=>[for(i of Array.apply(0,Array(Math.min(a.length,b.length))).map((_,i)=>a[d='charCodeAt'](i)>b[d](i)?a[i]:b[i]))i].join`` //127
andrewarchi
źródło
Witamy w PPCG! Miły pierwszy post!
Rɪᴋᴇʀ
3

Siatkówka , 55 36 bajtów

^
¶
{O`¶.*
}`¶.(.*)¶(.)
$2¶$1¶
1!`.*

Wypró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.

Neil
źródło
3

Łuska , 2 bajty

z▲

Wypróbuj online!

„Ungolfed” / Wyjaśnione

Wykorzystuje to, zip faby skrócić krótszą listę, tak że zawsze istnieją dwa argumenty f, np . zip f [1,2] [3,4,5] == zip f [1,2] [3,4] == [f 1 3, f 2 4]:

z   -- zip the implicit lists A,B with  - e.g. "ab" "bcd" (lists of characters)
 ▲  -- maximum                          -      [max 'a' 'b', max 'b' 'c']
    -- implicitly print the result      -      "bc"
ბიმო
źródło
3

Kotlin, 50 41 37 bajtów

-9 bajtów ze składnią odwołania do funkcji -4 bajtów z funkcją rozszerzenia

fun String.x(o:String)=zip(o,::maxOf)

Jeśli s i x są w zakresie, a nie w funkcji, ta metoda ma tylko 16 bajtów

s.zip(x,::maxOf)

Próbny

Redrield
źródło
Oto link try.kotlinlang.org: try.kotlinlang.org
Kirill Rakhman
2

PowerShell, 75 bajtów

-join(1..(($a,$b=$args)|sort l*)[0].length|%{(,$a[$_-1],$b[$_-1]|sort)[1]})
#            ^input array unpack
#       ^string index generation offset by 1
#                         ^sort by length property, so output length matches shorter input
#                                           ^loop over indices
#                                       max of the two characters^
# ^output join

Zapisz jako plik .ps1 i uruchom

PS C:\> .\Get-MultipliedString.ps1 'hello,' 'world!'
worlo,

Poprzednio 78 bajtów:

$i=0;-join$(while(($a=$args[0][$i])-and($b=$args[1][$i++])){($a,$b)[$b-gt$a]})
TessellatingHeckler
źródło
2

J, 25 bajtów

>./&.(a.&i.)@(<.&#{."1,:)

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):

(<.&#{."1,:)

<.&#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.

>./&.(a.&i.)

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!

Jonasz
źródło
1
21 bajtów[:>./&.(3&u:)<.&#$&>;
mile
@miles, eleganckie połączenie pociągu i koniunkcji - potrzebuję więcej tej sztuczki, aby uniknąć parens. też u:był dla mnie TIL.
Jonasz
2

Java 8 + Eclipse Collections, 70 64 bajtów

a->b->a.zip(b).collect(p->(char)Math.max(p.getOne(),p.getTwo()))

ai boba MutableList<Character>pochodzą z kolekcji Eclipse.

Nathan Merrill
źródło
2

Dodaj ++ , 8 bajtów

D,f,@@,^

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.

Cairney Coheringaahing
źródło
Jest to raczej sprzeczne z duchem golfa kodu, aby zadać pytanie, wiedząc, że twój własny język (którego nikt inny nie używa) ma wbudowaną funkcję, która daje mu monopol. Na szczęście zwięzłość Jelly znów wygrywa.
FlipTack,
12
@FlipTack czy przeczytałeś pierwszą linię pytania? Nawet gdyby było to 0 bajtów, nie wygrałoby.
caird coinheringaahing
1
@StephenS Wygląda na to, że ta funkcja zainspirowała to wyzwanie, a nie na odwrót. Niekonkurencyjna etykieta jest zarezerwowana dla odpowiedzi, które wykorzystują języki lub funkcje, które zostały zaimplementowane dopiero po wyzwaniu.
Martin Ender
1

Mathematica, 102 bajty

T=ToCharacterCode;L=Length;(a=T@#;b=T@#2;FromCharacterCode@Table[Max[a[[i]],b[[i]]],{i,L@a~Min~L@b}])&


wkład

[„mieszane”, „pogrubione”]

J42161217
źródło
L@a~Min~L@boszczędza jeden bajt
Greg Martin
1

APL (Dyalog) , 22 bajty

Bierze dwa (lub więcej!) Ciągi jako właściwy argument.

{⎕UCS⌈⌿⎕UCS↑⍵↑¨⍨⌊/≢¨⍵}

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

}

Adám
źródło