আপনি হ্যালো এ সম্পর্কে ছিল


30

কার্য

helloনিম্নলিখিত নিয়ম মেনে শব্দটি আউটপুট না হওয়া পর্যন্ত এর বিষয়বস্তুগুলিকে আউটপুট করে একটি সম্ভবত অসীম পাঠ্য প্রবাহ বা ফাইল পড়ুন ।

  • একবার helloআউটপুট হয়ে গেলে আপনার কোডটি তত্ক্ষণাত্ প্রস্থান করা উচিত। উদাহরণস্বরূপ এটি কোনও নতুন লাইনের জন্য অপেক্ষা করা উচিত নয়।

  • আপনার কোডটি যেমন যায় সেভাবে আউটপুট করা উচিত। এটি হ'ল এটি বিশাল পরিমাণ ইনপুটটিতে পড়া উচিত নয় এবং তারপরে আউটপুটিং শুরু করা উচিত নয়।

  • যদি স্ট্রিম / ফাইলটি না থাকে তবে helloআপনার কোডটি কেবলমাত্র চিরতরে বা স্ট্রিম / ফাইলের শেষ না হওয়া অবধি ইনপুট আউটপুট চালিয়ে যাওয়া উচিত।

  • এটি কেস সংবেদনশীল চ্যালেঞ্জ, সুতরাং helloসমান নয় Hello

  • আপনি ধরে নিতে পারেন যে ইনপুটটি কেবল মুদ্রণযোগ্য ASCII অক্ষর এবং নিউলাইন দ্বারা গঠিত।

  • আপনার কোডটি আশা করতে পারে না যে পাঠ্যটি একটি নতুন লাইন দ্বারা শেষ হবে বা ইনপুটটিতে কোনও নতুন লাইন থাকবে। এছাড়াও, আপনি কোড ধরে নিতে পারবেন না যে এটি অসীম পরিমাণে মেমরির কোনও মেশিনে চলবে।

  • আপনি ধরে নিতে পারেন যে আপনার কোডটি একটি খালি ডিরেক্টরি থেকে কল করা হবে।

উদাহরণ ইনপুট স্ট্রিম

I once had a horse called hellopina.

আউটপুট

I once had a horse called hello

ডগা

yes | tr -d \\n | <your program>এটি অসীম স্ট্রিমগুলির সাথে কাজ করে কিনা তা পরীক্ষা করে চালান । যদি এটি কিছু মুদ্রণ না করে এবং / অথবা মেমরি ফাঁস করে, প্রোগ্রামটি অনুমিত করে না ly এটি yyyyyyyyyyyyyyyyyyyyyy...কোনও নতুনলাইন ছাড়াই চিরকাল মুদ্রণ করা উচিত ।


1
"হ্যালো" এর পরে কি আমাদের কিছু পড়ার অনুমতি রয়েছে? প্রশ্নটি এমন কোনও অতিরিক্ত পাঠ্যকে নিষিদ্ধ করে বলে মনে হচ্ছে, যা (স্ট্যান্ডার্ড) সি এর মতো ভাষায় সমস্যাযুক্ত হতে পারে, যা স্বয়ংক্রিয় পাঠ্য-সামনের সাথে বাফার ইনপুট সরবরাহ করে।
টবি স্পিড

আপনার সম্ভবত সমাবেশের একটির কাছে গৃহীত উত্তরগুলি পরিবর্তন করা উচিত, কারণ এটি 2 বাইট ছোট।
Rɪᴋᴇʀ

@ রিকার এটি দুর্দান্ত হবে যদি কেউ এটি পরীক্ষা করতে পারে বা কমপক্ষে তারা বিশ্বাস করে যে এটি প্রথমে কাজ করে।

উত্তর:


2

জেলি , 24 বাইট

“Ṣẉ»ẇ⁸Ṇȧ®
ṫ-3;ƈ©Ȯ¤µ⁺Ç¿ṛ“

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

ব্যাখ্যা:

ṫ-3;ƈ©Ȯ¤µ⁺Ç¿ṛ“ Main link. Arguments: 0
ṫ-3            Truncate the list to its 4 last elements.
   ;ƈ©Ȯ¤       Store a character from STDIN in the register, print it, and append it to the list (list is initially [0]).
        µ      Start a new monadic chain, everything to the left is a link.
          Ç    Execute the helper link with the existing list as its argument.
         ⁺ ¿   Do-while loop, left link is body, right link is condition.
            ṛ“ When the loop ends, replace the return value with [] (invisible on output).

“Ṣẉ»ẇ⁸Ṇȧ® Helper link. Arguments: string
“Ṣẉ»ẉ⁸Ṇ   Check if "hello" isn't in the string.
        ® Return the character we stored in the register.
       ȧ  Check if both of the above are truthy.

26

সি (জিসিসি) , 81 80 76 75 72 71 70 69 বাইট

main(n,c){while(~(c=getchar())&n-0xb33def<<7)n=n<<5^putchar(c)/96*c;}

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

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

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

অবস্থা যখন

~(c=getchar())&n-0xb33def<<7

ধরে রেখেছে, আমরা যখন লুপটির দেহটি কার্যকর করব :

n=n<<5^putchar(c)/96*c

শর্তটি পুরোপুরি বুঝতে, আমাদের অবশ্যই প্রথমে শরীর পরীক্ষা করতে হবে। এখনকার জন্য, আমরা সকলে পালন করে c=getchar()পরিবর্তনশীল মধ্যে stdin থেকে একটি একক বাইট (সম্ভব হলে) এবং এটি দোকানে সার্চ

বাইট সিকোয়েন্স হ্যালো বিভিন্ন উপস্থাপনে নীচে দেখায়।

char     decimal     binary (8 bits)
'h'      104         0 1 1 0 1 0 0 0
'e'      101         0 1 1 0 0 1 0 1
'l'      108         0 1 1 0 1 1 0 0
'l'      108         0 1 1 0 1 1 0 0
'o'      111         0 1 1 0 1 1 1 1

