ব্যাকস্পেস এবং শব্দের একটি তালিকা পুনরায় টাইপ করুন


38

এক স্ট্রিং থেকে অন্য স্ট্রিংয়ে ব্যাকস্পেস-এবং-টাইপ কীভাবে করবেন তা এখানে :

  1. প্রথম স্ট্রিং থেকে শুরু করুন।
  2. ফলাফলটি দ্বিতীয় স্ট্রিংয়ের উপসর্গ না হওয়া পর্যন্ত শেষে অক্ষরগুলি সরিয়ে ফেলুন । (এটি 0 টি পদক্ষেপ নিতে পারে))
  3. ফলাফলটি দ্বিতীয় স্ট্রিংয়ের সমান হওয়া অবধি অক্ষর যুক্ত করুন Add (এটি 0 টি পদক্ষেপও নিতে পারে))

উদাহরণস্বরূপ, থেকে fooabcদেখতে fooxyzদেখতে পথটি :

fooabc
fooab
fooa
foo
foox
fooxy
fooxyz

কার্য

শব্দের একটি তালিকা দেওয়া, এমন একটি প্রোগ্রাম লিখুন যা খালি স্ট্রিং থেকে পশ্চাতে এবং পুনরায় টাইপ করে, পর পর তালিকার সমস্ত শব্দগুলিতে খালি স্ট্রিংয়ে ফিরে যায়। সমস্ত মধ্যবর্তী স্ট্রিং আউটপুট।

উদাহরণস্বরূপ, ইনপুট তালিকা প্রদত্ত ["abc", "abd", "aefg", "h"], আউটপুটটি হওয়া উচিত:

a
ab
abc
ab
abd
ab
a
ae
aef
aefg
aef
ae
a

h

বিধি

আপনি স্ট্রিংগুলির তালিকাটি বা পছন্দসই কিছু ডিলিমিটার সহ একক স্ট্রিং প্রিন্ট বা মুদ্রণ করতে পারেন। আপনি বৈকল্পিকভাবে প্রাথমিক এবং চূড়ান্ত খালি স্ট্রিংগুলি অন্তর্ভুক্ত করতে পারেন । ইনপুটটিতে কমপক্ষে একটি শব্দ থাকার নিশ্চয়তা রয়েছে এবং প্রতিটি শব্দেই কেবল ছোট হাতের ASCII অক্ষর ( a- z) থাকতে পারে contain সম্পাদনা করুন: ইনপুটটিতে পরপর স্ট্রিংগুলি একে অপরের সমান না হওয়ার গ্যারান্টিযুক্ত।

এটি ; বাইটস মধ্যে সংক্ষিপ্ত কোড।

পাইথন 3 এ একটি রেফারেন্স বাস্তবায়ন: এটি অনলাইনে চেষ্টা করুন!


4
@ rahnema1> এমন একটি প্রোগ্রাম লিখুন যা খালি স্ট্রিং থেকে
ক্রিটিক্সী লিথোস

3
আউটপুট কেমন হবে ["abc","abc"]?
ক্রিটসি লিথোস

1
@ এমিগনা ওফস, এটি ঠিক তবে লুপে! তাই আমি এগিয়ে যাব এবং বলব এটি এটির একটি সদৃশ।
লিন

4
@ লিন এটি ঠিক একই জিনিস নয়। এটি সাধারণ উপসর্গগুলি সনাক্তকরণ অন্তর্ভুক্ত করে না, এটি সর্বদা একটি চরিত্রের নীচে চলে যায়।
মার্টিন এন্ডার

6
পরীক্ষার কেস:a,abc,abcde,abc,a,abc,abcde
Zgarb

উত্তর:



9

পার্ল, 43 বাইট

কোড + -nপতাকা 42 বাইট ।

chop$@,say$@while!s/^$@//;s/./say$@.=$&/ge

এটি চালানোর জন্য:

perl -nE 'chop$@,say$@while!s/^$@//;s/./say$@.=$&/ge' <<< "abc
abd
aefg
h"

এটি abc 3 বার প্রিন্ট করে
izabera

