সপ্তাহের চতুর্থ শ্রেণির গণিতের হোমওয়ার্ক: একজন অতি অযোগ্য ভ্রমণকারী বিক্রয়কর্মী


10

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

সুতরাং, এফ ই থেকে পাঁচটি ইউনিট এবং জি থেকে দুটি ইউনিট বেঁচে থাকে forth

আপনার অ্যাসাইনমেন্ট: এমন একটি প্রোগ্রাম তৈরি করুন যা এমন পাথ সনাক্ত করে যা প্রতিটি বন্ধুকে মোট একবারে এন ইউনিটগুলির দৈর্ঘ্যের সাথে দেখা করে , বন্ধুদের অবস্থান এবং এনকে ইনপুট হিসাবে গ্রহণ করে। এটি যদি এটির সন্ধান পায় তবে এটির প্রতিবেদন করা উচিত (উদাহরণস্বরূপ, 17 দৈর্ঘ্যের জন্য এটি "E, F, G, H, J, K" এর প্রতিবেদন করতে পারে এবং কোনও সমাধান না থাকলে এটি কৌতূহলীভাবে প্রস্থান করা উচিত what এটির মূল্য কী, আমি সম্পূর্ণ করেছি 271 বাইটে ম্যাথামেটিকায় একটি অবারিত সমাধান Iআমি সন্দেহ করি এর থেকে অনেক বেশি সংক্ষিপ্তভাবে এটি সম্ভব।


3
ইনপুট গ্রহণকারী প্রোগ্রাম হিসাবে এটি আরও ভাল হতে পারে (প্রাক্তন [0, 5, 7, 13, 16, 17]এবং 62) যাতে আপনি নিশ্চিত করতে পারেন যে এটি বিশেষত এই ক্ষেত্রে কঠোর কোডড নয়।
ডুরকনব

@ ডুরকনব, ভাল পয়েন্ট আমি সেই অনুসারে অ্যাসাইনমেন্টটি সামঞ্জস্য করেছি।
মাইকেল স্টার্ন

1
পথটি কি কোনও বন্ধুর থেকে শুরু হয়?
xnor

1
আমি কি ইনপুট এবং আউটপুট স্ট্রিংগুলির বিন্যাসটি সংজ্ঞায়িত করতে পারি? একটি ইনপুট মত "[0, 5, 7, 13, 16, 17], 62"এবং একটি আউটপুট "(7, 16, 0, 17, 5, 13)"ঠিক আছে?
লজিক নাইট

1
@ জিওবিটস আমার পক্ষ থেকে কেবল opালুতা। সংশোধন।
মাইকেল স্টার্ন

উত্তর:


1

জে, 54 বাইট

একটি সঠিক পথ আউটপুট দেয়। যদি কোনও রুট না থাকে তবে এটি কিছুই দেয় না।

   f=.4 :'{.(x=+/|:2|@-/\"#.s A.y)#(s=.i.!6)A.''EFGHJK'''

   62 f 0 5 7 13 16 17
GJEKFH

52-বাইট কোড যা সমস্ত রুটকে ছাড়িয়ে যায় (প্রতি লাইনে একটি):

f=.4 :'(x=+/|:2|@-/\"#.s A.y)#(s=.i.!6)A.''EFGHJK'''

38-বাইট কোড যা অক্ষরের পরিবর্তে অবস্থানগুলি ছাড়িয়ে যায়:

f=.4 :'p#~x=+/|:2|@-/\"#.p=.(i.!6)A.y'

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

6

গণিত, 55 বা 90 বাইট tes

গণিত তুমি কি বলেছ? ;)

