থিসাসের নতুন শিপ


9

Theseus জাহাজ একটি পুরানো প্রশ্ন ওই জাতীয় কিছু যায়:

যদি কোনও জাহাজের সমস্ত আসল অংশ প্রতিস্থাপন করা থাকে তবে এটি কি এখনও একই জাহাজ?

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

কার্য

একটি জাহাজ অন্তত দুটি অংশ নিয়ে গঠিত। অংশগুলি ইতিবাচক (অ-শূন্য) পূর্ণসংখ্যার অ্যারে হিসাবে দেওয়া হয়, অংশটির অবস্থাটি উপস্থাপন করে।

প্রতিটি চক্রের এলোমেলোভাবে তালিকা থেকে একটি অভিন্ন ফ্যাশনে একটি অংশ চয়ন করুন । সেই অংশের অবস্থা একের মাধ্যমে হ্রাস পাবে। যখন কোনও অংশের অবস্থা শূন্যে পৌঁছে যায়, তখন এটি নতুন অংশ দ্বারা প্রতিস্থাপিত হয়। নতুন অংশটি মূল হিসাবে একই শর্ত মান দিয়ে শুরু হয়।

প্রথম চক্রটিতে যেখানে সমস্ত অংশ একবার প্রতিস্থাপন করা হয়েছে (কমপক্ষে), সেখানে থামুন এবং চক্রটি গ্রহণের সংখ্যাটি আউটপুট করুন।

উদাহরণস্বরূপ (ধরুন আমি এখানে এলোমেলোভাবে অংশগুলি বেছে নিচ্ছি):

2 2 3  <- starting part conditions (input)
2 1 3  <- second part reduced
2 1 2  ...
2 1 1 
2 2 1  <- second part reduced to zero, replaced
1 2 1 
1 2 3  <- third part replaced
1 1 3 
2 1 3  <- first part replaced

এই অংশটির ফলাফল আউটপুট হবে 8, যেহেতু সমস্ত অংশ প্রতিস্থাপনের জন্য এটি আটটি চক্র নিয়েছিল। প্রতিটি রানের জন্য নির্ভুল আউটপুট পৃথক হওয়া উচিত।

ইনপুট / আউটপুট

একমাত্র ইনপুটটি অংশ শর্তের জন্য পূর্ণসংখ্যার তালিকা / অ্যারে। একমাত্র আউটপুট হ'ল কয়েকটি চক্র। আপনি যে কোনও মান যে কোনও সাধারণ উপায়ে নিতে পারেন / দিতে পারেন: এসটিডিও, ফাংশন আর্গুমেন্ট / রিটার্ন ইত্যাদি

পরীক্ষার কেস

যেহেতু আউটপুট স্থির নয়, আপনি যা পরীক্ষা করতে চান তা ব্যবহার করতে পারেন তবে মানকতার উদ্দেশ্যে এখানে একটি দম্পতি রয়েছে:

1 2 3 4

617 734 248 546 780 809 917 168 130 418

19384 74801 37917 81706 67361 50163 22708 78574 39406 4051 78099 7260 2241 45333 92463 45166 68932 54318 17365 36432 71329 4258 22026 23615 44939 74894 19257 49875 39764 62550 23750 4731 54121 8386 45639 54604 77456 58661 34476 49875 35689 5311 19954 80976 9299 59229 95748 42368 13721 49790

1
আমি কি কিছু মিস করছি, বা কোনও অংশ 0 পর্যন্ত পৌঁছে গেলে এটি নতুন অংশে প্রতিস্থাপিত হয় তা বিবেচনা করে না?
xnor

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

উত্তর:


4

পাইথ, 12 বাইট

f!eSXOUQQtZ1

প্রদর্শন.

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

এটি পাইথের অসীম ফিল্টারকে কেন্দ্র করে তৈরি করা হয়েছে যা ক্রমবর্ধমান ইনপুটগুলির সাথে একটি এক্সপ্রেশনকে পরীক্ষা করে যতক্ষণ না এটি সত্যবাদী কিছু না ফেরায়, তারপরে ইনপুট দেয় যা এটি ঘটায় caused তবে যে অভিব্যক্তিটি পরীক্ষা করা হবে তা ইনপুট মান ব্যবহার করবে না।

