আমি কীভাবে ভিম থেকে প্রস্থান করব?


42

উইম ইউনিক্স সিস্টেমগুলির জন্য দুর্দান্ত পাঠ্য সম্পাদক, তবে এটি থেকে বেরিয়ে আসা কঠিন হওয়ার জন্য কুখ্যাত।

একটি সম্পূর্ণ প্রোগ্রাম লিখুন যা :qভিম থেকে প্রস্থান করতে পারে। এরপরে এটি ইনপুটটির একটি একক লাইন পড়তে হবে, কারণ এটির পরে বাশ প্রম্পট দেওয়া হবে, সেই ক্ষেত্রে প্রস্থানটি সফল হয়েছিল, বা কোনও ত্রুটি, কোনও ক্ষেত্রে সংরক্ষিত পরিবর্তন নেই।

বাশ প্রম্পটটি হ'ল:

E37@vimmachine: /var/override)

ত্রুটিটি যদিও এটির হবে:

E37: No write since last change (add ! to override)

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

ত্রুটিটি প্রদত্ত হওয়ার পরে, আপনার প্রোগ্রামটি এলোমেলোভাবে হওয়া উচিত (অর্থাত্ প্রতিটি সম্ভাবনাটি বেছে নেওয়ার একটি নন-শূন্য সম্ভাবনা থাকে) আউটপুট :q!, সংরক্ষণ না করে প্রস্থান করা, বা :xসংরক্ষণ করা এবং প্রস্থান করা উচিত।

এই তাই অল্পসংখ্যক পরিষেবা বাইট প্রতিটি ভাষার মধ্যে জিতেছে!


26
আমি জানতাম না :xএকটা জিনিস! আমি সর্বদা ব্যবহার করেছি :wq:)
musicman523

3
আমার বাশ প্রম্পট যদি হয় E37: No write since last change? অর্থাত, কীভাবে একটি অ্যালগরিদম একটি ত্রুটি বার্তা থেকে প্রম্পটকে আলাদা করতে পারে?
অ্যানাটলিগ

5
@নাটোলিগ এটি পারে না, তবে এটিও করতে হবে না। প্রদত্ত প্রণোদনা দেবে সবসময় উপরে এক, যে হতেE37@vimmachine: /var/override)
Skidsdev

2
প্রদত্ত প্রম্পট সর্বদা উপরেরটি হতে পারে যা চ্যালেঞ্জের বিবরণীতে বর্ণিত হওয়া উচিত। যেমনটি, এটি বলে মনে হচ্ছে এটি দেখতে এমন দেখাচ্ছে যা কোনও সংখ্যক জিনিসকে বোঝাতে পারে।
ডেনিস

5
(এই মন্তব্যের জন্য গল্ফে যোগ দিয়েছেন, শীশ) @ musicman523 কখনও ভিএম :xথেকে প্রস্থান করার জন্য ব্যবহার করবেন না । কোনও দিন :Xআপনি বিভ্রান্ত হয়ে পড়লে দুর্ঘটনাক্রমে তারপর এলোমেলো কীগুলি আঘাত করবেন । শেষ পর্যন্ত :wqআপনি আর কখনও আপনার ফাইল দেখতে পাবেন না।
অ্যারন ম্যাকমিলিন

উত্তর:


16

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

@ মিস্টার এক্সকোডারকে 3 বাইট এবং @ মাইউবকে 4 ধন্যবাদ সংরক্ষণ করা হয়েছে!

from random import*
if'('in input(':q'):print choice([':x',':q!'])

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


2
যদি আপনি পাইথন 2 এ স্যুইচ করেন তবে আপনি এর print পরিবর্তে 1 বাইট সংরক্ষণ করতে পারবেন print()। এবং আপনি উদ্ধৃতি সহ ইনপুট নিতে পারেন
মিস্টার এক্সকোডার

@ মিঃ এক্সকোডার ধন্যবাদ, এটি আসলে আমাকে 3 বাইট সংরক্ষণ করেছে!
musicman523

হ্যাঁ, আমি দেখতে পেলাম না যে আপনার 2 মুদ্রণ বিবৃতি রয়েছে
মিস্টার এক্সকোডার

3
আমি এই টিপটি পুরোপুরি মানবিককে দিয়েছি তাই এটি কেবল ন্যায্য আমি আপনাকে এটি দিয়েছি। আপনি print':q'সম্পূর্ণ মুছে ফেলতে এবং এতে পরিবর্তন input()করতে পারেনinput(':q')
স্কিডদেব