FirstCase[Permutations@#,p_/;Tr@Abs@Differences@p==#2]&

এটি একটি বেনাম ফাংশন যা প্রথমে বন্ধুদের অবস্থানগুলি (যে কোনও ক্রমে) নেয় এবং তারপরে লক্ষ্য দৈর্ঘ্য। এটি ফিরে আসে Missing[NotFound], যদি এমন কোনও পথ না থাকে।

FirstCase[Permutations@#,p_/;Tr@Abs@Differences@p==#2]&[{0, 5, 7, 13, 16, 17}, 62]
(* {7, 16, 0, 17, 5, 13} *)

সমস্ত বৈধ পাথ ফেরানোর অনুমতি দেওয়া থাকলে ( FirstCase-> Cases) আমি চারটি বাইট সংরক্ষণ করতে পারি ।

স্ট্রিংগুলির একটি অ্যারের ফিরিয়ে দেওয়া আরও কিছুটা জটিল:

FromCharacterCode[68+#]&/@Ordering@FirstCase[Permutations@#,p_/;Tr@Abs@Differences@p==#2]&

আপনি কী এমনভাবে সামঞ্জস্য করতে পারেন যাতে এটি কেবলমাত্র অবস্থানগুলির চেয়ে অক্ষরের সাথে সাড়া দেয়?
মাইকেল স্টার্ন

@ মিশেলস্টারন এই প্রশ্নটি থেকে আসলেই পরিষ্কার নয় যে কতটা হার্ডকোড করা উচিত এবং কতগুলি পরামিতিগুলির অংশ হওয়া উচিত? ইনপুটটি কি চিঠি থেকে পজিশনে ম্যাপিংয়ের মতো কিছু হওয়া উচিত?
মার্টিন এন্ডার

ধরে নিন অক্ষরগুলি সর্বদা উপরের নম্বর লাইনে প্রদত্ত ক্রমে থাকে (E, F, G, H, J, K) আপনি যেমন আপনার সমাধানটি করেন তেমন দূরত্বগুলি ফাংশনে যেতে হবে।
মাইকেল স্টারন

@ মিশেলস্টারন আমি এমন একটি সংস্করণ যুক্ত করেছি যা স্ট্রিংগুলির একটি অ্যারে প্রদান করে। এটি তালিকার যে কোনও সংখ্যক অবস্থানকে সমর্থন করে, তবে Zপরবর্তী এএসসিআইআই অক্ষরগুলির সাথে অবিরত থাকবে (এমন নয় যে আপনি আমার কোডটি এন> 20 এর জন্য চালাতে চান: D)।
মার্টিন ইন্ডার

5

পাইথন 2, 154 148 বাইট

(বা সাধারণ সমাধানের জন্য 118 বাইট)

এই প্রোগ্রামটি স্টিডিনে একটি তালিকা এবং '[0, 5, 7, 13, 16, 17], n' এর মতো একটি পূর্ণসংখ্যার সাথে লাইন গ্রহণ করে এবং দৈর্ঘ্য n বা অসম্ভব হলে কিছুই আউটপুট নিয়ে একটি পথ মুদ্রণ করে।

# echo "[0, 5, 7, 13, 16, 17], 62" | python soln.py 
['G', 'J', 'E', 'K', 'F', 'H']

পাইথনে এমন ছোট ছোট প্রোগ্রাম লিখতে চ্যালেঞ্জ হয় যেগুলির জন্য অনুমতি ছাড়াই প্রয়োজন। যে আমদানি এবং ব্যবহার খুব ব্যয়বহুল।

from itertools import*
a,c=input()
for b in permutations(a):
 if sum(abs(p-q)for p,q in zip(b[1:],b))==c:print['EFGHJK'[a.index(n)]for n in b];break

মিনিফায়ারের আগে ওপি প্রয়োজনীয়তার উত্স:

from itertools import*

puzzle, goal = input()
for option in permutations(puzzle):
    if sum(abs(p-q) for p,q in zip(option[1:], option)) == goal :
        print ['EFGHJK'[puzzle.index(n)] for n in option];
        break

সাধারণ সমাধান (মাইনযুক্ত নয়):

from itertools import*

puzzle, goal = input()
for option in permutations(puzzle):
    if sum(abs(p-q) for p,q in zip(option[1:], option)) == goal :
        print option;
        break

সাধারণ অ্যালগরিদম এবং সংখ্যার বিশাল সংখ্যার কারণে, 20 টিরও বেশি প্রাথমিক পদের জন্য কার্যকর হওয়া খুব ধীর হবে।


আপনি এর সাথে কয়েকটা বাইট সংরক্ষণ করতে পারেন from itertools import*। এছাড়াও, পাইথন 3 সংক্ষিপ্ত হতে পারে input()এবং *a,c=map(...)এটি যদি আপনার বাকি প্রোগ্রামের সাথে কাজ করতে পারে।
grc

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

আপনি কী এমনভাবে সামঞ্জস্য করতে পারেন যাতে এটি কেবলমাত্র অবস্থানগুলির চেয়ে অক্ষরের সাথে সাড়া দেয়?
মাইকেল স্টারন


ভাল অপ্টিমাইজেশন। তবে আমি মনে করি @ মিশেলস্টারন সত্যিই 'EFGHJK' দেখতে চায় এবং এটি যথেষ্ট সহজ ছিল তাই আমি কোডটি সেভাবে লিখেছিলাম।
লজিক নাইট

4

জে (48 বা 65)

আমি অনুমান করি যে এটি আরও অনেক কিছুতে নরক হতে পারে। এটিকে আরও গল্ফ দেওয়ার জন্য জাম্পিং পয়েন্ট হিসাবে নির্দ্বিধায় ব্যবহার করুন

]A.~[:I.(=([:([:+/}:([:|-)}.)"1(A.~([:i.[:!#))))

বা চিঠি সহ:

([:I.(=([:([:+/}:([:|-)}.)"1(A.~([:i.[:!#)))))A.[:(a.{~65+[:i.#)]

এর মানে কি:

   62 (]A.~[:I.(=([:([:+/}:([:|-)}.)"1(A.~([:i.[:!#))))) 0 5 7 13 16 17
 7 16  0 17  5 13
 7 16  5 17  0 13
 7 17  0 16  5 13
 7 17  5 16  0 13
13  0 16  5 17  7
13  0 17  5 16  7
13  5 16  0 17  7
13  5 17  0 16  7

(আমি আশা করি এই I / O ফর্ম্যাটটি ঠিক আছে ...)

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

(A.~([:i.[:!#))

ইনপুটটির সমস্ত ক্রিয়াকলাপ উত্পন্ন করে

([:+/}:([:|-)}.)"1

দূরত্ব গণনা করে

(]A.~[: I. (= ([:distance perms)))

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

চিঠি সহ:

((a.{~65+[:i.#))

প্রথম এন অক্ষরের একটি তালিকা তৈরি করুন, যেখানে এন ইনপুট তালিকার দৈর্ঘ্য

indices A. [: letters ]

উপরের মত একই কাজ করে


চিঠির নিরিখে উত্তরটি জানাতে কি আপনি এটি সামঞ্জস্য করতে পারেন?
মাইকেল স্টার্ন

@ মিশেলস্টারন আমি পারতাম, তবে এটি চরিত্রের গণনায় কিছুটা যোগ করতে পারে (স্ট্রিং সহ জে ভয়ানক)। ক্ষতিটি কী হতে পারে তা দেখার জন্য আমি এখনই এটি চেষ্টা করব।
18uʎs

3

অক্টাভা, 73

function r=t(l,d,s)r=perms(l)(find(sum(abs(diff(perms(d)')))==s,1),:);end

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

octave:15> t(["E" "F" "G" "H" "J" "K"],[0 5 7 13 16 17],62)
ans = HEJFKG

যা ১৩-০-16-১-5-১-17-১- => 13 + 16 + 11 + 12 + 10 = 62।

octave:16> t(["E" "F" "G" "H" "J" "K"],[0 5 7 13 16 17],2)
ans = 

(অসম্ভব ইনপুটগুলির জন্য ফাঁকা)


আমি জানি না চুক্তিটি কী, তবে perms()আইটোন.কম-এর অক্টোবরে 3.6.2 এ স্ট্রিংয়ের ভেক্টরটির সাথে সমস্যা রয়েছে।
অ্যালেক্স এ

মজাদার. আমার স্থানীয়ভাবে 3.8.1 আছে .1
dcsohl

2

মতলব (86)

x=input('');X=perms(1:6);disp(char(X(find(sum(abs(diff(x(X).')))==input(''),1),:)+64))

একটি সমাধান বিদ্যমান যা উদাহরণ:

>> x=input('');X=perms(1:6);disp(char(X(find(sum(abs(diff(x(X).')))==input(''),1),:)+64))
[0, 5, 7, 13, 16, 17]
62
DBFAEC
>>

উদাহরণ যেখানে সমাধানের অস্তিত্ব নেই:

>> x=input('');X=perms(1:6);disp(char(X(find(sum(abs(diff(x(X).')))==input(''),1),:)+64))
[0, 5, 7, 13, 16, 17]
100
>> 

মতলব (62)

যদি আউটপুট ফর্ম্যাটটি অক্ষরের পরিবর্তে পজিশন তৈরি করে এবং কোনও সমাধান না থাকলে একটি খালি ম্যাট্রিক্স তৈরি করে শিথিল করা যায়:

X=perms(input(''));X(find(sum(abs(diff(X.')))==input(''),1),:)

একটি সমাধান বিদ্যমান যা উদাহরণ:

>> X=perms(input(''));X(find(sum(abs(diff(X.')))==input(''),1),:)
[0, 5, 7, 13, 16, 17]
62
ans =
    13     5    17     0    16     7

উদাহরণ যেখানে সমাধানের অস্তিত্ব নেই:

>> X=perms(input(''));X(find(sum(abs(diff(X.')))==input(''),1),:)
[0, 5, 7, 13, 16, 17]
62
ans =
   Empty matrix: 0-by-6

মতলব (৫৪)

যদি প্রোগ্রামটির পক্ষে সমস্ত বৈধ পাথ সরবরাহ করা গ্রহণযোগ্য হয় :

X=perms(input(''));X(sum(abs(diff(X.')))==input(''),:)

একটি সমাধান বিদ্যমান যা উদাহরণ:

>> X=perms(input(''));X(sum(abs(diff(X.')))==input(''),:)
[0, 5, 7, 13, 16, 17]
62
ans =
    13     5    17     0    16     7
    13     5    16     0    17     7
    13     0    17     5    16     7
    13     0    16     5    17     7
     7    16     5    17     0    13
     7    16     0    17     5    13
     7    17     5    16     0    13
     7    17     0    16     5    13

1

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

import Data.List
a%b=abs$snd a-snd b
n#l=[map(fst)p|p<-permutations(zip['E'..]l),n==sum(zipWith(%)p(tail p))]

ব্যবহারের উদাহরণ: 17 # [0, 5, 7, 13, 16, 17]যা সমস্ত বৈধ পাথ আউটপুট করে, যেমন ["EFGHIJ","JIHGFE"]। যদি কোনও বৈধ পথ না থাকে তবে খালি তালিকাটি []ফিরে আসে।

চিঠির তালিকায় অন্তর্ভুক্ত রয়েছে I(আশা করি এটি ভাল)।

এটি কীভাবে কাজ করে: (name, position)জোড়াগুলির একটি তালিকা তৈরি করুন , পাঠান এবং যেখানে পথের দৈর্ঘ্যের সমান হয় তাদের নিয়ে যান nএবং অবস্থানের অংশটি সরান।

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