একটি অ্যারের মাধ্যমে চালান


13

আমরা সবাই প্রায়শই "অ্যারে দিয়ে হেঁটে" আইডিয়মটি "নীচের অ্যারের উপরে ফাংশনটি মানচিত্র করা" শোনার জন্য শুনতে পাই। যাইহোক, আমি এটি সম্পন্ন হবে (এখন!), তাই আমি চাই তুমি চালানোর অ্যারের মাধ্যমে।

আমি কিভাবে চালাব?

কল্পনা করুন যে আপনার পিছনে নেকড়েদের একটি বুনো প্যাক রয়েছে

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

  1. চলুন eবর্তমান উপাদান হতে দিন ।
  2. এর randomমধ্যে একটি এলোমেলো ভাসা তৈরি করা যাক [0,1)। যদি random() < 0.5, তবে আপনি পরবর্তী উপাদানটিতে যান এবং তারপরে ১ ম পদক্ষেপে যান ( দুই সদস্যের ফলাফলের ভিত্তিতে অ্যাকশন সেট এবং সম্পাদন করুন)
  3. অন্যথা, আপনি ফাংশন সঞ্চালন fউপর e

উদ্দেশ্য

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

পরীক্ষার কেস (উদাহরণ)

K, A => possible K'
[1, 2, 3, 4], 0 => [1, 2, 3, 4]
[1, 2, 3, 4], 1 => [1, 3, 3, 5]
[0, 0, 0, 0], 2 => [2, 0, 0, 2]

[0,1)টাইপো? আরও 2 টি যেতে হবে ...
বাল্ড বান্থা

5
এলোমেলো পছন্দটি কি ভাসমান তুলনা দ্বারা নির্ধারণ করতে হবে বা আমরা এলোমেলোভাবে বেছে নিতে পারি?
অ্যালেক্স এ।

আমি কি কোনও প্রোগ্রাম পোস্ট করতে পারি, বা এটি কোনও ফাংশন হতে পারে? এটি জাভাতে একেবারেই নষ্ট করে দেয় differe
বালিন্ট

1
@epicTCK তার মানে দেড় খোলা বিরতি, অর্থাত্ একটি বাস্তব সংখ্যা xযেমন যে 0 ≤ x < 1
মার্টিন ইন্ডার

1
@ বুলিন্ট উভয় স্বাক্ষর রয়েছে।
মার্টিন এন্ডার

উত্তর:


3

পাইথ, 7

m+*O2vz

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

ভাসমান পয়েন্ট তুলনার পরিবর্তে একটি এলোমেলো পছন্দ ব্যবহার করে, তবে এটি পৃথক করা উচিত।

সম্প্রসারণ:

m+*O2vz     ## implicitly, a d and Q are added to the end of the program
m+*O2vzdQ   ## Q = eval(input()), z= input()
m           ## map over each element d of Q
 +     d    ## add to d
  *O2vz     ## the product of eval(z) and a random number chosen from [0, 1]

ভাসমান পয়েন্ট ব্যবহার:

m+*<.5O0vz

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


