Awalan Umum Terpanjang dari 2 Strings

30

Tulis program yang mengambil 2 string sebagai input, dan mengembalikan awalan umum terpanjang. Ini adalah , jadi jawabannya dengan jumlah byte terpendek akan menang.

Test Case 1:

"global" , "glossary"
"glo"


Test Case 2:

"department" , "depart"
"depart"

Test Case 3:

"glove", "dove"
""
Lawrence V.
sumber
1
Kasus uji bagus lainnya adalah "aca", "aba".
Morgan Thrapp
2
Apakah Anda ingin program lengkap yang diinput dari STDIN dan dicetak ke STDOUT, atau apakah fungsinya OK?
xnor 15
2
Bisakah kita berasumsi bahwa input tidak akan memiliki baris baru? Karakter apa yang akan dimiliki input?
Downgoat
5
Catatan umum: Orang yang menggunakan solusi berbasis regex tidak boleh menyalin jawaban regex orang lain tanpa mengujinya sendiri; ini tidak bekerja di semua mesin regex. Secara khusus, ini memberikan jawaban yang berbeda (keduanya salah) dalam nvi dan vim.
Random832
1
Semua contoh yang diberikan dalam huruf kecil, tetapi apakah kita perlu khawatir tentang sensitivitas kasus? Misalnya, harus globaldan GLOSSARYkembali gloatau ''?
AdmBorkBork

Jawaban:

22

Python 3, 54 byte

Terima kasih Python karena memiliki fungsi bawaan untuk tugas ini! : D

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

Mengambil input sebagai dua kata yang dipisahkan oleh spasi seperti glossary global.

Peluruhan Beta
sumber
21

Haskell, 29 byte

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

Pemakaian:

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

Secara rekursif mendefinisikan fungsi biner %dengan pencocokan pola. Pada dua string dengan huruf pertama yang sama, ambil huruf pertama itu, dan tambahkan ke fungsi dari sisa string. Pada hal lain, berikan string kosong.

Tidak
sumber
11

Pyth, 8 7 byte

e@F._MQ

Terima kasih @isaacg untuk 1 byte off

Membawa input yang dikutip dan dipisahkan koma, seperti "abc", "acc". Ini keluar pada kesalahan (tetapi membiarkan stdout kosong) ketika hasilnya adalah string kosong. Jika itu tidak dapat diterima, tambahkan 2 byte untuk#e@F._MQq

Test Suite

Penjelasan

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
FryAmTheEggman
sumber
Untuk membuat hasil string kosong tanpa kesalahan: e|@F._M.z]k.
kirbyfan64sos
@ kirbyfan64sos Saya percaya hal yang saya masukkan sekitar mengelilinginya #...qadalah satu byte kurang dari itu, saya akan mengedit dalam kode lengkap, saya kira itu membingungkan
FryAmTheEggman
1
Ambil input dalam formulir "abc", "def"dan Anda dapat menggunakan Qsebagai ganti.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++]);}

Membaca dua string dari stdin, mencetak karakter di posisi saat ini dari salah satu string sementara karakter di posisi saat ini sama dengan karakter di posisi yang sama di string lain.

Terima kasih kepada Zereges karena telah menghemat satu byte.

sweerpotato
sumber
4
Itu adalah penggunaan forpernyataan yang indah dan menakutkan ...
Joshpbarron
Lingkaran akan gagal berakhir jika string sama.
Jon Trauntvein
2
Tidak akan berfungsi untuk string yang berisi spasi putih. Anda dapat menyimpan satu byte, dengan membuatnya int idi ruang global (sehingga akan diinisialisasi 0)
Zereges
@ JonTrauntvein Saya pikir kasus itu adalah UB (?). Ini berfungsi untuk saya. (gcc-5.1)
sweerpotato
9

Haskell, 38 byte

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

Contoh penggunaan: ( ((map fst.fst.span(uncurry(==))).).zip ) "global" "glossary"-> "glo".

Masukkan kedua string input ke dalam daftar pasangan karakter. Buat dua daftar dari itu: yang pertama dengan semua pasangan dari awal selama kedua karakter sama, yang kedua dengan semua yang lain. Jatuhkan daftar kedua dan ekstrak semua karakter dari daftar pertama.

nimi
sumber
9

CJam, 12 11 9 byte

l_q.-{}#<

