Tulis program yang mengambil 2 string sebagai input, dan mengembalikan awalan umum terpanjang. Ini adalah kode-golf , 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"
""
"aca", "aba"
.global
danGLOSSARY
kembaliglo
atau''
?Jawaban:
Python 3, 54 byte
Terima kasih Python karena memiliki fungsi bawaan untuk tugas ini! : D
Mengambil input sebagai dua kata yang dipisahkan oleh spasi seperti
glossary global
.sumber
Haskell, 29 byte
Pemakaian:
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.sumber
Pyth,
87 byteTerima 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
sumber
e|@F._M.z]k
.#...q
adalah satu byte kurang dari itu, saya akan mengedit dalam kode lengkap, saya kira itu membingungkan"abc", "def"
dan Anda dapat menggunakanQ
sebagai ganti.z
C ++,
10110099 byteMembaca 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.
sumber
for
pernyataan yang indah dan menakutkan ...int i
di ruang global (sehingga akan diinisialisasi 0)Haskell, 38 byte
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.
sumber
CJam,
12119 byteIni 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
sumber
l_q.-
.APL, 13
Ini adalah fungsi yang mengambil array dari dua string, dan mengembalikan awalan:
sumber
AppleScript, 215 Bytes
Dan saya berusaha sangat keras ...; (
Saya ingin melihat seberapa baik AppleScript dapat melakukan ini, dan manusia itu tidak dibangun untuk perbandingan string.
sumber
tell app "System Events" to <something>
. Ini adalah menarik untuk melihat bagaimana berurusan dengan hal semacam ini, meskipun. @ kirbyfan64sosrs , 14 byte
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.
sumber
sed, 18
Saya memiliki sesuatu yang jauh lebih lama dan lebih rumit dalam pikiran, jadi kredit untuk ide ini masuk ke @ kirbyfan64sos .
Termasuk +1 untuk
-r
opsi sed.sumber
CJam,
12826Cobalah 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.
sumber
C #,
201147 byteSaya tahu itu tidak terlalu kompetitif. Saya hanya ingin melihat seperti apa bentuknya.
EDIT: Terima kasih Ash Burlakzenko, Berend, dan Dennis_E
sumber
using System.*
?.ForEach(x=>Console.Write(x))
dapat disingkat menjadi.ForEach(Console.Write)
using System.Collections.Generic;
tidak perlu. Shave off satu byte lagi dengan menghapus spasi daristring[] a
.Contains
perlu. 2-Anda dapat menyimpan beberapa byte dengan menghapususing System;
dan mengatakanSystem.Console.Write;
3-Kode ini mengembalikan hasil yang salah ("a") untuk input "aab", "aaab", karenaIndexOf
. Perbaikan terpendek yang dapat saya pikirkan adalah menggunakana[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);}} "Common Lisp, 39
Mengambil dua argumen string, menentukan indeks i di mana mereka berbeda, dan mengembalikan substring dari 0 ke i .
sumber
Perl 5,
201918 byte19 byte, ditambah 1 untuk
-E
bendera, bukan-e
: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
-pe
sebagai berikut, untuk menyimpan byte (terima kasih!):Dan kemudian Luk Storms menyarankan menggunakan
-nE
sebagai berikut untuk menyimpan byte lain (terima kasih!):(Saya menghitung
-E
sebagai satu byte, bukan standar-e
, tetapi satu-n
atau-p
dua. Kesan saya adalah bahwa itu SOP di sini.)sumber
-M5.010
, bila diperlukan, gratis" . Per pos meta yang sama,-pe
atau-ne
akan menjadi 1 byte tambahan, bukan 2. Jadiperl -nE 'say/^(.*).* \1/'
akan mencetak 16 byte.Python 3, 72
31 byte disimpan berkat FryAmTheEggman. 8 disimpan berkat DSM.
sumber
zip
? : Dinput()
s ke dalamzip
dan menyimpana
danb
mengikat.Python 3, 47
Fungsi yang mengambil daftar
w
dua kata, dan mencetak awalan umum sebelum mengakhiri dengan kesalahan.print
Fungsi Python 3 memungkinkan Anda mencetak string dengan satu sama lainprint(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 manac!=d
, mengakhiri eksekusi ketika dua huruf tidak sama dijumpai.Eksplisit untuk loop adalah satu karakter lebih panjang dari pemahaman daftar:
sumber
print(end=c[c!=d])
?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.Javascript ES6, 52 byte
Pemakaian:
sumber
ada,aca
...f=
(a,b)=>[...a].map((e,i)=>e==b[i]?e:b='').join``
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,
(.*).* \1
dapat digunakan bersama dengan 2 byte atau lebih untuk beberapa opsi string konfigurasi yang belum ada.Setiap baris akan masuk file sendiri, dengan 1 byte ditambahkan per file tambahan. Atau, jalankan dalam satu file dengan
-s
bendera.sumber
\1
memastikan bahwa kedua kata dimulai dengan awalan yang sama. Jadi tidak peduli seberapa serakah(.*)
itu,\1
sama saja.K, 24 byte
Temukan minimum panjang setiap string. (
(&/#:'x)
). Pangkas setiap string dengan panjang itu (#'x
). Kemudian membandingkan, mengolesi dan menjumlahkan urutan yang dihasilkan:Akhirnya, ambil banyak karakter dari string pertama yang disediakan (
#*x
).Dalam aksi:
sumber
Powershell, 65 byte
Bandingkan string, menyusutkan yang pertama hingga cocok (cetak dan keluar) atau string adalah nol dan loop berakhir.
sumber
Julia, 62 byte
Tidak Disatukan:
Memperbaiki masalah (dengan biaya besar 14 byte) berkat xnor!
sumber
C99, 73 byte
Mirip dengan jawaban ini , tetapi lebih pendek dan memenuhi spesifikasi (mengambil input dari stdin).
sumber
#include<stdio.h>
, yang diperlukan untuk dikompilasi oleh program.main(int c,char**a){for(;*a[1]==*a[2]++;putchar(*a[1]++));}
(59 byte).MATLAB,
5040 byteMenentukan fungsi yang menerima 2 string sebagai input, output ke jendela perintah
Solusi ini akan bekerja untuk semua string, output
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
Gaya fungsi (yang tampaknya menjadi gaya yang diterima), menghasilkan
(Terima kasih @Stewie Griffin)
sumber
@(a,b)a(1:find([diff(char(a,b)) 1],1)-1)
. =)Perl 6 , 28 byte
Saya datang dengan dua yang mengambil nilai-nilai mereka dari STDIN yang didasarkan pada jawaban Perl 5.
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.
atau bahkan versi lambda:
Meskipun ini jauh lebih mudah untuk disesuaikan sehingga menerima sejumlah string input, dengan biaya hanya satu pukulan.
sumber
Japt, 27 byte
Japt adalah versi singkat dari Ja vaScri pt . Penerjemah
(String masuk ke kotak input seperti:
"global" "glossary"
)Kode ini persis sama dengan JS berikut:
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:Dan setelah saya menerapkan beberapa fitur lagi, idealnya akan menjadi 18 byte:
Saran diterima!
Jadi ternyata program ini hanya 15 byte di Japt modern:
Cobalah online!
sumber
MATL ,
119 byteCobalah online!
(-2 byte terima kasih kepada Giuseppe)
sumber
y
ide yang cukup bagus, saya telah mencoba hal-hal seperti awaliti
bukan1Gw
, tapi tidak berpikir menggunakany
untuk itu.Clojure / ClojureScript, 51
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.sumber
Python 2, 50 byte
Memasukkan
Input diambil sebagai dua string:
Keluaran
Outputnya adalah setiap karakter diikuti oleh spasi; yang, mudah-mudahan, bukan masalah. Namun, jika ya, saya akan mengedit jawaban saya.
sumber
"global" , "glossary"
(dua string terpisah) .. Berapa banyak jawaban lain yang mengikuti surat itu? @ThomasKwaprint(exit()if a!=b else a,end='')
? Saya tidak tahu apakah itu akan berhasil atau tidak, tetapi mungkinTeaScript, 16 byte
20Membawa setiap input dipisahkan oleh spasi.
sumber
PHP, 52 byte
Tidak spektakuler tetapi berhasil:
Membawa dua argumen baris perintah:
sumber
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.