“ ทวีคูณ” สองสตริง


29

นี้ได้รับแรงบันดาลใจจากการทำงานของฉันเพิ่งเพิ่มเข้ามาในภาษาของฉันเพิ่ม ++ ดังนั้นฉันจะส่งคำตอบสั้น ๆ ใน Add ++ แต่ฉันจะไม่ยอมรับถ้ามันชนะ (มันจะไม่ยุติธรรม)

คุณไม่เกลียดเมื่อคุณสามารถคูณจำนวน แต่ไม่ใช่สายอักขระ? ดังนั้นคุณควรแก้ไขให้ถูกต้องใช่ไหม

คุณต้องเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบที่รับสองสตริงที่ไม่ว่างเปล่าเป็นอินพุตและเอาต์พุตเวอร์ชันคูณ

คุณจะคูณสตริงได้อย่างไร ฉันจะบอกคุณ!

ในการคูณสองสตริงคุณต้องใช้สองสายและเปรียบเทียบแต่ละอักขระ อักขระที่มีจุดโค้ดสูงสุดจะถูกเพิ่มไปยังเอาต์พุต หากมีค่าเท่ากันให้เพิ่มอักขระไปยังเอาต์พุต

ไม่รับประกันว่าสายอักขระจะมีความยาวเท่ากัน หากความยาวแตกต่างกันความยาวของสตริงสุดท้ายคือความยาวของสตริงที่สั้นที่สุด อินพุตจะเป็นตัวพิมพ์เล็กเสมอและอาจมีอักขระใด ๆ ในช่วง ASCII ที่พิมพ์ได้ ( 0x20 - 0x7E) ไม่รวมตัวอักษรตัวพิมพ์ใหญ่

คุณอาจส่งออกในรูปแบบที่สมเหตุสมผลเช่นสตริงรายการ ฯลฯ มีเหตุผลจำนวนเต็มไม่ใช่วิธีที่เหมาะสมที่จะแสดงผลในการท้าทายนี้

ด้วยอินพุตhello,และworld!นี่คือวิธีการทำงาน

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,")

ดังนั้นผลลัพธ์สุดท้ายสำหรับhello,และworld!จะเป็นworlo,!

กรณีทดสอบเพิ่มเติม

(ไม่มีขั้นตอน)

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.

นี่คือสั้นที่สุดที่จะชนะ! Luok!


35
นี่คือค่าสูงสุดของสายอักขระใช่ไหม ดูเหมือนจะไม่เหมือนการคูณ
xnor

5
Nitpick: PPCG สำเร็จการศึกษาเราเพิ่งยังไม่ได้รับการออกแบบใหม่
Dennis

1
มีความเกี่ยวข้องเป็นไปได้: codegolf.stackexchange.com/questions/74809/merging-two-strings/ …
nmjcman101

คำตอบ:


53

Haskell ขนาด 11 ไบต์

zipWith max

ลองออนไลน์!

ไม่มีอะไรมากที่จะอธิบาย


7
และฉันคิดว่า Mathematica มีบิวด์อินที่แปลกประหลาด
Mr. Xcoder

@ Mr.Xcoder Mathematica มีรหัสไปรษณีย์เรียกว่า MapThread
michi7x7

2
@ Mr.Xcoder จริง ๆ แล้วzipWithไม่แปลกเกินไป มันเป็นฟังก์ชั่นดั้งเดิมที่ค่อนข้างธรรมดา แนวคิดของการ "ซิป" สองรายการเข้าด้วยกันเกิดขึ้นในหลาย ๆปัญหาและเมื่อคุณทำเช่นนั้นคุณมักจะต้องการใช้ฟังก์ชั่นบางอย่างกับรายการ 2 องค์ประกอบที่เกิดขึ้นดังนั้นส่วน "กับ"
โจนาห์


6

Perl 6 , 22 ไบต์

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

ในฐานะโบนัสจะยอมรับหลาย ๆ แบบหลาย ๆ อันไม่ใช่แค่สองแบบ


6

Japt , 16 ไบต์

ñl g îUy ®¬ñ oÃq

ทดสอบออนไลน์! รับอินพุตเป็นอาร์เรย์ของสองสตริง

ไม่มีนาทีและตัวสร้างความเสียหายสูงสุด Japt ที่นี่ แต่ก็ยังสามารถดึงคะแนนที่ค่อนข้างดีออก ...