Ini membaca string pada dua baris terpisah dengan akhiran gaya Unix, yaitu <string>\n<string>\n,.

Terima kasih kepada @ MartinBüttner untuk -1 byte, dan untuk @ jimmy23013 untuk -2 byte!

Cobalah online di Internet juru bahasa CJam .

Bagaimana itu bekerja

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.
Dennis
sumber
Sial, aku tidak percaya jawaban pertamaku begitu dekat!
geokavel
1
Anda dapat menipu sedikit dengan mengasumsikan baris baru dan menggunakan l_q.-.
jimmy23013
@ jimmy23013 Itu standar untuk input pada OS mirip Unix, jadi mengapa tidak? Terima kasih!
Dennis
8

APL, 13

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

Ini adalah fungsi yang mengambil array dari dua string, dan mengembalikan awalan:

      {⊃↓K/⍨=⌿K←↑⍵}'glossary' 'global'
glo
      {⊃↓K/⍨=⌿K←↑⍵}'department' 'depart'
depart
marinus
sumber
Apakah benar-benar adil untuk mengatakan bahwa alfabet APL adalah alfabet karakter ukuran byte? Atau apakah itu praktik standar di sekitar sini?
Filipq
9
@Filipq Jawaban di sini menggunakan penyandian paling alami ke bahasa. APL memiliki halaman kode sendiri di mana setiap karakter adalah satu byte.
Alex A.
7

AppleScript, 215 Bytes

