কার্যকর করুন


30

ভূমিকা এবং .ণ

আজ কোনও অভিনব ভূমিকা ছাড়াই: দয়া করে বাস্তবায়ন করুন takewhile

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

সবিস্তার বিবরণী

ইনপুট

ইনপুটটি ইতিবাচক পূর্ণসংখ্যার একটি তালিকা (বা আপনার ভাষার সমতুল্য ধারণা) হবে।

আউটপুট

আউটপুটটি ইতিবাচক পূর্ণসংখ্যার একটি তালিকা (বা আপনার ভাষার সমতুল্য ধারণা) হওয়া উচিত।

কি করো?

আপনার কাজটি হ'ল takewhileবিবেচনাধীন সংখ্যাটি সমান (গ্রহণের দিকে মনোনিবেশ করার জন্য) এমন ভবিষ্যদ্বাণী সহ (ভাষা বিল্ট-ইনগুলি অনুমোদিত) প্রয়োগ করা ।

সুতরাং আপনি তালিকাটি শুরু থেকে শেষ পর্যন্ত পুনরাবৃত্তি করুন এবং শর্তটি (সমান) ধারণ করার পরে আপনি আউটপুট-তালিকায় অনুলিপি করেন এবং শর্তটি সত্য করে না এমন কোনও উপাদানকে আঘাত করার সাথে সাথে আপনি অপারেশন এবং আউটপুট বাতিল করে দেন (একটি ধাপে ধাপে উদাহরণ নীচে রয়েছে)। এই উচ্চ-অর্ডারের কার্যকারিতাটিকে টেকহাইল ( takewhile) ও বলা হয় ।

সম্ভাব্য কোণার কেস

ইনপুট তালিকার তুলনায় আউটপুট তালিকার ক্রম পরিবর্তন করা যাবে না, উদাহরণস্বরূপ [14,42,2]নাও হতে পারে [42,14]

খালি তালিকাটি বৈধ ইন- এবং আউটপুট।

কে জিতলো?

এটি কোড-গল্ফ তাই বাইটের সংক্ষিপ্ত উত্তরটি জয়!

স্ট্যান্ডার্ড নিয়ম অবশ্যই প্রয়োগ করা হয়।

পরীক্ষা ভেক্টর

[14, 42, 2324, 97090, 4080622, 171480372] -> [14, 42, 2324, 97090, 4080622, 171480372]
[42, 14, 42, 2324] -> [42, 14, 42, 2324]
[7,14,42] -> []
[] -> []
[171480372, 13, 14, 42] -> [171480372]
[42, 14, 42, 43, 41, 4080622, 171480372] -> [42, 14, 42]

ধাপে ধাপে উদাহরণ

Example Input: [42, 14, 42, 43, 41, 4080622, 171480372]

Consider first element: 42
42 is even (21*2)
Put 42 into output list, output list is now [42]

Consider second element: 14
14 is even (7*2)
Put 14 into output list, output list is now [42,14]

Consider third element: 42
42 is even (21*2)
Put 42 into output list, output list is now [42,14,42]

Consider fourth element: 43
43 is not even (2*21+1)
Drop 43 and return the current output list

return [42,14,42]

2
আমি তালিকার পরিবর্তে কোনও পুনরুক্তিকারককে ফিরিয়ে দিলে কি ঠিক আছে?
DJMcMayhem

2
@ ডিগ্রিগ্রিনএগ্রস এবং আইরনম্যান আমি অনুমান করছি যে আপনার ফাংশনটি তার আউটপুটটিকে তার ইনপুট হিসাবে নিতে সক্ষম হবে, গ্যারান্টি দিয়ে তারা একই ফর্ম্যাটে রয়েছে।
mbomb007

@ ডিগ্রিগ্রিনইগস্যান্ড আইরনম্যান, আমি মনে করি না যে সাবলিস্টটি ফিরিয়ে নেওয়া এখানে আউটপুট ফর্ম্যাটে ব্যবহার করা উচিত। (আপনি যদি এখনও আপনার কোডটিতে এটি ব্যবহার করেন তবে এটি এখনও আপনার হাতে রয়েছে)। এমবিম্বের মাপদণ্ড বর্তমান চ্যালেঞ্জের সাথে সবচেয়ে উপযুক্ত এবং সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে সুতরাং এটি হবে "আপনার আউটপুট খুব কম সময়ে একটি বৈধ ইনপুট হওয়া উচিত"।
এসইজেপিএম

উত্তর:


28

গণিত, 18 বাইট

#~TakeWhile~EvenQ&

আরেকটি গৌরবোজ্জ্বল বিল্ট-ইন যা বিল্ট-ইন ছাড়াই গল্ফিংয়ের ভাষায় 3 টির একটি ফ্যাক্টর দ্বারা পরাজিত ...


3
গণিতের কত বিল্ট-ইন রয়েছে? দেখে মনে হচ্ছে এটি প্রায় কোনও কিছুর জন্য একটি রয়েছে।
Emigna