এগুলির সমস্তগুলি [96, 192) এর মধ্যে রয়েছে , সুতরাং এগুলির প্রতিটি বাইটের জন্য 1 এবং বাকী সমস্ত ASCII অক্ষরের জন্য 0 এc/96 মূল্যায়ন করবে । এই ভাবে, ( putchar কপি করে প্রিন্ট এবং তার যুক্তি ফেরৎ) এর মূল্যায়ন করবে যদি হয় , একটি ছোট হাতের অক্ষর, এক , অথবা DEL অক্ষর; অন্যান্য সমস্ত ASCII অক্ষরের জন্য, এটি 0 এ মূল্যায়ন করবে ।putchar(c)/96*c`{|}~

এন বাঁদিকে এটিকে পাঁচটি বিট নাড়াচাড়া, তারপর পূর্ববর্তী অনুচ্ছেদ থেকে ফলাফল নিয়ে ফলাফলের XORing দ্বারা আপডেট করা হয়। যেহেতু কোনও ইন্টি 32 বিট প্রশস্ত হয় (বা তাই আমরা এই উত্তরটি ধরে নিই), স্থানান্তরিত কিছু বিট "বাম দিকে" পড়ে যেতে পারে (স্বাক্ষরিত পূর্ণসংখ্যার ওভারফ্লো অপরিবর্তিত আচরণ, তবে জিসিসি এটি এখানে উত্পন্ন x64 নির্দেশ হিসাবে আচরণ করে)। N এর অজানা মান দিয়ে শুরু করে , হ্যালো সমস্ত অক্ষরের জন্য এটি আপডেট করার পরে , আমরা নিম্নলিখিত ফলাফলটি পাই।

 n  ?????????????????????????|???????
'h'                          |    01101000
'e'                          |         01100101
'l'                          |              01101100
'l'                          |                   01101100
'o'                          |                        01101111
-----------------------------+--------------------------------
    <------ discarded ------>|???????0101100110011110111101111

মনে রাখবেন যে নীচের 25 বিট পূর্ণসংখ্যা 0xb33def গঠন করে , যা শর্তে যাদু ধ্রুবক। দুটি সংলগ্ন বাইটের বিটের মধ্যে কিছুটা ওভারল্যাপ থাকলেও, 96 থেকে 0 এর নীচে বাইট ম্যাপিং নিশ্চিত করে যে কোনও ভ্রান্ত ইতিবাচকতা নেই n't

শর্তটি দুটি অংশ নিয়ে গঠিত:

  • ~(getchar()) STDIN এর একটি বাইট পড়ার (বা পড়ার চেষ্টা করার) ফলাফলের বিটওয়াইস নোট নেয়।

    তাহলে getchar, সফল, এটি একটি হিসাবে পঠিত বাইট মান ফিরে আসবে int- এ । যেহেতু ইনপুটটি পুরোপুরি ASCII অক্ষর নিয়ে গঠিত, পঠিত বাইটটিতে কেবল তার কম 7 বিট সেট থাকতে পারে, সুতরাং বিটওয়াইজ নটটিতে এই ক্ষেত্রে সর্বোচ্চ 25 বিট সেট করা যাবে না।

    যদি গেটচার ব্যর্থ হয় (আর কোনও ইনপুট না থাকে), এটি -1 আসবে এবং বিটওয়াইজ নট 0 হবে

  • n-0xb33def<<7এন থেকে আগে থেকে ম্যাজিকের ধ্রুবককে বিয়োগ করে , তারপরে ফলাফলটি 7 ইউনিটটি বামে স্থানান্তরিত করে।

    তাহলে গত 5 বাইট পঠনের ছিল হ্যালো , এর সর্বনিম্ন 25 বিট এন সমান হবে 0xb33def এবং বিয়োগ তাদের শূন্য হবে। Highest টি সর্বোচ্চ বিট "বামদিকে পড়বে" ততই পার্থক্যটি স্থানান্তরিত হবে

    অন্যদিকে, যদি শেষ 5 টি পঠিত বাইট হ্যালো না হয় , তবে তফাতটির সর্বনিম্ন 25 বিটের একটি সেট করা হবে; স্থানান্তরিত হওয়ার পরে, সর্বোচ্চ 25 বিটের মধ্যে একটি হবে।

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

অন্যদিকে, যদি ইনপুটটি শেষ হয়ে যায় বা আমরা ইতিমধ্যে হ্যালো প্রিন্ট করে ফেলেছি, তবে বিটওয়াইডস এন্ডের অপারেন্ডগুলির মধ্যে একটি শূন্য হবে এবং ফলাফলও হবে। এই ক্ষেত্রে, আমরা লুপটি ভেঙে ফেলেছি এবং প্রোগ্রামটি শেষ হয়।


আপনার সম্ভবত উল্লেখ করা উচিত যে এটি এসএসআইআই-তে এনকোড হওয়া ইনপুটটির উপর নির্ভর করে, ব্যাখ্যা দেওয়ার আগে।
টবি স্পিড

2
@ টবিস্পাইট আমি এটি নির্দিষ্ট করা সাধারণ বলে মনে করি না। কোন ধরণের ASCII বেমানান এনকোডিং আপনি কোনও সি উত্তর ব্যবহারের প্রত্যাশা করবেন?
ডেনিস

EBCDIC হ'ল সুস্পষ্ট এনকোডিং যা ASCII নয়। সি কোনও নির্দিষ্ট অক্ষর এনকোডিং নির্ধারণ করে না (কেবলমাত্র দশমিক অঙ্কগুলি অবশ্যই ধারাবাহিক মান দ্বারা প্রতিনিধিত্ব করতে হবে)।
টবি স্পিড 14

উপরের প্রোগ্রামটি বন্ধ হয়ে যায় যদি স্ট্রিমটিতে "« úá ÷ o "1: o 111 6f 2: ÷ 246 f6 3: á 160 a0 4: ú 163 5:« 174
রোজলুপ

@ রোসলুপি চ্যালেঞ্জের স্পষ্ট নিশ্চয়তা দেয় যে ইনপুটটি প্রিন্টযোগ্য এএসসিআইআই অক্ষর এবং নতুনলাইন সমন্বিত থাকবে।
ডেনিস

19

বাশ, 74 75 103 99 88 82 76 বাইট

-10 বাইট @ ডিজিটাল ট্রামুমাকে ধন্যবাদ!
-11 বাইটস @ মান্যাটওয়ার্ককে ধন্যবাদ!
-6 বাইটস @ ডেনিসকে ধন্যবাদ!

IFS=
b=ppcg
while [ ${b/hello} ];do
read -rN1 a
b=${b: -4}$a
echo -n $a
done

ব্যাখ্যা:

IFS=    # making sure we can read whitespace properly
b=ppcg  # set the variable b to some arbitrary 4 letter string

while [ ${b/hello} ]; do  # while the variable b doesn't contain "hello", do the following
    read -rN1 a           # get input
    b=${b: -4}$a          # set b to its last 4 chars + the inputted char
    echo -n $a            # output the inputted char
done

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


2
এটা অসাধারণ! আমি আশা করছিলাম যে এখানে কোনও বাশ উত্তর আসবে।

13

ল্যাবরেথ , 43 41 বাইট

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

<_%-742302873844_::%*:*:420#+.:%):,*652_>

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

ব্যাখ্যা

মূল ধারণাটি হ'ল একক সংখ্যায় 256 বেসের শেষ পাঁচটি অক্ষরকে এনকোড করা। যখন একটি নতুন চরিত্র আসে, আমরা 256 দ্বারা পূর্ণসংখ্যা গুণক এবং নতুন কোড পয়েন্ট যুক্ত করে এটি "সংযুক্ত" করতে পারি। যদি আমরা কেবলমাত্র শেষ 5 টি অক্ষর দেখতে চাই, আমরা 256 5 = 2 40 = 1099511627776 মানটি নিয়ে থাকি Then তবে আমরা কেবলমাত্র এই মানটি 448378203247 এর সমান কিনা তা পরীক্ষা করতে পারি, যা আমরা যখন কোড পয়েন্টগুলি আচরণ করি তখন আমরা যা পাই helloবেস -২66 সংখ্যা হিসাবে।

কোড হিসাবে ... <...>একটি বিভ্রান্তিকর মূর্তি। এটি আপনাকে একক লাইনে কোনও শর্তাধীন নিয়ন্ত্রণ প্রবাহ ছাড়াই অসীম লুপ লিখতে দেয়, স্পেস এবং লাইনফিডে প্রচুর বাইট সংরক্ষণ করে। এটি কাজ করার জন্য প্রধান শর্তটি হ'ল আমরা যখন পৌঁছে যাই তখন স্ট্যাকের উপরে দুটি নিষ্পত্তিযোগ্য মান থাকে <(আমরা সাধারণত 0এর জন্য ব্যবহার করি তবে প্রকৃত মানটি স্বেচ্ছাসেবী হয়)।

অবশ্যই, প্রোগ্রামটি কখন শেষ হবে তা নির্ধারণ করার জন্য কিছু শর্তযুক্ত যুক্তি প্রয়োজন। তবে শর্তাধীনভাবে প্রোগ্রামটির সমাপ্তি একটি মান দ্বারা ভাগ করে নেওয়া সম্ভব যা শূন্য যখন আমরা প্রোগ্রামটি শেষ করতে চাই। <...>সম্পূর্ণ সারি নাড়াচাড়া দ্বারা কনস্ট্রাক্ট কাজ (cyclically) যখন আইপি বাম শেষে বাম, এবং তারপর অবিলম্বে এটি অবস্থান ফিরে নাড়াচাড়া। এর অর্থ কোডটি আসলে ডান থেকে বামে কার্যকর হয়। এর বিপরীত:

_256*,:)%:.+#024:*:*%::_448378203247-%_

এটি লুপটির একটি পুনরাবৃত্তি যা কোনও অক্ষর পড়ে, সমাপ্ত হয় যদি আমরা ইওএফ পৌঁছেছি, অক্ষরটি মুদ্রণ করে, এটি আমাদের এনকোডিংয়ে যুক্ত করে, এটি 5 টি অক্ষর কেটে দেয়, সমানতার জন্য পরীক্ষা করে helloএবং পুনরাবৃত্তি করে। এটি কীভাবে বিশদে কাজ করে তা এখানে রয়েছে (মনে রাখবেন যে ল্যাবরেথ স্ট্যাক-ভিত্তিক):

_256*            Multiply the encoding by 256 in preparation for the next iteration.
,                Read one byte from STDIN.
:)%              Duplicate, increment, modulo. If we hit EOF, then , returns
                 -1, so incrementing and modulo terminates the program due to
                 the attempted division by zero. However, if we did read a
                 character, we've just compute n % (n+1), which is always n itself.
:.               Print a copy of the character we just read.
+                Add it to our encoding (we'll make sure to multiply the
                 encoding by 256 at the end of the iteration, so there's room
                 for our new character).
#024             Push 1024, using the stack depth to push the initial 1.
:*:*             Square it twice. That gives 2^40.
%                Take the encoding modulo 2^40 to truncate it to the last 5
                 characters.
::               Make two copies of the encoding.
_448378203247    Push the value that corresponds to "hello".
-                Subtract it from the encoding, giving zero iff the last 5
                 characters were "hello".
%                Take the other copy of the encoding modulo this value, again
                 terminating if we've reached "hello".
                 The actual value of this modulo - if it didn't terminate the
                 the program - is junk, but we don't really care, we just need
                 any disposable value here for the <...>
_                We push a zero as the second disposable value.

8

ব্রেইনফাক, 658 বাইট

+[>,.>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[-<->]+<[>-<[-]]>[-<,.>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[-<->]+<[>-<[-]]>[-<,.>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[-<->]+<[>-<[-]]>[-<,.>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[-<->]+<[>-<[-]]>[-<,.>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[-<->]+<[>-<[-]]>[-<<->>]]]]]<<]

500 বাইটেরও বেশি ধ্রুবকগুলিতে রয়েছে যা আমার কিছুটা গল্ফ করা দরকার।

এটি মূলত একটি রাষ্ট্রীয় মেশিন, সুতরাং অসীম ইনপুট কোনও সমস্যা নয়।

এটি সামান্য মন্তব্য করা সংস্করণ

+
[
  >,.
  >h
  [-<->]
  +<
  [
    >-<[-][in input spot, not h]
  ]
  >
  [
    -
    <
    [in input spot, h has been read]
    ,.
    >e
    [-<->]
    +<
    [
      >-<[-][in input spot, not e]
    ]
    >
    [
      -
      <
      [in input spot, e has been read]
      ,.
      >l
      [-<->]
      +<
      [
        >-<[-][in input spot, not l]
      ]
      >
      [
        -
        <
        [in input spot, l has been read]
        ,.
        >l
        [-<->]
        +<
        [
          >-<[-][in input spot, not l]
        ]
        >
        [
          -
          <
          [in input spot, l has been read]
          ,.
          >o
          [-<->]
          +<
          [
            >-<[-][in input spot, not o]
          ]
          >
          [
            -
            <
            [in input spot, o has been read]
            <->>
          ]
        ]
      ]
    ]
  ]
  <<
]

এটি মজাদার দেখাচ্ছে :)

প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্ট্যাক এক্সচেঞ্জে আপনাকে স্বাগতম!
betseg

1
এই কোডটিতে একাধিক সমস্যা রয়েছে তবে সবচেয়ে বড় সমস্যাটি হ'ল এর মতো মামলাগুলি ahehellobসঠিকভাবে পরিচালনা করার জন্য এটি যুক্তি অন্তর্ভুক্ত করে না ; একটি সম্ভাব্য ম্যাচের মাঝামাঝি সময়ে, এটি কেবলমাত্র পরবর্তী চিঠির জন্য পরীক্ষা helloকরে hএবং আরম্ভ করার জন্য কোনও সন্ধান করে না ।
মিচ শোয়ার্টজ

8

বাশ , 73 68 66 বাইট

IFS=
[[ $1 != olleh ]]&&read -rN1 c&&echo -n $c&&exec $0 $c${1::4}

কোনও বা কেবল লুকানো ফাইলই নয় এমন ডিরেক্টরি অনুমান করে। হিসাবে চালানো আবশ্যক <path/to/script>

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

এটি কীভাবে কাজ করে (পুরানো)

শুরুতে যখন লুপ, আমরা প্রথম টেস্ট তাহলে পরিবর্তনশীল স্ট্রিং গুলি (প্রথমদিকে খালি) সমান olleh ( হ্যালো পিছন, OLE), এবং আসতে 0 (ম্যাচ) অথবা 1 (একটি ম্যাচ) নেই। আনুষ্ঠানিকভাবে লুপের শর্তের অংশ হওয়ার পরে, ফলাফলটি এটি নিজের উপর প্রভাব ফেলবে না, কেবল doশর্তটি ধরেছে কিনা তা নির্ধারণের আগে কেবল সর্বশেষ আদেশ হিসাবে command

এরপরে, আমরা খালি স্ট্রিংয়ের অভ্যন্তরীণ ক্ষেত্রের বিভাজককে সেট readকরব (তাই সাদা -rজায়গাতে শ্বাসরোধ করবে না), এসটিডিআইএন থেকে কাঁচা বাইটগুলি পড়বে এবং সেগুলিতে সংরক্ষণ করবে c$?এটি পূর্ববর্তী কমান্ডের প্রস্থান কোড, সুতরাং এটি -N1একটি মিল না-করার জন্য শূন্য বাইট ( -N0) এবং একটি ( ) বাইটটি পড়বে । শূন্য বাইটগুলি পড়া, এটি ইওএফ হিট করার কারণে বা -N0নির্দিষ্ট কারণের কারণে, readস্থিতি কোড 1 সহ প্রস্থানটি সঞ্চারিত করে , তাই লুপটি শেষ হবে; অন্যথায়, শরীর কার্যকর করা হয় এবং আমরা আবার শুরু করি।

শরীরে, আমরা প্রথমে আমরা যে বাইটটি পড়ে তা মুদ্রণ করি, তারপরে এর সাথে আপডেট করি s=$c${s::4}। এটি সেকেন্ডে প্রথম চার বাইটে (পর্যন্ত) পঠিত বাইটকে সংশোধন করে , তাই হ্যালো প্রিন্ট হয়ে গেলে s এর ওলেলে সমান হবে ।


সত্যিই খুব সুন্দর!

8

ব্রেনফাক, 117 বাইট

--->>>------>>>+>>>+>>>++++<,[.-----<-[>--<-----]<[<<<]>>>[<[<<<+>>>>->+<<-]>[>>
+>]<[+[-<<<]]>>[<+>-]>>]<[[-]<<<,<]>]

বিন্যাসকৃত:

--->>>------>>>+>>>+>>>++++
<,
[
  .-----<-[>--<-----]<[<<<]
  >>>
  [
    <[<<<+>>> >->+<<-]
    >[>>+>]
    <[+[-<<<]]
    >>[<+>-]
    >>
  ]
  <[[-]<<<,<]
  >
]

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

অক্ষরগুলি দিয়ে helloঅফসেটে টেপটি শুরু করে 107, প্রতি তিনটি কক্ষে একটি করে মূল্য দিয়ে আলাদা করা হয়, তারপরে শেষ পাঁচটি অক্ষর দেখা যায় এবং প্রতিটি নতুন অক্ষর প্রক্রিয়াজাতকরণের সাথে মিলের জন্য পরীক্ষা করে, স্ট্রিংয়ের ডানদিকে একটি পতাকা ব্যবহার করে ম্যাচ হয়েছে কিনা তা খোঁজখবর রাখুন।


7

রুবি , 46 60 বাইট

a="";loop{q=$<.getc;~p if a[-5..-1]=="hello"||!q;a+=q;$><<q}

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

শেষ 5 টি না হওয়া পর্যন্ত স্টিডিন থেকে অক্ষরগুলি পড়ে hello, তারপরে স্ট্রিংটি আউটপুট করে (অথবা কোনও অক্ষর স্টিডিনে না রেখে দেওয়া হয়)। ত্রুটি সহ শেষ হয়।

সমতুল্য:

a = ""
loop {
    q = $<.getc
    ~p if a[-5..-1] == "hello" || !q
    a += q
    $><< q
}

বা, আরও অবারিত:

a = ""
loop do
    q = STDIN.getc
    break if a[-5..-1] == "hello" or not q
    a += q
    print q
end

1
aপ্রতিবার পড়ার সময় বাড়তে থাকে। ইনপুট অসীম হলে কি এই ক্র্যাশ হয়?
betseg

@ বিটসেগ এইচএম, সম্ভবত আমি এটি ঠিক করতে পারি কিনা তা আমাকে দেখতে দিন
Conor O'Brien

7

পাইথন 3, 120 116 104 বাইট

অসীম স্ট্রিমগুলির সাথে কাজ করে, প্রথমবার গল্ফ করে, যে কোনও টিপসের প্রশংসা করা হয়।

import sys
a=1
c=''
while(a):
    a=sys.stdin.read(1)
    if a:print(end=a)
    c=(c+a)[-5:]
    if c=='hello':break

কিছু বাইট সংরক্ষণ করার জন্য @ ডিজেএমসিমেহেমকে ধন্যবাদ :)


সাইটে স্বাগতম! c=[0,c+1]['hello'[c]==a]আপনার কিছু বাইট সংরক্ষণ করা উচিত এছাড়াও, a=1খুব ছোট।
ডিজেএমসিএমহেম

2
whileপাইথনে আপনার প্রথম বন্ধনী প্রয়োজন নেই ।
পূর্কাকুডারী

6

হাস্কেল, 41 47 43 বাইট

f l|w@"hello"<-take 5l=w|a:b<-l=a:f b|1<2=l

হাস্কেলের অলসতা অসীম ইনপুট / আউটপুটটিকে ভালভাবে পরিচালনা করে।

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

সম্পাদনা: সসীম ইনপুট পরিচালনা করেনি - স্থির। চিহ্নিত করার জন্য @ লিওকে ধন্যবাদ।

দ্বিতীয় সম্পাদনা করুন: @ janrjan জোহানসেন 4 বাইট সংরক্ষণ করেছেন ধন্যবাদ!


2
ইনপুটটিও সীমাবদ্ধ হতে পারে, তাই আমি মনে করি আপনি স্ট্রিংয়ের শেষে
লিও

@ লিও: উফ, পুরোপুরি এটি মিস হয়েছে। সংশোধন করা হয়েছে।
নিমি

2
প্রথম প্রহরীকে ছোট করা যেতে পারে |w@"hello"<-take 5l=w
janrjan জোহানসেন

@ আরজান জোহানসেন: ওহ, এটি খুব সুন্দর। ধন্যবাদ!
নিমি

6

কিউবিক্স, 94 83 82 79 63 56 বাইট

p>q'-?w.uh'e@U7.'hqi?oqB-!ul.-..$WWu_q<o'\;>....6t?.../!@

সম্প্রসারিত:

        p > q '
        - ? w .
        u h ' e
        @ U 7 .
' h q i ? o q B - ! u l . - . .
$ W W u _ q < o ' \ ; > . . . .
6 t ? . . . / ! @ . . . . . . .
. . . . . . . . . . . . . . . .
        . . . .
        . . . .
        . . . .
        . . . .

নোট

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

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

আপনি প্রোগ্রামটি এখানে চেষ্টা করতে পারেন ।

ব্যাখ্যা

সাধারণ ধারণা

সাধারণ ধারণাটি হ'ল আমরা একটি অক্ষরটি পড়তে চাই এবং তারপরে এটি বিভিন্ন বর্ণের (প্রথমে h, তারপরে e, তারপরে lইত্যাদি) পরীক্ষা করতে পারি। আমরা যে চরিত্রটি হারিয়েছি তা ট্র্যাক করে রাখতে, আমরা এটি স্ট্যাকের একেবারে নীচে রাখি। যখন আমাদের এটি প্রয়োজন হয়, আমরা সহজেই এটিকে আবার শীর্ষে আনতে পারি।

লুপ পড়ুন / লিখুন

পঠন-লেখার লুপটি কেবল 5 লাইন। ব্যবহৃত হয় না এমন সমস্ত অক্ষর নো-অপ্স ( .) দ্বারা প্রতিস্থাপিত হয়েছে :

        . . . .
        . . . .
        . . . .
        @ . . .
' h q i ? o q B - ! u l . - . .
. . . . _ . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
        . . . .
        . . . .
        . . . .
        . . . .

এটি দুটি ভাগে বিভক্ত হতে পারে: পড়া এবং (লেখা এবং চেক করা)। প্রথম অংশে প্রশ্ন চিহ্ন পর্যন্ত নির্দেশাবলী রয়েছে। দ্বিতীয় অংশটি লাইনটির বাকী অংশ। এটি প্রায় লুপ হওয়ার কারণে, আমরা ধরে নিই আমরা একটি স্ট্যাক দিয়ে শুরু করব[...]

    @
'hqi?
    _

Explanation
'h          Push the character code of the h
            Stack: [..., 104]
  q         Send it to the bottom
            Stack: [104, ...]
   i        Read one character of the input (-1 for EOF)
            Stack: [104, ..., input]
    ?       Start of condition:
              if (input < 0):
    @           execute '@', ending the program
              if (input = 0):
                continue going right
              if (input > 0):
    _           turn to the right, reflect back ('_') and
                turn right again, effectively not changing 
                the direction at all

দ্বিতীয় অংশটি (লেখা এবং পরীক্ষা করা) আবার লিনিয়ার। স্ট্যাকটি শুরু হয় [next-char, ..., input]। আমরা পরবর্তী চরিত্রটিকে বিমূর্ত করেছি, কারণ প্রোগ্রামে এটি পরে পরিবর্তিত হয়।

oqB-!ul.-  Explanation
o          Output the character at the top of the stack
 q         Send the input to the bottom of the stack
           Stack: [input, next-char, ...]
  B        Reverse the stack
           Stack: [..., next-char, input]
   -       Push the difference of the top two characters, which
           is 0 if both are equal, something else otherwise
           Stack: [..., next-char, input, diff]
    !      if (diff = 0):
     u       make a u-turn to the right
           else:
      l.     execute two no-ops
        -    push [input - next-char - input], which is disregarded
             later, so it effectively is a no-op as well.

এখন, আইপিটি এই লুপটির শুরুতে আবার শুরু হবে, যাচাই করতে পরবর্তী অক্ষরটি পুনরায় সেট করুন h

পরের চরিত্রটির সাথে মিলছে

আইপি যদি কোনও ইউ-টার্ন তৈরি করে (যেমন আমরা যে অক্ষরটি পড়ি এবং মুদ্রিত করে পরবর্তী অক্ষরটির সাথে মেলে 'hello'), আমাদের ইনপুটটি কোন অক্ষরটি ছিল এবং তার উপর নির্ভর করে পরবর্তী অক্ষরটিকে স্ট্যাকের নীচে টানুন check এর পরে, আমাদের hস্ট্যাকের দিকে চাপ না দিয়ে পঠন / লেখার লুপটিতে ফিরে আসা দরকার, সুতরাং সেখানে পৌঁছানোর জন্য আমাদের আরও একটি উপায় প্রয়োজন।

প্রথম জিনিসগুলি: ইনপুটটি কী চরিত্র তা নির্ধারণ করুন। স্ট্যাক ভালো দেখায়: [..., prev-char, input, 0]

        . . . .
        - ? . .
        u h ' e
        . . . .
. . . . . . . . . ! u . . . . .
. . . . . . . . . \ ; . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
        . . . .
        . . . .
        . . . .
        . . . .

ইনপুট তুলনা করতে, আমরা hআবার অক্ষর কোড ব্যবহার । প্রথমদিকে, এটি ছিল কারণ আমি সত্যিই জানতাম না যে আমি কীভাবে এটি পরিচালনা করব এবং hএটি যাচাই করার জন্য স্ট্রিংয়ের প্রথম চরিত্র, তবে এটি যথেষ্ট সুবিধাজনক বলে শেষ হয়েছিল। আমরা যদি ইনপুট থেকে h এর অক্ষর কোডটি বিয়োগ করি -3তবে আমরা পাই যদি ইনপুট হয় e, 0যদি ইনপুট হয় h, 4যদি ইনপুট থাকে lএবং 7যদি ইনপুট হয় o

এটি দরকারী, কারণ ?কমান্ডটি আমাদের সহজেই নেতিবাচক মানকে ধনাত্মক মান এবং শূন্য থেকে আলাদা করতে দেয়। যেমন, আইপি বাম দিকে ঘুরলে, পার্থক্যটি নেতিবাচক ছিল e, সুতরাং ইনপুটটি ছিল , সুতরাং পরবর্তী অক্ষরটি একটি হওয়া উচিত l। আইপি যদি সোজা চলে যেতে থাকে তবে পার্থক্য ছিল 0, সুতরাং ইনপুটটি ছিল hতাই পরবর্তী অক্ষরটি একটি হওয়া উচিত e। যদি ইনপুটটি একটি lবা একটি হয় o, আইপি ডান দিকে ঘুরবে।

পূর্বোক্ত প্রশ্ন চিহ্নের আগে কার্যকর করা সমস্ত নির্দেশাবলী হ'ল:

;!e'h-     Explanation
;          Delete the top of the stack
           Stack: [..., prev-char, input]
 !         if (input = 0):
  e          execute 'e' (no-op)
   'h      Push the character code of h
           Stack: [..., prev-char, input, 104]
     -     Push the difference of the input and 104
           Stack: [..., prev-char, input, 104, diff]

উপরে বর্ণিত আইপি এখন তার দিক পরিবর্তন করে। আসুন বিভিন্ন সম্ভাবনার উপর দিয়ে যাওয়া যাক।

ইনপুট 'e'

প্রথমে আমরা ইনপুটটি বিবেচনা করব e, যার ফলে আইপিটি উপরের দিকে উপরে চলে যায় ?, পার্থক্যটি 3 হওয়ায় সমস্ত অপ্রাসঙ্গিক অক্ষর কিউব থেকে সরানো হয়েছে।

        . > q '
        . ? . .
        . . . .
        . . . .
. . q . . . . . . . . l . . . .
$ W W . . . . . . . . > . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
        . . . .
        . . . .
        . . . .
        . . . .

অক্ষরগুলি এই ক্রমে কার্যকর করা হয় (কিছু নিয়ন্ত্রণ-প্রবাহের অক্ষরগুলি বাদ দিয়ে):

q'l$WWq
q           Save the difference (-3) to the bottom of the stack so
            we can tell whether the l on the bottom of the stack is
            the first or the second l in hello
            Stack: [-3, ...]
 'l         Push the character code of l to the stack
            Stack: [-3, ..., 108]
   $W       no-op
     W      Sidestep into the loop
      q     Send the character code to the bottom
            Stack: [108, -3, ...]

এখন আইপি আবার পঠন / লেখার লুপে পৌঁছেছে।

ইনপুট 'h'

যদি ইনপুটটি ছিল 'h', পার্থক্য 0, সুতরাং আইপি তার দিক পরিবর্তন করে না। সমস্ত অপ্রাসঙ্গিক অক্ষর মুছে ফেলা দিয়ে আবার কিউবটি এখানে। যেহেতু এই পথে বেশ কয়েকটি নো-অপস অন্তর্ভুক্ত রয়েছে, তাই এটি পাস করা সমস্ত নো-অপস দ্বারা প্রতিস্থাপন করা হয়েছে &। আইপি শুরু হয় প্রশ্ন চিহ্ন থেকে।

        . . . .
        . ? w .
        . . ' e
        . . . .
. . . . . . . . . ! . . . . . .
. . . u _ q < . . \ . . . . . .
. . ? & & & / . . & . . . . . .
. . & . . . . . . & . . . . . .
        . . . .
        & & & &
        . . . .
        . . . .

সম্পাদিত নির্দেশাবলী হ'ল:

'e!\?q_
'e          Push the character code of the e
            Stack: [..., 101]
  !         if (101 = 0):
   \          reflect away (effectively a no-op)
    ?       if (101 > 0):
              turn right (always happens)
     q      Move 101 to the bottom of the stack
            Stack: [101, ...]
      _     No-op

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

অন্যান্য ইনপুট

অন্যান্য সমস্ত ইনপুটগুলি ইতিবাচক পার্থক্যের ফলস্বরূপ, তাই আইপিটি প্রশ্ন চিহ্নের ডানদিকে ফিরে আসে। আমরা এখনও আলাদা করতে প্রয়োজন lএবং oযাতে এর পরবর্তিতে আমরা কি করব।

'l'এবং পৃথক করা'o'

মনে রাখবেন যে পার্থক্যটি 7 oএবং 4 এর জন্য 4 lএবং ইনপুটটি যদি একটি হয় তবে আমাদের প্রোগ্রামটি শেষ করতে হবে o। এখানে আবার কিউবটি অপ্রাসঙ্গিক অংশগুলির সাথে একটি .দ্বারা প্রতিস্থাপন করা হয়েছে এবং আইপি ক্রসগুলি অ্যাম্পারস্যান্ড দ্বারা প্রতিস্থাপন করা হয়েছে এবং নো-অপসগুলি রয়েছে।

        . . q .
        . ? w .
        . h ' .
        . U 7 .
. . . . . . . . . . . . . - . .
. . . . . . . . . . . . . & . .
. . . . . . / ! @ . . . . & . .
. . . . . . & . . . . . . & . .
        . . & .
        . . & .
        . . & .
        . . & .

h7'wq-!@    
h           no-op
 7          Push 7 to the stack
            Stack: [..., diff, 7]
  'wq       Push w to the stack and send it to
            the bottom. We don't care about it,
            so it's now part of the ellipsis.
            Stack: [..., diff, 7]
     -!     if (diff = 7):
       @        End the program

দুই মধ্যে নির্ণায়ক 'l'গুলি

সুতরাং, এখন আমরা জানি যে ইনপুটটি ছিল একটি l, তবে আমরা জানি না কোনটি l। এটি যদি প্রথম lহয় তবে আমাদের স্ট্যাকের নীচে আরেকটি ধাক্কা দিতে হবে, তবে এটি দ্বিতীয় হলে আমাদের একটি ধাক্কা দিতে হবে o। মনে আছে আমরা -3প্রথমটি ধাক্কা দেওয়ার ঠিক আগে আমরা স্ট্যাকের নীচে সংরক্ষণ করেছি l? আমরা দুটি শাখা পৃথক করতে এটি ব্যবহার করতে পারি।

        . . . .
        . . . .
        . . . .
        . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
6 t ? . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
        . . . .
        . . . . 
        . . . .
        . . . .

স্ট্যাকটি শুরু হয় [..., -3 or 140, ...]

Explanation
6t?         
6t          Take the 6th item from the top and move
            it to the top (which is either -3 or 140)
  ?         If that's positive, turn right, otherwise,
            turn left

প্রথম 'l'

এটি যদি প্রথম ছিল তবে 'l'আমাদের আরও একটি ধাক্কা দেওয়া দরকার 'l'। বাইট সংরক্ষণ করতে, আমরা প্রথমটির মতো একই অক্ষর ব্যবহার করি 'l'। আমরা স্ট্যাকটি সরল করতে পারি [...]। এখানে কিউবারের প্রাসঙ্গিক অংশটি অ্যাম্পারস্যান্ডগুলি দ্বারা প্রতিস্থাপনের সাথে নেই op

        p > q '
        . . . .
        . . . .
        . . . .
' . q . . . . . . . . l . . . .
$ W W . . . . . . . . > & & & &
. . ? . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
        . . . .
        . . . .
        . . . .
        . . . .

নিম্নলিখিত নির্দেশাবলী কার্যকর করা হয়:

$'pq'lq
$'          no-op
  pq        no-op
    'l      Push the character code of l
            Stack: [..., 108]
      q     Send it to the bottom
            Stack: [108, ...]

আমরা পঠন / লেখার লুপটি লিখতে চলেছি, সুতরাং আমরা এই শাখাটি দিয়ে শেষ করেছি।

দ্বিতীয় 'l'

যদি ইনপুটটি দ্বিতীয়ত 'l'ছিল 'hello', আইপিটি প্রশ্ন চিহ্নের ডানদিকে ঘুরে গেছে। আবার, আমরা স্ট্যাকটিকে সহজ করতে পারি [...]এবং আইপি শুরু হয় ?, এবার দক্ষিণ দিকে ইশারা করে।

        . . . .
        . . . .
        . . . .
        . . . .
. . . . . . . . . . . . . . . .
. . . u _ q < o ' \ . . . . . .
. . ? . . . . . . & . . . . . .
. . & . . . . . . & . . . . . .
        . . . .
        & & & &
        . . . .
        . . . .

সম্পাদিত নির্দেশাবলী হ'ল:

'oq_
'o          Push the character code of 'o'
            Stack: [..., 111]
  q         Move the top item to the bottom
            Stack: [111, ...]
   _        No-op

এবং আইপি আবার পড়তে / লেখার লুপটি প্রবেশ করতে চলেছে, সুতরাং আমরা এই শাখাটি দিয়েও শেষ করেছি।


একটি বীরত্বপূর্ণ প্রচেষ্টা!

5

সি ++, 142 141 বাইট

#import<iostream>
void f(std::istream&i){i>>std::noskipws;char c;for(std::string s="     ";s!="hello"&&i>>c;)s.erase(0,1),s+=c,std::cout<<c;}

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


এটি কি জিসিসির মাধ্যমে সম্ভব হবে? আমি #importজিসিসি সি ++ প্রোগ্রামগুলিতে দেখতে পাচ্ছি না ...
ckjbgames

1
@ckjbgames হ্রাস #importকরা জিসিসি এক্সটেনশন।
স্টেডিবক্স

1
আরও তথ্যের @ckjbgames: stackoverflow.com/questions/172262/...
iFreilicht

@iFreilicht এই প্রশ্নটি আসলে আমাকে তা জিজ্ঞাসা করেছিল।
ckjbgames

1
@ckjbgames আপনি দ্বিতীয় উত্তর কটাক্ষপাত করা করতে চাইতে পারেন: stackoverflow.com/a/172264/2533467 । "জিসিসি মধ্যে আমদানি ভিসি মধ্যে ++, আমদানি থেকে ভিন্ন এটা একবার শুধুমাত্র একটি হেডার অন্তর্ভুক্ত করা একটি সহজ উপায়। "
iFreilicht

3

নোড, 124 বাইট

with(process)with(stdin)on('data',d=>[...d].map(c=>(s=(stdout.write(c),s+c).slice(-5))=='hello'&&exit()),setEncoding(),s='')

স্ট্রিম উপলব্ধ মেমরির মধ্যে ফিট হবে তা ধরে নিই না।


3

সি #, 134 বাইট

using C=System.Console;class P{static void Main(){var s="";for(int c;(c=C.Read())>=0&!s.Contains("olleh");C.Write(s[0]))s=(char)c+s;}}

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

একটি অক্ষর পড়ে, এটি -1 (EOS) না পরীক্ষা করে এবং আমরা এখনও "হ্যালো" দেখিনি, তারপরে এটি একটি স্ট্রিংতে প্রিনড করে, এবং চরিত্রটি বাইরে লিখে দেয়। আমরা প্রিপেন্ড করি কারণ এর s[0]চেয়ে অনেক খাটো (char)s। স্ট্রিংয়ের দৈর্ঘ্যে এর একটি চতুর্ভুজ ব্যয় রয়েছে, কারণ এটি প্রতিবার কোনও অক্ষর পড়লে পুরো ইনপুট বরাদ্দ করতে এবং স্ক্যান করতে হয় (সিএলআর-এর সীমাবদ্ধতার কারণে এটি 2 জি ইনপুট পরে ক্র্যাশ হয়ে যাবে, এটি কি অনুমোদিত?)

using C=System.Console;

class P
{
    static void Main()
    {
        var s="";
        for(int c;(c=C.Read())>=0&!s.Contains("olleh");C.Write(s[0]))
            s=(char)c+s;
    }
}

একটি (দীর্ঘতর: 142 বাইট) সংস্করণের জন্য যা স্মৃতিশক্তি শেষ হবে না এবং যার প্রতি চরিত্রের ধ্রুবক ব্যয় রয়েছে, নীচে দেখুন:

using C=System.Console;class P{static void Main(){var s="     ";for(int c;(c=C.Read())>=0&s!="hello";C.Write(s[4]))s=s.Substring(1)+(char)c;}}

এটি একটি 5-দৈর্ঘ্যের স্ট্রিংয়ে সর্বশেষ 5 টি অক্ষর রাখে যার অর্থ সংক্ষিপ্ত তুলনা এবং সস্তার সর্বশেষ চার-ল্যাঙ্কিং, তবে আপডেট করা বেশ ব্যয়বহুল।

using C=System.Console;

class P
{
    static void Main()
    {
        var s="     ";
        for(int c;(c=C.Read())>=0&s!="hello";C.Write(s[4]))
            s=s.Substring(1)+(char)c;
    }
}

3

পিএইচপি, 57 55 53 বাইট

while(hello!=$s=substr($s.$c,-5))echo$c=fgetc(STDIN);

যেহেতু কোনও অসীম ফাইল নেই, আমি এসটিডিএন থেকে ইনপুট নিই। সাথে চালাও -nr

ইনপুট দিয়ে লুপ করুন, বর্তমানের অক্ষরটি মুদ্রণ করুন, এতে যুক্ত করুন, শেষ 5 টি অক্ষর $sকেটে দিন $s। ব্রেক লুপ যখন $sহয় hello


3

ভিম, 39 বাইট

:im hello hello:se noma
:map : i

i

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

:im hello                        "Remap 'hello' in insert mode to
          hello                "write hello, then hit escape
                 :se noma       "then set the buffer to not-modifiable
:map : i                        "THEN remap ':' to 'i' so that can't be changed

i                                "enter insert mode and await an infinite stream of input

এটি কি ভিমের জন্য একটি গৃহীত ইনপুট পদ্ধতি? আমি ভিম প্রোগ্রামগুলি শুরু হওয়ার আগে সাধারণত ইনফুটটি ইতিমধ্যে বাফারে থাকবে বলে ভেবেছিলাম।
মার্টিন এন্ডার

সত্যি বলতে কি জানি না? এটি সত্য, তবে খুব কমই অসীম স্রোতের জন্য অনুমতি দেয়, তাই আমি সত্যই এটিকে সম্পর্কে কঠোর চিন্তা না করেই এইভাবে করেছি।
nmjcman101

ইনপুট স্ট্রিমে যদি একটি পালানোর চরিত্র থাকে তবে কী হবে?
অস্পষ্ট

@ ডিম আমি জিজ্ঞাসা করেছি, এবং ওপি কেবল প্রিন্টযোগ্য এএসসিআইআই এবং নিউলাইনগুলি নির্দিষ্ট করেছে। ESC মুদ্রণযোগ্য ASCII আফাইক
nmjcman101

3

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

এটি করার আরও ভাল উপায় সম্ভবত আছে তবে আমি এই মুহূর্তে এটি দেখতে পাচ্ছি না।

while(($x=($x+$host.UI.RawUI.ReadKey("IncludeKeyDown").character+"     ").substring(1,5)).CompareTo("hello")){}

এটি প্রতিধ্বনিকে দমন না করে মূল স্ট্রোকগুলি পড়ে। চরিত্রটি $ x এ যুক্ত করা হয়েছে যা শেষ 5 টি অক্ষরে ছাঁটাই এবং "হ্যালো" এর সাথে তুলনা করা হয়। তুলনাটি সত্য না হওয়া পর্যন্ত এটি বহন করে।

দ্রষ্টব্য: এটি পাওয়ারশেল আইএসই তে কাজ করে না। রিডকি সেই পরিবেশে অক্ষম।


3

স্কিম 115 বাইট

(do((c(read-char)(read-char))(i 0(if(eqv? c(string-ref"hello"i))(+ i 1)0)))((or(eof-object? c)(= i 5)))(display c))

পঠনযোগ্য সংস্করণ:

(do ((c (read-char) (read-char))                            ; read stdin
     (i 0 (if (eqv? c (string-ref "hello" i)) (+ i 1) 0)))  ; check target
    ((or (eof-object? c) (= i 5))) ; finish if end of stdin, or word found
  (display c))                     ; display each character

এটি প্রতিটি বার স্টুডিনের কাছ থেকে লুপের চারপাশে পৃথক চর নেয় এবং এটি "হ্যালো" চরিত্রগুলির সাথে মিলিত হওয়ায় লক্ষ্য শব্দটিতে এর অবস্থানটি চিহ্নিত করে।

ইনপুট শেষ হয়ে গেলে বা "হ্যালো" দেখা গিয়েছে ops অসীম স্রোতে কোনও স্মৃতি ব্যবহৃত হয়নি।


দুর্দান্ত উত্তর, সাইটে আপনাকে স্বাগতম!
DJMcMayhem

3

এডাব্লুকে, 95 বাইট

BEGIN{RS="(.)"
split("hello",h,"")}{for(j=0;++j<6;){c=RT
printf c
if(c!=h[j])next
getline}exit}

আমি এখানে 2 টি জিনিস শিখেছি:
1) অক্ষর ব্যবহারের মধ্যে রেকর্ডগুলি বিভক্ত করতে RS="(.)"এবং তারপরে 2 এর RTপরিবর্তে ব্যবহার করা আবশ্যক $1
) ORSদ্বারা ব্যবহৃত হয় printএবং "\n"
3 টি ডিফল্ট হয় ) আমি 2 টি গণনা করতে পারি না এবং ব্যবহার printfকরা নির্ধারণের চেয়ে "সস্তা" ORSএবং ব্যবহারprint

ব্যবহারের উদাহরণ: ফাইলের মধ্যে কোড কোড

awk -f FILE some_data_file

অথবা

some process | awk -f FILE

ডেনিসের yes | ...পরামর্শ ব্যবহার করে কোডটি পরীক্ষা করা হয়েছিল এবং আমি প্রচুর এবং প্রচুর yগুলি দেখতে পেলাম ।

এফওয়াইআই, আপনি বিকল্প হিসাবে আরএস অ্যাসাইনমেন্টটি করতে পারেন এবং এটির BEGINমাধ্যমে ব্লকের বাইরে টানতে পারেন :

awk -v RS='(.)'

সত্যিই জটিল সমাধান! (হয়তো কারণ এটি শুক্রবার বিকেলে, কিন্তু আমি এটা সময়সীমার চ্যালেঞ্জ জন্য খুব ভাল এন্ট্রি পাবেন।) যদিও আমি আরো awkish পদ্ধতির চেষ্টা হবে: BEGIN{RS="(.)"}{printf RT}"olleh"==a=RT substr(a,1,4){exit}
manatwork

অদ্ভুতভাবে যথেষ্ট আমার কাছে প্রায় এক ঘন্টা আগে জমা দেওয়ার জন্য প্রস্তুত উত্তর আছে ... এবং তা জমা দিতে ভুলে গিয়েছি। : পি
রবার্ট বেনসন

3

পাইথন 3 (লিনাক্স), 73 72 বাইট

s=c='_';I=open(0)
while'olleh'!=s>''<c:c=I.read(1);s=c+s[print(end=c):4]

1 মিট বাইট গল্ফ করার জন্য @ মিচশওয়ার্টজকে ধন্যবাদ!

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


আমি বুঝতে পারছি না। শর্তটি কীভাবে হয়whileসঠিকভাবে মূল্যায়নের ? দেখে মনে হচ্ছে আপনি একটি বুলিয়ান একটি খালি স্ট্রিংয়ের সাথে তুলনা করছেন।
iFreilicht

1
s[print(end=c):4] একটি বাইট সংরক্ষণ করে
মিচ শোয়ার্টজ

1
@iFreilicht পাইথন শৃঙ্খলাবদ্ধ শৃঙ্খলা বিশ্লেষণ করে যেমন গণিতে থাকে ( এ <বি <সি , উদাহরণস্বরূপ)। শর্তটি একটি সংক্ষিপ্তকরণ 'olleh'!=s and s>''and''<c)। মাঝারি পরীক্ষাটি প্রয়োজন হয় না, তবে তাদের শৃঙ্খলাবদ্ধ করা সহজবোধ্যের চেয়ে ছোট 'olleh'!=s and''<c
ডেনিস

পছন্দ করেছেন ধন্যবাদ!
ডেনিস

3

8086 মেশিন কোড, 22 বাইট

00000000  bf 11 01 b4 01 cd 21 ae  75 f6 81 ff 16 01 72 f3  |......!.u.....r.|
00000010  c3 68 65 6c 6c 6f                                 |.hello|
00000016

সমমানের সমাবেশ কোড:

org 0x100
use16
a:  mov di, msg
b:  mov ah, 1       ; read one byte from stdin with echo
    int 0x21        ; dos syscall -> result in AL
    scasb           ; if (DI++ == AL)
    jne a
    cmp di, msg+5
    jb b
    ret
msg db "hello"

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

1
আমি সমতুল্য সমাবেশ কোড যুক্ত করেছি added এটি মূলত একটি খুব দরকারী ডস সিস্কেলের উপর নির্ভর করে, যা স্টিডিনের কাছ থেকে একটি বাইট পড়ে এবং একই সময়ে এটি স্টাডাউটে ফিরে আসে। 8086 এর মধ্যে একটি একক-বাইট স্ট্রিং তুলনা নির্দেশ রয়েছে যা এখানে কার্যকর।
ব্যবহারকারী5434231

2

পাইথ, 49 47 বাইট

Wn"hello"=>5+kp$__import__("sys").stdin.read(1)

ইনপুট এর একক অক্ষর নিতে পাইথ খুব ভাল নয়। সমস্ত $__import__("sys").stdin.read(1)কিছু কেবল এটি করে চলেছে। এছাড়াও, এর অর্থ এটি কেবল অফলাইনে চলে।

সমস্ত কিছু সংক্ষিপ্ত ...

প্রোগ্রামটি লুপ করার সময় একটি দেহহীন। শর্তের ভিতরে, প্রোগ্রামটি একটি অক্ষর পড়ে, এটি আবার মুদ্রণ করে, সেই চরিত্রটি সংযোজন করে k(যা প্রাথমিকভাবে খালি স্ট্রিং হয়), শেষের 5 টি অক্ষর বাদে সমস্ত ছাঁটাই করে দেয়k এবং তারপরে ফলাফলটি হয় না তা পরীক্ষা করে "hello"

32 টি অক্ষর ইনপুটটির একটি বাইট পাচ্ছে, 15 টি অক্ষর বাকীটি করে।

লিনাক্সে পরীক্ষিত, এমনকি কোনও নতুন লাইন, অসীম ইনপুট ইত্যাদির সাথেও কাজ করে



2

রুবি, 59 49 48 43 বাইট

এখন রেন্ট-মুক্ত, খাটো এবং মেমরি ফাঁস ছাড়াই।

s=''
s=$>.putc$<.getc+s[0,4]until'olleh'==s

ডেনিসকে কিছু বন্ধনী এবং একটি স্থান ধন্যবাদ থেকে মুক্তি দিয়ে 5 বাইট সংরক্ষণ করা হয়েছে



1

Röda , 49 47 বাইট

{a=[0]*5{|x|[x];a=a[1:]+x;z if[a&""="hello"]}_}

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

এটি একটি বেনাম ফাংশন যা এর ইনপুট স্ট্রিম থেকে অক্ষরগুলি পড়ে এবং "হ্যালো" না পাওয়া পর্যন্ত এগুলি আউটপুট করে। এটি aশেষ অক্ষরগুলি ট্র্যাক করতে অ্যারে ব্যবহার করে ।

এটি STDERR এ কিছু জঞ্জাল আউটপুট দেয় তবে আমি বুঝতে পারি যে এটি অনুমোদিত

ব্যাখ্যা:

{
    a=[0]*5                /* Initialize the array with 5 zeroes. */
    {|x|                   /* For each x in the input stream: */
        [x];               /* Print x */
        a=a[1:]+x;         /* Add x and remove the sixth last character. */
        z if[a&""="hello"] /* If "hello" is found, crash the program */
                           /* with an undefined variable. */
    }_                     /* End for loop. */
}

রোডা ডকুমেন্টেশন কোথায়?
ckjbgames

@ckjbgames এখানে। আমি সর্বশেষতম সংস্করণ 0.12 ব্যবহার করি যা গিথুবের নিজস্ব শাখায় রয়েছে।
ফার্গুসক

1

জাভা 7, 122 118 124 123 150 141 বাইট

void c()throws Exception{String a="aaaaa";for(int b;!a.equals("hello")&(b=System.in.read())>=0;a=a.substring(1)+(char)b)System.out.write(b);}

স্রোতের সমাপ্তি পৌঁছে গেলে এখন থামবে। এখন স্মৃতিশক্তি শেষ না হয়েই অসীম ইনপুট পরিচালনা করে।


আমি বাজি ধরতে পারি না এটি অসীম ইনপুট পরিচালনা করতে পারে।
তিতাস

@Titus সংশোধন ...
অকর্মা

writeপরিবর্তে ব্যবহার না করেই ডাউনভোট করেছিলাম print। আমি আমার ডাউনটোটটি পূর্বাবস্থায় ফিরিয়ে আনতে পারি না, এর জন্য দুঃখিত :(
অলিভিয়ার গ্রাগোয়ার

1

রুবি, 51 বাইট

x="";$><<x[-1]while/hello./!~x=x[/.{0,5}$/]+$<.getc
  • নতুন লাইনের আশা করে না
  • অসীম ইনপুট নিয়ে কাজ করে

1

এএইচকে , 116 বাইট

Loop,Read,%1%
{a=%A_LoopReadLine%`n
Loop,Parse,a
{Send % c:=A_LoopField
If((f:=c SubStr(f,1,4))=="olleh")
ExitApp
}}

