Tiền tố phổ biến dài nhất của 2 chuỗi


30

Viết chương trình lấy 2 chuỗi làm đầu vào và trả về tiền tố chung dài nhất. Đây là , vì vậy câu trả lời có số byte ngắn nhất sẽ thắng.

Test Case 1:

"global" , "glossary"
"glo"


Test Case 2:

"department" , "depart"
"depart"

Test Case 3:

"glove", "dove"
""

1
Một trường hợp thử nghiệm tốt là "aca", "aba".
Morgan Thrapp

2
Bạn có muốn một chương trình hoàn chỉnh nhập từ STDIN và in sang STDOUT, hoặc các chức năng có ổn không?
xnor

2
Chúng ta có thể giả sử đầu vào sẽ không có dòng mới? Những ký tự nào sẽ có đầu vào?
Hạ cấp

5
Lưu ý chung: Những người sử dụng giải pháp dựa trên regex không nên sao chép câu trả lời regex của người khác mà không tự kiểm tra chúng; Điều này không hoạt động trong tất cả các công cụ regex. Cụ thể, nó đưa ra các câu trả lời khác nhau (cả không chính xác) trong nvi và vim.
Random832

1
Tất cả các ví dụ được đưa ra là chữ thường, nhưng chúng ta có cần phải lo lắng về độ nhạy của chữ hoa không? Chẳng hạn, nên globalGLOSSARYtrở về glohay ''?
admBorkBork

Câu trả lời:


22

Python 3, 54 byte

Cảm ơn Python vì đã tích hợp chức năng cho nhiệm vụ này! : D

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

Lấy đầu vào là hai từ cách nhau bởi một khoảng trắng, chẳng hạn như glossary global.


21

Haskell, 29 byte

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

Sử dụng:

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

Định nghĩa đệ quy hàm nhị phân %bằng cách khớp mẫu. Trên hai chuỗi có các chữ cái đầu tiên bằng nhau, lấy các chữ cái đầu tiên đó và đưa nó vào chức năng của phần còn lại của các chuỗi. Trên bất cứ điều gì khác, đưa ra chuỗi trống.


11

Bình thường, 8 7 byte

e@F._MQ

Cảm ơn @isaacg đã tắt 1 byte

Đưa đầu vào được trích dẫn và phân tách bằng dấu phẩy, như "abc", "acc". Điều này thoát khỏi một lỗi (nhưng để trống thiết bị xuất chuẩn) khi kết quả là chuỗi trống. Nếu điều đó không được chấp nhận, hãy thêm 2 byte cho#e@F._MQq

Phòng thử nghiệm

Giải trình

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

Để làm cho kết quả chuỗi rỗng không có lỗi : e|@F._M.z]k.
kirbyfan64sos

@ kirbyfan64sos Tôi tin rằng thứ tôi đưa vào xung quanh nó #...qchỉ nhỏ hơn một byte, tôi sẽ chỉnh sửa trong mã đầy đủ, tôi đoán điều đó thật khó hiểu
FryAmTheEggman

1
Lấy đầu vào trong biểu mẫu "abc", "def"và bạn có thể sử dụng Qthay vì.z
isaacg

10

C ++, 101 100 99 byte

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

Đọc hai chuỗi từ stdin, in ký tự ở vị trí hiện tại từ một trong các chuỗi trong khi ký tự ở vị trí hiện tại bằng với ký tự ở cùng vị trí trong chuỗi khác.

Cảm ơn Zereges đã lưu một byte.


4
Đó là một cách sử dụng tuyệt đẹp và đáng sợ của fortuyên bố ...
Joshpbarron 4/11/2015

Vòng lặp sẽ không kết thúc nếu các chuỗi bằng nhau.
Jon Trauntvein

2
Không hoạt động đối với các chuỗi chứa khoảng trắng. Bạn có thể lưu một byte, bằng cách tạo int itrong không gian toàn cầu (để nó sẽ được khởi tạo 0)
Zereges

@JonTrauntvein Tôi nghĩ trường hợp đó là UB (?). Nó hoạt động ™ cho tôi mặc dù. (gcc-5.1)
sweerpotato

9

Haskell, 38 byte

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

Ví dụ sử dụng: ( ((map fst.fst.span(uncurry(==))).).zip ) "global" "glossary"-> "glo".

Zip cả hai chuỗi đầu vào vào một danh sách các cặp ký tự. Tạo hai danh sách từ đó: danh sách đầu tiên có tất cả các cặp từ đầu miễn là cả hai ký tự đều bằng nhau, danh sách thứ hai có tất cả các phần còn lại. Thả danh sách thứ hai và trích xuất tất cả các ký tự từ danh sách đầu tiên.