@ আইজাবের একটি জায়গা ছিল abcযা এটি 3 বার মুদ্রিত করার পরে (তবে বাস্তবে প্রথম এবং তৃতীয়বারের মতো স্থানটি ছিল না)। আমি এটি সরিয়েছি।
দাদা

5

জাভা 8, 144 বাইট

এটি একটি রেফারেন্স বাস্তবায়নের অনুরূপ তবে দুটি whileলুপকে একত্রিত করে । এটি একটি ল্যাম্বডা এক্সপ্রেশন একটি String[]প্যারামিটার গ্রহণ করছে ।

a->{String c="";int l=0,i;for(String w:a)while((i=w.indexOf(c))!=0||!c.equals(w))System.out.println(c=i!=0?c.substring(0,--l):c+w.charAt(l++));}

Ungolfed

a -> {
    String c = "";
    int l = 0, i;
    for (String w : a)
        while ((i = w.indexOf(c)) != 0 || !c.equals(w))
            System.out.println(c = i != 0 ? c.substring(0, --l) : c + w.charAt(l++));
}

প্রাপ্তি স্বীকার

  • -38 বাইটস CAD97 এর ল্যাম্বদা পরামর্শের জন্য ধন্যবাদ

এর class Bপরিবর্তে ব্যবহার করা কি সস্তা নয় interface B? আপনি একটি প্যাকেজ-প্রাইভেট ক্লাস থেকে চালাতে পারেন। এছাড়াও, আপনি ইতিমধ্যে জাভা 8 নির্দিষ্ট করেছেন বলে ল্যাম্বদা ব্যবহার করার বিষয়টি বিবেচনা করুন।
CAD97

@ CAD97 এর interface B{static void mainচেয়ে কম class B{public static void main
কেভিন ক্রুইজসেন

@ CAD97 আমি এতে ল্যাম্বডাস আনার কোনও উপায়ের কথা ভাবতে পারি নি, তবে আমি কেবল গতকাল তাদের সম্পর্কে জানলাম। কোন ধারনা?
জাকব

1
আহ, আমি মরিচা। আপনার করতে সক্ষম হওয়া উচিত a->{/*your code*/}, যা বিভিন্ন ধরণের পরিবর্তনশীলকে বরাদ্দ করবে java.util.function.Consumer<String[]>। আমি অবশ্য এই মুহুর্তে পরীক্ষা করতে পারি না।
CAD97

1
@ জ্যাকব কর্নেল ডিফল্টরূপে পিপিসি পূর্ণ প্রোগ্রাম বা ফাংশন জমা দেওয়ার অনুমতি দেয়। বেনামে ফাংশন (ল্যাম্বডা) সহ ভাষার জন্য, বেনামে ফাংশনটি তার নিজের কাছে একটি গ্রহণযোগ্য উত্তর (সুতরাং এটিতে সংরক্ষণের জন্য আপনাকে ভেরিয়েবলটি অন্তর্ভুক্ত করতে হবে না)। (যদিও জাভা
সাবমিশনগুলিতে ল্যাম্বদা


3

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

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

M!&r`.+
%)`\G.
¶$`$&
+`((.*).¶)\2¶\1
$1

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

ইনপুট এবং আউটপুট হ'ল লাইনফিড-বিচ্ছিন্ন তালিকা। আউটপুট নেতৃস্থানীয় এবং পিছনে ফাঁকা স্ট্রিং অন্তর্ভুক্ত করে না।


3

জেলি , 31 29 26 বাইট

⁷œ|;\
ÇṚðfḢṭḟ;ḟ@ḊðÇ}
⁷;ç2\

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

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

⁷;ç2\           Main link. Argument: A (string array)

⁷;              Prepend a linefeed to A. 
                This is cheaper than prepending an empty string.
  ç2\           Reduce all overlapping pairs by the second helper link.


ÇṚðfḢṭḟ;ḟ@ḊðÇ}  Second helper link. Arguments: s, t (strings)

Ç               Call the first helper link with argument s.
 Ṛ              Reverse the results.
            Ç}  Call the first helper link with argument t.
  ð        ð    Combine everything in between into a dyadic chain, and call it
                with the results to both sides as arguments.
                Let's call the arguments S and T.
   f            Filter; get the common strings of S and T.
    Ḣ           Head; select the first one.
      ḟ         Filterfalse; get the strings in S that do not appear in T.
     ṭ          Tack; append the left result to the right one.
        ḟ@      Filterfalse swap; get the strings in T that do not appear in S.
       ;        Concatenate the results to both sides.
          Ḋ     Dequeue; remove the first string.


