স্ব-পরিবর্তন দ্বারা গুণ


33

... কমপক্ষে "স্ব-পরিবর্তন" এর কিছু সংজ্ঞার জন্য।

কাজটি

এই প্রতিদ্বন্দ্বিতায়, আপনার টাস্ক তিন স্ট্রিং লিখতে হয় A, Bএবং Cযে নিম্নলিখিত বৈশিষ্ট্য সন্তুষ্ট।

  • স্ট্রিংয়ের Bদৈর্ঘ্য কমপক্ষে 1 রয়েছে।

  • প্রত্যেকের জন্য n ≥ 0, স্ট্রিংটি আপনার পছন্দসই প্রোগ্রামিংয়ের ভাষাতে একটি বৈধ প্রোগ্রাম (যার অর্থ পূর্ণ রানআনেবল প্রোগ্রাম বা ফাংশন সংজ্ঞা)। সুপারস্ক্রিপ্ট পুনরাবৃত্তি বোঝায় তাই এর অর্থ স্ট্রিংগুলি ,ABnCACABC , ABBC, ABBBCইত্যাদি প্রতিটি প্রোগ্রামের এক স্ট্রিং ইনপুট হিসাবে লাগে, এবং আয় আউটপুট এক পংক্তি।

  • কোন m, n ≥ 0, যদি প্রোগ্রাম ইনপুট দিয়ে চালানো হয় , এটা ফেরৎABmCABnCABm*n+1C । এই ফর্মটি নয় এমন ইনপুটগুলির জন্য, প্রোগ্রামটি ক্র্যাশ সহ কিছু করতে পারে।

বিন্যাসে কিছু উদাহরণ program(input) -> output :

AC(AC) -> ABC
ABC(AC) -> ABC
ABBBBBC(AC) -> ABC
AC(ABC) -> ABC
AC(ABBBBC) -> ABC
ABC(ABC) -> ABBC
ABBC(ABC) -> ABBBC
ABBBBC(ABBBC) -> ABBBBBBBBBBBBBC
ABBBC(ABBBBBBC) -> ABBBBBBBBBBBBBBBBBBBC

বিধি এবং স্কোরিং

আপনার স্কোর মোট দৈর্ঘ্য AএবংC কম স্কোর ভাল হয়। মনে রাখবেন যে Bস্কোরের দিকে গণনা করা হয়নি, এটি অবশ্যই Aএবং দ্বারা উত্পাদিত হবেC প্রথম উদাহরণ হিসাবে।

স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়। প্রোগ্রামগুলিকে প্রত্যক্ষ বা অপ্রত্যক্ষভাবে তাদের নিজস্ব উত্স কোড অ্যাক্সেস করার অনুমতি দেওয়া হয় না (যখন এটিকে ইনপুট হিসাবে দেওয়া হয় তা বাদে)। আপনি স্ট্রিং চিহ্নিত করার প্রয়োজন হয় A, Bএবং Cকিছু উপায় আপনার উত্তর, এবং আপনার সমাধান ব্যাখ্যা করতে উৎসাহিত করেন।

উত্তর:


16

সিজোম, 9 8 বাইট

