স্যুইচিং সিকোয়েন্স


11

ইন্ট্রো

স্যুইচিং ক্রমটি এর মতো সংজ্ঞায়িত হয়:

nচেনাশোনাতে দাঁড়ানো লোকদের সাথে শুরু করুন ( 6উদাহরণস্বরূপ)।

 1  2
6    3
 5  4

ব্যক্তি থেকে শুরু 1করে, "নির্বাচিত" ব্যক্তির বাম দিকে থাকা ব্যক্তিটি সরানো হয়।

 1
6    3
 5  4

সরানো ব্যক্তি অপসারণের পদ্ধতিটি "স্যুইচ" করতে পারে:

  • যদি সরানো ব্যক্তি সমান হয় (যা এটি এই ক্ষেত্রে হয়), পরবর্তী সরানো ব্যক্তি পরবর্তী "নির্বাচিত" ব্যক্তির ডানদিকে থাকবে to
  • যদি সরানো ব্যক্তি বিজোড় হয়, পরবর্তী সরানো ব্যক্তিটি পরবর্তী "নির্বাচিত" ব্যক্তির বাম দিকে থাকবে।

পরবর্তী নির্বাচিত ব্যক্তিও পূর্ববর্তী অপসারণ ব্যক্তির উপর নির্ভরশীল।

  • সরানো ব্যক্তি যদি সমান হয় তবে পরবর্তী নির্বাচিত ব্যক্তি পূর্বের নির্বাচিত ব্যক্তির ডানদিকে থাকবে।
  • যদি সরানো ব্যক্তি বিজোড় হয় তবে উপরে দেখুন, তবে "বাম" দিয়ে "ডান" প্রতিস্থাপন করুন।

সুতরাং পরবর্তী নির্বাচিত ব্যক্তি হয় 6

এখন আমরা সেই ব্যক্তিকে ডানদিকে সরাই 6, যা হ'ল 5:

 1
6    3
    4

5বিজোড় কারণ , সরানো ব্যক্তি এখন বাম দিকে। নতুন নির্বাচিত ব্যক্তি হলেন 1

আমরা এখন অপসারণ 3:

 1
6
    4

আমরা এই প্রক্রিয়াটি অব্যাহত রাখি, যতক্ষণ না আমরা 1 নম্বর রেখে চলেছি - উদাহরণস্বরূপ, চূড়ান্ত সংখ্যাটি 1। সুতরাং তাই S(6) = 1

প্রথম কয়েকটি সংখ্যা হ'ল:

 n | S(n)
---------
 1 | 1
 2 | 1
 3 | 3
 4 | 1
 5 | 5
 6 | 1
 7 | 3
 8 | 6
 9 | 5
10 | 6
11 | 9

কার্য

আপনার টাস্কটি এমন কোনও প্রোগ্রাম তৈরি করা (বা কোনও ফাংশন) যা দেওয়া হয় S(n)( nস্যুইচিং ক্রমের তৃতীয় সংখ্যা) প্রদত্ত হলে n, সর্বনিম্ন পরিমাণ বাইট ব্যবহার করে।

ইনপুট এবং আউটপুট উদাহরণ:

1  -> 1
10 -> 6
13 -> 13

আপনার ইতিবাচক পূর্ণসংখ্যার নিশ্চয়তা রয়েছে।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোড!

দ্রষ্টব্য: আপনাকে অনুসন্ধানের ঝামেলা বাঁচানোর জন্য কোনও ওইআইএস ক্রম নেই (কী?)।


7
লোকগুলিকে অনুসন্ধান বাঁচাতে ওয়েসের উপর কোনও হিট নেই।
এক্সনর

স্পষ্টতই 2কখনও থেকে যায় না, তবে কি 7?
জোনাথন অ্যালান

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

আপনার নির্দেশাবলী অনুসরণ করে কেউ যদি কোনও পদ্ধতি নিয়ে আসে তবে এটি স্পষ্ট হবে ...
জোনাথন অ্যালান

3
OEIS ছাড়া লোকেরা কীভাবে সমাধান করবে আপনি কীভাবে এটি আশা করেন? কেউ ওয়েসকে ধাক্কা দিচ্ছেন, দয়া করে?
এরিক দি আউটগল্ফার

উত্তর:


4

পাইথন 2, 183 94 বাইট

-4 বাইট আর্টিয়ারকে ধন্যবাদ (ব্যবহার করুন input()এবং এর printচেয়ে defএবং এর চেয়ে বেশি return)
-1 বাইট ধন্যবাদ ফ্লিপট্যাক ( print-~p[0]পরিবর্তে ব্যবহার করুন print p[0]+1)

p=range(input())
d=i=1
while p[1:]:m=p.pop(i)%2;i-=m+m-(d<0);d=-m|1;i+=d;i%=len(p)
print-~p[0]

repl.it

এটি কেবল প্রদত্ত নির্দেশাবলী অনুসরণ করে, আমি কিছু প্যাটার্ন লক্ষ্য করেছি, সম্ভবত এটি ব্যবহার করা যেতে পারে?

একমাত্র পরিবর্তনগুলি হ'ল:

  • 0বেসড ইনডেক্সিং ব্যবহার করতে (সুতরাং এমনকি লোকেরা বিচিত্র এবং তদ্বিপরীত) - এটি গল্ফড যুক্তিতে 5 বাইট সঞ্চয় করে এবং শেষে এটি সংশোধন করা হয়+1
  • ব্যবহারের 1হিসাবে বাম এবং -1ডান হিসাবে (একটি সীমার ব্যবহার করতে - শুধু মত সবাই বাহিরের দিকে পরিবর্তে মুখোমুখি হয়)
  • pop"নির্বাচক" সূচকটি ইতিমধ্যে তালিকার ডান দিকে (অথবা মূল পরিভাষায় বাম দিকে) তৈরি করার তালিকা থেকে আইনের জন্য পরবর্তী নির্বাচিত ব্যক্তিটিকে অ্যাকাউন্টের জন্য পদক্ষেপের যুক্তিটি পরিবর্তনের জন্য ।

Ungolfed:

def circle(n):
    people = range(n) # p
    direction = 1 # d
    removeIndex = 1 # i
    while n > 1:
        removingMod2 = people.pop(removeIndex) % 2 # m
        removeIndex -= removingMod2 + removingMod2 - (direction == -1)
        direction = -removingMod2 or 1
        removeIndex += direction
        n -= 1
        removeIndex %= n
    return people[0] + 1

শেষ লাইন হতে পারে print-~p[0]?
ফ্লিপট্যাক

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