⁷œ|;\           First helper link. Argument: s (string)

⁷œ|             Linefeed multiset union; prepend a linefeed to s unless it already
                has a linefeed in it (the first string does).
   ;\           Concatenate cumulative reduce; generate all prefixes of the result.

2

হাস্কেল , 102 93 91 90 বাইট

(?)=take.length
a!x@(b:c)|a==b=b!c|a/=a?b=a:init a!x|d<-'?':a=a:d?b!x
_!x=x
(""!).(++[""])

শেষ লাইনটি একটি বেনামি ফাংশন, যা স্ট্রিংগুলির একটি তালিকা গ্রহণ করে এবং প্রদান করে। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

আমার সমাধান পুনরাবৃত্তি। প্রথমত, ?একটি সহায়ক ইনফিক্স ফাংশন: a?bএর প্রথম length aঅক্ষরগুলি দেয় b, বা পুরোটি bযদি aদীর্ঘ হয় gives পরবর্তী আমি একটি ইনফিক্স ফাংশন সংজ্ঞায়িত করি !। ধারণাটি হ'ল a!x, যেখানে aএকটি স্ট্রিং এবং xস্ট্রিংগুলির একটি তালিকা রয়েছে aসেখানে প্রথম স্ট্রিংয়ের মধ্য থেকে পাথ তৈরি করে xএবং এর লেজের দিকে পুনরাবৃত্তি করে x। চূড়ান্ত লাইনে আমি একটি বেনাম ফাংশন সংজ্ঞায়িত করি যা খালি স্ট্রিং সংযোজন করে, তারপরে !খালি স্ট্রিং এবং ইনপুট প্রযোজ্য ।

এর ব্যাখ্যা !:

a!x@(b:c)        -- a!x, where x has head b and tail c:
  |a==b          -- If a equals b,
    =b!c         -- recurse to x.
  |a/=a?b        -- If a is not a prefix of b,
    =a:          -- produce a and
    init a!x     -- continue with one shorter prefix of a.
  |              -- Otherwise a is a proper prefix of b.
   d<-'?':a      -- Let d be a with an extra dummy element,
    =a:          -- produce a and
    d?b!x        -- continue with one longer prefix of b.
_!x=x            -- If x is empty, return x.

2

পাইথন 2, 118 107 103 97 93 92 বাইট

s=''
for i in input()+[s]:
 while i.find(s):s=s[:-1];print s
 while i>s:s+=i[len(s)];print s

ইনপুট হিসাবে দেওয়া হয় ['abc', 'abcdef', 'abcfed'], বা হিসাবে [ "abc", "abcdef", "abcfed"]

সংশোধন 1: -11 বাইট। পাইথন গল্ফিং টিপসে তাঁর পোস্টের জন্য ক্রেডিট @ এক্সনর এবং আমার জন্য টিপস সন্ধান করার জন্য @ লিনকে এবং স্মার্ট হওয়ার জন্য আমার কাছে। দুটি পরিবর্তন করা হয়েছিল: পরিবর্তে not s.startswith(i), আমি ব্যবহার করেছি s.find(i)এবং পরিবর্তে i!=sআমি ব্যবহার করেছি i>s

রিভিশন 2: -4 বাইট। ক্রেডিট বুঝতে পেরে আমি সত্যিই বোবা ভুল করেছিলাম। একক-ট্যাব এবং ডাবল-ট্যাব ইন্ডেন্টেশন ব্যবহার না করে, আমি একক স্থান এবং একক-ট্যাব ইন্ডেন্টেশন ব্যবহার করেছি।

রিভিশন 3: -6 বাইট। ক্রেডিটগুলি @ mbomb007 এ গিয়ে একক লাইনে থিসগুলি রাখার পরামর্শ দেওয়ার জন্য। আমিও পরিবর্তন করে একটি বাগ সংশোধন করা হয়েছে s.find(i)করতে i.find(s)