@ মায়ুব ওহ যে দুর্দান্ত, আপনাকে ধন্যবাদ!
musicman523

7

রুবি , 35 বাইট

p:q
p %i(q! x)[rand 2]if/\(/=~gets

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


1
pএবং :q;) এর মধ্যে স্থানটি সরিয়ে আপনি একটি বাইট শেভ করতে পারেন
ymbirtt

1
দুর্দান্ত এবং অদ্ভুত! আমি জানিনা, ধন্যবাদ @ এম্বিটার্ট
অ্যান্ড্রি দিয়েগো পিসকে


5

পাইথন 2 , 76 75 72 69 বাইট

এই উত্তরটি গলিত হয়েছে

-1 বাইট রড ধন্যবাদ। -3 বাইট মাইউব ধন্যবাদ। -৩ বাইট ধন্যবাদ আর্টিয়ারকে।

from random import*
print'::qx!'[random()>.5:('N'in input(':q'))*5:2]

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


এটি একটি অতিরিক্ত নতুনলাইন মুদ্রণ করে যেখানে চ্যালেঞ্জটি বলেছেit should not give any more output
musicman523

@Mayube May we output a newline upon terminating? @Adám sure, that's fine
স্টিফেন

1
random()>.5একটি বাইট সংরক্ষণ করতে
রড

2
এলোমেলোভাবে কি অভিন্নভাবে বিতরণ করতে হবে? যদি তা না হয় তবে আপনি তা করতে পেরেছিলেন random()>0, কারণ খুব অল্প সুযোগ রয়েছে যা random()ফিরে আসবে 0
mbomb007

1
@ আর্টির আপনি কি জানেন এর [0, 1)অর্থ কী , তাই না? এর অর্থ শূন্যটি অন্তর্ভুক্ত কারণ পরিসরটি শূন্য-সমেত। stackoverflow.com/a/4396303/2415524 ... এটি মনে রাখার সহজ উপায়টি হ'ল একটি সংখ্যা লাইনে, বদ্ধ বিন্দুগুলি অন্তর্ভুক্ত করা হয়, এবং খোলা বিন্দুগুলি হয় না। বন্ধনী বন্ধ দেখায় এবং প্যারেনগুলি খোলা দেখায়।
mbomb007

5

Vimscript, 45 41 বাইট

ec"q"|exe"/("|ec["q!","x"][getpid()%2]

getpid()একটি নম্বর পেতে 4 বাইট অফ শেভ । (যে কোনও সংখ্যার সংক্ষিপ্ত উপায়ের কথা ভাবতে পারেন যা সর্বদা, সর্বদা এক রকম হবে না?)

-cউপরের স্ক্রিপ্টটি চালাতে এবং -স্টিডিনের ইনপুট পড়ার জন্য ভিমকে অনুরোধ করার জন্য +3 বাইট অনুমান করা :

vim -c 'ec"q"|exe"/("|ec["q!","x"][reltime()[1]%2]' -

3

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

সংরক্ষিত 6 বাইট @ ETHProductions ধন্যবাদ

prompt(':q')[30]&&alert(new Date%2?':q!':':x')

ইনপুটটি ত্রুটি হলে একটি !হওয়ার দরকার নেই :q?
শেগি

@ শেগি ওউ, খেয়াল করেননি, 9 বাইট রয়েছে
ডাউনওয়েট

আমি মনে করি আপনি এর সাথে কয়েকটি বাইট সংরক্ষণ করতে পারেন prompt(':q')[30]&&...। এছাড়াও,new Date%2?':x':':q!'
ইটিএইচ প্রডাকশনগুলি

@ এথ প্রডাকশন ওহ হ্যাঁ, ধন্যবাদ! নিশ্চিত নয় যে কীভাবে আমি একটি ত্রৈমাসিকাকে উপেক্ষা করেছি
ডাওনগোট

3

সি # (.নেট কোর) , 140 139 138 বাইট

using static System.Console;class P{static void Main(){Write(":q");if(ReadLine()[3]==':')Write(new System.Random().Next()>9?":x":":q!");}}

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

  • 1 টি বাইট LiefdeWen ধন্যবাদ!
  • মোড জুবেরকে ধন্যবাদ 1 বাইট!

আপনার প্রোগ্রাম স্থাপন Systemনামস্থান আপনি কমান করতে সক্ষম করে তোলে System.Randomকরতে Random, 1 বাইট সংরক্ষণ
LiefdeWen

@ কার্লোস আলেজো টিআইওতে আমার জন্য কাজ করে, তবে তা ফলাফল হয় q!না:q!
স্কিডদেব