คำอธิบาย

 ñ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

6

เยลลี่ 5 ไบต์

żœ-"«

ลองออนไลน์!

มันทำงานอย่างไร

żœ-"«  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.

ตัวอย่าง

Let ' s = ผสมและt = ตัวหนา

ż["bb", "lo", "el", "nd", 'd', 'e', 'd']อัตราผลตอบแทน องค์ประกอบสามรายการสุดท้ายคืออักขระ

«เป็น vectorizing ต่ำสุด dyadic ['b', 'l', 'e', 'd', 'd', 'e', 'd']จึงถัวเฉลี่ย

œ-"เอาตรงหนึ่งเกิดขึ้นของn THตัวละครในแถวที่สองจากn THสตริง / ["b", "o", "l", "n", "", "", ""]ตัวละครในอาร์เรย์แรกยอม œ-เป็นอะตอมการลบหลายเซ็ตและส่วนย่อ"ทำให้เวกเตอร์

เมื่อพิมพ์แล้วสิ่งนี้จะอ่านง่าย


ดังนั้นนี่คือการซิปแล้วนำความต่างของมัลติเซตของบางอย่างออกมาจากนั้นก็มีคำพูดสองเท่าที่ดีของความหมายที่ไม่แน่นอนและสุดท้ายก็คือค่าต่ำสุด ดี ... คำอธิบายได้โปรด? : D
Leo

1
ฉันได้เพิ่มตัวอย่างการทำงาน
Dennis

6

PHP> = 7.1, 52 ไบต์

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

PHP Sandbox ออนไลน์

PHP> = 7.1, 69 ไบต์

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

PHP Sandbox ออนไลน์

PHP> = 7.1, 70 ไบต์

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

PHP Sandbox ออนไลน์


1
for(;$t=min(~$argv[1][$i],~$argv[2][$i++]);)echo~$t;แข็งแรงเล่นกอล์ฟเล็กน้อย
user63956

6

อลิซ 8 ไบต์

/oI\
@m+

ลองออนไลน์!

คำอธิบาย

อลิซยังมีโอเปอเรเตอร์นี้ (ซึ่งฉันเรียกว่าการวางซ้อน ) แต่ก็ไม่ได้ จำกัด เอาท์พุทที่ความยาวของสตริงที่สั้นกว่า (แทนอักขระที่เหลือของสตริงที่ยาวกว่าจะถูกต่อท้าย) อย่างไรก็ตามมันยังมีโอเปอเรเตอร์ที่จะตัดทอนสตริงที่ยาวกว่าสองสตริงเป็นความยาวของสตริงที่สั้นกว่า

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

6

เรติน่า 28 ไบต์