Dan saya berusaha sangat keras ...; (

set x ke (tampilkan dialog "" jawaban default "") teks dikembalikan
setel ke (tampilkan dialog "" jawaban default "") teks dikembalikan
atur n ke 1
setel ke ""
ulangi sementara item x n = item a n
atur item o ke o & x n
atur n ke n + 1
akhir
Hai

Saya ingin melihat seberapa baik AppleScript dapat melakukan ini, dan manusia itu tidak dibangun untuk perbandingan string.

Addison Crump
sumber
12
AppleScript tidak dibuat untuk apa pun .
kirbyfan64sos
Satu-satunya hal yang saya gunakan selain golf mengerikan adalah tell app "System Events" to <something>. Ini adalah menarik untuk melihat bagaimana berurusan dengan hal semacam ini, meskipun. @ kirbyfan64sos
Addison Crump
6

rs , 14 byte

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

Demo langsung dan uji kasus.

Ini sangat sederhana. Ini hanya cocok dengan ... awalan umum terpanjang dan menghapus sisa string. Jika tidak ada awalan umum terpanjang, itu hanya membersihkan segalanya.

kirbyfan64sos
sumber
6

sed, 18

Saya memiliki sesuatu yang jauh lebih lama dan lebih rumit dalam pikiran, jadi kredit untuk ide ini masuk ke @ kirbyfan64sos .

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

Termasuk +1 untuk -ropsi sed.

Trauma Digital
sumber
Apa ide awal Anda?
kirbyfan64sos
@ kirbyfan64sos Ini pada dasarnya melibatkan pengulangan karakter satu per satu dan berhenti pada ketidakcocokan. Itu hanya sebuah ide - tidak ada kode di belakangnya.
Digital Trauma
6

CJam, 12 8 26

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

Cobalah secara Online.

(Punya ide untuk digunakan. = Bukannya .- setelah melihat jawaban Dennis.)

Dengan semua kasus tepi, menjadi sulit bagi pemula CJam seperti saya untuk membuatnya singkat. Semoga ini setidaknya berfungsi untuk semua kasus.

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

Saya tahu itu tidak terlalu kompetitif. Saya hanya ingin melihat seperti apa bentuknya.

EDIT: Terima kasih Ash Burlakzenko, Berend, dan Dennis_E

Jakotheshadows
sumber
2
Hanya mendapatkan jawaban C # di bawah 250 byte cukup kompetitif. Juga, tidak bisakah Anda adil using System.*?
bertepuk tangan
1
.ForEach(x=>Console.Write(x))dapat disingkat menjadi.ForEach(Console.Write)
Ash Burlaczenko
1
using System.Collections.Generic;tidak perlu. Shave off satu byte lagi dengan menghapus spasi dari string[] a.
Berend
2
1-Tidak Containsperlu. 2-Anda dapat menyimpan beberapa byte dengan menghapus using System;dan mengatakan System.Console.Write;3-Kode ini mengembalikan hasil yang salah ("a") untuk input "aab", "aaab", karena IndexOf. Perbaikan terpendek yang dapat saya pikirkan adalah menggunakan a[0].Take(a[1].Length)Ini adalah 147 byte panjang: "using System.Linq; class a {static void Main (string [] a) {a [0] .Take (a [1] .Length) .TakeWhile ((c, i) => a [1] [i] == c) .ToList (). ForEach (System.Console.Write);}} "
Dennis_E
Terima kasih atas komentarnya ketika saya istirahat, saya akan memperhatikan semuanya terutama komentar Dennis_E.
Jakotheshadows
5

Common Lisp, 39

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

Mengambil dua argumen string, menentukan indeks i di mana mereka berbeda, dan mengembalikan substring dari 0 ke i .

Joshua Taylor
sumber
5

Perl 5, 20 19 18 byte

19 byte, ditambah 1 untuk -Ebendera, bukan -e:

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

Ini disalin tanpa malu-malu dari Digital Trauma 's jawaban sed . Diasumsikan input adalah beberapa kata tanpa spasi di dalamnya (atau sebelum yang pertama) dan dengan satu spasi di antara mereka.


Memperbarui:

ThisSuitIsBlackNot disarankan menggunakan -pesebagai berikut, untuk menyimpan byte (terima kasih!):

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

Dan kemudian Luk Storms menyarankan menggunakan -nEsebagai berikut untuk menyimpan byte lain (terima kasih!):

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

(Saya menghitung -Esebagai satu byte, bukan standar -e, tetapi satu -natau -pdua. Kesan saya adalah bahwa itu SOP di sini.)

msh210
sumber
1
" -M5.010, bila diperlukan, gratis" . Per pos meta yang sama, -peatau -neakan menjadi 1 byte tambahan, bukan 2. Jadi perl -nE 'say/^(.*).* \1/'akan mencetak 16 byte.
ThisSuitIsBlackNot
4

Python 3, 72

31 byte disimpan berkat FryAmTheEggman. 8 disimpan berkat DSM.

r=''
for x,y in zip(input(),input()):
 if x==y:r+=x
 else:break
print(r)
Morgan Thrapp
sumber
Apa yang akan dilakukan oleh programmer Python tanpa zip? : D
Beta Decay
7
@BetaDecay Terbang kami akan terbuka sepanjang waktu.
Morgan Thrapp
Anda bisa memasukkan input()s ke dalam zipdan menyimpan adan bmengikat.
DSM
@ DSM Ooo, poin bagus. Terima kasih!
Morgan Thrapp
4

Python 3, 47

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

Fungsi yang mengambil daftar wdua kata, dan mencetak awalan umum sebelum mengakhiri dengan kesalahan.

printFungsi Python 3 memungkinkan Anda mencetak string dengan satu sama lain print(end=c)(terima kasih kepada Sp3000 untuk menghemat 3 byte dengan sintaks yang lebih pendek ini). Ini berulang kali mengambil dua huruf dari kata-kata, dan mencetak huruf pertama. Pengindeksanc[c!=d] memberikan kesalahan di luar batas di mana c!=d, mengakhiri eksekusi ketika dua huruf tidak sama dijumpai.

Eksplisit untuk loop adalah satu karakter lebih panjang dari pemahaman daftar:

def f(w):
 for c,d in zip(*w):print(end=c[c!=d])
Tidak
sumber
Wow! Aku bahkan belum memikirkan menggunakan fungsi! Bagus +1
Zach Gates
Hanya melihat ini sekarang, tetapi bagaimana print(end=c[c!=d])?
Sp3000
1
@ Sp3000 Wow, saya tidak pernah terhubung dengan argumen utama print menjadi opsional berarti hanya bisa dipanggil dengan argumen akhir, dan itu bisa berisi string. Itu trik yang sangat berguna secara umum. Anda harus memberi tip.
xnor
3

Javascript ES6, 52 byte

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

Pemakaian:

>> f("global","glossary")
"glo"
Dendrobium
sumber
Tidak bekerja dengan ada,aca...
flawr
Ups, diperbaiki. Lupa untuk membunuh pemfilteran setelah string tidak lagi cocok.
Dendrobium
1
Anda tidak perlu menyebutkan nama fungsinya, sehingga Anda dapat meninggalkanf=
Ypnypn
1
Anda bisa melakukannya lebih kecil dengan peta(a,b)=>[...a].map((e,i)=>e==b[i]?e:b='').join``
Shaun H
2

Retina , 14 byte

Menggunakan ide yang sama dengan kirbyfan64sos . Sayangnya, meskipun Martin mengklaim bahwa pada akhirnya Match mode akan menampilkan cara untuk mencetak grup penangkap, itu belum diimplementasikan. Jika tidak, (.*).* \1dapat digunakan bersama dengan 2 byte atau lebih untuk beberapa opsi string konfigurasi yang belum ada.

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

Setiap baris akan masuk file sendiri, dengan 1 byte ditambahkan per file tambahan. Atau, jalankan dalam satu file dengan -sbendera.

mbomb007
sumber
Regex yang setara gagal untuk mencocokkan dalam vim karena keserakahan (dan regex yang tidak serakah akan cocok dengan substring terpendek , yaitu kosong), apakah Anda yakin itu berfungsi?
Random832
@ Random832 Coba gunakan tester ganti regex ini , dengan opsi .NET dicentang. Atur operasi untuk "mengganti", dan letakkan pola di kotak yang benar. Itu tidak gagal untuk mencocokkan jika harus ada satu. Bagaimana mungkin gagal karena keserakahan? Itulah satu-satunya alasan kerjanya. \1memastikan bahwa kedua kata dimulai dengan awalan yang sama. Jadi tidak peduli seberapa serakah (.*)itu, \1sama saja.
mbomb007
Dalam vim ia menolak untuk mencocokkan sama sekali - saya pikir itu menemukan string yang lebih panjang untuk yang pertama (. *), Kemudian gagal mencocokkannya dengan \ 1, kemudian tidak mundur dengan benar ke string yang lebih pendek.
Acak832
@ Random832 Maka Anda perlu menemukan sesuatu yang lain untuk menguji regex Anda.
mbomb007
2

K, 24 byte

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

Temukan minimum panjang setiap string. ( (&/#:'x)). Pangkas setiap string dengan panjang itu ( #'x). Kemudian membandingkan, mengolesi dan menjumlahkan urutan yang dihasilkan:

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

Akhirnya, ambil banyak karakter dari string pertama yang disediakan (#*x ).

Dalam aksi:

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

Powershell, 65 byte

Bandingkan string, menyusutkan yang pertama hingga cocok (cetak dan keluar) atau string adalah nol dan loop berakhir.

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

Julia, 62 byte

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

Tidak Disatukan:

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

Memperbaiki masalah (dengan biaya besar 14 byte) berkat xnor!

Alex A.
sumber
2

C99, 73 byte

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

Mirip dengan jawaban ini , tetapi lebih pendek dan memenuhi spesifikasi (mengambil input dari stdin).

Komintern
sumber
Spec tidak mengatakan input harus berasal dari stdin. Ini sebenarnya lebih panjang dari jawaban yang lain jika Anda menambahkan #include<stdio.h>, yang diperlukan untuk dikompilasi oleh program.
musarithmia
@AndrewCashner - Tidak perlu menggunakan stdin, tetapi perlu mengambil input. Jawaban lainnya adalah hard-coded. Juga, gcc merengek tentang penggunaan implisit, tetapi kompilasi baik-baik saja tanpa menyertakan.
Komintern
Jauh lebih pendek tanpa temporaries: main(int c,char**a){for(;*a[1]==*a[2]++;putchar(*a[1]++));}(59 byte).
Toby Speight
2

MATLAB, 50 40 byte

Menentukan fungsi yang menerima 2 string sebagai input, output ke jendela perintah

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

Solusi ini akan bekerja untuk semua string, output

ans =

   Empty string: 1-by-0

jika tidak ada kecocokan yang diberikan.

Dapat di-golf dengan menggunakan skrip alih-alih fungsi (menggunakan variabel lokal a, b) (-16 bytes).

jadi mendapatkan 34 Bytes

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

Gaya fungsi (yang tampaknya menjadi gaya yang diterima), menghasilkan

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

(Terima kasih @Stewie Griffin)

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

Perl 6 , 28 byte

Saya datang dengan dua yang mengambil nilai-nilai mereka dari STDIN yang didasarkan pada jawaban Perl 5.

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

Yang pertama membutuhkan tepat satu ruang di antara input, sementara yang lain membutuhkan setidaknya satu karakter spasi putih di antara input.


Itu sedikit lebih pendek daripada hal pertama yang saya coba yang mengambil nilai dari baris perintah.

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

atau bahkan versi lambda:

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

Meskipun ini jauh lebih mudah untuk disesuaikan sehingga menerima sejumlah string input, dengan biaya hanya satu pukulan.

{[~] 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 `(@_,)`
Brad Gilbert b2gills
sumber
2

Japt, 27 byte

Japt adalah versi singkat dari Ja vaScri pt . Penerjemah

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

(String masuk ke kotak input seperti: "global" "glossary")

Kode ini persis sama dengan JS berikut:

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

Saya belum menerapkan fungsi anonim, $...$untuk itulah: apa pun di antara tanda dolar dibiarkan tak tersentuh dalam peralihan ke JS. Setelah saya menambahkan fungsi, kode 21-byte ini sudah cukup:

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

Dan setelah saya menerapkan beberapa fitur lagi, idealnya akan menjadi 18 byte:

UmXY{AxX=VgY ?X:AP

Saran diterima!


Jadi ternyata program ini hanya 15 byte di Japt modern:

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

Cobalah online!

Produksi ETH
sumber
2

MATL , 11 9 byte

y!=XdYpf)

Cobalah online!

(-2 byte terima kasih kepada 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
sundar - Pasang kembali Monica
sumber
Terima kasih! The yide yang cukup bagus, saya telah mencoba hal-hal seperti awal itibukan 1Gw, tapi tidak berpikir menggunakan yuntuk itu.
sundar - Reinstate Monica
1

Clojure / ClojureScript, 51

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

Cukup mudah. Sayangnya ruang-ruang di sekitar penataan parameter diperlukan (itulah [a & b]masalahnya). Bukan yang terpendek tapi saya mengalahkan beberapa jawaban lain dalam bahasa yang suka menyombongkan tentang kesederhanaan mereka jadi saya akan mempostingnya.

MattPutnam
sumber
1

Python 2, 50 byte

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

Memasukkan

Input diambil sebagai dua string:

"global", "glossary"

Keluaran

Outputnya adalah setiap karakter diikuti oleh spasi; yang, mudah-mudahan, bukan masalah. Namun, jika ya, saya akan mengedit jawaban saya.

g l o 
Zach Gates
sumber
Saya cukup yakin ini tidak valid; spec dengan jelas memberikan format output sebagai string tanpa spasi.
lirtosiast
Ya, tapi inputnya juga diberikan dalam format "global" , "glossary"(dua string terpisah) .. Berapa banyak jawaban lain yang mengikuti surat itu? @ThomasKwa
Zach Gates
"take two strings" adalah bahasa yang digunakan oleh OP; biasanya ketika sesuatu seperti itu disebutkan tanpa kualifikasi apa pun, itu merujuk ke salah satu dari I / O standar kami , yang berarti kita dapat mengambil satu string dari baris perintah dan satu dari STDIN, atau array dari dua string, atau apa pun yang mengikuti mereka aturan.
lirtosiast
Saya pikir Anda terlalu serius menanggapi jawaban saya. Ini hanya pengiriman yang menyenangkan dan upaya terbaik saya untuk mengalahkan built-in. Jika OP tidak menyukai format output, maka jadikanlah; Saya akan menghapus jawaban saya. @ThomasKwa
Zach Gates
Bagaimana dengan print(exit()if a!=b else a,end='')? Saya tidak tahu apakah itu akan berhasil atau tidak, tetapi mungkin
Beta Decay
1

TeaScript, 16 byte 20

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

Membawa setiap input dipisahkan oleh spasi.

Downgoat
sumber
1

PHP, 52 byte

Tidak spektakuler tetapi berhasil:

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

Membawa dua argumen baris perintah:

php prefix.php department depart
masukkan nama pengguna di sini
sumber
PHP7 memungkinkan Anda menyimpan byte lain while(($a=$argv)[1][$i]==$a[2][$i])echo$a[1][$i++];- Satu-satunya solusi PHP7 (dan yang terbaik yang bisa saya lakukan dengan @ 50 byte) <?=substr(($a=$argv)[1],0,strspn($a[1]^$a[2],~ÿ));- Pastikan editor Anda dalam mode ascii, penting agar ~ÿtidak dikonversi ke unicode.
Leigh