সত্যই, সেখানে চালাক বা যাদুকর কিছুই নেই। ভেরিয়েবলটি %1%প্রথম পাস হওয়া যুক্তি এবং স্ট্রিম সহ একটি ফাইল পাথ হওয়া উচিত। ফাইলটি আপডেট হওয়ার সাথে সাথে অবশ্যই সংরক্ষণ করতে হবে তবে পড়া শুরু হওয়ার পরে প্রসারিত হলেও কোডটি শেষ পর্যন্ত পড়বে।


1

গণিত, 107 বাইট

i="";EventHandler[Dynamic@i,"KeyDown":>(i=i<>CurrentValue@"EventKey";If[StringTake[i,-5]=="hello",Exit[]])]

আউটপুট এমন একটি ক্ষেত্রে পরিণত হয় যেখানে ব্যবহারকারী 5 টি অক্ষরের সমান না হওয়া অবধি অসীমভাবে পাঠ্য টাইপ করতে পারে (নিউলাইনগুলি সহ) "hello"; এই মুহুর্তে, এটি প্রস্থান করে।


1

ব্রেনফাক , 281 বাইট

>++++++++[<+++++++++++++>-]>++++++++++[<++++++++++>-]<+>>+++++++++[<++++++++++++>-]>++++++++++[<+++++++++++>-]<+>+[[[[[,.<<<<[->>>>->+<<<<<]>>>>>[-<<<<<+>>>>>]<],.<<<[->>>->+<<<<]>>>>[-<<<<+>>>>]<],.<<[->>->+<<<]>>>[-<<<+>>>]<],.<<[->>->+<<<]>>>[-<<<+>>>]<],.<[->->+<<]>>[-<<+>>]<]