1
@ কার্লোস আলেজো আহ, আমি বুঝতে পারি নি যে আপনি নামস্থান ব্যবহার করেন নি, প্রশ্নটিও অভিন্নভাবে এলোমেলোভাবে বলে না, কেবলমাত্র সমস্ত সম্ভাবনার শূন্যের সুযোগ থাকা উচিত যাতে আপনি বদলে .Next(2)>0যান .Next()>9, এটি কিছুটা খারাপ ফেলে দেয় মুখে স্বাদ কিন্তু এটি এখনও আইনী।
লিফডওয়েভেন

4
using static System.Consoleআপনাকে সমস্ত C.কলগুলি ড্রপ করতে দেয় এবং আপনাকে একটি বাইট সংরক্ষণ করে
মর্ড জুব্বার

1
@ মর্ডজুবার কি ...? আমি জানি না যে এটি সম্ভব! ধন্যবাদ!
চার্লি

3

> <> , 32 30 29 বাইট

  • একটি অপ্রয়োজনীয় ছিল !o
  • -1 বাইট ধন্যবাদ হারুনকে।

iii0["@!qx:q:"ooi{=?;o!ox~oo;

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

ব্যাখ্যা (পুরানো)

"@!qx:q:"ooi~i~i~i{=?;o!ox~oo;
"@!qx:q:"                        Push @!qx:q: on the stack (in reverse)
         oo                      Print :q [stack: @!qx:]
           i~i~i~                Remove first 3 input characters
                 i               Load @ or : from the input (= i)
                  {              Shift stack to the left [stack: !qx:i@]
                   =?            If 4th character was @
                     ;              Exit
                                 Else
                      o             Print :
                       !o           Jump to
                         x          Random direction (left or right because
                                    up and down retrigger x)
                                       Left:
                     ;o!o                 Print x and exit.
                                       Right:
                          ~oo;            Remove x, print q! and exit.

(শীঘ্রই আপডেট হবে)


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

@ অ্যারন ধন্যবাদ, এটি একটি খুব ঝরঝরে কৌশল! কেন অনুমতি দেওয়া হবে না?
পিজেইউজেডগাস্ট

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

2

আসলে , 27 বাইট

":q"ü[":x",":q!"]`⌂`J'!,cIƒ

এটি অনলাইন চেষ্টা করুন! (দ্রষ্টব্য: টিআইও যেহেতু স্টিডিনের সাথে দুর্দান্ত খেলছে না, আমি ,(স্টিডিনের কাছ থেকে পড়া) আক্ষরিক স্ট্রিংয়ের সাথে প্রতিস্থাপন করেছি , যা আপনি এটি পরীক্ষা করতে পরিবর্তন করতে পারেন Also এছাড়াও, আপনাকে আউটপুট ক্যাশে অক্ষম করতে হবে এলোমেলো আউটপুট সহ একটি ভিন্ন প্রতিক্রিয়া))

ব্যাখ্যা:

":q"ü[":x",":q!"]`⌂`J'!,cIƒ
":q"ü                       - Push the literal :q and print
     [":x",":q!"]           - Push the list of literals :x and :q!
                 `⌂`J       - Push function literals ⌂ (terminate) and J (choose random element from list)
                     '!     - Push the literal !
                       ,    - Read from stdin
                        c   - Pop top two values a,b and return "a".count(b)
                         I  - Pop top three values a,b,c and return b if a is truthy and c if a is falsy
                          ƒ - Pop a function from the stack and call it

1

এপিএল (ডায়ালগ) , 27 বাইট

':q'⋄('!'∊⍞)/':q!' ':x'⊃⍨?2

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

':q' এটি মুদ্রণ করুন

 তারপর

?2 প্রথম দুজনের মধ্যে এলোমেলো পূর্ণসংখ্যা

⊃⍨ থেকে নির্বাচন করতে ব্যবহার করুন

':q!' ':x' দুটি স্ট্রিংয়ের এই তালিকা

(... )/ প্রতিলিপি সঙ্গে, অর্থাত করা যে এন যে প্রতিটি উপাদান কপি, যেখানে n হল হল

'!'∊⍞ বিস্ময়বোধক পয়েন্টটি কি পাঠ্য ইনপুটটির সদস্য? (বুলিয়ান, অর্থাৎ 0 বা 1)


1

ব্যাচ, 98 বাইট

@echo :q
@set/ps=
@if %s:~3,1%==@ exit/b
@set/an=%random%%%2
@if %n%==0 (echo :x)else echo :q!

1

রুবি , ৩৩ বাইট (৩২ কোড, +1 পতাকার জন্য +1)

p:q;$_[?!]? p([:q!,:x][$$%2]): p

আমি $$%2স্নিপেটে খুব বেশি নিশ্চিত নই আমি বর্তমান রুবি প্রসেসের পিড মডুলো 2 নিয়ে আমার অ্যারে সূচকে একটি এলোমেলো বিট উত্পন্ন করতে এটি ব্যবহার করছি এবং এটি মোটামুটি অনির্দেশ্য হবে be .sampleএকটি অতিরিক্ত বাইট যোগ করুন।

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


1

জাভাস্ক্রিপ্ট, 76 71 50 বাইট

prompt(":q")[3]<"@"?alert(new Date%2?":q!":":x"):0

আর্টিয়ার এবং নীলকে ধন্যবাদ সহ একাধিক বাইট সংরক্ষণ করা, পাশাপাশি আমার অংশগুলি ঘনীভূত করার এবং প্রথম সতর্কতা প্রম্পটে (দুহ) সরানো।


2
কেন শুধু prompt()সরাসরি কল করবেন না? (এছাড়াও, আপনি অনুমোদিত prompt(":q")?)
নিল

আপনি সময়টি এলোমেলো সংখ্যা হিসাবে ( new Date%2পরিবর্তে Math.random()>.5) হিসাবে ব্যবহার করতে পারেন এবং আপনি সরাসরি @ নীল বলেছিলেন মতো প্রম্পট ব্যবহার করতে পারেন:prompt()[3]<
আর্টিয়ার

@ নীল কেন? আমি একটি কাজ করা হয়েছে করেছিলেন .indexOf, এটি আগে আমি এটা করতে অন্য উপায় লক্ষ্য। ফিরে যেতে ভুলে গেছি, ধন্যবাদ!
স্টিফেন

@ আর্টিয়ার ধন্যবাদ, আমি সে সম্পর্কে ভেবেছিলাম এবং তারপরে এটি ভুলে গিয়েছিলাম
স্টিফেন


1

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

print'::qx!'[id(0)%3<2:('N'in input(':q'))*5:2]

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

ব্যাখ্যা:

এলোমেলোতার উত্স হ'ল id(0)%3<2। ফাংশনটি idপ্যারামিটারের মেমরি অবস্থানটি দেয়। যে কোনও কিছু পাস করা একটি অ-নিরস্তাত্মক মেমরি ঠিকানা দেবে। ফলাফল সর্বদা সমান হবে, তবে এটি কখনও কখনও 3 দ্বারা বিভাজ্য হবে The ফলাফলের মডিউল 3 পৃথক হয়। সুতরাং, এটি এলোমেলো উত্স হতে পারে। ব্যবহারের <2অর্থ হ'ল মোটামুটি 2/3 সময়, ফলস্বরূপ বুলিয়ান True

উত্তরটির বাকি অংশটি এই দ্বারা অনুপ্রাণিত ।


1

কেগ ,14 12 বাইট

\:~2%[q\!|x]

এটি একটি এলোমেলো সংখ্যা ধাক্কা দেয় এবং এলোমেলোভাবে সংখ্যায় আউটপুট দেয়।


0

টিসিএল, 95 বাইট

puts :q;puts [if [string match *!* [gets stdin]] {puts [lindex ":q! :x" [expr round(rand())]]}]

টিসিএল মধ্যে একটি সহজ এবং বরং দীর্ঘ সমাধান ...


0

বিধানসভা 86 বাইটস লিনাক্স সিস্টেম কল alls

global _start
_start:
mov edx,4
mov ecx,g 
mov ebx,1
mov eax,4
int 0x80
g db ':q!',10

0

লোগো, 37 36 বাইট

pr[:q]if 4<count rl[pr pick[:q! :x]]

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

ব্যাখ্যা:

pr[:q]if 4<count rl[pr pick[:q! :x]]   Main program.
pr                                     Print
  [:q]                                 the list `[:q]` without delimiter `[]`
      if           [              ]    If...
         4<                            4 is less than...
           count                       the number of word in the...
                 rl                    ReadLine (from stdin),
                    pr                 print
                       pick            a random word picked from the list...
                           [:q! :x]    [:q! :x]

(কারণ E37@vimmachine: /var/override)2 টি শব্দ রয়েছে, যখন E37: No write since last change (add ! to override)10 টি শব্দ রয়েছে)


একটি ব্যাখ্যা দুর্দান্ত হবে।
pajonk

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