คำนำหน้าทั่วไปที่ยาวที่สุดของ 2 สาย


30

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

Test Case 1:

"global" , "glossary"
"glo"


Test Case 2:

"department" , "depart"
"depart"

Test Case 3:

"glove", "dove"
""

1
"aca", "aba"กรณีทดสอบที่ดีอีกประการหนึ่งคือ
Morgan Thrapp

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

2
เราสามารถสมมติว่าข้อมูลเข้านั้นไม่มีบรรทัดใหม่ได้หรือไม่ อินพุตใดที่จะมีอักขระ
Downgoat

5
หมายเหตุทั่วไป: ผู้ใช้โซลูชันที่ใช้ regex ไม่ควรคัดลอกคำตอบ regex ของผู้อื่นโดยไม่ต้องทดสอบด้วยตนเอง สิ่งนี้ไม่สามารถใช้ได้กับเอนจิ้น regex ทั้งหมด โดยเฉพาะอย่างยิ่งมันให้คำตอบที่แตกต่างกัน (ทั้งไม่ถูกต้อง) ใน nvi และ vim
Random832

1
ตัวอย่างทั้งหมดที่ให้มาเป็นตัวพิมพ์เล็ก แต่เราจำเป็นต้องกังวลเกี่ยวกับความไวของตัวพิมพ์เล็กหรือไม่ ตัวอย่างเช่นควรglobalและGLOSSARYส่งคืนgloหรือ''?
AdmBorkBork

คำตอบ:


22

Python 3, 54 ไบต์

ขอบคุณ Python ที่มีฟังก์ชั่นในตัวสำหรับงานนี้! : D

import os;print(os.path.commonprefix(input().split()))

glossary globalจะเข้าเป็นสองคำคั่นด้วยช่องว่างเช่น


21

Haskell, 29 ไบต์

(c:x)%(d:y)|c==d=c:x%y;_%_=""

การใช้งาน:

>> "global"%"glossary"
"glo"

กำหนดฟังก์ชันไบนารีซ้ำ%โดยการจับคู่รูปแบบ ในสองสตริงที่มีตัวอักษรตัวแรกเท่ากันใช้ตัวอักษรตัวแรกและเติมเข้าไปในฟังก์ชันของส่วนที่เหลือของสตริง ในสิ่งอื่นใดให้สตริงที่ว่างเปล่า


11

Pyth, 8 7 ไบต์

e@F._MQ

ขอบคุณ @isaacg สำหรับการปิด 1 ไบต์

"abc", "acc"จะเข้าที่ยกมาและคั่นด้วยเครื่องหมายจุลภาคเช่น สิ่งนี้ออกจากข้อผิดพลาด (แต่ปล่อยให้ stdout ว่างเปล่า) เมื่อผลลัพธ์คือสตริงว่าง หากไม่สามารถยอมรับได้ให้เพิ่ม 2 ไบต์#e@F._MQq

ชุดทดสอบ

คำอธิบาย

e@F._MQ        : implicit Q = eval(input)
   ._MQ        : Map the prefix operator onto both inputs
 @F            : Fold the setwise intersection operator over those lists
e              : Take the last such element, the prefixes are always made from shortest
               : to longest, so this always gives the longest matching prefix

e|@F._M.z]kเพื่อให้ผลสตริงที่ว่างเปล่าไม่มีข้อผิดพลาด:
kirbyfan64sos

@ kirbyfan64sos ฉันเชื่อว่าสิ่งที่ฉันใส่เกี่ยวกับมัน#...qเป็นหนึ่งไบต์น้อยกว่านั้นฉันจะแก้ไขในรหัสเต็มฉันเดาว่าจะสับสน
FryAmTheEggman

1
ป้อนข้อมูลในแบบฟอร์ม"abc", "def"และคุณสามารถใช้Qแทน.z
isaacg

10

C ++, 101 100 99 ไบต์

#include<iostream>
int i;main(){std::string s,t;std::cin>>s>>t;for(;s[i]==t[i];std::cout<<s[i++]);}

อ่านสองสตริงจากstdinพิมพ์อักขระที่ตำแหน่งปัจจุบันจากหนึ่งในสตริงในขณะที่อักขระที่ตำแหน่งปัจจุบันเท่ากับอักขระที่ตำแหน่งเดียวกันในสตริงอื่น