পরিবর্তে, এক্সপ্রেশনটি এলোমেলো এন্ট্রি হ্রাস করে ইনপুট তালিকাটি পরিবর্তন করবে। এটি এক্সপ্রেশন মাধ্যমে সম্পন্ন হয় XOUQQtZ। এই উপায়ে সূচক বৃদ্ধি OUQতালিকায় Qদ্বারা tZOUQদৈর্ঘ্যের এলোমেলো সূচক Qএবং tZএটি -1 হয়। Qইনপুট তালিকায় আরম্ভ করা হয়।

Qএই ফ্যাশনে পরিবর্তন করার পরে , আমরা এর বর্তমান মানটি গ্রহণ করি, যা Xপ্রত্যাবর্তন করে, এর সাথে সর্বোচ্চ সন্নিবেশ eSগ্রহণ করে এবং সেই মানটির সাথে যৌক্তিক নয় !। এটি প্রথমবারের জন্য সত্যবাদী মান প্রদান করে যখন প্রতিটি উপাদান প্রথমবারের জন্য Qকমিয়ে আনা হয়েছিল 0

ফিরে আসা সংখ্যাটি ঠিক কতবার Qসংশোধিত হয়েছিল তার সংখ্যা হবে কিনা তা নিশ্চিত করার জন্য , আমরা গণনাটি শুরু করব 1, এটি প্রথম বার বলা হয়, সেখানে 1 পরিবর্তন হয়েছে। Qকোডটির প্রতিটি পুনরাবৃত্তির পরে দেখতে কেমন তা দেখতে , সংস্করণটি এখানে দেখুন


5

গল্ফস্ক্রিপ্ট ( 26 24 বাইট) / সিজোম ( 20 18 বাইট)

GolfScript:

~{$)*}{.,rand{(+}*((+}/,

অনলাইন ডেমো

সিজেএম (একই ধারণা তবে কিছুটা আলাদা বাস্তবায়ন):

q~{_mr((+_$)*}g;],

অনলাইন ডেমো

ইনপুট ফর্মের স্টিডিনে রয়েছে [2 2 3]

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

তবে, যদিও সিজেএমের জন্য কেবলমাত্র দুটি অক্ষরের জন্য একটি অ্যারে অভিন্নভাবে স্থানান্তরিত করার ক্ষমতাটি উন্মোচিত হয়নি এবং এটি শীর্ষে আসতে দেয় to


3

পাইথন 3, 91 71 বাইট

20 (!) বাইটস সংরক্ষণ করেছেন @ xnor এর জন্য ধন্যবাদ।

from random import*
def f(p):shuffle(p);p[0]-=1;return max(p)<1or-~f(p)

সমস্ত পিস-মানগুলি 0 বা negativeণাত্মক না হওয়া পর্যন্ত পুনরায় ক্রিয়াকলাপটি নিজেকে ছোট ছোট টুকরো-মানগুলির সাথে কল করে এবং প্রতিটি ফাংশন তার সন্তানের +1 এবং সর্বশেষে ডাকা একটিকে 1 প্রদান করে returns


এর সাথে আপনি ইতিবাচক সংখ্যার উপস্থিতি যাচাই করতে পারেন max(p)>0
xnor

এবং শর্ত অস্বীকার যেমন max(p)<1or-~f(p)আপনি এড়াতে দেয় or 1, যেহেতু True==1
xnor

আপনি এর pসাথে একটি এলোমেলো উপাদান কার্যকরভাবে হ্রাস করতে পারেন shuffle(p);p[0]-=1
xnor

@ এক্সনর বাহ, ধন্যবাদ! এই সব মহান!
এলোমেলো

1

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

import random
p,t=input().split(),0;f,r=[int(i)for i in p],[0]*len(p)
while 0 in r:
 f[random.randint(0,len(f)-1)]-=1;t+=1
 for x in range(len(f)):
  r[x]=int(f[x]<1)
print(t)

বিশেষত ভাল গল্ফ না

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


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