9

CJam, 12 11 9 byte

l_q.-{}#<

Điều này đọc các chuỗi trên hai dòng riêng biệt với kết thúc dòng kiểu Unix, nghĩa là , <string>\n<string>\n.

Cảm ơn @ MartinBüttner cho -1 byte và đến @ jimmy23013 cho -2 byte!

Hãy thử trực tuyến trong trình thông dịch CJam .

Làm thế nào nó hoạt động

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.

Chết tiệt, tôi không thể tin câu trả lời đầu tiên của mình lại gần đến thế!
geokavel 4/11/2015

1
Bạn có thể gian lận một chút bằng cách giả sử một dòng mới và sử dụng l_q.-.
jimmy23013

@ jimmy23013 Đó là tiêu chuẩn cho đầu vào trên hệ điều hành giống Unix, vậy tại sao không? Cảm ơn!
Dennis

8

APL, 13

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

Đây là một hàm lấy một mảng gồm hai chuỗi và trả về tiền tố:

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

Có thực sự công bằng khi nói rằng bảng chữ cái APL là một bảng chữ cái của các ký tự kích thước byte? Hay đó là tiêu chuẩn thực hành quanh đây?
Filipq

9
@Filipq Câu trả lời ở đây sử dụng mã hóa tự nhiên nhất cho ngôn ngữ. APL có trang mã riêng mà mỗi ký tự là một byte đơn.
Alex A.

7

AppleScript, 215 byte

Và tôi đã cố gắng rất nhiều ...; (

đặt x thành (hộp thoại hiển thị "" trả lời mặc định "") văn bản được trả về
đặt lại thành (văn bản hiển thị "" trả lời mặc định "")
đặt n thành 1
đặt o thành ""
lặp lại trong khi mục của x n = a's item n
đặt o thành mục o & x của n
đặt n thành n + 1
kết thúc
o

Tôi muốn xem AppleScript có thể thực hiện việc này tốt đến mức nào và con người không được xây dựng để so sánh chuỗi.


12
AppleScript không được xây dựng cho bất cứ điều gì .
kirbyfan64sos

Điều duy nhất tôi sử dụng nó bên cạnh những sân golf khủng khiếp là tell app "System Events" to <something>. Nó thú vị để xem làm thế nào nó giao dịch với loại công cụ này, mặc dù. @ kirbyfan64sos
Addison Crump


6

quyến rũ, 18

Tôi đã có một cái gì đó dài hơn và phức tạp hơn trong tâm trí, vì vậy tín dụng cho ý tưởng này được gửi đến @ kirbyfan64sos .

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

Bao gồm +1 cho -rtùy chọn để sed.


Ý tưởng ban đầu của bạn là gì?
kirbyfan64sos

@ kirbyfan64sos Về cơ bản, nó liên quan đến việc lặp qua từng ký tự và dừng lại ở một sự không phù hợp. Đó chỉ là một ý tưởng - không có mã đằng sau nó.
Chấn thương kỹ thuật số

6

CJam, 12 8 26

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

Hãy thử trực tuyến.

(Có ý tưởng sử dụng. = Thay vì .- sau khi xem câu trả lời của Dennis.)

Với tất cả các trường hợp cạnh, nó trở nên khó khăn cho một người mới bắt đầu như CJam để giữ cho nó ngắn. Hy vọng, điều này ít nhất làm việc cho tất cả các trường hợp.


6

C #, 201 147 byte

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);}}

Tôi biết nó không cạnh tranh khủng khiếp. Tôi chỉ muốn xem nó sẽ như thế nào.

EDIT: Cảm ơn Ash Burlakzenko, Berend và Dennis_E


2
Chỉ cần nhận được câu trả lời C # dưới 250 byte là cạnh tranh. Ngoài ra, bạn không thể using System.*?
vỗ tay

1
.ForEach(x=>Console.Write(x))có thể rút ngắn thành.ForEach(Console.Write)
Ash Burlaczenko

1
using System.Collections.Generic;là không cần thiết Cạo thêm một byte bằng cách xóa khoảng trắng khỏi string[] a.
Berend