ขอบคุณZeregesสำหรับการบันทึกหนึ่งไบต์


4
นั่นคือการใช้งานที่สวยงามและน่ากลัวของforคำสั่ง ...
Joshpbarron

ลูปจะล้มเหลวในการยุติหากสตริงนั้นเท่ากัน
Jon Trauntvein

2
จะไม่ทำงานกับสตริงที่มีช่องว่าง คุณสามารถบันทึกหนึ่งไบต์โดยการทำint iในพื้นที่ทั่วโลก (เพื่อที่ว่ามันจะเป็น 0 เริ่มต้น)
Zereges

@ JonTrauntvein ฉันคิดว่ากรณีนี้คือ UB (?) มันใช้งานได้กับฉัน (gcc-5.1)
sweerpotato

9

Haskell, 38 ไบต์

((map fst.fst.span(uncurry(==))).).zip

ตัวอย่างการใช้งาน: ->( ((map fst.fst.span(uncurry(==))).).zip ) "global" "glossary""glo"

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


9

CJam, 12 11 9 ไบต์

l_q.-{}#<

<string>\n<string>\nนี้อ่านสตริงในสองสายแยกจากกันพร้อมระบบปฏิบัติการยูนิกซ์สไตล์จบบรรทัดคือ,

ขอบคุณ @ MartinBüttnerสำหรับ -1 ไบต์และ @ jimmy23013 สำหรับ -2 ไบต์!

ลองใช้ออนไลน์ในล่าม CJam

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

l_         e# Read a line (w/o trailing LF) from STDIN and push a copy.
  q        e# Read another line from STDIN (with trailing LF).
           e# The trailing linefeed makes sure that the lines are not equal.
   .-      e# Perform vectorized character subtraction. This yields 0 for equal
           e# characters, a non-zero value for two different characters, and the
           e# characters themselves (truthy) for the tail of the longer string.
     {}#   e# Find the index of the first truthy element.
        <  e# Keep that many characters from the first string.

Darn ฉันไม่อยากจะเชื่อเลยว่าคำตอบแรกของฉันอยู่ใกล้มาก!
geokavel

1
l_q.-คุณสามารถโกงบิตโดยสมมติให้มีการขึ้นบรรทัดใหม่และการใช้งาน
jimmy23013

@ jimmy23013 นั่นเป็นมาตรฐานสำหรับการป้อนข้อมูลในระบบปฏิบัติการ Unix-like ดังนั้นทำไมไม่? ขอบคุณ!
เดนนิส

8

APL, 13

{⊃↓K/⍨=⌿K←↑⍵}

นี่คือฟังก์ชั่นที่รับอาร์เรย์ของสองสายและส่งคืนคำนำหน้า:

      {⊃↓K/⍨=⌿K←↑⍵}'glossary' 'global'
glo
      {⊃↓K/⍨=⌿K←↑⍵}'department' 'depart'
depart

มันยุติธรรมหรือไม่ที่จะบอกว่าตัวอักษร APL เป็นตัวอักษรของตัวอักษรขนาดไบท์? หรือว่าเป็นมาตรฐานการปฏิบัติแถวนี้
ชาวฟิลิปปินส์

9
@Filipq คำตอบที่นี่ใช้การเข้ารหัสที่เป็นธรรมชาติที่สุดกับภาษา APL มีหน้ารหัสของตัวเองซึ่งตัวละครแต่ละตัวเป็นไบต์เดียว
Alex A.

7

AppleScript, 215 ไบต์

และฉันพยายามอย่างหนัก ... ; (

ตั้งค่า x เป็นข้อความโต้ตอบตอบกลับ "" คำตอบเริ่มต้น "")
ตั้งค่าข้อความของ "a ตอบกลับ" แสดงคำตอบเริ่มต้น "")
ตั้งค่า n เป็น 1
ตั้ง o เป็น ""
ทำซ้ำในขณะที่รายการของ x = รายการของ n
ตั้งค่าเป็นรายการของ o & x n
ตั้งค่า n เป็น n + 1
ปลาย
โอ

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


12
AppleScript ไม่ได้ถูกสร้างขึ้นมาเพื่ออะไร
kirbyfan64sos