A: 1
B: 0
C:  r,(#0q

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

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

(ABcode) e# Push the integer 10 ** len(Bcode).
<SP>     e# Noop. Separates (AB) and C for input reading.
r        e# Read the first whitespace-separated token from STDIN (ABinput).
,(       e# Push the string length minus 1: len(Binput)
#        e# Power operator: 10 ** len(Bcode) len(Binput) # ->
         e#   (10 ** len(Bcode)) ** len(Binput) = 10 ** (len(Bcode) * len(Binput))
0        e# Push an additional 0 to complete len(Bcode) * len(Binput) + 1 zeroes.
q        e# Read the remaining input (C).

12

সিজেম, 15 13 11 বাইট

A: rl"
B: <SP>
C: <LF>",(*SNq

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

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

e# A

r     e# Read a whitespace-separated token from STDIN.
      e# This reads the input up to the first space, but does not consume it.
l     e# Read the rest of the first line from STDIN.
      e# This reads up to the first linefeed and consumes it.

"     e# Initiate a string.

e# B

<SP>  e# Fill the string with as many spaces as there are copies of B.

e# C

<LF>" e# Terminate the string with a linefeed.
      e# This serves as a delimiter for the `l' command.
,(    e# Compute the length of the string minus 1 (to account for the LF).
*     e# Repeat the string read by `l' that many times.
SN    e# Push a space and a linefeed.
q     e# Read the remaining input (i.e., the second line) from STDIN.

শেষে, স্ট্যাক টোকেনটি পঠিত রয়েছে r, স্থান দ্বারা উত্পাদিত *, স্থান এবং দ্বারা ধাক্কা লাইনফীড SNএবং লাইন দ্বারা পড়া q। সিজেএম এগুলি সমস্ত স্বয়ংক্রিয়ভাবে মুদ্রণ করে।


হ্যাঁ, সেখানে উদ্ধৃতিগুলির দুর্দান্ত ব্যবহার: ডি
অপ্টিমাইজার 19

9

পাইথ, 10

A: w*\0hl*w[<newline>
B: 0
C: <empty>

আমরা উত্সকে দুটি লাইনে বিভক্ত করি। প্রথম লাইনটি এ, দ্বিতীয় লাইনটি বিএস। যেহেতু এ প্রথম লাইনে রয়েছে, প্রথম wকেবল এটিকে মুদ্রণ করে - সহজ, সম্পন্ন।

পাইথের নেতৃস্থানীয় শূন্যগুলি পৃথক টোকেনগুলি রয়েছে, তাই [00)আসলে [0, 0]। মনে রাখবেন যে প্রথম লাইনটি শেষ হয় l[এবং দ্বিতীয় লাইনে থাকে 0000...। সুতরাং l[আসলে এই প্রোগ্রামে বিএস সংখ্যা গণনা করা হয়। দ্বিতীয়টি wইনপুটটির দ্বিতীয় লাইনে পড়ে - এটি ইনপুটটির বিএস সংখ্যা। এখান থেকে এটি একটি সরল গুণ, বৃদ্ধি এবং আউটপুটিং যা অনেক শূন্য।


9

রেটিনা , 25 19 বাইট

A: ]\]<LF>
B: ]]
C: <LF>m`^]*$<LF>]$0]

<LF> stands for newline

উদাহরণ ABCকোড:

]\]
]]
m`^]*$
]$0]

কোডটির দুটি বিকল্প পদক্ষেপ রয়েছে:

  • ইনপুট পরিবর্তন AB^mCমধ্যে AB^(m*n)Cযে পরিবর্তন করে Bথেকে B^n:

    • ]\]ইনপুটটিতে প্রতিটি মিলছে Bএবং প্যাটার্ন লাইনে পালানোর জন্য আর কিছুই ধন্যবাদ
    • ]]...]] হয় B^n
  • পরিবর্তন B^(m*n)করার জন্য B^(m*n+1)দ্বারা

    • m`^]*$শুধুমাত্র ]এর সাথে লাইন গ্রহণ
    • ]$0]]]এটির একটি অতিরিক্ত জুড়ি এমনভাবে যুক্ত করা যাতে এই লাইনটি প্রথম রেজেসের সাথে মেলে না

-sমাল্টি-লাইন পতাকাটির জন্য আমি স্কোরগুলিতে 3 বাইট যুক্ত করেছি যা প্রয়োজনীয় যা পুরো রেটিনা কোডটি একটি ফাইলে থাকতে পারে।

@ মার্টিনব্যাটনারকে 2 বাইট সংরক্ষণ করা হয়েছে thanks


8

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

A: lambda s:s[:28]+"x"*(1+len("
B: x
C: ")*(len(s)-51))+s[-23:]

ব্যবহারের উদাহরণ:

>>> f=lambda s:s[:28]+"x"*(1+len("xx")*(len(s)-51))+s[-23:]
>>> f('lambda s:s[:28]+"x"*(1+len("xxx")*(len(s)-51))+s[-23:]')
'lambda s:s[:28]+"x"*(1+len("xxxxxxx")*(len(s)-51))+s[-23:]'

ফাংশনটি যেখানে স্ট্রিংগুলিতে রয়েছে তার অংশ গণনা n*m+1করে ( অংশটি হ'ল )। এই সংখ্যার সাথে স্ট্রিংকে গুণিত করে ফাংশনটি ইনপুটটি গ্রহণ করে এবং আউট করে এবং এইগুলি পেতে সমস্তকে সম্মতি দেয় ।(1+len("xxx")*(len(s)-51))m xxxxB^m"x"B^(n*m+1)ACAB^(n*m+1)C

জেতে একই পন্থা:

জে, 35 বাইট

A: (19{.]),('x'#~1+(#'
B: x
C: ')*35-~#),_16{.]

5

সিজেম, 22

A:<empty>
B:{])`\,q,K/(*))*"_~"}
C:{])`\,q,K/(*))*"_~"}_~

উদাহরণ রান:

ABBC(ABC) -> ABBBC

যা অনুবাদ

{])`\,q,K/(*))*"_~"}{])`\,q,K/(*))*"_~"}{])`\,q,K/(*))*"_~"}_~

ইনপুট হিসাবে