2
ভাসমান পয়েন্টটি ভাসমান পয়েন্ট> :(
লিকি নুন

1
@ কেনি লাউ পরিবর্তন তুচ্ছ, এটি কেবল গল্ফিয়ার ছিল। আমি মনে করি না যে এটির প্রয়োজনটি বোঝানো হয়েছিল, কেবল আচরণটি একই রকম। আমি এফপি সহ একটি সংস্করণ যুক্ত করব এবং ওপিকে জিজ্ঞাসা করব।
FryAmTheEggman

@ কেনেলাউ কি ভাসমান পয়েন্ট ছাড়া ভাষার কথা?
ভেন

@ ফ্রাইআম দ্য এজিগম্যান হ্যাঁ, এটি কেবল একটি উদাহরণ ছিল - সমান সম্ভাবনা ভাল।
কনর ও'ব্রায়ান

@ কেনি লাউ ওপি নিশ্চিত করেছে যে ভাসমান পয়েন্টের প্রয়োজন নেই।
অ্যালেক্স এ।

5

ক্লোজার, 41 37 বাইট

(fn[a k](map #(+(*(rand-int 2)k)%)a))

0 বা 1 দ্বারা গুণিত করে এবং "যদি" বাদ দিয়ে কয়েকটা বাইট ছুঁড়ে ফেলেছে। অন্যান্য জমা দেওয়া বেশিরভাগ ক্রেডিট!


এক অনামিকার কার্যকারিতা এই ক্ষেত্রে যথেষ্ট হবে, তবে দুর্দান্ত উত্তর; পিপিসিজিতে আপনাকে স্বাগতম!
বিড়াল

অনেক বারের forচেয়ে ছোট হয় map, রেফারেন্সের জন্য আমার উত্তরটি দেখুন :) এছাড়াও এটি অভ্যন্তরীণ বেনামে ফাংশনটি এড়িয়ে যায় যাতে (fn[a k]আপনি কোডটি ব্যবহার না করে শুরু করতে পারেন #(
নিকোনিহার

4

জেলি, 9 8 7 বাইট

থেকে 8থেকে 7ধন্যবাদ @FryAmTheEggman

+2X’¤¡€

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

ব্যাখ্যা

+2X’¤¡€
      €   Map over each argument...
 2X           Choose a random number from {1,2}
   ’          Minus 1
    ¤                (grammar stuff)
     ¡        Repeat that number of times...
+                 Add the second input (to the argument being mapped over).

আপনি কীভাবে এই ভাষায় সাফল্যের সাথে কীবোর্ড করবেন?
MonkeyZeus

@ মনকিজেস ডেনিস বলেছেন, এটি একটি সাধারণ কীবোর্ড ব্যবহার করে লিনাক্সে প্রবেশ করতে পারে।
বিলিন্ট

@ বুলিন্ট প্লটটি আরও ঘন করে তোলেন, ডেনিস কে? lol
MonkeyZeus

13
পছন্দ করুন
ডেনিস

1
@ ডেনিস এই ভবিষ্যদ্বাণীটি পূর্ণ হয়েছে ┗ (⊙ .⊙) ┛
MonkeyZeus

3

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

tZy1$rEki*+

ভাসমান পয়েন্ট এলোমেলো সংখ্যা ব্যবহার করে।

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

ব্যাখ্যা

t      % implicit input (array). Duplicate
Zy     % size (array specifying number of rows and columns)
1$r    % random vector between 0 and 1 with that size
Ek     % duplicate, round down: gives 0 or 1 with the same probability
i      % input (number K to be added)
*      % multiply: gives either 0 or K for each element
+      % add element-wise

1
ফোন থেকে টাইপ করা হয়েছে। পরে ব্যাখ্যা
লুইস মেন্ডো

@ ক্যাটস আরেফ্লুফি :-) হয়েছে!
লুইস মেন্ডো

3

জাপট, 6 বাইট

®+V*Mq

এটা পরীক্ষা করো


ব্যাখ্যা

অ্যারে Uএবং পূর্ণসংখ্যার অন্তর্নিহিত ইনপুট V। (MAP ®) অ্যারের উপর এবং, প্রতিটি উপাদানে, অ্যাড Vদ্বারা গুন Mq, যা এলোমেলোভাবে পারেন উত্পন্ন 0বা 1। ফলাফল অ্যারের অন্তর্নির্মিত আউটপুট।



2

জুলিয়া, 33 29 27 বাইট

x->k->x+rand(0:1,endof(x))k

এটি একটি বেনামি ফাংশন যা একটি অভ্যন্তর অনামী ফাংশন সহ একটি অ্যারে গ্রহণ করে যা একটি পূর্ণসংখ্যা গ্রহণ করে এবং একটি অ্যারে প্রদান করে। এটিকে কল করতে, এটিকে কোনও ভেরিয়েবলের জন্য বরাদ্দ করুন এবং কল করুন f(x)(k)

আমরা সমান সম্ভাবনার সাথে এলোমেলোভাবে বেছে নেওয়া শূন্য এবং এগুলি সমন্বিত ইনপুট অ্যারের সমান দৈর্ঘ্যের সাথে একটি অ্যারে উত্পন্ন করি। আমরা এটিকে ইনপুট পূর্ণসংখ্যা দিয়ে গুণ করি এবং এটি ইনপুট অ্যারেতে যুক্ত করি।

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

ডেনিসের জন্য 2 টি বাইট সংরক্ষণ করা!


2

পাইথন 2, 60 58 বাইট

from random import*
lambda a,k:[e+choice([0,k])for e in a]

এই প্রোগ্রামটি সত্যই সহজ সরল। স্পষ্টত " from module import*" ব্যতীত নিয়মিত ক্রিয়াকলাপের পরিবর্তে ল্যাম্বডা ব্যবহার করা এবং সাদা জায়গার সাধারণ অভাব ছাড়া সেখানে কোনও গল্ফিং কৌশল নেই । এটি ব্যতীত এটি আসলে বেশ মূর্তিমান। আমি যদি এটি বাস্তবের জন্য লিখতাম তবে আমি সম্ভবত এটি খুব অনুরূপভাবে করতাম:

import random
def running_addition(seq, k):
    return [e + random.choice([0, k]) for e in seq]

বা সম্ভবত আরও অভিনব কিছু:

import random
import operator
import functools

def run_through(seq, func):
    def random_func(arg):
        if random.randint(0, 1):
            return func(arg)
        return arg

    return [random_func(e) for e in seq]

def running_addition(seq, k):
    return run_through(seq, functools.partial(operator.add, k))

তবে এটাই যথেষ্ট দেখানো হয়েছে :)

এলোমেলো জন্য ফ্লোট ব্যবহার করার সময় এটির 60 বছরের বাইট সংস্করণ:

from random import*
lambda a,k:[e+k*(random()<.5)for e in a]

তালিকার প্রতিটি উপাদানের জন্য যুক্ত করুন k*(random()<.5)। পাইথন বুলিয়ানরা 0 এবং 1 এ মূল্যায়ন করে, সুতরাং এটি এমন কোনও উপাদানের সাথে 0 যুক্ত করে যার জন্য অবস্থাটি সত্য নয়।

পাইথনের random.random()রিটার্নগুলি ভেসে বেড়ায় [0, 1), তাই আমাকে এটি নিয়ে চিন্তা করতে হবে না।


1
@ ফ্রাইআম দ্য এজিগম্যান যদি ভাসমান পয়েন্টের প্রয়োজনীয়তাটি বাদ দেওয়া হয় তবে আমি সবচেয়ে ভালভাবে বুঝতে পারি যে, গুণটির কৌশল সম্পূর্ণরূপে ভুলে যাওয়া এবং করাe+choice([0,k])
আন্ডারগ্রাউন্ডোমোনাইল

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

@ ফ্রাইআম দ্য এজিগম্যান ওহ হা, আমি খেয়াল করিনি। আমি এখন এটি করব, ধন্যবাদ :)
আন্ডারগ্রাউন্ডোমোরিয়েল