tell app "System Events" to <something>สิ่งเดียวที่ฉันใช้มันสำหรับนอกเหนือจากโรงแรมพร้อมสนามกอล์ฟที่น่ากลัวคือ มันเป็นที่น่าสนใจที่จะดูว่ามันเกี่ยวข้องกับชนิดของสิ่งนี้แม้ว่า @ kirbyfan64sos
Addison Crump

6

อาร์เอส , 14 ไบต์

(.*).* \1.*/\1

กรณีสาธิตและการทดสอบสด

มันค่อนข้างเรียบง่าย มันตรงกับ ... คำนำหน้าทั่วไปที่ยาวที่สุดและลบส่วนที่เหลือของสตริง หากไม่มีส่วนนำหน้าที่ยาวที่สุดมันก็จะล้างทุกอย่าง


6

sed, 18

ฉันมีบางสิ่งบางอย่างมากอีกต่อไปและซับซ้อนมากขึ้นในใจเพื่อให้เครดิตสำหรับความคิดนี้ไป @

s/(.*).* \1.*/\1/

รวม +1 สำหรับ-rตัวเลือกในการกด


ความคิดเดิมของคุณคืออะไร
kirbyfan64sos

@ kirbyfan64sos มันเกี่ยวข้องกับการวนลูปผ่านตัวอักษรทีละตัวและหยุดที่ไม่ตรงกัน มันเป็นแค่ความคิด - ไม่มีโค้ดอยู่ข้างหลัง
Digital Trauma

6

CJam, 12 8 26

r:AAr:B.=0#_W={;;ABe<}{<}?

ลองออนไลน์

(มีแนวคิดที่จะใช้ = แทน. - หลังจากดูคำตอบของ Dennis)

กับทุกกรณีขอบมันกลายเป็นเรื่องยากสำหรับผู้เริ่มต้น CJam เช่นฉันที่จะทำให้มันสั้น หวังว่าอย่างน้อยมันก็ใช้ได้กับทุกกรณี


6

C #, 201 147 ไบต์

using System.Linq;class a{static void Main(string[]a){a[0].Take(a[1].Length).TakeWhile((t,i)=>a[1][i]==t).ToList().ForEach(System.Console.Write);}}

ฉันรู้ว่ามันไม่ได้มีการแข่งขันที่รุนแรง ฉันแค่อยากจะดูว่ามันจะมีลักษณะอย่างไร

แก้ไข: ขอบคุณ Ash Burlakzenko, Berend และ Dennis_E


2
เพียงแค่ได้คำตอบ C # ที่มีขนาดต่ำกว่า 250 ไบต์ก็สามารถแข่งขันได้ นอกจากนี้ยังไม่สามารถเพียงแค่คุณusing System.*?
ตบมือ

1
.ForEach(x=>Console.Write(x))อาจย่อให้เหลือ.ForEach(Console.Write)
Ash Burlaczenko

1
using System.Collections.Generic;ไม่จำเป็น string[] aโกนหนึ่งไบต์มากขึ้นโดยการเอาพื้นที่จาก
Berend

2
1-The Containsไม่จำเป็น 2 คุณสามารถบันทึกไม่กี่ไบต์โดยการลบusing System;และพูดว่าSystem.Console.Write;ผลตอบแทนที่ 3 นี้รหัสผลที่ไม่ถูกต้อง ( "เป็น") สำหรับการป้อนข้อมูล "aab", "aaab" IndexOfเพราะ การแก้ไขที่สั้นที่สุดที่ฉันคิดว่าใช้a[0].Take(a[1].Length)คือความยาว 147 ไบต์: "using System.Linq; class a {สแตติกโมฆะหลัก (สตริง [] a) {a [0] .Take (a [1] .Length) ((c, i) => a [1] [i] == c) .ToList () ForEach (System.Console.Write);}} "
Dennis_E

ขอบคุณสำหรับความคิดเห็นเมื่อฉันหยุดพักฉันจะมองทุกคนโดยเฉพาะความคิดเห็นของ Dennis_E
Jakotheshadows

5

เสียงกระเพื่อมสามัญ 39

(lambda(a b)(subseq a 0(mismatch a b)))

เวลาสองขัดแย้งสตริงกำหนดดัชนีฉันที่พวกเขาแตกต่างกันและผลตอบแทนย่อยจาก 0 ถึงฉัน


5

Perl 5, 20 19 18 ไบต์