{O^`
G`.
^.+$

M!\*`^.
Rm`^.

ลองออนไลน์!

คำอธิบาย

{O^`

{บอก Retina เพื่อเรียกใช้โปรแกรมทั้งหมดในวงจนกว่าจะล้มเหลวในการเปลี่ยนสตริงทำงาน Oทำให้นี่เป็นขั้นตอนการเรียงลำดับซึ่งเรียงลำดับบรรทัดที่ไม่ว่างโดยค่าเริ่มต้น ^ตัวเลือกการกลับรายการผล ดังนั้นในความเป็นจริงเราจะได้สองบรรทัดเรียงกลับกันหากมันไม่ว่างเปล่าให้วางบรรทัดด้วยอักขระนำที่ใหญ่กว่าที่ด้านบน

G`.

ทิ้งบรรทัดว่างถ้ามี

^.*$

หากเหลือเพียงหนึ่งบรรทัดบรรทัดหนึ่งว่างเปล่าและเราจะลบอีกหนึ่งบรรทัดเพื่อหยุดกระบวนการ

M!\*`^.

มีการกำหนดค่ามากมายเกิดขึ้นที่นี่ การจับคู่นี้ ( M) ตัวอักษรตัวแรกในสตริงการทำงาน ( ^.) ส่งกลับ ( !) พิมพ์โดยไม่ต้อง linefeed ต่อท้าย ( \) จากนั้นแปลงสตริงการทำงานเป็นค่าก่อนหน้า ( *) กล่าวอีกนัยหนึ่งเราพิมพ์อักขระตัวแรกของสตริงการทำงาน (ซึ่งเป็นอักขระนำหน้าสูงสุด) โดยไม่ต้องเปลี่ยนสตริงจริง

Rm`^.

สุดท้ายเราจะลบอักขระแรกออกจากแต่ละบรรทัดเพื่อให้การวนซ้ำครั้งถัดไปประมวลผลอักขระถัดไป


เมื่อคุณให้ความเห็นเกี่ยวกับคำตอบของเสาหินขนาดสูงของฉันมันเกิดขึ้นกับฉันว่าคำตอบของคำถามนี้ยาวเกินไปและบางทีฉันก็สามารถถ่ายทอดได้อย่างไม่มีประสิทธิภาพ หลังจากดูว่าข้อเสนอแนะการขนย้ายของคุณทำงานอย่างไรฉันตัดสินใจว่ามันไม่เหมาะสมสำหรับคำถามนี้หลังจากทั้งหมด จากนั้นผมก็ขึ้นมาด้วยวิธีการใหม่ที่บันทึกฉันไบต์ 19 ... แล้วเลื่อนลงไปหาคุณต้องการแล้วมากับรุ่นที่ดีกว่า ...
นีล

คุณสามารถบันทึกได้ 3 ไบต์เนื่องจากG`.ไม่มีความจำเป็นถึงแม้ว่ามันจะสร้างบรรทัดใหม่พิเศษซึ่งคุณสามารถลบได้โดยการใช้^.+¶$หรือโดยนำหน้า a \ไปยังจุดเริ่มต้นของคำตอบ
Neil

@ Neil Oh จุดดี ฉันยังสามารถใช้ล่าสุดกระทำ (ซึ่งไม่ได้อยู่ใน TIO และยังอาจจะไม่จะเป็นในขณะที่) ซึ่งผมได้ทำพิมพ์โดยไม่ต้องต่อท้าย linefeeds เริ่มต้น (ฉันสามารถแล้วยังลดลงอีก\)
Martin Ender


6

JavaScript (ES6), 47 45 ไบต์

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>

สิ่งอำนวยความสะดวกกลับเท็จที่ผ่านมาในตอนท้ายของc>b[i] bแก้ไข: บันทึก 2 ไบต์ด้วย @ETHproductions


ที่นี่ในมือถือของฉันว่ารหัสข้างต้นไม่สามารถดำเนินการได้ ในเดสก์ท็อปพีซีตัวอย่างข้างต้นที่ฉันบอกว่าสามารถใช้งานได้ แต่ไม่อนุญาตให้เปลี่ยนอินพุตสำหรับฟังก์ชั่น ... ทำไมไม่ใช้ Tio แทน
RosLuP

@RosLuP เมื่ออินพุตง่าย (2 stings ในกรณีนี้) ฉันชอบที่จะใช้ Stack Snippet ซึ่งโดยปกติจะทำให้เปลี่ยนอินพุตได้ง่ายขึ้นและเอาท์พุทอัพเดทแบบไดนามิกเช่นกัน
Neil


5

Mathematica, 78 ไบต์

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

มีคำตอบอื่นในMathematicaอยู่แล้ว คำตอบนี้รับอินพุตเป็นรายการสตริงดังนั้นจึง/@สามารถใช้#แทน{##}ได้ และเราสามารถMapใช้ชื่อฟังก์ชั่นแบบยาวบนอ็อบเจกต์แทนการกำหนดให้กับตัวแปร (อันที่จริงชื่อสัญลักษณ์ในตัวของ Mathematica แต่ละตัวจะถูกใช้อย่างมากที่สุดในฟังก์ชั่น)


5

Java 8, 124 120 117 63 ไบต์

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

-4 ไบต์ขอบคุณที่@ Khaled.K
-3 ไบต์ขอบคุณที่@Jakob

ArrayIndexOutOfBoundsExceptionปัจจัยการผลิตเป็นสองตัวละครอาร์เรย์และจะหยุดกับ

คำอธิบาย:

ลองที่นี่

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

4

C #, 81 78 ไบต์

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

C # มีนัยยะcharต่อintการแปลง (เพราะcharจริงๆแล้วเป็นintอันเดอร์ภายใต้) ซึ่งดีและแทนที่จะมองหาสตริงที่สั้นที่สุดก็ลองจนกว่าจะล้มเหลว


1
เอาชนะฉันไป! แต่ประหยัดหนึ่งไบต์กับ currying โดยการรวบรวมไปa=>b=> Func<string, Func<string, string>>คุณสามารถลบวงเล็บปีกกาสำหรับ for loop เพื่อบันทึก 2 ไบต์
TheLethalCoder

หมายเหตุด้านข้าง: C# has implicit char to int conversionเป็นจริงเพราะ a charอยู่intข้างใต้
TheLethalCoder

@TheLethalCoder: ไม่มาก แต่sizeof(int) == 4 sizeof(char) == 2
เรียกซ้ำ

4

MATL , 8 ไบต์

otX>cwA)

อินพุตเป็นอาร์เรย์ของสตริงในเซลล์ในรูปแบบ {'abcd' 'efg'}

ลองออนไลน์!

เช่นกันนี้ยังใช้งานได้นานกว่าสองสาย

คำอธิบาย

{'blended' 'bold'}พิจารณาการป้อนข้อมูล สแต็กจะแสดงกลับหัวกลับด้านพร้อมองค์ประกอบเพิ่มเติมด้านล่าง

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'

4

R, 103 ไบต์

รหัส:

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

กรณีทดสอบ:

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

ฮะ? แม็กซ์ทำงานแบบนั้นเหรอ? TIL
JAD



4

V , 28, 24 , 21 ไบต์

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

ลองออนไลน์!

hexdump:

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

บันทึกสามไบต์ด้วย @ nmjcman101!

คำอธิบาย:

Í             " 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

คือdGจำเป็น? ขึ้นบรรทัดใหม่ทั้งหมดไม่ได้ถูกลบด้วยÍîanyways ใช่ไหม
nmjcman101

@ nmjcman101 มันเป็นสิ่งจำเป็นในกรณีที่สตริงมีความยาวแตกต่างกัน
DJMcMayhem

3

CJam , 12 ไบต์

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

อินพุตคือรายการของสองสตริง โปรแกรมออกจากพร้อมข้อผิดพลาด (หลังจากสร้างเอาต์พุตที่ถูกต้อง) หากทั้งสองสตริงมีความยาวต่างกัน

ลองออนไลน์!

คำอธิบาย

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

3

Clojure, 31 ไบต์

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

Yay สำหรับองค์ประกอบของฟังก์ชัน :) ส่งคืนลำดับของอักขระแทนสตริง แต่ส่วนใหญ่ทำงานในลักษณะเดียวกันใน Clojure ยกเว้นเมื่อพิมพ์หรือจับคู่ regex

น่าเศร้าที่ใช้maxไม่ได้กับตัวละคร


maxไม่ทำงาน แต่ทำงานmax-keyได้ #(map(partial max-key int)% %2)มันเป็นจำนวนไบต์เดียวกันที่แน่นอน
madstap

โอ้ฉันลืมไปแล้ว ง่ายกว่า(ffirst (sort-by second ...)มาก ๆ
NikoNyrh

3

Javascript (ES2015), 66 63 49 ไบต์

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

คำอธิบาย:

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

รุ่นก่อนหน้า:

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

ยินดีต้อนรับสู่ PPCG! โพสต์แรกที่ดี!
Rɪᴋᴇʀ

3

เรติน่า , 55 36 ไบต์

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

ลองออนไลน์! คำอธิบาย: บรรทัดจะนำหน้าเพื่อเก็บผลลัพธ์ ในขณะที่สตริงทั้งสองยังคงมีอักขระที่เหลืออินพุตจะถูกจัดเรียงและอักขระนำที่มีรหัสจุดสูงสุดจะถูกย้ายไปยังผลลัพธ์ในขณะที่อักขระนำอื่น ๆ จะถูกลบ ในที่สุดผลการพิมพ์


3

Husk , 2 ไบต์

z▲

ลองออนไลน์!

"Ungolfed" / อธิบาย

ใช้ประโยชน์จากการzip fตัดทอนรายการที่สั้นกว่าเช่นที่มีสองอาร์กิวเมนต์เสมอfเช่น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"

3

Kotlin, 50 41 37 ไบต์

-9 ไบต์พร้อมกับการอ้างอิงฟังก์ชันไวยากรณ์ -4 ไบต์พร้อมฟังก์ชันส่วนขยาย

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

ถ้า s และ x อยู่ในขอบเขตและไม่ได้อยู่ในฟังก์ชันเมธอดนี้มีขนาดเพียง 16 ไบต์

s.zip(x,::maxOf)

การสาธิต


นี่คือลิงค์ try.kotlinlang.org: try.kotlinlang.org/#/UserProjects/ulm4nriigeio44jq1sdqer9sg2/ …
Kirill Rakhman

2

PowerShell ขนาด 75 ไบต์

-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

บันทึกเป็นไฟล์. ps1 และเรียกใช้

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

ก่อนหน้านี้ 78 ไบต์:

$i=0;-join$(while(($a=$args[0][$i])-and($b=$args[1][$i++])){($a,$b)[$b-gt$a]})

2

J, 25 ไบต์

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

คำอธิบาย

ครึ่งไบต์ไปที่การแก้ปัญหาเพื่อให้มั่นใจว่าอินพุตทั้งสองมีความยาวอินพุตที่สั้นกว่า (ชอบที่จะเห็นการปรับปรุงในส่วนนี้หากใครมี)

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

<.&#คือความยาวต่ำสุดของสองความยาวและ{."1,:ใช้อักขระจำนวนมากจากทั้งสองแถวของตาราง 2 แถวที่ประกอบด้วยสตริงซ้ายซ้อนกันอยู่ด้านบนของด้านขวา

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

ใช้กริยาภายใต้&.เพื่อแปลงอักขระแต่ละตัวให้เป็นดัชนี ascii ใช้จำนวนสูงสุดของตัวเลขทั้งสองแล้วแปลงกลับเป็นอักขระ

ลองออนไลน์!


1
21 ไบต์[:>./&.(3&u:)<.&#$&>;
ไมล์

@miles การผสมผสานอย่างลงตัวของรถไฟและการรวมกัน - ฉันจำเป็นต้องใช้กลอุบายที่มากขึ้นเพื่อหลีกเลี่ยงการล้อเลียน ยังu:เป็น TIL สำหรับฉัน
โยนาห์


2

เพิ่ม ++ , 8 ไบต์

D,f,@@,^

ลองออนไลน์!

ในเวอร์ชัน 0.4 ถึง 1.11 ^เลขชี้กำลังสองตัวเลขหรือ "ทวีคูณ" สองสตริงขึ้นอยู่กับประเภทของอาร์กิวเมนต์


นี่เป็นสิ่งที่ขัดกับเจตนารมณ์ของ code-golf เพื่อโพสต์คำถามที่รู้ว่าภาษาของคุณเอง (ซึ่งไม่มีใครใช้) มีการติดตั้งในตัวซึ่งทำให้มันผูกขาด โชคดีที่ความรัดกุมของ Jelly ชนะอีกครั้ง
FlipTack

12
@FlipTack คุณอ่านคำถามแรกหรือไม่ แม้ว่านี่จะเป็น 0 ไบต์ แต่มันก็ไม่ชนะ
caird coinheringaahing

1
@StephenS ดูเหมือนว่าคุณลักษณะนี้จะเป็นแรงบันดาลใจให้กับความท้าทายไม่ใช่อย่างอื่น ป้ายกำกับที่ไม่แข่งขันจะถูกสงวนไว้สำหรับคำตอบที่ใช้ภาษาหรือฟีเจอร์ที่นำมาใช้หลังจากการท้าทายเท่านั้น
Martin Ender

1

Mathematica, 102 ไบต์

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


อินพุต

["แบบผสมผสาน", "ตัวหนา"]


L@a~Min~L@bบันทึกหนึ่งไบต์
Greg Martin

1

APL (Dyalog) 22 ไบต์

รับค่าสตริงสอง (หรือมากกว่า!) เป็นอาร์กิวเมนต์ที่ถูกต้อง

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

ลองออนไลน์!

{ ฟังก์ชั่นไม่ระบุชื่อที่อาร์กิวเมนต์ที่ถูกต้องจะถูกแทนด้วย

⎕UCS สัญลักษณ์จากU nicode C haracter S et ซึ่งสอดคล้องกับ

⌈⌿ ค่าสูงสุดในแต่ละคอลัมน์ของ

⎕UCS จุดรหัสจากU nicode C haracter S et สำหรับ

 matrified (เมทริกซ์จากรายการสตริง)

 ข้อโต้แย้ง

↑¨⍨ แต่ละต่อยอดที่

⌊/ ขั้นต่ำของ

≢¨ ความยาว

 ของข้อโต้แย้ง

}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.