1

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

solution=

a=>k=>a.map(n=>Math.random()<.5?n:n+k)

document.write("<pre>"+
[ [[1,2,3,4], 0], [[1,2,3,4], 1], [[0,0,0,0], 2], [[4,22,65,32,91,46,18], 42] ]
.map(c=>"["+c[0]+"],"+c[1]+": "+solution(c[0])(c[1])).join`\n`)


আমি একটি চ্যালেঞ্জে অংশ নিতে চাই এবং ... জাভাস্ক্রিপ্ট নেওয়া হয়েছে। সিরিয়াসলি, আমি একা শিখতে হবে।
বালিন্ট

@ বুলিন্ট আমি নিশ্চিত যে ইউনিারি এলোমেলো ফ্লোট তৈরি করতে পারে না
আন্ডারগ্রাউন্ডোমোনাইল

@underlandmonorail আমি বলেছি কারণ এটি কেউ ব্যবহার করে না (স্পষ্ট কারণে, এটি এখানে পোস্ট করা যায় না কারণ এটি অনেক দীর্ঘ হয়ে যায়)
বিলিন্ট

1

পাওয়ারশেল ভি 2 + 34 বাইট

param($a,$k)$a|%{$_+$k*(random 2)}

ইনপুট নেয় $aএবং $kযথাক্রমে অ্যারে এবং int হয়। তারপরে আমরা অ্যারের মধ্য দিয়ে লুপ করি এবং প্রতিটি লুপ পুনরাবৃত্তি বর্তমান উপাদানটিকে আরও বেশি $kবার আউটপুট দেয় (random 2)যা কার্যকর হবে Get-Random -Maximum 2(যেমন, হয় a 0বা a 1)। এগুলি সমস্ত পাইপলাইনে রেখে গেছে এবং অ্যারে অন্তর্ভুক্ত হওয়ায় আউটপুট।