19 ไบต์, บวก 1 สำหรับ-Eธงแทน-e:

say<>=~/^(.*).* \1/

นี้จะถูกคัดลอกลงคอจากดิจิตอลบาดเจ็บ 's คำตอบ sed จะถือว่าอินพุตเป็นคำสองสามคำโดยไม่มีช่องว่างในพวกเขา (หรือก่อนหน้าแรก) และมีช่องว่างระหว่างพวกเขา


ปรับปรุง:

ThisSuitIsBlackNot ไม่แนะนำให้ใช้-peดังต่อไปนี้เพื่อบันทึกไบต์ (ขอบคุณ!):

($_)=/^(.*).* \1/

จากนั้นLuk Stormsแนะนำให้ใช้-nEดังต่อไปนี้เพื่อบันทึกไบต์อื่น (ขอบคุณ!):

say/^(.*).* \1/

(ฉันนับ-Eเป็นหนึ่งไบต์แทนมาตรฐาน-eแต่-nหรือ-pเท่ากับสองความประทับใจของฉันคือว่านั่นคือ SOP ที่นี่)


1
"-M5.010เมื่อมีความจำเป็นเป็นฟรี" ต่อเมตาโพสต์เดียวกัน-peหรือ-neจะเป็น 1 ไบต์เพิ่มเติมไม่ใช่ 2 ดังนั้นperl -nE 'say/^(.*).* \1/'จะได้คะแนน 16 ไบต์
ThisSuitIsBlackNot

4

Python 3, 72

31 bytes saved thanks to FryAmTheEggman. 8 saved thanks to DSM.

r=''
for x,y in zip(input(),input()):
 if x==y:r+=x
 else:break
print(r)

What would Python programmers do without zip? :D
Beta Decay

7
@BetaDecay Our fly would be open all the time.
Morgan Thrapp

You could put the input()s in the zip and save the a and b binding.
DSM

@DSM Ooo, good point. Thanks!
Morgan Thrapp

4

Python 3, 47

def f(w):[print(end=c[c!=d])for c,d in zip(*w)]

A function that takes a list w of two words, and prints the common prefix before terminating with an error.

Python 3's print function lets you prints strings flush against each other with print(end=c) (thanks to Sp3000 for saving 3 bytes with this shorter syntax). This repeatedly take two letters from the words, and prints the first of the letters. The indexing c[c!=d] gives an out-of-bounds error where c!=d, terminating the execution when two unequal letters are encountered.

An explicit for loop is one char longer than the list comprehension:

def f(w):
 for c,d in zip(*w):print(end=c[c!=d])

Wow! I hadn't even thought about using a function! Nice one. +1
Zach Gates

Only saw this now, but how about print(end=c[c!=d])?
Sp3000

1
@Sp3000 Wow, I never connected that the main argument to print being optional meant it could be called with only the end argument, and that could contain the string. That's a really useful trick in general. You should make a tip.
xnor

3

Javascript ES6, 52 bytes

f=(a,b)=>[...a].filter((e,i)=>e==b[i]?1:b='').join``

Usage:

>> f("global","glossary")
"glo"

Does not work with ada,aca...
flawr

Whoops, fixed. Forgot to kill filtering after the strings no longer match.
Dendrobium

1
You don't need to name the function, so you can leave out the f=
Ypnypn

1
you can do it smaller with map (a,b)=>[...a].map((e,i)=>e==b[i]?e:b='').join``
Shaun H

2

Retina, 14 bytes

Uses the same idea as kirbyfan64sos. Unfortunately, despite Martin's claim that eventually Match mode will feature a way to print capturing groups, it hasn't been implemented yet. Otherwise, (.*).* \1 could be used along with 2 bytes or so for some not-yet-existing configuration string option.

(.*).* \1.*
$1

Each line would go in its own file, with 1 byte added per additional file. Alternatively, run in a single file with the -s flag.


The equivalent regex fails to match in vim due to greediness (and a non-greedy regex will match the shortest substring, i.e. blank), are you sure it works?
Random832

@Random832 Try using this regex replace tester, with the .NET option checked. Set the operation to "replace", and put the patterns in the correct boxes. It doesn't fail to match if there should be one. How could it possible fail due to greediness? That's the only reason it works. \1 ensures that both words start with the same prefix. So no matter how greedy (.*) is, \1 is the same.
mbomb007