2
1-Điều Containskhông cần thiết. 2-Bạn có thể lưu một vài byte bằng cách xóa using System;và nói System.Console.Write;3-Mã này trả về kết quả sai ("a") cho đầu vào "aab", "aaab", vì IndexOf. Cách khắc phục ngắn nhất tôi có thể nghĩ đến là sử dụng a[0].Take(a[1].Length)Điều này dài 147 byte: "bằng cách sử dụng System.Linq; class a {static void Main (string [] a) {a [0] .Take (a [1] .Ldrops) .TakeWhile ((c, i) => a [1] [i] == c) .ToList (). ForEach (System.Console.Write);}} "
Dennis_E

Cảm ơn các bình luận khi tôi nghỉ ngơi, tôi sẽ xem xét kỹ tất cả các bình luận, đặc biệt là bình luận của Dennis_E.
Jakotheshadows 04/11/2015

5

Lisp thường gặp, 39

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

Có hai đối số chuỗi, xác định chỉ mục i nơi chúng khác nhau và trả về một chuỗi con từ 0 đến i .


5

Perl 5, 20 19 18 byte

19 byte, cộng 1 cho -Ecờ thay vì -e:

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

Điều này được sao chép một cách đáng xấu hổ từ câu trả lời sed của Digital Trauma . Nó giả sử đầu vào là một vài từ không có khoảng trắng trong chúng (hoặc trước từ đầu tiên) và có một khoảng trắng giữa chúng.


Cập nhật:

ThisSuitIsBlackNot đã đề xuất sử dụng -penhư sau, để lưu một byte (cảm ơn!):

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

Và sau đó, Luk Storms đã đề xuất sử dụng -nEnhư sau để lưu một byte khác (cảm ơn!):

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

(Tôi đang tính -Elà một byte thay vì tiêu chuẩn -e, nhưng -nhoặc -plà hai. Ấn tượng của tôi là đó là xung quanh đây.)


1
" -M5.010, Khi cần, là miễn phí" . Trên cùng một bài đăng meta, -pehoặc -nesẽ là 1 byte bổ sung, không phải 2. Vì vậy, perl -nE 'say/^(.*).* \1/'sẽ ghi được 16 byte.
ThisSuitIsBlackNot

4

Trăn 3, 72

31 byte được lưu nhờ FryAmTheEggman. 8 lưu nhờ DSM.

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

Lập trình viên Python sẽ làm gì nếu không có zip? : D
Beta Decay

7
@BetaDecay Con ruồi của chúng tôi sẽ luôn mở.
Morgan Thrapp

Bạn có thể đặt input()s vào zipvà lưu abràng buộc.
DSM

@DSM Ooo, điểm tốt. Cảm ơn!
Morgan Thrapp

4

Trăn 3, 47

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

Một hàm lấy danh sách whai từ và in tiền tố chung trước khi kết thúc với một lỗi.

printHàm của Python 3 cho phép bạn in các chuỗi print(end=c)lộn ngược với nhau (nhờ Sp3000 để lưu 3 byte với cú pháp ngắn hơn này). Điều này liên tục lấy hai chữ cái từ các từ và in chữ cái đầu tiên. Việc lập chỉ mục c[c!=d]đưa ra lỗi ngoài giới hạn trong đó c!=d, chấm dứt thực thi khi gặp hai chữ cái không bằng nhau.

Một vòng lặp rõ ràng cho một vòng lặp dài hơn một lần hiểu danh sách:

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

Ồ Tôi thậm chí đã không nghĩ về việc sử dụng một chức năng! Đẹp một. +1
Zach Gates

Chỉ thấy điều này bây giờ, nhưng làm thế nào về print(end=c[c!=d])?
Sp3000

1
@ Sp3000 Wow, tôi không bao giờ kết nối rằng đối số chính printlà tùy chọn có nghĩa là nó có thể được gọi chỉ với đối số kết thúc và có thể chứa chuỗi. Đó là một mẹo thực sự hữu ích nói chung. Bạn nên làm cho một mẹo.
xnor

3

Javascript ES6, 52 byte

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

Sử dụng:

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

Không hoạt động với ada,aca...
flawr

Rất tiếc, đã sửa. Quên để lọc lọc sau khi các chuỗi không còn phù hợp.
Dendrobium

1
Bạn không cần đặt tên cho chức năng, vì vậy bạn có thể bỏ quaf=
Ypnypn

1
bạn có thể làm nó nhỏ hơn với bản đồ(a,b)=>[...a].map((e,i)=>e==b[i]?e:b='').join``
Shaun H

2

Võng mạc , 14 byte

Sử dụng ý tưởng tương tự như kirbyfan64sos . Thật không may, mặc dù tuyên bố của Martin rằng cuối cùng chế độ Match sẽ có cách in các nhóm bắt giữ, nhưng nó vẫn chưa được thực hiện. Mặt khác, (.*).* \1có thể được sử dụng cùng với 2 byte hoặc hơn cho một số tùy chọn chuỗi cấu hình chưa tồn tại.

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