35
@ এমিগনা আমি গণনা করি নি, তবে ইন্টারনেটের নিয়ম # 110 হ'ল "যদি এটি বিদ্যমান থাকে তবে এর জন্য একটি গাণিতিক অন্তর্নির্মিত আছে" "
মার্টিন ইন্ডার

3
@MartinEnder খুব খারাপ যে নিয়ম # ইন্টারনেটের 110,5, হল "এটা স্ট্রিং জড়িত এমন কোন ভাবেই সবটা , তাহলে এটি নিয়ম # 110 উদ্দেশ্যে অস্তিত্ব বিবেচনা করা হয় না।"
LegionMammal978

@ লিজিওনম্যামাল ৯78৮ কাজটি হল স্ট্রিংগুলিকে প্রকাশের শিরোনাম তৈরি করার জন্য :)
এলএলএএমএনওয়াইপি

26

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

fst.span even

spanভবিষ্যদ্বাণী (-> even) মিথ্যা যেখানে ঠিক প্রথম উপাদানটির ঠিক আগে ইনপুট তালিকাটিকে এক জোড়া তালিকায় বিভক্ত করে । fstজোড়া প্রথম উপাদান লাগে।

বিকল্প সংস্করণ, 13 বাইট:

fst.break odd

breakএর বিপরীত span, অর্থাৎ এটি প্রথম উপাদানটিতে তালিকাটি বিভক্ত করে যেখানে ভবিষ্যদ্বাণীটি সত্য।

অবশ্যই আছে

takeWhile even

তবে এটি 14 বাইট


23

এমএটিএল , 6 বাইট

toYs~)

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

ব্যাখ্যা

t    % Input array implicitly. Duplicate
o    % Parity of each entry. Gives 0 for even entries, 1 for odd
Ys   % Cumulative sum
~    % Logical negate. Gives true for the first run of even entries, and then false
)    % Use this as logical index into the original array. Implicitly display

22
এটি কি স্বাভাবিক, যে কোডটি সেখানে একটি হাসি দিয়ে "খেলনা" বলে?
SEJPM

3
@ এসজেপিএমও to~Y<)কাজ করে তবে আমি এটি আরও ভাল পছন্দ করি :-)
লুইস মেন্ডো

13

হেক্সাগনি , ১৯

2.}<@>%?<{>$"/\M!8;

রিডেবল:

  2 . }
 < @ > %
? < { > $
 " / \ M
  ! 8 ;

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

এটি সম্ভবত একটি বাইট বা দুটি দ্বারা গল্ফ করা যেতে পারে তবে এর জন্য কিছু সত্যিকারের বুদ্ধিমান বিন্যাসের প্রয়োজন হতে পারে, এটি ব্রুট ফোর্সের মাধ্যমে আরও সহজেই পাওয়া যেতে পারে (এমনকি এটি পেতে যদি এটি আরও বেশি সময় নিতে পারে তবে)।

উচ্চ স্তরের ব্যাখ্যা

প্রোগ্রামটি বেশিরভাগ ক্ষেত্রে এই সিডোকোড অনুসরণ করে:

while (read number is not zero) 
{
    if (number is even) 
        print number;
} 

STDIN খালি হয়ে যাওয়ার পরে কীভাবে হেক্সাগনি কোনও নম্বর পড়ার চেষ্টা করে তা অপব্যবহার করে (এটি একটি শূন্য ফেরায়)। এই পদ্ধতির সাথে এগিয়ে আসতে সাহায্যের জন্য মার্টিনকে অনেক ধন্যবাদ thanks

সম্পূর্ণ ব্যাখ্যা

টিমভির দুর্দান্ত রহস্যজনক আইডিই চালানোর জন্য আমি এখনও মনোর সাথে ফেটে যাইনি , তাই মার্টিনকে কিছু সহায়ক সুন্দর ছবি সরবরাহ করার জন্য আমি ঝুঁকিয়েছি !

প্রথমত, হেক্সাগনিতে বেসিক নিয়ন্ত্রণ প্রবাহের জন্য একটু প্রাইমার। প্রথম নির্দেশিকা নির্দেশক (আইপি), যা এই প্রোগ্রামে ব্যবহৃত একমাত্র, ষড়্ভুজীয় উত্স কোডের উপরের বামদিকে শুরু হয় এবং ডানদিকে অগ্রসর হতে শুরু করে। আইপি যখনই ষড়্ভুজটির প্রান্ত ছেড়ে যায়, তখন এটি side_length - 1সারি সারিটি ষড়্চাগরের মাঝের দিকে চলে যায় । যেহেতু এই প্রোগ্রামটি একটি পাশের দৈর্ঘ্যের তিনটি ষড়্ভুজ ব্যবহার করে, যখন এটি ঘটে তখন আইপি সর্বদা দুটি সারি চালিয়ে যাবে। একমাত্র ব্যতিক্রম হ'ল এটি যদি মাঝারি সারির বাইরে চলে যায়, যেখানে এটি শর্তাধীনভাবে বর্তমান স্মৃতি প্রান্তের মানের উপর নির্ভর করে ষড়্ভুজের শীর্ষ বা নীচের দিকে অগ্রসর হয়।

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

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

Mod  \ / Input
      |
      2

প্রোগ্রামটির ব্যাখ্যার সময় আমি প্রতিটি বিন্দুতে আমরা কোথায় স্মৃতিতে আছি তা সাবধানতার সাথে ব্যাখ্যা করতে যাচ্ছি না, সুতরাং আমরা যখন স্মৃতিতে আছি তখন আপনি যদি বিভ্রান্ত হন তবে এখানে ফিরে আসুন।

এই সমস্ত উপায় ছাড়িয়ে আসল ব্যাখ্যা শুরু হতে পারে। প্রথমে, আমরা একটি 2 দিয়ে মেমরিতে "2" প্রান্তটি পপুলেট করি, তারপরে আমরা একটি নো-অপ্ট চালিত করি এবং মেমরি পয়েন্টারটিকে ডানদিকে ( 2.}) সরাতে পারি ।