1

পিএইচপি 71 বাইট

function f($s,$k){foreach($s as $v){$v+=rand(0,2)==0?k:0;echo $v.",";}}

1

কে (12 বাইট)

{x+y*(#x)?2}

যেমন

k){x+y*(#x)?2}[0 0 0 0;2]
2 2 2 0

আরও সাধারণভাবে, যেখানে f16 টি অক্ষরের যুক্তি হিসাবে পাস করা যেতে পারে

{@[x;&(#x)?2;y]}

যেমন

k){@[x;&(#x)?2;y]}[0 0 0 0;2+]
0 0 2 0

একটি সাধারণ সংস্করণ সহ ভাল লাগল!
কনর ও ব্রায়ান

1

পাইথন 3 152 110 98 বাইট

এটি আমার প্রথম কোড গল্ফ সমাধান তাই আমি কোনও কৌশল জানি না। আমি পরীক্ষার কেসগুলির সাথে এটি একটি প্রধান ফাংশন ব্যবহার করে পরীক্ষা করেছি। ফাইলের আকারটি কেবল এই ফাংশন।

from random import*
def a(x,y):
 p=0
 for z in x:
  if random()>.5:x[p]=z+y
  p+=1
 print(x)

হোয়াইটস্পেস সরিয়ে দেওয়ার পরামর্শের জন্য @ সি ওব'কে ধন্যবাদ 12 টি বাইট সংরক্ষণ করা পরামর্শের জন্য @underlandmonorail এর অতিরিক্ত প্রশংসা।


1
আমি 145 বাইট গণনা। আপনি এই ধরনের মধ্যে যেমন অপ্রয়োজনীয় হোয়াইটস্পেস, সরিয়ে গলফ এটা import *, a(x, y), x[ptr]=z+y, ইত্যাদি এছাড়াও আপনি 4 শূণ্যস্থান একটি একক স্থান সঙ্গে প্রতিস্থাপন করতে পারেন
কোনোর ব্রায়েন

আপনি হোয়াইটস্পেসের 3 বাইট সংরক্ষণ করতে x[ptr]=z+yএকই লাইনে রাখতে পারেন if random()>0.5। পাইথন 2- তে একটি বাইট সংরক্ষণ করার জন্য 0.5লেখা যেতে পারে .5, যদিও পাইথন 3 এ সত্য কিনা তা আমি জানি না। আপনি নামান্তর যদি ptrকরতে pআপনি সব 6 বাইট সংরক্ষণ করব। এছাড়াও, আপনি কি উইন্ডোজে আছেন? উইন্ডোজ নিউলাইনগুলিকে দুটি বাইট হিসাবে সঞ্চয় করে, তবে যেহেতু অজগরটি পরোয়া করে না যদি নতুন লাইনটি এক বা দুটি হয় তবে আপনি এটি 1 হিসাবে গণনা করতে পারেন, আপনার বর্তমান সমাধানটি কেবল 103 বাইট তৈরি করে। উপায় দ্বারা, PPCG করার :) স্বাগত জানাই
undergroundmonorail

1

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

#(for[i %](+(*(rand-int 2)%2)i))

ধন্যবাদ আপনাকে ডেভিড rand-intধারণা জন্য , if(>(rand)0.5)পদ্ধতির চেয়ে সংজ্ঞায়িতভাবে সংক্ষিপ্ত । এখানে forমার map




0

জাভা, 84 বাইট

int[]r(int[]A,int K){for(int i=0;i<A.length;A[i++]+=Math.random()>.5?0:K);return A;}

Ungolfed

int[] r(int[] A, int K) {
    for (int i = 0; 
         i < A.length; 
         A[i++] += Math.random() > .5 ? 0 : K);
    return A;
}

মন্তব্য

  • লুপের পরবর্তী চিন্তাও এটির দেহ হতে পারে, আকারের কোনও পার্থক্য নেই।
  • ইনপুট অ্যারে সংশোধিত হয়েছে তবে বিবৃতিতে এই সমস্যা সম্পর্কিত কোনও বিধিনিষেধ নেই। আপনি যদি "আউটপুট / রিটার্ন" ফর্ম হিসাবে পরিবর্তিত অ্যারে গণনা করেন, আপনি অপসারণ করে আরও 9 বাইট ছাঁটাই করতে পারেন return A;। ফেরতের ধরণটি থেকে বদলে নেওয়া int[]দরকার void। এটি অবশ্য অতিরিক্ত বাইটগুলি সংরক্ষণ করে না যেহেতু voidএবং এর মধ্যে অতিরিক্ত স্থানের প্রয়োজন হয় r

সংক্ষিপ্ত সংস্করণ (নোটে উল্লিখিত হিসাবে), 75 বাইট

void r(int[]A,int K){for(int i=0;i<A.length;)A[i++]+=Math.random()>.5?0:K;}

আউটপুট

[1, 2, 3, 4], 0 => [1, 2, 3, 4]
[1, 2, 3, 4], 1 => [1, 3, 3, 4]
[1, 2, 3, 4], 2 => [3, 2, 3, 4]
[1, 2, 3, 4], 3 => [4, 5, 3, 7]
[1, 2, 3, 4], 4 => [5, 2, 3, 8]
[1, 2, 3, 4], 5 => [6, 2, 8, 9]

আপনার দ্বিতীয় সংস্করণটি বৈধ নয়, এটি কোনও ফলাফল আউটপুট দেয় না বা ফেরত দেয় না।
বিলিন্ট

1
দয়া করে আমার পোস্টটি পড়ুন ...
মারভ

0

ম্যাথক্যাড, বাইটস

এখানে চিত্র বর্ণনা লিখুন


ম্যাথক্যাডের গণনা প্রোটোকল হিসাবে কোনও আনুষ্ঠানিক বাইট গণনা এখনও ঠিক হয়নি।


0

জাভা 108 107 85 82 বাইট

void f(int[]s,int k){for(int i:s)System.out.print((i+=Math.random()<.5?k:0)+";");}

14 টি বাইট সংরক্ষিত হয়েছে @ টিমমিডকে ধন্যবাদ


@ টিমিডি বিধিগুলি বলছে আপনাকে এটিকে আউটপুট করতে হবে। এবং এই নিয়মটি এর মতো ছিল না, যখন আমি উত্তরটি লিখেছিলাম
বেলিন্ট

আমি বিশ্বাস করি আপনি পরে স্থান অপসারণ করতে পারেন main, String[], int[], এবং পরিবর্তন করে অন্য কয়েক বাইট সংরক্ষণ nextFloat()>0.5করতে next(1)==0
মনিকা এর মামলা মামলা

@QPaysTaxes আমি ইতিমধ্যে পরিবর্তন new java.util.Random().nextFloat()করতে Math.random(), যেমন এটা অনেক অনেক খাটো।
বিলিন্ট

@ টিমিডি এটি দেখেনি, ধন্যবাদ
বুলিন্ট

এটি বর্তমান অবস্থায় কাজ করে না। আপনি পরিবর্তিত করবেন না s, কেবলমাত্র i, পদ্ধতিটিতে রিটার্ন টাইপ রয়েছে voidতবে আপনি ফিরে আসার চেষ্টা করছেন int[]। এছাড়াও পরে একটি সেমিকোলন অনুপস্থিত return s
মার্ভ

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