রিভিশন 4: -4 বাইট। আমার কাছে কোনও ভেরিয়েবলের ইনপুট সংরক্ষণ করার দরকার নেই তা বুঝতে পেরে ক্রেডিট @ এক্সনরে যায়।

রিভিশন 5: -1 বাইট। ইনপুটটিতে যুক্ত করার ['']সময় একই জিনিস এটি উপলব্ধি করার জন্য ক্রেডিট আমার কাছে যায় [s]


whileপ্রতিটি একক লাইনে রাখুন । এছাড়াও, আপনি এর <1পরিবর্তে ব্যবহার করতে পারেন not
mbomb007

চমৎকার উত্তর! কীভাবে এড়ানোstartswith যায় সে সম্পর্কে এক্সনরের একটি দুর্দান্ত টিপ রয়েছে ।
লিন

@ লিন ওহ, লিঙ্কটির জন্য ধন্যবাদ! আমি এটি সত্যিই সহায়ক খুঁজে পেয়েছি!
হাইপারনিউটারিনো

@ mbomb007 আমি দুঃখিত, whileএকক লাইনে এস ব্যবহার করে আপনি কী বোঝাতে চেয়েছেন তা আমি পুরোপুরি পাই না । আপনি কি মানে while s.find(i):s=s[:-1];print s? এছাড়াও, সম্পর্কে পরামর্শের জন্য ধন্যবাদ <1, তবে পাইথন টিপস থ্রেডে এক্সনরের টিপসের একটিতে আমি আরও ছোট কিছুতে পরিবর্তিত হয়েছি।
হাইপারনিউটারিনো

@AlexL। হ্যাঁ, কিছুক্ষণের মতো রাখুন।
mbomb007

1

জিএনইউ এম 4, 228 বা 232 বাইট¹ ¹

(With ফাইলটি শেষ করা হবে কিনা তার উপর নির্ভর করে dnl\n— আমি এখনও গল্ফিং এবং এম 4 উভয়ের জন্যই নতুন)