এর পরে, আমরা মূল প্রোগ্রামটির লুপটি শুরু করি। আমরা STDIN থেকে প্রথম সংখ্যাটি পড়ি এবং তারপরে আমরা একটি শর্তযুক্ত ( ?<) তে আঘাত করি hit যদি এসটিডিনে কোনও নম্বর না থাকে, এটি বর্তমান মেমরি প্রান্তে একটি শূন্য পাঠায়, তাই আমরা বাম দিকে ঘুরিয়ে দেব @যা প্রোগ্রামটি শেষ করে। অন্যথায়, আমরা একটি আয়না ছুঁড়ে ফেলা, মেমরি পয়েন্টারটি পিছনে এবং বাম দিকে সরিয়ে, 2 দিয়ে ইনপুট ভাগ করার অবশিষ্ট গণনা করতে ষড়ভুজের চারপাশে মোড়ানো এবং তারপরে অন্য শর্তযুক্ত ( /"%>) চাপুন ।

বিজোড় পথ

যদি বাকী অংশটি এক ছিল (অর্থাত্ সংখ্যাটি বিজোড় ছিল), আমরা আবার নো-অপটিকে চালিয়ে শুরু করে উপরের নীল পথটি অনুসরণ করে ডানদিকে ঘুরলাম, তারপরে আমরা ষড়্ভুজের নীচে প্রায় আবৃত করব, বর্তমান প্রান্তটি 10 ​​দ্বারা গুণ করব এবং তারপরে যুক্ত করব আট, একটি দম্পতি আয়না ছুঁড়ে ফেলা, আবার একই গুন এবং সংযোজন করুন, বর্তমান প্রান্তে 188 পেয়ে, ষড়ভুজ শীর্ষে প্রায় আবৃত, আবার না-অপারেটিং চালিয়ে, এবং শেষ পর্যন্ত প্রোগ্রামটি শেষ করুন ( .8/\8.@)। এই সংঘটিত ফলাফলটি একটি সুখী দুর্ঘটনা ছিল, আমি প্রথমে অনেক সহজ যুক্তি দিয়েছিলাম, কিন্তু লক্ষ্য করেছি যে আমি এটি অপ-এর পক্ষে সরিয়ে ফেলতে পারি, যা আমি হেক্সাগনির চেতনায় বেশি বলে মনে করি।

এমনকি পথ

যদি বাকীটি শূন্য হয় তবে আমরা পরিবর্তে উপরের দিকে লাল পথ অনুসরণ করে বাম দিকে ঘুরলাম। এটি আমাদের বাম দিকে মেমরি পয়েন্টারটি সরিয়ে নিয়ে যায় এবং তারপরে সেখানে মান (ইনপুট মান) একটি সংখ্যা হিসাবে মুদ্রণ করে। আমরা যে আয়নাটির মুখোমুখি হই আমরা যেদিকে চলি ( {/!) সেদিকে চালিত হওয়ার কারণে কোনও অপ-বিকল্প হিসাবে কাজ করে । তারপরে আমরা ষড়ভুজের কিনারায় আঘাত করলাম যা কেবলমাত্র একটি ফলাফল নিয়ে শর্তযুক্ত কাজ করে, কারণ ইতিমধ্যে ইতিমধ্যে ইনপুট মানটি ইতিবাচক হওয়ার জন্য পরীক্ষা করা হয়েছিল, তাই আমরা সর্বদা ডান দিকে এগিয়ে যাই (যদি আপনি নিজেকে আইপি এর দিকে মুখ করে ভাবছেন) । তারপরে আমরা ইনপুটটি 10 ​​দিয়ে একাধিক করে দুটি যোগ করি, কেবল দিক পরিবর্তন করতে, চারপাশে মোড়ানো এবং মূল মান M, 77 এর ascii মান সহ নতুন মানটিকে ওভারিট করে। তারপরে আমরা কিছু আয়নাতে আঘাত করি এবং এর মাঝের প্রান্তটি দিয়ে প্রস্থান করি একটি ট্রামপোলিন সহ ষড়ভুজ (2<M\>$)। যেহেতু 77 ইতিবাচক, তাই আমরা ষড়ভুজটির নীচের দিকে ডানদিকে এগিয়ে চলেছি এবং ট্রামপোলিনের কারণে প্রথম নির্দেশটি ( !) ছেড়ে যায় । তারপরে আমরা বর্তমান মেমরি প্রান্তটি 10 ​​দ্বারা গুণিত করব এবং 88 যোগ করব, 778 পেয়ে যাব We আমরা তারপরে একটি ASCII অক্ষর হিসাবে এই মান মোড 256 (10) আউটপুট করি, যা নিউলাইন হিসাবে ঘটে। অবশেষে আমরা ষড়্ভুজটি থেকে বেরিয়ে এসে প্রথমটিকে আবার গুটিয়ে ফেলি ?যা পরবর্তী ইনপুট মানটি দিয়ে 778 কে ওভাররাইড করে।


8
হ'ল পঠনযোগ্য হ্যাঁ
টেলান

10

পাইথ, 13 9 7 বাইট

uPWs%R2

2 টি (বেশ কৌতূহলী) বাইটের জন্য @ ফ্রাইআমডেজিমনকে ক্রেডিট!

ব্যাখ্যা:

u       Q    keep applying to input until invariant:
 PW          drop last element if...
   s%R2G     ...any one is odd, G is the argument originally given the value of input

এটি এখানে পরীক্ষা করুন


1
এটি পুরোপুরি সঠিক পরিবর্তনশীল ভূমিকা বর্ণনা নয়। এখানে দুটি Gগুলি চালু করা উচিত , একটি শর্তের জন্য s%R2Gএবং একটি ফাংশনের আর্গুমেন্ট হিসাবে P
isaacg

9

জেলি , 5 বাইট

Ḃœp⁸Ḣ

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

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

Ḃœp⁸Ḣ  Main link. Argument: A (array)

Ḃ      Bit; yield 1 for odd integers, 0 for even ones.
   ⁸   Yield A.
 œp    Partition A, splitting at 1's in the bit array.
       This yields a 2D array of runs of even integers.
    Ḣ  Head; extract the first chunk.

8

পাইথন 2, 43 42 বাইট

def f(x):
 while"1'"in`map(bin,x)`:x.pop()

ফাংশনটি তার যুক্তিটি জায়গায় পরিবর্তিত করে

সত্যিই চতুর উপায়ে বাইট চালাবার জন্য @ এক্সনরকে ধন্যবাদ!

আইডিয়নে এটি পরীক্ষা করুন ।


4
এটি পাগল, তবে আমি মনে করি আপনি "1'"in`map(bin,x)` পাইথন ২ হিসাবে একটি বিজোড় উপাদান পরীক্ষা করতে পারেন
xnor

উজ্জ্বল। ধন্যবাদ!
ডেনিস

8

এড, 13

/[13579]$/,$d

কারণ বাস্তব প্রোগ্রামারদের ব্যবহার মানক পাঠ্য সম্পাদক

প্রতিটি লাইনে একটি পূর্ণসংখ্যা হিসাবে ইনপুট নেয়; একই বিন্যাসে আউটপুট।

এটি কেবল প্রথম বিজোড় সংখ্যাটি (একটি বিজোড় অঙ্কে শেষ হওয়া সংখ্যা) খুঁজে পায় এবং ফাইলটির শেষ পর্যন্ত সেই লাইন থেকে মুছে ফেলা হয়।


uhhhhh। সুতরাং যে প্রোগ্রাম কি জন্য।
বিড়াল

7

ক্লোজার, 21 বাইট

#(take-while even? %)

ক্লোজারে শেষ পর্যন্ত প্রায় প্রতিযোগিতা! (কার্যটি অন্তর্নির্মিত হওয়ার জন্য ধন্যবাদ) এটি অনলাইনে দেখুন https://ideone.com/BEKmez


6

পাইথন, 45 44 বাইট

f=lambda x:x and~x[0]%2*x and x[:1]+f(x[1:])

আইডিয়নে এটি পরীক্ষা করুন ।


ওহ ম্যান .. এবং আমার মনে হয় কোনও অনুদান জিতে
ডিজেএমসিমেহেম

1
22 জুলাই, 2015 এর আগে পোস্ট করা কোনও নিষেধাজ্ঞার সাথে কেবল খাঁটি কোড-গল্ফ প্রশ্নই উপযুক্ত।
ডেনিস

@DrGreenEggsandIronMan খনি পুলিশের চেয়ে খাটো হয়েছে সমগ্র সময়। আমি আমার পোস্ট। : পি
mbomb007

2
ডেনিস আউটগল্ফড, যিনি ভাবেন :)
shooqie



5

05 এ বি 1 ই, 8 7 বাইট

[DÉO_#¨

ব্যাখ্যা

[        # infinite loop start
 DÉO     # count odd numbers
    _    # push negative bool (turning 0->1, X->0)
     #   # if true (no odd numbers exist), break out of loop and implicitly print
      ¨  # else, remove last element from list

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

পূর্ববর্তী 8 বাইট সমাধান

vyÈiyˆëq

ব্যাখ্যা

v         # for each y in input
 yÈi      # if y is even
    yˆ    # push y to global array
      ëq  # else terminate program
          # implicitly print global array

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


5

ব্রেইনফ ***, 263 বাইট

আমি এখান থেকে একটু স্নিপেট নিয়েছি

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

আমি একটি ব্যাখ্যা দিতে চাই কিন্তু এমনকি এটি কীভাবে কাজ করে তা সম্পর্কে আমার কোনও ধারণা নেই।

স্থান-বিভক্ত সংখ্যা হিসাবে ইনপুট আশা করে (উদাঃ 2 432 1)



আপনি সম্ভবত কিছু যুক্তি ব্যবহার করে +এবং শৃঙ্খলাগুলি গল্ফ করতে পারেন >?
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ বেশ কয়েকটি শৃঙ্খলা ইতিমধ্যে গল্ফ হয়েছে (অন্যথায় 32 'এর সারি প্রচুর হবে), এবং আমি সম্ভবত কিছু >গুলি আরও দক্ষ করতে পেরেছিলাম তবে আমি এখন তাদের যথেষ্ট বুঝতে পারি না
anOKsquirrel

এজন্য আপনার কোডটি নোটপ্যাডে লেখার সাথে সাথে আপনার মন্তব্য করা উচিত। : পি
mbomb007


4

র‌্যাকেট, 22 বাইট

(λ(n)(takef n even?))

λচরিত্র 2 বাইট হিসাবে গণনা করা হয়।

আমি যে কোড গল্ফিংয়ের উত্তর দেখেছি তার কোনওটিতে র‌্যাকেট এর আগে ব্যবহৃত হয়নি, তাই কমপক্ষে একবারে আমার এটি করতে হয়েছিল!


2
আমি র‌্যাকেটে গল্ফ দিতাম, র‌্যাকেটের জন্য হুর!
বিড়াল

4

ভোল্টেজ , 14 বাইট

?:
"`#
"@%
\!;

ইনপুট এবং আউটপুট লাইনফিড-বিচ্ছিন্ন তালিকা (যদিও নীতিগতভাবে, ইনপুটটি কোনও অ-অঙ্ক বিভাজক ব্যবহার করতে পারে)।

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

এটি সম্ভবত সবচেয়ে কমপ্যাক্ট ল্যাবরেথ প্রোগ্রাম যা আমি লিখেছি।

মজার বিষয়, takewhile(odd)খুব সহজ:

?:#
" %
\!/

ব্যাখ্যা

সাধারণ ল্যাবরেথ প্রাইমার:

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

প্রোগ্রামের মাধ্যমে মূল প্রবাহটি হল ঘেরের চারপাশে একটি লুপ:

>v
^>v
^@v
^<<

এটি যেমন ঘটে থাকে, আমরা জানি যে স্ট্যাকের শীর্ষটি শূন্যের পরে !এবং "যাতে আইপিটি কেন্দ্রের দিকে না যাওয়ার গ্যারান্টিযুক্ত। `এবং %অন্যদিকে শর্তসাপেক্ষ হিসাবে ব্যবহার করা হয় যেখানে আইপি কেন্দ্রের দিকে এগিয়ে যেতে পারে @যা প্রোগ্রামটি বন্ধ করে দেয়, বা এটি ঘেরের চারদিকে চলতে পারে।

লুপের কোডটি দেখুন:

?   Read decimal integer N from STDIN, or 0 at EOF.
:   Duplicate. Since this is just a corner, the IP always turns south.
`   Negate the copy of the input (i.e. multiply by 1). At EOF, the result
    is still zero and the IP keeps moving south into the @. Otherwise, the
    top of the stack is now negative, and the IP turns east.
#   Push the stack depth (i.e. 2). Again, this is a corner, and the IP
    is forced to turn south.
%   Computer (-N % 2), which is identical to (N % 2) to determine the
    parity of the input. If input was odd, this gives 1, and the IP turns
    west into the @. Otherwise, the result is 0 and the IP keeps moving
    south, continuing the loop.
;   Discard the 0. This is a corner, so the IP is forced to turn west.
!   Print (and discard) N. The top of the stack is now one of the implicit
    zeros at the bottom, so the IP keeps moving west.
\   Print a linefeed. The IP is forced to turn north in the corner.
""  Two no-ops. The top of the stack is still zero, so the IP keeps moving north.

এবং তারপরে লুপটি শুরু হয়।

এটি takewhile(odd)এত সহজ কেন প্রশ্ন উত্থাপন করে । এর দুটি কারণ রয়েছে:

  • যেহেতু ইওএফটি 0(যা সমান) হিসাবে ফেরত এসেছে , আমাদের আলাদা ইওএফ চেকের প্রয়োজন নেই। তালিকাটি যাইহোক যে মুহূর্তে কাটা হবে।
  • এখন আমরা বিনষ্ট যখন চান N % 2হয় 0(যেমন বিরোধিতা 1), যা শর্তসাপেক্ষ নিয়ন্ত্রণের পরিবর্তে উপায়ে প্রবাহিত কেবলমাত্র আমরা অন্যান্য কপি বিভক্ত করা যেতে পারে Nদ্বারা N % 2যদি ইনপুট বিজোড় হয়, যে শুধু পাতার: Nএবং আমরা এমনকি পরিত্রাণ N % 2(তাই আমরা ডন ' টি দরকার ;), তবে যদি ইনপুটটি সমান হয়, তবে এটি কেবল একটি (নীরব) বিভাগ দ্বারা বাই শূন্য ত্রুটি সহ প্রোগ্রামটি বন্ধ করে দেয়।

অতএব, অন্য কোডটি একটি সরল লুপ যা কোনও শাখা প্রশস্ত করার অনুমতি দেয় না।


3

ব্র্যাচল্যাগ , 19 16 বাইট

HH: 2% 0, B & ~ b.hH; []।

s.:Mc?,.:{:2%0}a

ব্যাখ্যা

s.                 Output is an ordered subset of Input
  :Mc?,            The concatenation of Output with a list M is Input
       .:{:2%0}a   All elements of Output are even

আজ আমি একটি ঝরঝরে কৌশল শিখলাম (যা 19 বাইট উত্তরে ব্যবহৃত হয়েছিল): তালিকার শুরুতে একটি উপাদান সংযোজন করার ~b.hHচেয়ে ছোট :[H]rc.। প্রথমটির অর্থ "আউটপুট হ'ল শুরুর দিকে অতিরিক্ত আইটেমের ফলাফল এবং আউটপুটটির প্রথম আইটেমটি হয় H" , অন্য অপরটি সোজাভাবে "আউটপুট এর সংক্ষিপ্তকরণ [[H], Result]"।


3

জে, 10 বাইট

{.~2&|i.1:

ব্যাখ্যা

{.~2&|i.1:  Input: s
   2&|      Take each value in s mod 2
      i.1:  Find the index of the first 1
{.~         Take that many values from s and return

1{.2&|<;._2]আকর্ষণীয় (যদিও দীর্ঘ) তবে
লিক নুন

$পরিবর্তে ব্যবহার করুন{.
FrownyFrog

3

পাইথন, 41 বাইট

lambda l:l[:[x%2for x in l+[1]].index(1)]

lবিজোড় সংখ্যার প্রথম উপস্থিতির সূচি পর্যন্ত ছাঁটা হয়। সূচকটি 1মানগুলির মধ্যে একটি সন্ধান করে পাওয়া যায় 2। কোনও বিজোড় সংখ্যা না পাওয়া থেকে রক্ষা করার জন্য, একটি 1শেষ করা হয়।



3

সিজেম , 11 বাইট

দুটি সংশোধন এবং একটি বাইট বন্ধের জন্য @ ডেনিসকে ধন্যবাদ!

{1+_2f%1#<}

এটি একটি কোড ব্লক (একটি ফাংশনের সমতুল্য; ডিফল্টরূপে অনুমোদিত) যা স্ট্যাকের উপর ইনপুট অ্যারের প্রত্যাশা করে এবং স্ট্যাকের উপর আউটপুট অ্যারে ছেড়ে দেয়।

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

ব্যাখ্যা

{         }    e# define code block
 1+            e# attach 1 at the end of the array
   _           e# duplicate
    2f%        e# modulo 2 of each entry
       1#      e# find index of first occurrence of 1
         <     e# slice before

3

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

 ?\d*[13579]\b.*

পেছনের লাইনফিডটি তাৎপর্যপূর্ণ। ইনপুট এবং আউটপুট হল স্থান-বিচ্ছিন্ন তালিকা।

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

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

লিকি নুন যেমন উল্লেখ করেছেন, তালিকায় বাইনারি রেখে, আমরা 6 বাইট সংরক্ষণ করতে পারি, তবে এটি কিছুটা ধোঁকাটে বলে মনে হচ্ছে, তাই আমি সম্ভবত দশমিক সংস্করণ গণনা চালিয়ে যাব:

 ?\d*1\b.*


আপনি বাইনারি তালিকা নিতে পারেন?
ফাঁস নুন

3

জাভাস্ক্রিপ্ট (ফায়ারফক্স 30-57), 30 বাইট

a=>[for(x of a)if(!(a|=x&1))x]

2

ভি , 13 বাইট

íä*[13579]¾.*

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

ব্যাখ্যা:

í              "search for, on every line
 ä*            "Any number of digits
   [13579]     "Followed by an odd digit
          ¾    "Then the end of a word,
           .*  "Followed by anything
               "(implicit) and replace it with nothing.

সুবিধার্থে, একই কোড একই সাথে সমস্ত পরীক্ষার কেস যাচাই করতে কাজ করে।


2

ডায়ালগ এপিএল , 11 বাইট

{⍵/⍨∧\~2|⍵}

2| 2 এর সাথে বিভাজন থেকে বাকি অংশ rema

~ অস্বীকার করা

∧\ এবং স্ক্যান (প্রথম 0 থেকে বন্ধ)

/⍨ কোথায় নির্বাচন করুন


2

রুবি, 25 বাইট

->a{a.take_while &:even?}

আমার মনে হয় আমি হেরে গেছি ...


আপনি করতে পারেন ->a{a.take_while &:even?}বা কমপক্ষে ->a{a.take_while(&:even?)}?
মার্টিন ইন্ডার

@ মার্টিনইেন্ডার আপনাকে ধন্যবাদ আমি এরকম কিছু খুঁজছিলাম, তবে আমি অনুমান করি যে আমি রুবি গল্ফিং সিনট্যাক্সে ভাল পারদর্শী নই।
মেগাটম

2

পাইকে, 8 বাইট

0+2L%fhO

দোভাষী সংশোধন, অন্যান্য লিঙ্ক ব্যবহার করুন

আমার স্প্লিট_এট ফাংশন ব্যতীত ডেনিসের পদ্ধতি ব্যবহারের পরিবর্তনের অন্তর্ভুক্ত রয়েছে - সম্ভবত একটি বাগ

বা বাগফিক্স, 7 বাইট সহ

2L%1R@<

এখানে চেষ্টা করুন!

2L%     -   map(%2, input)
   1R@  -  ^.index(1)
      < - input[:^]

বা দ্বিতীয় বাগফিক্সের পরে, 6 বাইট

2L%fhO

এখানে চেষ্টা করুন!

ব্যাখ্যা:

2L%    -   map(%2, input)
   f   -  split_at(input, ^)
    hO - ^[0][:-1]

2

গল্ফস্ক্রিপ্ট, 11 বাইট

এটি একটি সম্পূর্ণ গল্ফস্ক্রিপ্ট প্রোগ্রাম যা স্ট্রিংফাইড গল্ফস্ক্রিপ্ট অ্যারে আক্ষরিক (উদাঃ [28 14 7 0]) পড়ে এবং প্রথম অদ্ভুত উপাদান এবং এটি অপসারণের পরে সমস্ত কিছু সহ একই অ্যারে প্রিন্ট করে:

~1\{~&.},p;

এটি অনলাইনে চেষ্টা করুন। (এছাড়াও: পরীক্ষার জোতা সহ প্রসারিত সংস্করণ ))

মন্তব্য সহ ডি গল্ফ সংস্করণ:

~     # evaluate input
1\    # push the number 1 onto the stack and move it under then input array
{     # start of loop body
  ~   #  bitwise negate the input number (making odd numbers even and vice versa)
  &   #  take bitwise AND of input and the saved number (0 or 1) on stack 
  .   #  duplicate result; filter loop will pop off the duplicate
},    # run loop above over input array, select elements for which it returns true
p     # stringify and print filtered array
;     # pop the number 0/1 off the stack

এই সমাধানটি গল্ফস্ক্রিপ্ট { },ফিল্টার অপারেটরের উপর ভিত্তি করে তৈরি করা হয়েছে , যা অ্যারের প্রতিটি উপাদানটিতে কোড ব্লকের বিষয়বস্তু চালায় এবং অ্যারের উপাদানগুলি নির্বাচন করে যার জন্য ব্লকের কোডটি সত্য (অর্থাত্ শূন্য নয়) মান প্রদান করে স্ট্যাকের শীর্ষে

সুতরাং, উদাহরণস্বরূপ, {1&},একটি অ্যারেতে সমস্ত বিজোড় সংখ্যা নির্বাচন করবে এবং সমস্ত সমান সংখ্যা {~1&},নির্বাচন করবে। তারপরে, চ্যালেঞ্জটি হ'ল এমন একটি ফিল্টার তৈরি করা যা এমনকটি সংখ্যার নির্বাচন করে যতক্ষণ না এটি প্রথম বিজোড়টিকে খুঁজে পায় এবং এরপরে কোনও সংখ্যা নির্বাচন করে না।

আমি যে সমাধানটি ব্যবহার করেছি তা হ'ল স্থির বিট-মাস্ক 1(প্রতিটি ইনপুট সংখ্যার সর্বনিম্ন বিট বের করার জন্য ব্যবহৃত) স্ট্যাকের একটি ভেরিয়েবলের সাথে প্রতিস্থাপন যা পূর্ববর্তী ফিল্টার লুপ পুনরাবৃত্তির ফলাফল (0 বা 1) সংরক্ষণ করে (এবং এতে আরম্ভ করা হয়) লুপের আগে 1)। এইভাবে, ফিল্টারটি একবার 0 ফিরে আসার সাথে সাথে বিটমাস্ক 0 তেও সেট হয়ে যায়, ফিল্টারটিকে আর কখনও 1-এ ফিরে আসা থেকে বিরত করে।


2

চতুর্থ, 114 বাইট

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

: D DEPTH ;
: f D IF 1 D 1 DO D 1- ROLL LOOP D 0 DO I PICK 2 MOD IF D I LEAVE THEN LOOP
DO I ROLL DROP LOOP THEN ;

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

মতামত সহ উদগঠিত:

: f DEPTH IF                                ( if stack not empty )
        1 DEPTH 1 DO DEPTH 1- ROLL LOOP     ( put 1 on bottom of stack )
        DEPTH 0 DO                          ( loop over entire stack )
            I PICK 2 MOD IF                 ( if stack[i] is odd )
                DEPTH I LEAVE               ( put range and exit loop )
            THEN
        LOOP
        DO I ROLL                           ( roll eyes )
            DROP
        LOOP                                ( iterate that range and remove )
    THEN
;

এই প্রোগ্রামটি (আমার পূর্ববর্তী প্রচেষ্টা) ফলাফলগুলি মুদ্রণ না করা অবধি মুদ্রণ করবে। বাকি সমস্ত কিছুই (নেওয়া হয়নি) স্ট্যাকের মধ্যে রেখে দেওয়া হবে।

: f DEPTH IF BEGIN DUP 2 MOD DUP 1- IF SWAP . THEN UNTIL THEN ;

ব্যর্থ হয় যদি এমনকি পূর্ণসংখ্যা হয়


5
এটি শেষ করার পরে, আমি বুঝতে পারি আমার প্রাতঃরাশটি শীত was :(
mbomb007

টেবিলে গল্ফিং কোডের পরে খুব ঘন ঘন আমি আমার রাতের খাবার ঠান্ডা পাই। সম্ভবত ফ্যাক্টর আপনাকে একই সাথে আরও উত্পাদনশীল এবং গল্ফায়ার হতে দেবে? : ডি
বিড়াল

@ সি আমি অনলাইন আইডিই দিয়ে পিপিসিজির জন্য আমার কোড বিকাশ করি। তবে আমি ফোর্থটি ব্যবহার করি কারণ আমি এটি ইতিমধ্যে জানি, আমার মাথায় স্ট্যাক পরিচালনা করা কেবল কঠিন। আমি মূলত ফোর্থটি শিখলাম কারণ একটি মাইনক্রাফ্ট মোডে রেডস্টোন কম্পিউটার যুক্ত করেছে যা মাইনোএস শিরোনামে ফোর্থের একটি সংস্করণ চালিয়েছে।
mbomb007

2

বেফুঞ্জ, 35 বাইট

এই কোডটি 0 এবং 65535 এর মধ্যে নম্বর পরিচালনা করে

1&:v
v-1_@#:@#<
>\:&:2%|
 \+1p4\< ^

ছক পূরণ করা :

number_of_values    values(separated by a space)

প্রক্রিয়া শেষে মানগুলি প্রদর্শন করে এমন একটি সংস্করণ এখানে রয়েছে:

1&:v>::   v                >00g1+:4g.v
v-1_^#:>#<>$$\$1-:10p000p0-| -g01p00:<
>\:&:2%|                   @
 \+1p4\< ^

আপনি এখানে কোডটি পরীক্ষা করতে পারেন , তবে আপনাকে অনুচ্ছেদে স্পেস সহ একটি চলন্ত রেখা যুক্ত করতে হবে, কারণ এই ব্যাখ্যাটি নির্দিষ্ট করে:

Tor কোড টরাসটি প্রাথমিক প্রোগ্রামের মতোই বড়। কোডের শেষের বাইরে ডেটা রাখলে আরও লাইন বা ট্রেলিং স্পেস sertোকান »

আমি এটি গ্রহণযোগ্য কিনা জানি না, কারণ আমি বাইট গণনায় এই অনুকরণটি গণনা করি নি
এনবিতে : মনে হয় যেহেতু আমি কোডটিতে নম্বরটি সংরক্ষণ করছি, দোভাষী এই প্রোগ্রামটিকে দু'বার সঠিকভাবে চালাবেন না উপায়। আপনাকে এটি পুনরায় লোড করতে হবে।


কিভাবে কাজ করে: কিভাবে দোভাষী তীরগুলি অনুসরণ করে এবং '#' পারাপারের সময় কোনও নির্দেশনা এড়িয়ে যান

ধূসর বিন্দুগুলি পরীক্ষা করা হয় এবং লাল রেখাটি স্ট্যাক থেকে অপরিবর্তিত ভেরিয়েবলগুলি সরিয়ে দেয়

উপরোক্ত দোভাষীটিতে এখানে ব্যবহার করে, সংরক্ষিত মানগুলি তাদের উপস্থাপনা ব্যবহার করে কোডটিতে প্রদর্শিত হবে (আমি ফর্ম্যাটটি জানি না)। হ্যাঁ, বেফুঞ্জ একটি যথেষ্ট প্রতিফলিত ভাষা

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