2 টি স্ট্রিংয়ের দীর্ঘতম সাধারণ উপসর্গ


30

একটি প্রোগ্রাম লিখুন যা ইনপুট হিসাবে 2 টি স্ট্রিং নেয় এবং দীর্ঘতম সাধারণ উপসর্গটি প্রদান করে। এটি , তাই বাইটের সংক্ষিপ্ত পরিমাণে জয়ের উত্তর।

Test Case 1:

"global" , "glossary"
"glo"


Test Case 2:

"department" , "depart"
"depart"

Test Case 3:

"glove", "dove"
""

1
আরেকটি ভাল পরীক্ষার কেস হ'ল "aca", "aba"
মরগান থ্র্যাপ

2
আপনি কি এমন একটি সম্পূর্ণ প্রোগ্রাম চান যা STDIN থেকে ইনপুট করে STDOUT এ প্রিন্ট করে, বা ফাংশনগুলি ঠিক আছে?
এক্সনর

2
আমরা কি ধরে নিতে পারি ইনপুটটিতে নতুন লাইন থাকবে না? ইনপুট কোন অক্ষর থাকবে?
ডাউনওয়েট

5
সাধারণ দ্রষ্টব্য: একটি রেজেক্স ভিত্তিক সমাধান ব্যবহার করা লোকদের নিজের লোকেদের পরীক্ষা না করেই অন্য ব্যক্তির রেজেক্স উত্তরগুলি অনুলিপি করা উচিত নয়; এটি সমস্ত রেজেক্স ইঞ্জিনে কাজ করে না। বিশেষত, এটি এনভি এবং ভিমে বিভিন্ন (উভয় ভুল) উত্তর দেয়।
র্যান্ডম 832

1
প্রদত্ত উদাহরণগুলির সমস্তগুলি ছোট হাতের অক্ষরে রয়েছে তবে কী আমাদের কেস সংবেদনশীলতা নিয়ে চিন্তা করতে হবে? উদাহরণস্বরূপ, উচিত globalএবং GLOSSARYফিরে আসতে gloবা ''?
অ্যাডমবর্কবার্ক

উত্তর:


22

পাইথন 3, 54 বাইট

পাইথনকে এই কাজের জন্য একটি বিল্ট-ইন ফাংশন থাকার জন্য ধন্যবাদ! : ডি

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

একটি স্পেস দ্বারা পৃথক দুটি শব্দ হিসাবে ইনপুট নেয় glossary global


21

হাস্কেল, 29 বাইট

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

ব্যবহার:

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

পুনরাবৃত্তভাবে %প্যাটার্ন মিলের মাধ্যমে বাইনারি ফাংশন সংজ্ঞায়িত করে । সমান প্রথম অক্ষরযুক্ত দুটি স্ট্রিংয়ের সাথে, এটি প্রথম অক্ষর নেয় এবং স্ট্রিংয়ের বাকী অংশগুলির কার্যক্রমে এটিকে প্রিপেন্ড করে। অন্য যে কোনও কিছুই, খালি স্ট্রিং দেয়।


11

পাইথ, 8 7 বাইট

e@F._MQ

1 বাইট বন্ধের জন্য @ আইসএইচজি ধন্যবাদ

কোট করা এবং কমা পৃথকীকরণের মতো ইনপুট নেয় "abc", "acc"। ফলাফলটি খালি স্ট্রিং হয়ে গেলে এটি একটি ত্রুটিতে (তবে স্টাডাউট খালি ছেড়ে দেয়) বের হয়। যদি তা অগ্রহণযোগ্য হয় তবে 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তার চেয়ে একটি বাইট কম, আমি পুরো কোডটি সম্পাদনা করব, আমি অনুমান করি যে বিভ্রান্তিকর
ফ্রাইআম দ্য এজিগম্যান

1
ফর্মটি ইনপুট নিন "abc", "def"এবং আপনি Qপরিবর্তে ব্যবহার করতে পারেন.z
isaacg

10