{])`\,q,K/(*))*"_~"}{])`\,q,K/(*))*"_~"}_~

যা নিম্নলিখিত ফলাফল দেয়:

{])`\,q,K/(*))*"_~"}{])`\,q,K/(*))*"_~"}{])`\,q,K/(*))*"_~"}{])`\,q,K/(*))*"_~"}_~

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

কী প্রোগ্রামগুলি দেখতে ACএবং ABCএটির মতো চেহারা তা একবার দেখে নেওয়া যাক :

AC :{])`\,q,K/(*))*"_~"}_~
ABC:{])`\,q,K/(*))*"_~"}{])`\,q,K/(*))*"_~"}_~

আমরা লক্ষ্য করেছি যে C=B_~

আসুন কী Bকরছে তা দেখুন:

{])`\,q,K/(*))*"_~"}

{                  }    e# This is a code block. Alone, this does nothing except
                        e# pushing this block to stack as is
 ]                      e# Wrap everything on stack in an array
  )`                    e# Take out the last part and convert it to its string representation
    \,                  e# Take length of remaining array
      q,K/              e# Read the input, take its length and int divide by K (i.e. 20)
          (*            e# Decrement and multiply by the array length on stack
            ))          e# Add two to the product
              *         e# Repeat the string representation on stack that many times
               "_~"     e# Put this string on stack

এখন যাক ACকোনও ইনপুট ছাড়াই চলমান কী করবে তা দেখতে দিন:

{])`\,q,K/(*))*"_~"}_~                      e# Copy the block and run it
{])`\,q,K/(*))*"_~"}{])`\,q,K/(*))*"_~"}~   e# Block is copied, run it
{      ...         } ])                     e# Wrapped array has the block in it.
                       `\,                  e# Stringify it and take length of remaining = 0
                          q,K/              e# No input so 0
                              (*))          e# 0 * -1 = 0. 0 + 2 = 2
                                  *         e# Repeat the stringified block 2 times:
                                            e# "{])`\,q,K/(*))*"_~"}{])`\,q,K/(*))*"_~"}"
                                   "_~"     e# Put this string. Program ends, so print stack:
                                            e# {])`\,q,K/(*))*"_~"}{])`\,q,K/(*))*"_~"}_~

বাহ, আউটপুট হয় ABC

আমরা মূলত কোডটিতে কতগুলি Bবিদ্যমান তা গণনা করি । তারপরে ইনপুটটিতে কত রয়েছে (দৈর্ঘ্য ব্যবহার করে)। এগুলি গুণ করুন, দুবার ইনক্রিমেন্ট করুন (যেহেতু Cরয়েছে B) এবং _~পেতে যোগ করুনC

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


3

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

f একটি গ্রহণ এবং ফিরে একটি ফাংশন String

স্ট্রিং বি কেবল একটি একক স্থান, যখন সি একটি দিয়ে শুরু হয়।

A:_:b="
B: 
C: ";f s|a:c<-words s=unwords$a:(drop 50s>>b):c

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

  • _:b=" "আক্ষরিক স্ট্রিংয়ের শূন্যস্থানগুলির প্রথম ব্যতীত সমস্তগুলি বরাদ্দ করে b, যা প্রোগ্রামের এম বি কপির সাথে সমান হয় ।
  • sইনপুট স্ট্রিং হয়। a:c<-words sএটি স্পেস-বিভক্ত শব্দের মধ্যে বিভক্ত হয়, যাতে এটি aA হয় এবং cসি গঠিত শব্দের একটি তালিকায় পরিণত হয় বি কপিগুলি উপেক্ষা করা হয় যেহেতু wordsএকাধিক স্পেস (যা প্রোগ্রামের বাকি অংশগুলি এড়ানো হয়) চেপে রাখে।
  • drop 50sদৈর্ঘ্য সঙ্গে একটি স্ট্রিং সংখ্যা সমান এন ইনপুট বি কপি। এমএন স্পেস দেয় drop 50s>>bএমন অনেকগুলি অনুলিপি যুক্তিযুক্ত করে।b
  • unwords$a:(drop 50s>>b):cসমস্ত স্ট্রিংগুলি ফাঁকা জায়গায় একসাথে যোগদান করে। যেহেতু তালিকায় একটি অতিরিক্ত "শব্দ" (drop 50s>>b)sertedোকানো হয়েছে, সেখানে একটি অতিরিক্ত যোগদানের স্থানও রয়েছে, স্বয়ংক্রিয়ভাবে গুণকে +1 যোগ করে।

2

মতলব, 85

আমার পক্ষে প্রথম এই জাতীয় বিমূর্ত চ্যালেঞ্জ করার জন্য, তাই আমার কাছে কোড-গল্ফ চ্যালেঞ্জের চেয়ে কোডিং চ্যালেঞ্জই বেশি ছিল!

তিনটি স্ট্রিং হ'ল উদ্ধৃতি চিহ্নগুলি ছাড়াই:

A:    "X=strsplit(input('','s'));m=0 "
B:    "+1 "
C:    ";[X{1},32,repmat(['+1',32],1,m*(length(X)-2)+1),X{end}]"

এটি কীভাবে কাজ করে: আমি ইনপুট আর্গুমেন্টকে হোয়াইটস্পেসে বিভক্ত করি, সুতরাং nস্ট্রিং অংশগুলির সংখ্যা থেকে নির্ধারণ করা যায়। বি পেতে এক ধরণের কাউন্টার হিসাবে কাজ করেm. For reconstructing the answer I use A and C from the split, repeat B m*n+1 times and I insert the spaces by using their ASCII value, so that no unwanted splits occur in C.

সম্পাদনা: ওফস, ঘটনাক্রমে A + B গণনা করা হয়েছে


1

C (gcc), 81 bytes

The requirement to identify the strings seems at odds with our being allowed arbitrary behaviour for illegal input, unless we have rather lax standards of what identifying entails. Naturally, I took the interpretation that sheds the most bytes.

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

A: m;f(char*s){m=strrchr(s+66,32)-s-65;printf("%.66s%*s",s,m*strlen("
B: <SPACE>
C: ")+16,s+m+66);}

শনাক্তকরণের দ্বারা আমি কেবল বুঝিয়েছি যে আপনার উত্তর থেকে পরিষ্কার হওয়া উচিত যে কোড স্নিপেটগুলি , বি এবং সি । এটি প্রোগ্রামের জন্য প্রয়োজনীয়তা নয়।
Zgarb

1

টিআই-বেসিক (83 সিরিজ), 65 বাইট

বিভাগটি (33 বাইট):

Input Str1:sub(Str1,1,27:For(I,0,(length(Str1)-55)(length("

খণ্ড বি:

X

সেগমেন্ট সি (32 বাইট):

Y")-1:Ans+"X":End:Ans+sub(Str1,length(Str1)-27,28

এই রৌদ্রের মতো চ্যালেঞ্জটি খুঁজে পেয়ে আমি সত্যিই আগ্রহী! বেশিরভাগ কুইনগুলি কমপক্ষে কিছুটা প্রতারণা না করে টিআই-বেসিকে কাজ করে না, কারণ "প্রতীকটি এড়ানোর কোনও উপায় নেই । ("পলায়ন" শব্দের উভয় অর্থেই।) তবে এখানে আমরা Inputকমান্ডের মাধ্যমে একটি ইনপুট স্ট্রিং পেয়েছি এবং একটিতে টাইপ করব" সেখানে করা পুরোপুরি ঠিক আছে।

এখানে চারপাশে কাজ করার জন্য এখনও টিআই-বেসিক বোকামির পরিমাণ রয়েছে: একটি খালি স্ট্রিংটি অবৈধ, সুতরাং "XXX...XX"লুপের মধ্যে স্ট্রিংটি সন্নিবেশ করানোর নিষ্কলুষ দ্রবণটি এন = 0 এ কাজ করবে না। পরিবর্তে, আমরা ম্যানুয়ালি mn + 1 এর মান গণনা করি এবং "X"বহুবার স্ট্রিংটি সন্নিবেশ করি ।

ম্যাজিক ধ্রুবকগুলি 27এবং 28প্রোগ্রামটিতে বাইট গণনাগুলি 33 এবং 32 থেকে কিছুটা দূরে রয়েছে, কারণ Str1,sub( এবংlength( দুই-বাইট টোকেন যে শুধুমাত্র একটি স্ট্রিং এর দৈর্ঘ্য 1 অবদান আছে।

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


0

Java 11, 135 65+26=91 bytes

A

s->{var p=s.split("\\(\"|\"\\.");return p[0]+"(\"B"+p[1].repeat("

B

B

C

".length())+'"'+'.'+p[2];}

Try it online here (TIO does not have Java 11 yet, so this relies on a helper method instead of String::repeat()).

Ungolfed:

s -> { // lambda taking and returning a String
    var p = s.split("\\(\"|\"\\."); // split input into parts A, B^n, C (where n may be 0) at the "(\"" and "\"."
    return p[0] + "(\"B" + // put it back together: A plus the part the split shaved off, plus an extra B ...
    p[1].repeat("BBB".length()) + // ... plus B^(n*m)
    '"' + '.' + p[2]; // plus C, with the part the split shaved off reattached
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.