define(E,`ifelse(index($2,$1),0,`T($1,$2)',`$1
E(substr($1,0,decr(len($1))),$2)')')define(T,`ifelse($1,$2,,`$1
T(substr($2,0,incr(len($1))),$2)')')define(K,`ifelse($2,,$1,`E($1,$2)K(shift($@))')')define(M,`K(substr($1,0,1),$@)')

উপরন্তু, 3 বাইট জন্য দ্বিতীয় যুক্তি প্রতিস্থাপন দ্বারা সংরক্ষিত করা যেতে পারে substrথেকে 0খালি স্ট্রিং, কিন্তু যে দ্বারা stderr সতর্কবার্তাগুলি অনেকটা উত্পাদন করবে।

Ungolfed:

define(erase_til_prefix, `dnl arguments: src dst; prints src and chops one char off of it until src == dst, at which point it calls type_til_complete instead
ifelse(dnl
index($2, $1), 0, `type_til_complete($1, $2)',dnl
`$1
erase_til_prefix(substr($1, 0, decr(len($1))), $2)dnl
')')dnl
define(type_til_complete, `dnl arguments: src dst; types src, does not type `dst' itself
ifelse(dnl
$1, $2, ,dnl
`$1
type_til_complete(substr($2, 0, incr(len($1))), $2)'dnl
)')dnl
define(main_, `dnl
ifelse(dnl
$2, , $1, dnl no arguments left
`erase_til_prefix($1, $2)main_(shift($@))'dnl
)')dnl
define(main, `main_(substr($1, 0, 1), $@)')dnl

ব্যবহার:

$ m4 <<<"include(\`backspace-golfed.m4')M(abc, abd, aefg, abcdefg, h)"

1

পিএইচপি, 116 111 101 83 বাইট

দ্রষ্টব্য: উইন্ডোজ -১২২২ এনকোডিং ব্যবহার করে।

for(;$w=$argv[++$i];)for(;$c!=$w;)echo$c=($c^$c^$w)==$c?$c.ÿ&$w:substr($c,0,-1),~õ;

এভাবে চালান:

php -r 'for(;$w=$argv[++$i];)for(;$c!=$w;)echo$c=($c^$c^$w)==$c?$c.ÿ&$w:substr($c,0,-1),~õ;' -- abc abd aefg h 2>/dev/null
> a
> ab
> abc
> ab
> abd
> ab
> a
> ae
> aef
> aefg
> aef
> ae
> a
>
> h

ব্যাখ্যা

for(                       # Outer loop.
  ;
  $w=$argv[++$i];          # Loops over the input words.
)
  for(                     # Second inner loop.
    ;
    $c!=$w;                # Loop until the word was output.
  )
    echo $c=
      ($c^$c^$w)==$c?      # Check if last output string is a substring
                           # match with the next word to output.
        $c.ÿ&$w:           # ... If yes, suffix the string with the next
                           # char of the word, and output the result.
        substr($c,0,-1),   # ... If not, remove a char and output.
      ~õ;                  # Output newline.

বদলান

  • trim($c^$w,"\0")পরিবর্তে সাবস্ট্রিং ম্যাচের জন্য চেক করতে ব্যবহার করে 5 বাইট সংরক্ষণ করা $c&&strpos($w,$c)!==0
  • এর ~ÿপরিবর্তে NUL বাইটের সাথে একটি স্ট্রিং উত্পাদন করে 2 বাইট সংরক্ষণ করা"\0"
  • এর পরবর্তী চরের সাথে $c=$c.ÿ&$wপ্রত্যয় ব্যবহার করে 8 বাইট সংরক্ষণ করা হয়েছে$c$w
  • একক লুপে 2 টি অভ্যন্তরীণ লুপের যুক্তি সংযুক্ত করে একটি বিশাল 18 বাইট সংরক্ষণ করা হয়েছে
  • মন্তব্যগুলি থেকে টেস্টকেস সহ একটি বাগ ঠিক করা হয়েছে, বাইট গণনায় কোনও পরিবর্তন নেই

1

ব্যাচ, 296 291 বাইট

@echo off
set f=
set t=%1
:t
set f=%f%%t:~,1%
set t=%t:~1%
echo(%f%
if not "%t%"=="" goto t
shift
set t=%1
set s=%f%
set p=
:h
if %s:~,1%==%t:~,1% set p=%p%%t:~,1%&set s=%s:~1%&set t=%t:~1%&goto h
:b
set f=%f:~,-1%
echo(%f%
if not "%f%"=="%p%" goto b
if not "%1"=="" goto t

সাধারণ উপসর্গটি গণনা করা জটিল ছিল।


0

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

ভয়ানক দীর্ঘ :(

for($s=$argv[$k=1];$t=$argv[++$k];){for(;$s>""&&strstr($t,$s)!=$t;$s=substr($s,0,-1))echo"$s
";for($i=strlen($s);$s<$t;$s.=$t[$i++])echo"$s
";echo"$s
";}

সাথে চালাও php -nr '<ode>' <text1> <text2> ...


0

জাভাস্ক্রিপ্ট (ES6), 135 বাইট

আকর্ষণীয় চ্যালেঞ্জ! ব্যবহার: g(["abc", "abd", "aefg", "h"])। আমি এটি একটি ফাংশন হিসাবে লিখে কোনও বাইট সংরক্ষণ করতে পারে বলে মনে হয় না, তাই এটি দুটি। নিউলাইনগুলি বাইট গণনায় অন্তর্ভুক্ত নেই।

f=a=>console.log(([,...z]=[x,y]=a)[0])||
y?f(a=(x==y.slice(0,-1))?z:([y.match(x)
?x+y[x.length]:x.slice(0,-1),...z])):1;
g=a=>f(['',...a])

আমি নিশ্চিত এটি আরও অনেক কমাতে পারে। পরে অবারিত সংস্করণ যুক্ত করবে।


0

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

a=>{c="",l=0;for(w of a)while((i=w.indexOf(c))!=0||c!=w)alert(c=i!=0?c.substring(0,--l):c+w[l++])}

Jakob এর জাভা উত্তর বন্দর

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.