In vim it refuses to match at all - I think it is finding a longer string for the first (.*), then failing to match it against \1, then not properly backtracking to shorter strings.
Random832

@Random832 Then you need to find something else to test your regexes on.
mbomb007

2

K, 24 bytes

{(+/&\=/(&/#:'x)#'x)#*x}

Find the minimum of the length of each string. ((&/#:'x)). Trim each string to that length (#'x). Then compare, smear and sum the resulting sequence:

  =/("globaa";"glossa")
1 1 1 0 0 1
  &\=/("globaa";"glossa")
1 1 1 0 0 0
  +/&\=/("globaa";"glossa")
3

Finally, take that many characters from the first of the strings provided (#*x).

In action:

 f: {(+/&\=/(&/#:'x)#'x)#*x};
 f'(("global";"glossary")
    ("department";"depart")
    ("glove";"dove")
    ("aaa";"aaaaa")
    ("identical";"identical")
    ("aca";"aba"))
("glo"
 "depart"
 ()
 "aaa"
 "identical"
 ,"a")

2

Powershell, 65 bytes

Compare the strings, shrinking the first until it either matches (print and exit) or the string is null and the loop terminates.

param($a,$b)while($a){if($b-like"$a*"){$a;exit}$a=$a-replace".$"}

2

Julia, 62 bytes

f(a,b)=(c="";for(i,j)=zip(a,b) i!=j?break:(c*=string(i))end;c)

Ungolfed:

function f(a::AbstractString, b::AbstractString)
    # Initialize an output string
    c = ""

    # Iterate over the pairs of characters in a and b,
    # truncated to the shorter of the two lengths
    for (i, j) in zip(a, b)
        if i == j
            # If they match, append to the output string
            c *= string(i)
        else
            # Otherwise stop everything!
            break
        end
    end

    return c
end

Fixed an issue (at the hefty cost of 14 bytes) thanks to xnor!


2

C99, 73 bytes

main(int c,char *a[]){for(char *x=a[1],*y=a[2];*x==*y++;putchar(*x++));}

Similar to this answer, but shorter and meets spec (takes input from stdin).


Spec doesn't say input has to come from stdin. This is actually longer than the other answer if you add #include<stdio.h>, which is necessary for the program to compile.
musarithmia

@AndrewCashner - It doesn't need to be on stdin, but it does need to take input. The other answer is hard-coded. Also, gcc whines about the implicit usage, but it compiles fine without the include.
Comintern

Much shorter without the temporaries: main(int c,char**a){for(;*a[1]==*a[2]++;putchar(*a[1]++));} (59 bytes).
Toby Speight

2

MATLAB, 50 40 bytes

Defines a function that accepts 2 strings as input, outputs to command window

function t(a,b);a(1:find([diff(char(a,b)) 1],1)-1)

This solution will work for any string, outputs

ans =

   Empty string: 1-by-0

if no match is given.

Can be golfed by using a script instead of a function (using local variables a, b) (-16 bytes).

so getting 34 Bytes

a(1:find([diff(char(a,b)) 1],1)-1)

The function style (which seems to be the accepted style), yields

@(a,b)a(1:find([diff(char(a,b)) 1],1)-1)

(Thanks @Stewie Griffin)


40 bytes: @(a,b)a(1:find([diff(char(a,b)) 1],1)-1). =)
Stewie Griffin

2

Perl 6, 28 bytes

I came up with two that take their values from STDIN which are based on the Perl 5 answer.

lines~~/(.*).*' '$0/;say ~$0
lines~~/:s(.*).* $0/;say ~$0

The first requires exactly one space between the inputs, while the other requires at least one whitespace character between the inputs.


That is quite a bit shorter than the first thing I tried which takes the values from the command line.

say [~] map ->($a,$b){$a eq$b&&$a||last},[Z] @*ARGS».comb # 58 bytes

or even the lambda version of it:

{[~] map ->($a,$b){$a eq$b&&$a||last},[Z] @_».comb} # 52 bytes

Though this is much easier to adjust so that it accepts any number of input strings, at the cost of only one stroke.

{[~] map ->@b {([eq] @b)&&@b[0]||last},[Z] @_».comb} # 53 bytes
#          ┗━┛ ┗━━━━━━━┛  ┗━━━┛
my &common-prefix = {[~] map ->@b {([eq] @b)&&@b[0]||last},[Z] @_».comb}

say common-prefix <department depart>; # "depart"
say common-prefix; # ""
say common-prefix <department depart depot deprecated dependant>; # "dep"

# This code does not work directly with a single argument, so you have
# to give it an itemized List or Array, containing a single element.

say common-prefix $('department',); # "department"

# another option would be to replace `@_` with `(@_,)`

2

Japt, 27 bytes

Japt is a shortened version of JavaScript. Interpreter

Um$(X,Y)=>$A&&X==VgY ?X:A=P

(The strings go into the Input box like so: "global" "glossary")

This code is exactly equivalent to the following JS:

A=10;(U,V)=>U.split``.map((X,Y)=>A&&X==V[Y]?X:A="").join``

I have not yet implemented anonymous functions, which is what the $...$ is for: anything between the dollar signs is left untouched in the switch to JS. After I add functions, this 21-byte code will suffice:

UmXY{A&&X==VgY ?X:A=P

And after I implement a few more features, it will ideally be 18 bytes:

UmXY{AxX=VgY ?X:AP

Suggestions welcome!


So it turns out that this program is only 15 bytes in modern Japt:

¡A©X¥VgY ?X:A=P

Try it online!


2

MATL, 11 9 bytes

y!=XdYpf)

Try it online!

(-2 bytes thanks to Giuseppe)

 y  % implicitly input the two strings, then duplicate the
    %  first one into the stack again
    %  stack: ['department' 'deported' 'department']
 !  % transpose the last string into a column vector
 =  % broadcast equality check - gives back a matrix comparing
    %  every letter in first input with the letters in the second
 Xd % diagonal of the matrix - comparison result of each letter with
    %  only corresponding letter in the other string
    %  stack: ['department' [1; 1; 1; 0; 1; 1; 0; 0;]]
 Yp % cumulative product (so only initial sequence of 1s remains
    %  1s, others become 0)
    %  stack: ['department' [1; 1; 1; 0; 0; 0; 0; 0;]]
 f  %  find the indices of the 1s
 )  % index at those elements so we get those letters out
    % (implicit) convert to string and display

Thanks! The y idea is pretty good, I'd tried things like an initial iti instead of the 1Gw, but didn't think of using the y for that.
sundar - Reinstate Monica

1

Clojure/ClojureScript, 51

(defn f[[a & b][c & d]](if(= a c)(str a(f b d))""))

Pretty straightforward. Unfortunately the spaces around the parameter destructuring are necessary (that's the [a & b] stuff). Not the shortest but I beat some other answers in languages that like to brag about their terseness so I'll post it.


1

Python 2, 50 bytes

for a,b in zip(*input()):print(1/0if a!=b else a),

Input

The input is taken as two strings:

"global", "glossary"

Output

The output is each character followed by a space; which, hopefully, isn't a problem. However, if it is, I'll edit my answer.

g l o 

I'm pretty sure this is invalid; the spec clearly gave the output format as a string without spaces.
lirtosiast

Well yes, but the input was also given in the format "global" , "glossary" (two separate strings).. How many other answers follow that to the letter? @ThomasKwa
Zach Gates

"takes two strings" is the language used by OP; usually when something like that is mentioned without any qualifiers, it refers to one of our default I/O, which means we can take one string from the command line and one from STDIN, or an array of two strings, or whatever else follows those rules.
lirtosiast

I think you're taking my answer a bit too seriously. This is just a fun submission and my best attempt at beating a built-in. If OP doesn't like the output format, so be it; I'll remove my answer. @ThomasKwa
Zach Gates

How about print(exit()if a!=b else a,end='')? I don't know if that'll work or not, but it might
Beta Decay


1

PHP, 52 bytes

Not spectacular but does the job:

$a=$argv;while($a[1][$i]==$a[2][$i])echo$a[1][$i++];

Takes two command line arguments:

php prefix.php department depart

PHP7 lets you save another byte while(($a=$argv)[1][$i]==$a[2][$i])echo$a[1][$i++]; - Another PHP7 only solution (and best I could come up with @ 50 bytes) <?=substr(($a=$argv)[1],0,strspn($a[1]^$a[2],~ÿ)); - Make sure your editor is in ascii mode, it's important the ~ÿ does not get converted to unicode.
Leigh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.