সি ++, 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, একটি স্ট্রিং থেকে বর্তমান অবস্থানে অক্ষরটি মুদ্রণ করে যখন বর্তমান অবস্থানে অক্ষরটি অন্য স্ট্রিংয়ের একই অবস্থানে অক্ষরের সমান হয়।

একটি বাইট সংরক্ষণ করার জন্য জেরেজেসকে ধন্যবাদ ।


4
এটি forবিবৃতিটির একটি সুন্দর এবং ভয়ঙ্কর ব্যবহার ...
জোশপবারন

স্ট্রিংগুলি সমান হলে লুপটি শেষ করতে ব্যর্থ হবে।
জন ট্রান্টভেইন

2
সাদা স্থানযুক্ত স্ট্রিংয়ের জন্য কাজ করবে না। আপনি int iগ্লোবাল স্পেসে তৈরি করে একটি বাইট সংরক্ষণ করতে পারেন (যাতে এটি 0 টি প্রাথমিক করা হবে)
জেরেজেস

@ জনট্রন্টভিনে আমার মনে হয় সেই মামলাটি ইউবি (?) Is যদিও এটি আমার জন্য কাজ করে। (gcc-5.1)
সুইপারপোটো

9

হাস্কেল, 38 বাইট

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

ব্যবহারের উদাহরণ: ( ((map fst.fst.span(uncurry(==))).).zip ) "global" "glossary"-> "glo"

জোড় অক্ষরের তালিকায় উভয় ইনপুট স্ট্রিংটি জিপ করুন। এটির বাইরে দুটি তালিকা তৈরি করুন: প্রথমটি সমস্ত জোড়া সহ প্রথমটি যতক্ষণ না উভয় অক্ষর সমান, দ্বিতীয়টি সমস্ত বিশ্রামের সাথে। দ্বিতীয় তালিকাটি ড্রপ করুন এবং প্রথম তালিকা থেকে সমস্ত অক্ষর বের করুন।


9

সিজোম, 12 11 9 বাইট

l_q.-{}#<

এটি ইউনিক্স-স্টাইল লাইনের সমাপ্তি সহ দুটি পৃথক লাইনের স্ট্রিংগুলি পড়বে, অর্থাৎ <string>\n<string>\n,।

-১ বাইটের জন্য @ মার্টিনব্যাটনারকে এবং @ -২ বাইটের জন্য @ জিমি ২৩০১৩ ধন্যবাদ!

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

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.

ডার্ন, আমি বিশ্বাস করতে পারি না আমার প্রথম উত্তরটি এত কাছে ছিল!
জিওকাভেল

1
আপনি একটি পেছনের নতুন লাইন এবং ব্যবহার ধরে ধরে কিছুটা প্রতারণা করতে পারেন l_q.-
জিমি 23013

@ jimmy23013 ইউনিক্স-এর মতো ওএস-এর ইনপুটটির জন্য এটি আদর্শ, তবে কেন নয়? ধন্যবাদ!
ডেনিস

8

এপিএল, 13

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

এটি এমন একটি ফাংশন যা দুটি স্ট্রিংয়ের অ্যারে নেয় এবং উপসর্গটি প্রদান করে:

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

এপিএল বর্ণমালাটি বাইট-আকারের অক্ষরের একটি বর্ণমালা এটি বলা কি সত্যিই ন্যায্য? নাকি এই স্ট্যান্ডার্ড অনুশীলনটি প্রায় কাছাকাছি?
ফিলিপিকি

9
@ ফিলিপিক উত্তরগুলি এখানে ভাষার সবচেয়ে স্বাভাবিক এনকোডিং ব্যবহার করে। এপিএলের নিজস্ব কোড পৃষ্ঠা রয়েছে যার উপর প্রতিটি অক্ষর একটি একক বাইট।
অ্যালেক্স এ।

7

অ্যাপলস্ক্রিপ্ট, 215 বাইট