আমি নিশ্চিত না কেন, তবে আমার মনে হয়েছিল ব্রেইনফাক এটি করার জন্য সঠিক জিনিস। অসীম মেমরির প্রয়োজন হয় না এবং চিরকালের জন্য আউটপুট করতে পারে।

ব্যাখ্যা

Set up the buffers with helo
This is done Naively; sue me
>++++++++[<+++++++++++++>-]     h
>++++++++++[<++++++++++>-]<+>   e
>+++++++++[<++++++++++++>-]     l
>++++++++++[<+++++++++++>-]<+>  o

THE MAIN LOOP
+
[ matches o
    [ matches l
        [ matches l
            [ matches e
                [ matches h
                    ,. Read a character and immediently write it
                    <<<<[->>>>->+<<<<<] Subtract it from h
                    >>>>>[-<<<<<+>>>>>] Correct the h
                    < Terminate this part of the loop if it matches h
                ]
                ,. Same as above
                <<<[->>>->+<<<<] Subtract it from e
                >>>>[-<<<<+>>>>] Correct the e
                < Terminate this part of the loop if it matches e
            ]
            ,. Same as above
            <<[->>->+<<<] Subtract it from l
            >>>[-<<<+>>>] Correct the l
            < Terminate this part of the loop if it matches l
        ]
        ,. Same as above
        <<[->>->+<<<] Subtract it from l
        >>>[-<<<+>>>] Correct the l
        < Terminate this part of the loop if it matches l
    ]
    ,. Same as above
    <[->->+<<] Subtract it from o
    >>[-<<+>>] Correct the o
    < Terminate this part of the loop if it matches o
]

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


আমি এটি করতে যাচ্ছিলাম তবে আমি বুঝতে পেরেছিলাম যে এটি "হ্যালো" নেই এমন ইনপুটটির জন্য শূন্য বাইটকে ছাড়িয়ে যায়: tio.run/nexus/…
কার্লকাস্টার

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