Mỗi dòng sẽ đi vào tệp riêng của nó, với 1 byte được thêm vào mỗi tệp bổ sung. Hoặc, chạy trong một tệp duy nhất với -scờ.


Regex tương đương không khớp với vim do sự tham lam (và một regex không tham lam sẽ phù hợp với chuỗi con ngắn nhất , tức là trống), bạn có chắc là nó hoạt động không?
Random832

@ Random832 Hãy thử sử dụng trình kiểm tra thay thế regex này , với tùy chọn .NET được chọn. Đặt thao tác thành "thay thế" và đặt các mẫu vào đúng ô. Nó không phù hợp nếu cần phải có một. Làm thế nào nó có thể thất bại do sự tham lam? Đó là lý do duy nhất nó hoạt động. \1đảm bảo rằng cả hai từ bắt đầu với cùng một tiền tố. Vì vậy, cho dù tham lam như thế nào (.*), \1là như nhau.
mbomb007

Trong vim, nó từ chối khớp hoàn toàn - Tôi nghĩ rằng nó đang tìm một chuỗi dài hơn cho chuỗi đầu tiên (. *), Sau đó không khớp với \ 1, sau đó không quay lại đúng với các chuỗi ngắn hơn.
Random832

@ Random832 Sau đó, bạn cần tìm một cái gì đó khác để kiểm tra biểu thức chính của mình.
mbomb007

2

K, 24 byte

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