এবং আমি অনেক চেষ্টা করেছি ...; (

x সেট করুন (প্রদর্শন ডায়ালগ "" "ডিফল্ট উত্তর" ") এর পাঠ্য ফিরে এসেছে
একটিতে সেট করুন (প্রদর্শন ডায়ালগ "" "ডিফল্ট উত্তর" ") এর পাঠ্য ফিরে এসেছে
এন সেট 1
"" এ সেট করুন
x এর আইটেম এন = এ এর ​​আইটেম n এর সময় পুনরাবৃত্তি করুন
ও ও এক্স এর আইটেম এন সেট করুন
n + 1 এ সেট করুন
শেষ
ণ

আমি দেখতে চেয়েছিলাম অ্যাপলস্ক্রিপ্টটি এটি কতটা ভালভাবে টানতে পারে, এবং মানুষ এটি স্ট্রিং তুলনার জন্য তৈরি নয় built


12
অ্যাপলস্ক্রিপ্ট কোনও কিছুর জন্য নির্মিত হয়নি ।
kirbyfan64sos

আমি ভয়ঙ্কর গল্ফ ছাড়াও এটির জন্য ব্যবহার করি tell app "System Events" to <something>। এটা তোলে হয় কিভাবে এটি কাপড় এই ধরনের সঙ্গে পুলিশ দেখতে, যদিও আকর্ষণীয়। @ kirbyfan64sos
অ্যাডিসন

6

আরএস , 14 বাইট

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

লাইভ ডেমো এবং পরীক্ষার কেস।

এটি বেশ সহজ। এটি কেবলমাত্র ... দীর্ঘতম সাধারণ উপসর্গের সাথে মেলে এবং বাকী স্ট্রিংগুলি সরিয়ে দেয়। যদি কোনও দীর্ঘকালীন সাধারণ উপসর্গ না থাকে তবে এটি সমস্ত কিছু সাফ করে।


6

সেড, 18

আমার মনে আরও দীর্ঘ এবং আরও জটিল কিছু ছিল, তাই এই ধারণার জন্য কৃতিত্ব @ kirbyfan64sos এ যায়

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

-rসিড করার বিকল্পের জন্য +1 অন্তর্ভুক্ত ।


আপনার আসল ধারণাটি কী ছিল?
kirbyfan64sos

@ kirbyfan64sos এটি মূলত একের পর এক চরিত্রের মধ্য থেকে লুপিং এবং অমিল বন্ধ করার সাথে জড়িত। এটি কেবল একটি ধারণা ছিল - এর পিছনে কোনও কোড নেই।
ডিজিটাল ট্রমা

6

সিজেম, 12 8 26

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

এটি অনলাইনে চেষ্টা করুন।

(ডেনিসের উত্তর দেখার পরে .- এর পরিবর্তে ব্যবহার করার ধারণা পেয়েছেন))

সমস্ত প্রান্তের কেস সহ, আমার মতো সিজেএম শিক্ষানবিসকে এটি সংক্ষিপ্ত রাখা শক্ত হয়ে পড়েছিল। আশা করি, এটি কমপক্ষে সমস্ত ক্ষেত্রে কাজ করে।


6

সি #, 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);}}

আমি জানি এটি ভয়াবহ প্রতিযোগিতামূলক নয়। আমি দেখতে চেয়েছিলাম এটি দেখতে কেমন হবে।

সম্পাদনা: ধন্যবাদ অ্যাশ বার্লাকজেনকো, বেরেন্ড এবং ডেনিস_ই


2
250 বাইটের নিচে কেবল সি # উত্তর পাওয়া প্রতিযোগিতামূলক। এছাড়াও, আপনি ঠিক করতে পারবেন না using System.*?
তালি

1
.ForEach(x=>Console.Write(x))সংক্ষিপ্ত করা যেতে পারে.ForEach(Console.Write)
অ্যাশ বুরালাকজেনকো

1
using System.Collections.Generic;অপ্রয়োজনীয় স্থানটি সরিয়ে আরও একটি বাইট শেভ করুন string[] a
বেরেন্ড

2
1- Containsঅপ্রয়োজনীয়। 2-আপনি সরিয়ে কয়েক বাইট সংরক্ষণ করতে পারবেন using System;এবং বলছে System.Console.Write;কারণে, 3-এই কোড আয় ভুল ফলাফল ( "একটি") ইনপুট জন্য "Aab", "aaab" IndexOf। সবচেয়ে কম ফিক্স আমি ব্যবহার করছে মনে হতে পারে a[0].Take(a[1].Length)এই 147 বাইট দীর্ঘ: "System.Linq ব্যবহার করা; বর্গ একটি {স্ট্যাটিক ভয়েড মেন (স্ট্রিং [] ক) {একটি [0] .Take (ক [1] .Length) .TakeWhile ((সি, আই) => এ [১] [আমি] == গ)। টু লিস্ট ()। ফরইচ (সিস্টেম.কনসোল.ব্রাইট);}} "
ডেনিস_ ই

আমি বিরতি পেলে মন্তব্যের জন্য ধন্যবাদ আমি তাদের সকলের বিশেষত ডেনিস_ই এর মন্তব্যগুলিকে ভাল করে দেখব।
জাকোথাদশো

5

কমন লিস্প, 39

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

দুটি স্ট্রিং আর্গুমেন্ট নেয়, সূচি i নির্ধারণ করে যেখানে তারা আলাদা হয় এবং 0 থেকে i তে একটি স্ট্রিং দেয় ।


5

পার্ল 5, 20 19 18 বাইট

এর -Eপরিবর্তে পতাকাটির জন্য 19 বাইট, প্লাস 1 -e:

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

এই নির্লজ্জভাবে থেকে অনুলিপি করা হয়েছে ডিজিটাল ট্রমা এর কিন্তু উত্তর । এটি ধরে নিয়েছে ইনপুটটি শূন্যস্থান ছাড়াই (বা প্রথমটির আগে) এবং তাদের মধ্যে একটি স্পেস সহ কয়েকটি শব্দ।


হালনাগাদ:

-peবাইট বাঁচানোর জন্য (ধন্যবাদ!) নিম্নলিখিত হিসাবে ব্যবহার করার পরামর্শ দিচ্ছে না এইসুইটস ব্ল্যাকনোট :

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

এবং তারপরে লুক স্টর্মস-nE আরও একটি বাইট (ধন্যবাদ!) বাঁচাতে নীচে ব্যবহার করার পরামর্শ দিয়েছিল :

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

(আমি -Eস্ট্যান্ডার্ডের পরিবর্তে এক বাইট হিসাবে গণনা করছি -eতবে -nবা -pদুটি হিসাবে My আমার ধারণাটি এটি এখানে প্রায় এসওপি।


1
" -M5.010, যখন প্রয়োজন হয়, বিনামূল্যে" । একই মেটা পোস্ট প্রতি, -peবা -ne2 না করে 1 অতিরিক্ত বাইট হবে, সুতরাং perl -nE 'say/^(.*).* \1/'16 বাইট স্কোর করবে।
এইসুইটিআইস ব্ল্যাকনট

4

পাইথন 3, 72

31 বাইট সংরক্ষিত FryAmTheEggman ধন্যবাদ। 8 ডিএসএমকে ধন্যবাদ রক্ষা করেছে।

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

পাইথন প্রোগ্রামাররা ছাড়া কী করত zip? : ডি
বিটা ক্ষয়

7
@ বেটাডেকে আমাদের উড়ান সর্বদা খোলা থাকবে।
মরগান থ্র্যাপ

আপনি করা হতে পারে input()মধ্যে গুলি zipএবং সংরক্ষণ করুন aএবং bবাঁধাই।
ডিএসএম

@ ডিএসএম ওও, ভাল কথা। ধন্যবাদ!
মরগান থ্রাপ

4

পাইথন 3, 47

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

একটি ফাংশন যা wদুটি শব্দের একটি তালিকা নেয় এবং ত্রুটি দিয়ে শেষ করার আগে সাধারণ উপসর্গটি মুদ্রণ করে।

পাইথন 3 এর printফাংশন আপনাকে একে অপরের সাথে স্ট্রিং ফ্লাশ প্রিন্ট করতে দেয় print(end=c)(এই সংক্ষিপ্ত বাক্য গঠন সহ 3 বাইট সংরক্ষণের জন্য Sp3000 ধন্যবাদ)। এটি বার বার শব্দ থেকে দুটি অক্ষর নেয় এবং প্রথম অক্ষরের প্রথম মুদ্রণ করে। সূচকটি c[c!=d]একটি সীমার বাইরে ত্রুটি দেয় যেখানে c!=dদুটি অসম অক্ষরের মুখোমুখি হওয়ার সাথে সাথে মৃত্যুদন্ড কার্যকর করা হয়।

লুপের জন্য একটি স্পষ্টত তালিকা অনুধাবনের চেয়ে দীর্ঘস্থায়ী:

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

কি দারুন! এমনকি আমি একটি ফাংশন ব্যবহার সম্পর্কে ভাবেনি! সুন্দর. +1
জ্যাচ গেটস 21

শুধু এখন এই দেখেছি, কিন্তু কিভাবে print(end=c[c!=d])?
Sp3000

1
@ এসপি 3000 বাহ, আমি কখনই সংযুক্ত করি নি যে argumentচ্ছিক printহওয়ার মূল যুক্তিটির অর্থ এটি কেবল শেষ যুক্তির সাহায্যে বলা যেতে পারে এবং এতে স্ট্রিং থাকতে পারে। এটি সাধারণভাবে একটি সত্যই কার্যকর কৌশল। আপনি একটি টিপ করা উচিত।
xnor

3

জাভাস্ক্রিপ্ট ES6, 52 বাইট

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

ব্যবহার:

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

ada,aca... এর সাথে কাজ করে না
flawr

উফফফ, ফিক্সড স্ট্রিং আর মেলে না তার পরে ফিল্টারিং হত্যা করতে ভুলে গেছেন।
ডেনড্রোবিয়াম

1
আপনার ফাংশনটির নাম রাখার দরকার নেই, তাই আপনিf=
Ypnypn

1
আপনি মানচিত্রের সাহায্যে এটি আরও ছোট করতে পারেন(a,b)=>[...a].map((e,i)=>e==b[i]?e:b='').join``
শন এইচ

2

রেটিনা , 14 বাইট

Kirbyfan64sos হিসাবে একই ধারণা ব্যবহার করে । দুর্ভাগ্যক্রমে, মার্টিনের দাবি সত্ত্বেও অবশেষে ম্যাচ মোড ক্যাপচারিং গ্রুপগুলি মুদ্রণের জন্য একটি উপায় দেখায়, এটি এখনও কার্যকর করা হয়নি। অন্যথায়, (.*).* \12 বাইট বা ততোধিক কিছু না-বিদ্যমান-বিদ্যমান কনফিগারেশন স্ট্রিং বিকল্পের সাথে ব্যবহার করা যেতে পারে।

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

প্রতিটি লাইন অতিরিক্ত ফাইল প্রতি 1 বাইট যুক্ত করে তার নিজস্ব ফাইলে যাবে বিকল্পভাবে, -sপতাকা সহ একটি একক ফাইলে চালান ।


সমপরিমাণ রেজেক্স লোভের কারণে ভিমে ম্যাচ করতে ব্যর্থ হয় (এবং একটি লোভী রেজেক্স সংক্ষিপ্ততম স্ট্রিংয়ের সাথে মিলবে , অর্থাৎ ফাঁকা), আপনি কি নিশ্চিত যে এটি কাজ করে?
র্যান্ডম 832

@ র্যান্ডম 832 পরীক্ষার .NET বিকল্পের সাহায্যে পরীক্ষামূলক প্রতিস্থাপনকারী এই রেজেক্সটি ব্যবহার করে দেখুন । "প্রতিস্থাপন" করতে অপারেশনটি সেট করুন, এবং সঠিক বাক্সগুলিতে নিদর্শনগুলি রাখুন। এটি থাকাতে এটি মিলতে ব্যর্থ হয় না। লোভের কারণে কীভাবে এটি ব্যর্থ হতে পারে? এটি কাজ করার একমাত্র কারণ। \1উভয় শব্দ একই উপসর্গ দিয়ে শুরু হয় তা নিশ্চিত করে। সুতরাং যত লোভী হোন না কেন (.*), \1একই রকম।
mbomb007

ভিমে এটি একেবারেই মেলাতে অস্বীকার করে - আমি মনে করি এটি প্রথম (। *) এর জন্য দীর্ঘতর স্ট্রিংটি খুঁজে পাচ্ছে, তারপরে এটির সাথে match 1 এর সাথে মিলতে ব্যর্থ হচ্ছে, তবে সংক্ষিপ্ত স্ট্রিংগুলিতে সঠিকভাবে ব্যাকট্র্যাকিং নয় not
র্যান্ডম 832

@ র্যান্ডম 832 তারপরে আপনার রেজিক্সগুলি পরীক্ষা করার জন্য আপনাকে অন্য কিছু খুঁজে বের করতে হবে।
mbomb007

2

কে, 24 বাইট

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

প্রতিটি স্ট্রিংয়ের দৈর্ঘ্যের সর্বনিম্ন সন্ধান করুন। ( (&/#:'x))। প্রতিটি স্ট্রিংকে সেই দৈর্ঘ্যে ছাঁটা করুন ( #'x)। তারপরে তুলনা করুন, স্মিয়ার এবং ফলাফলের ক্রমটি যোগ করুন:

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

অবশেষে, সরবরাহ করা স্ট্রিংগুলির প্রথমটি থেকে অনেকগুলি অক্ষর নিন #*x

পদক্ষেপে:

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

2

পাওয়ারশেল, 65 বাইট

স্ট্রিংগুলির সাথে তুলনা করুন, এটি সংযুক্ত হওয়া (মুদ্রণ এবং প্রস্থান) বা স্ট্রিংটি নাল এবং লুপটি শেষ না হওয়া অবধি প্রথম সঙ্কুচিত করুন।

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

2

জুলিয়া, 62 বাইট

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

এক্সনোরকে ধন্যবাদ একটি সমস্যা (14 বাইটের মোটা ব্যয়ে) স্থির করে!


2

সি 99, 73 বাইট

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

এই উত্তরের অনুরূপ , তবে সংক্ষিপ্ত এবং স্পেকের সাথে মিলিত হয় (স্টিডিনের কাছ থেকে ইনপুট নেয়)।


স্পেক স্ট্যান্ডিন থেকে ইনপুট আসতে হবে না বলে। আপনি যুক্ত করলে অন্য উত্তরগুলির তুলনায় এটি আসলে দীর্ঘতর #include<stdio.h>, যা প্রোগ্রামটি সংকলনের জন্য প্রয়োজনীয়।
musarithmia

@ অ্যান্ড্রুক্যাশনার - এটি স্টিডিনে থাকার দরকার নেই, তবে এর জন্য ইনপুট নেওয়া দরকার। অন্য উত্তরটি হার্ড-কোডেড। এছাড়াও, অন্তর্নিহিত ব্যবহার সম্পর্কে জিসিসি শ্বেত করে, তবে এটি অন্তর্ভুক্ত না করে সূক্ষ্ম সংকলন করে।
Comintern

টেম্পোরারিগুলি ছাড়াই অনেক খাটো: main(int c,char**a){for(;*a[1]==*a[2]++;putchar(*a[1]++));}(59 বাইট)।
টবি স্পিড 12

2

ম্যাটল্যাব, 50 40 বাইট

একটি ফাংশন সংজ্ঞায়িত করে যা 2 টি স্ট্রিং ইনপুট হিসাবে গ্রহণ করে, কমান্ড উইন্ডোতে আউটপুট দেয়

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

এই সমাধানটি কোনও স্ট্রিং, আউটপুটগুলির জন্য কাজ করবে

ans =

   Empty string: 1-by-0

যদি কোন মিল দেওয়া হয় না।

কোনও ফাংশনের পরিবর্তে স্ক্রিপ্ট ব্যবহার করে (স্থানীয় ভেরিয়েবল a, b) (-16 বাইট ব্যবহার করে) গল্ফ করা যায়।

সুতরাং 34 বাইট পেয়ে

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

ফাংশন শৈলী (যা গ্রহণযোগ্য শৈলী বলে মনে হয়), ফলন দেয়

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

(ধন্যবাদ @ স্টেভি গ্রিফিন)


40 বাইট: @(a,b)a(1:find([diff(char(a,b)) 1],1)-1)। =)
স্টিভি গ্রিফিন

2

পার্ল 6 , 28 বাইট

আমি দুটি নিয়ে এসেছি যারা এসটিডিআইএন থেকে তাদের মান নিয়ে যায় যা পার্ল 5 উত্তরের উপর ভিত্তি করে।

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

প্রথমটির জন্য ইনপুটগুলির মধ্যে হুবহু এক স্থান প্রয়োজন হয়, অন্যটিতে ইনপুটগুলির মধ্যে কমপক্ষে একটি সাদা জায়গা প্রয়োজন।


কমান্ড লাইন থেকে মানগুলি গ্রহণ করা প্রথম জিনিসটির চেয়ে এটি বেশ খানিকটা ছোট।

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

বা এমনকি এর ল্যাম্বডা সংস্করণ:

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

যদিও এটি সামঞ্জস্য করা অনেক সহজ তবে এটি কেবলমাত্র একটি স্ট্রোকের মূল্যে যে কোনও সংখ্যক ইনপুট স্ট্রিং গ্রহণ করে।

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

জাপট, 27 বাইট

Japt একটি সংক্ষিপ্ত সংস্করণ জা vaScri পর্তুগীজ ভাষায়অনুবাদক

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

(স্ট্রিংগুলি এভাবে ইনপুট বাক্সে যায় "global" "glossary":)

এই কোডটি নিম্নলিখিত জেএসের ঠিক সমান:

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

আমি এখনও বেনামে ফাংশনগুলি প্রয়োগ করি নি, যার জন্য এটি যা $...$: ডলারের লক্ষণগুলির মধ্যে যে কোনও কিছুই জেএস-এ স্যুইচ করার ক্ষেত্রে অদৃশ্য হয়ে যায়। আমি ফাংশনগুলি যুক্ত করার পরে, এই 21-বাইট কোডটি যথেষ্ট হবে:

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

এবং আমি আরও কয়েকটি বৈশিষ্ট্য প্রয়োগ করার পরে এটি আদর্শভাবে 18 বাইট হবে:

UmXY{AxX=VgY ?X:AP

পরামর্শ স্বাগত!


সুতরাং দেখা যাচ্ছে যে এই প্রোগ্রামটি আধুনিক জাপটে কেবল 15 বাইট:

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

এটি অনলাইন চেষ্টা করুন!


2

এমএটিএল , 11 9 বাইট

y!=XdYpf)

এটি অনলাইন চেষ্টা করুন!

(-২ বাইট জিউসেপিকে ধন্যবাদ)

 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

ধন্যবাদ! yধারণা প্রশংসনীয় ভাল, আমি একটি প্রাথমিক ভালো জিনিস চেষ্টা চাই itiপরিবর্তে 1Gw, কিন্তু ব্যবহারের ভাবিনি yযে জন্য।
সূন্দর - মনিকা পুনরায় ইনস্টল করুন

1

ক্লোজার / ক্লোজার স্ক্রিপ্ট, ৫১

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

অনেকটাই অকপট. দুর্ভাগ্যক্রমে প্যারামিটার ডিস্ট্রাকচারের চারপাশের স্পেসগুলি প্রয়োজনীয় (এটি [a & b]স্টাফ)। সংক্ষিপ্ততম নয় তবে আমি ভাষাগুলিতে কিছু অন্যান্য উত্তরগুলিকে হিট করেছি যেগুলি তাদের তীক্ষ্ণতা নিয়ে বড়াই করতে পছন্দ করে তাই আমি এটি পোস্ট করব।


1

পাইথন 2, 50 বাইট

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

ইনপুট

ইনপুটটি দুটি স্ট্রিং হিসাবে নেওয়া হয়:

"global", "glossary"

আউটপুট

আউটপুট হল প্রতিটি অক্ষর যার পরে একটি স্থান থাকে; যা, আশা করি, কোনও সমস্যা নয়। তবে এটি যদি হয় তবে আমি আমার উত্তরটি সম্পাদনা করব।

g l o 

আমি নিশ্চিত এটি অবৈধ; স্পেস স্পষ্টভাবে ফাঁকা ছাড়াই স্ট্রিং হিসাবে আউটপুট ফর্ম্যাট দেয়।
lirtosiast

আচ্ছা হ্যাঁ, তবে ইনপুটটি বিন্যাসেও দেওয়া হয়েছিল "global" , "glossary"(দুটি পৃথক স্ট্রিং) .. আর কত উত্তর এই চিঠির অনুসরণ করে? @ থমাসকওয়া
জাচ গেটস

"দুটি স্ট্রিং নেয়" হ'ল ওপি দ্বারা ব্যবহৃত ভাষা; সাধারণত যখন এর মতো কিছুটি কোনও বাছাই ছাড়াই উল্লেখ করা হয়, এটি আমাদের ডিফল্ট আই / ও এর একটি বোঝায় , যার অর্থ আমরা কমান্ড লাইন থেকে একটি স্ট্রিং নিতে পারি এবং এসটিডিআইএন থেকে দুটি স্ট্রিংয়ের অ্যারে বা অন্য যে কোনও কিছু অনুসরণ করে নিয়ম।
lirtosiast

আমি মনে করি আপনি আমার উত্তরটি কিছুটা গুরুত্বের সাথে নিচ্ছেন। এটি কেবল একটি মজাদার জমা এবং বিল্ট-ইনকে মারধর করার আমার সেরা চেষ্টা। যদি ওপিকে আউটপুট ফর্ম্যাটটি পছন্দ না হয় তবে তা হ'ল; আমি আমার উত্তর সরিয়ে ফেলব। @ থমাসকওয়া
জ্যাচ গেটস

কীভাবে print(exit()if a!=b else a,end='')? আমি জানি না এটি কাজ করবে কি না, তবে এটি হতে পারে
বিটা ডেকে

1

টিস্ক্রিপ্ট, 16 বাইট 20

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

প্রতিটি ইনপুট একটি স্পেস দ্বারা পৃথক করে নেয়।


1

পিএইচপি, 52 বাইট

দর্শনীয় নয় তবে কাজটি করে:

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

দুটি কমান্ড লাইন আর্গুমেন্ট নেয়:

php prefix.php department depart

পিএইচপি 7 আপনাকে আরেকটি বাইট সংরক্ষণ করতে দেয় while(($a=$argv)[1][$i]==$a[2][$i])echo$a[1][$i++];- আরেকটি পিএইচপি 7 কেবলমাত্র সমাধান (এবং সেরা আমি @ 50 বাইট নিয়ে আসতে পারি) <?=substr(($a=$argv)[1],0,strspn($a[1]^$a[2],~ÿ));- আপনার সম্পাদকটি এসকি মোডে রয়েছে তা নিশ্চিত করুন, এটি ~ÿইউনিকোডে রূপান্তরিত না হয়ে গুরুত্বপূর্ণ ।
লেইগ করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.