Tìm mức tối thiểu của độ dài của mỗi chuỗi. ( (&/#:'x)). Cắt từng chuỗi theo chiều dài đó ( #'x). Sau đó so sánh, bôi và tổng hợp chuỗi kết quả:

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

Cuối cùng, lấy nhiều ký tự từ chuỗi đầu tiên được cung cấp ( #*x).

Trong hành động:

 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 byte

So sánh các chuỗi, thu hẹp chuỗi đầu tiên cho đến khi nó khớp (in và thoát) hoặc chuỗi là null và vòng lặp kết thúc.

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

2

Julia, 62 byte

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

Ung dung:

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

Đã khắc phục sự cố (với chi phí khổng lồ là 14 byte) nhờ vào xnor!


2

C99, 73 byte

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

Tương tự như câu trả lời này , nhưng ngắn hơn và đáp ứng thông số kỹ thuật (lấy đầu vào từ stdin).


Spec không nói đầu vào phải đến từ stdin. Điều này thực sự dài hơn câu trả lời khác nếu bạn thêm #include<stdio.h>, cần thiết cho chương trình biên dịch.
musarithmia

@AndrewCashner - Nó không cần phải có trên stdin, nhưng nó không cần phải nhập liệu. Câu trả lời khác là mã hóa cứng. Ngoài ra, gcc than vãn về việc sử dụng ngầm, nhưng nó biên dịch tốt mà không bao gồm.
Comitern

Ngắn hơn nhiều mà không có thời gian: main(int c,char**a){for(;*a[1]==*a[2]++;putchar(*a[1]++));}(59 byte).
Toby Speight

2

MATLAB, 50 40 byte

Xác định hàm chấp nhận 2 chuỗi làm đầu vào, đầu ra cho cửa sổ lệnh

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

Giải pháp này sẽ làm việc cho bất kỳ chuỗi, đầu ra

ans =

   Empty string: 1-by-0

nếu không có trận đấu được đưa ra.

Có thể được đánh gôn bằng cách sử dụng tập lệnh thay vì hàm (sử dụng biến cục bộ a, b) (-16 byte).

vì vậy nhận được 34 byte

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

Kiểu chức năng (dường như là kiểu được chấp nhận), mang lại

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

(Cảm ơn @Stewie Griffin)


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

2

Perl 6 , 28 byte

Tôi đã đưa ra hai cái lấy giá trị của chúng từ STDIN dựa trên câu trả lời Perl 5.

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

Cái đầu tiên yêu cầu chính xác một khoảng trắng giữa các đầu vào, trong khi cái kia yêu cầu ít nhất một ký tự khoảng trắng giữa các đầu vào.


Nó ngắn hơn một chút so với điều đầu tiên tôi đã thử lấy các giá trị từ dòng lệnh.

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

hoặc thậm chí phiên bản lambda của nó:

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

Mặc dù điều này dễ điều chỉnh hơn nhiều để nó chấp nhận bất kỳ số lượng chuỗi đầu vào nào, với chi phí chỉ bằng một nét.

{[~] 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 byte

Japt là phiên bản rút gọn của Ja vaScri pt . Thông dịch viên

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

(Các chuỗi đi vào hộp Nhập liệu như vậy "global" "glossary":)

Mã này hoàn toàn tương đương với JS sau:

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

Tôi chưa thực hiện các chức năng ẩn danh, đó là những gì $...$dành cho: mọi thứ giữa các ký hiệu đô la đều không bị ảnh hưởng trong quá trình chuyển đổi sang JS. Sau khi tôi thêm chức năng, mã 21 byte này sẽ đủ:

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

Và sau khi tôi triển khai thêm một vài tính năng, lý tưởng nhất là 18 byte:

UmXY{AxX=VgY ?X:AP

Gợi ý chào mừng!


Vì vậy, hóa ra chương trình này chỉ có 15 byte trong Japt hiện đại:

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

Hãy thử trực tuyến!


2

MATL , 11 9 byte

y!=XdYpf)

Hãy thử trực tuyến!

(-2 byte nhờ 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

Cảm ơn! Các yý tưởng được khá tốt, tôi đã cố gắng những thứ như ban đầu itithay cho 1Gw, nhưng không nghĩ đến việc sử dụng ycho điều đó.
- Phục hồi Monica

1

Clojure / ClojureScript, 51

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

Khá đơn giản. Thật không may, không gian xung quanh việc hủy tham số là cần thiết (đó là [a & b]công cụ). Không phải là ngắn nhất nhưng tôi đã đánh bại một số câu trả lời khác bằng các ngôn ngữ thích khoe khoang về sự căng thẳng của chúng vì vậy tôi sẽ đăng nó.


1

Python 2, 50 byte

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

Đầu vào

Đầu vào được lấy dưới dạng hai chuỗi:

"global", "glossary"

Đầu ra

Đầu ra là mỗi ký tự theo sau là khoảng trắng; mà, hy vọng, không phải là một vấn đề. Tuy nhiên, nếu có, tôi sẽ chỉnh sửa câu trả lời của mình.

g l o 

Tôi khá chắc chắn rằng điều này là không hợp lệ; Thông số kỹ thuật rõ ràng đã cho định dạng đầu ra dưới dạng một chuỗi không có khoảng trắng.
lirtosiast

Vâng, nhưng đầu vào cũng được đưa ra ở định dạng "global" , "glossary"(hai chuỗi riêng biệt) .. Có bao nhiêu câu trả lời khác theo chữ cái đó? @ThomasKwa
Zach Gates

"mất hai chuỗi" là ngôn ngữ được OP sử dụng; thông thường khi một cái gì đó giống như được đề cập mà không có bất kỳ vòng loại nào, nó đề cập đến một trong những I / O mặc định của chúng ta , có nghĩa là chúng ta có thể lấy một chuỗi từ dòng lệnh và một chuỗi từ STDIN, hoặc một mảng gồm hai chuỗi hoặc bất cứ thứ gì khác theo sau các chuỗi đó quy tắc.
lirtosiast

Tôi nghĩ rằng bạn đang xem câu trả lời của tôi quá nghiêm túc. Đây chỉ là một đệ trình thú vị và nỗ lực tốt nhất của tôi trong việc đánh bại một tích hợp. Nếu OP không thích định dạng đầu ra, thì nó cũng vậy; Tôi sẽ xóa câu trả lời của tôi. @ThomasKwa
Zach Gates

Thế còn print(exit()if a!=b else a,end='')? Tôi không biết điều đó có hiệu quả hay không, nhưng có thể
Beta Decay

1

TeaScript, 16 byte 20

xf»l¦y[i]?1:b=0)

Đưa mỗi đầu vào cách nhau bởi một khoảng trắng.


1

PHP, 52 byte

Không ngoạn mục nhưng thực hiện công việc:

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

Có hai đối số dòng lệnh:

php prefix.php department depart

PHP7 cho phép bạn lưu một byte khác while(($a=$argv)[1][$i]==$a[2][$i])echo$a[1][$i++];- Một giải pháp duy nhất cho PHP7 (và tốt nhất tôi có thể đưa ra @ 50 byte) <?=substr(($a=$argv)[1],0,strspn($a[1]^$a[2],~ÿ));- Đảm bảo trình soạn thảo của bạn ở chế độ ascii, điều quan trọng là ~ÿkhông được chuyển đổi thành unicode.
Leigh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.