শটগান নম্বর


45

শটগান সংখ্যার একটি বরং সহজ সংজ্ঞা কিন্তু কিছু মজার গঠন একটা ক্রম। প্রাকৃতিক সংখ্যা দিয়ে শুরু করুন:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

সূচকগুলিতে 2 দ্বারা বিভাজ্য সমস্ত সংখ্যায় নিন , তাদের জোড়ায় ভাগ করুন এবং প্রতিটি জোড়ায় নম্বরগুলি অদলবদল করুন:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
   ^     ^     ^     ^      ^       ^       ^  
    <--->       <--->        <----->         <----
1, 4, 3, 2, 5, 8, 7, 6, 9, 12, 11, 10, 13, 16, ...

সূচকগুলি 3 দ্বারা বিভাজ্য হিসাবে এখন একই করুন :

1, 4, 3, 2, 5, 8, 7, 6, 9, 12, 11, 10, 13, 16, ...
      ^        ^        ^           ^          
       <------>          <--------->           
1, 4, 8, 2, 5, 3, 7, 6, 10, 12, 11, 9, 13, 16, ...

এবং তারপরে 4 , 5 , 6 , এবং এর জন্য:

1, 4, 8, 2, 5, 3, 7, 6, 10, 12, 11, 9, 13, 16, ...
1, 4, 8, 6, 5, 3, 7, 2, 10, 12, 11, 14, 13, 16, ...
1, 4, 8, 6, 12, 3, 7, 2, 10, 5, 11, 14, 13, 16, ...
1, 4, 8, 6, 12, 14, 7, 2, 10, 5, 11, 3, 13, 16, ...
...

পরে এমন পদক্ষেপ, প্রথম ট + 1 টি সংখ্যার সংশোধন করা হবে। সুতরাং আমরা শটগান সংখ্যার অসীম অনুক্রমকে সংক্ষিপ্তভাবে নির্ধারণ করতে পারি কে অনন্তকে যেতে দেওয়া সীমা হিসাবে । প্রথম 66 নম্বরটি হ'ল:

1, 4, 8, 6, 12, 14, 16, 9, 18, 20, 24, 26, 28, 22, 39, 15, 36, 35, 40, 38, 57, 34, 48, 49, 51, 44,
46, 33, 60, 77, 64, 32, 75, 56, 81, 68, 76, 58, 100, 55, 84, 111, 88, 62, 125, 70, 96, 91, 98, 95,
134, 72, 108, 82, 141, 80, 140, 92, 120, 156, 124, 94, 121, 52, 152, 145, ...

মজাদার ঘটনা: কেবলমাত্র প্রাকৃতিক সংখ্যাগুলিকে অনুমতি দিয়ে প্রাপ্ত হওয়া সত্ত্বেও, এই ক্রমটিতে কোনও প্রাইম থাকে না।

চ্যালেঞ্জ

একটি পূর্ণসংখ্যা দেওয়া হয়েছে n > 0, nশটগান নম্বরটি সন্ধান করুন। আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে একটি প্রোগ্রাম বা ফাংশন লিখতে পারেন এবং আউটপুটটি ফিরিয়ে দিতে পারেন বা এটি স্টাডিউটে মুদ্রণ করতে পারেন (বা নিকটতম বিকল্প)।

এটি কোড গল্ফ, তাই সংক্ষিপ্ততম জমা (বাইটে) জিতেছে।

লিডারবোর্ড

আমি যা ভাবি তার চেয়ে বেশি উত্তর পাচ্ছে, একই সাথে বেশ কয়েকটি লোক একই ভাষায় প্রতিযোগিতা করছে। তাই এখানে নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করার জন্য একটি স্ট্যাক স্নিপেট is

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes


1
সেই মজাদার ঘটনাটি পাগল, এই অ্যালগরিদমটি সমস্ত প্রাইমকে শেষ পর্যন্ত বদলে দেয়? অথবা এমন অন্যান্য প্রাকৃতিক সংখ্যাও রয়েছে যা ঘটবে না?
ডিভন পার্সসন

1
@ ডিভনপারসনস হ্যাঁ এটি সমস্ত প্রাইমকে "শেষ পর্যন্ত" বদলে দেয়। তবে আমি মনে করি অন্য সংখ্যাগুলিও অনুপস্থিত রয়েছে। এটা দেখে মনে হচ্ছে 10, 21, 25এবং 30, হয় প্রদর্শিত না উদাহরণস্বরূপ।
মার্টিন এন্ডার

3
এটি প্রজেক্ট অলারের প্রশ্নের মতো শোনাচ্ছে। আমি মনে করি না এটি ... তবে সম্ভবত এটি হওয়া উচিত।
কোরি ওগবার্ন

9
সাধারণভাবে, kতম পুনরাবৃত্তিতে, kঅ্যারের মধ্যে তম উপাদানটি 2kতম অবস্থানে স্থানান্তরিত হয় এবং 2kতম পুনরাবৃত্ত হওয়া অবধি পুনরায় স্পর্শ পাবে না , সেই সময়ে এটি 4kতম অবস্থানে স্থানান্তরিত হয় , বিজ্ঞাপন হিসাবে। কোনও প্রাইম তার পালা না আসা অবধি স্থানান্তরিত হয় না, তাই কথা বলার জন্য, যাতে সমস্ত প্রাইম এগিয়ে যায়। তবে পুনরাবৃত্তি 2 এবং প্রতিটি বিজোড় পুনরাবৃত্তিতে স্থানান্তরিত হওয়ার জন্য প্রথম উপাদানটি মুদ্রণ করে আমরা সহজেই নিরীহ শিকারের তালিকা তৈরি করতে পারি। তালিকাটি যায়: 2, 3, 5, 7, 10, 11, 13, 21, 17, 19, 30, 23, 27, 25, 29, 31, 45, 42, 37, 54, 41, 43, 65, ...
থিওফিল

3
@ শার্লক 9 হয়ে গেছে! অনুমোদিত হলে তা https://oeis.org/A266679 হবে । শুভ নব বর্ষ!
থিওফিল

উত্তর:


5

পাইথ, 19 22

u-G*H^_!%GH/GHrhQ2Q

@ পিটারটেলারের গল্ফস্ক্রিপ্ট উত্তরের মোটামুটি নির্লিপ্ত প্রয়োগ ।

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

এটি নীচের অন্যান্য পাইথ প্রোগ্রামের মতো কিছুক্ষণ লুপকে ফোল্ডে রূপান্তর করতে একই কৌশল ব্যবহার করে।


u+G**H!%GHty%/GH2rhQ2Q

@ এসপি 3000 এর অ্যালগরিদমের অনর্থক অনুলিপি পাইথকে অনুবাদ করেছেন।

আপনি এটি এখানে অনলাইনে চেষ্টা করতে পারেন

লুপটি অনুকরণ করতে হ্রাস (ফোল্ডের জন্য পাইথনের নাম) ব্যবহার করে। এটি range(input, 2)পাইথের মধ্যে কী কাজ করে তা গণনা করে range(2, input)[::-1]। অন্যান্য পাইথ-সম্পর্কিত গল্ফগুলির মধ্যে সংখ্যার যুক্তির মান দ্বিগুণ করার notপরিবর্তে ব্যবহার করা <2এবং yলুকানো মোড ব্যবহার করা জড়িত ।


21

> <>, 52 45 বাইট

> <> এর জন্য এসওল্যাংস পৃষ্ঠা

i:&&:&1-?vn;
2*1-*+20.>:&:&%1(&:&*{:}&:1-&,2%

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

STDIN থেকে কোড পয়েন্টের মাধ্যমে ইনপুট নেয় , যেমন "!" = 33 -> 75


10
এবং আপনি এখন পর্যন্ত সবচেয়ে বিশ্রী ইনপুট ফর্ম্যাটটির জন্য পুরষ্কারটি পেয়েছেন: পি
ক্যারিডর্ক

যাইহোক +1, চিন্তা করবেন না :)
ক্যারিডর্ক

@ Sp3000 আইএমও এটি কেবল এক হিসাবে গণনা করা উচিত
সুপারজেডি ২৪

@ সুপারজেডি ২৪৪ আসল, এই মেটা পোস্ট অনুসারে আপাতদৃষ্টিতে -vতিনটি গণনা করা হয়েছে: /
এসপি 3000

17

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

i=n=input()
while~-i:n+=(n%i<1)*i*(n/i%2*2-1);i-=1
print n

অন্যান্য উত্তরগুলির মতো, এই ধারণাটি পিছনের দিকে কাজ করা।


আসুন পদক্ষেপ k+1ধাপটি কল করুন i, যাতে পদক্ষেপে iসমস্ত iগুণকটি অদলবদল হয়। আমাদের দুটি সহজ পর্যবেক্ষণ দরকার:

  • অবস্থান nঅ্যারের মধ্যে শুধুমাত্র পদে পদে আনা হয় iযদি nদিয়ে বিভাজ্য i,
  • আপনি স্ব্যাপে নিম্ন সংখ্যা বা উচ্চতর নম্বর কিনা তা জানানোর জন্য দেখুন n/i mod 2। এটি যদি 1 হয় তবে আপনি নীচের সংখ্যা (এবং স্যুপ আপ হয়ে যাবেন), অন্যথায় আপনি বেশি সংখ্যক (এবং অদলবদল হবে)।

এটি আমাদের পিছনের দিকে কাজ করার জন্য একটি অ্যালগরিদম দেয়। শেষ পদক্ষেপ (পদক্ষেপ i = 6) থেকে শুরু করে 6 দিয়ে এটি ব্যবহার করে দেখুন :

Step 6: Position 6 swaps with position 12 (6 is divisible by 6, 6/6 = 1 == 1 mod 2)

সুতরাং এখন আমরা জানি যে নম্বরটি 12 অবস্থান থেকে এসেছে Then তারপরে:

Step 5: No swap (12 not divisible by 5)
Step 4: Position 12 swaps with position 16 (12 is divisible by 4, 12/4 = 3 == 1 mod 2)

সুতরাং এখন আমরা জানি এটি এর আগে 16 থেকে এসেছিল। অবশেষে:

Step 3: No swap (16 not divisible by 3)
Step 2: Position 16 swaps with position 14 (16 divisible by 2, 16/2 = 8 == 0 mod 2)

যেহেতু এটি প্রথম পদক্ষেপ (মনে রাখবেন k+1), তাই আমরা সম্পন্ন করেছি এবং 6 নম্বর অবস্থানে শেষ হওয়া সংখ্যাটি মূলত অবস্থান 14 থেকে এসেছে, অর্থাৎ shot ষ্ঠ শটগান সংখ্যা 14 is

তাই এখন পাইথন ব্যাখ্যার জন্য:

i=n=input()             Read input, and store into i (step) and n (position)
while~-i:               while i-1 != 0:, or since we're descending with i this is just while i>1:
  n+=                   Add to the current position...
    (n%i<1)*            1* whatever's next if n is divisible by i, otherwise 0* (i.e. nothing)
    i*                  How many positions n might go up/down
    (n/i%2*2-1)         n/i%2 tell us higher/lower, *2-1 maps 0 or 1 to -1 (down) or +1 (up)
  i-=1                  Decrement the step number
print n                 Output

লেখার আকর্ষণীয় উপায় i-1হিসাবে~-i
mbomb007

6
@ এমবম্ব007: একমত চতুর যদিও এটির একই অর্থ রয়েছে তবে পরে কোনও জায়গার প্রয়োজনীয়তা অপসারণ করে while। চমৎকার কাজ, Sp3000।
অ্যালেক্স এ।

সর্বনিম্নতম আমি পাইথারে এটি পেতে পারি হ্রাস ব্যবহার করে:u+G**H!%GHty%/GH2rhQ2Q
FryAmTheEggman

1
@ ফ্রাইআম দ্য এজিগম্যান, এসপি 3000 আপনি কি পোস্ট দিচ্ছেন না?
মার্টিন ইন্ডার

@ মার্টিনবাটনার আমি মূলত এটি পোস্ট করিনি কারণ আমি অনুভব করেছি যে এটি একটি অনুলিপি খুব বেশি। আমি আপাতত এটি সিডব্লিউ উত্তর হিসাবে পোস্ট করব।
FryAmTheEggman

6

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

n#k|mod k(2*n)<1=k-n|mod k n<1=k+n|k>0=k
s n=foldr((.).(#))id[2..n]n

সম্ভবত আরও গল্ফযোগ্য, বিশেষত প্রথম সারিতে। এটি এমন একটি ফাংশন সংজ্ঞায়িত করে sযা তম শটগান নম্বর গ্রহণ করে nএবং প্রদান করে n

map s [1..66]
[1,4,8,6,12,14,16,9,18,20,24,26,28,22,39,15,36,35,40,38,57,34,48,49,51,44,46,33,60,77,64,32,75,56,81,68,76,58,100,55,84,111,88,62,125,70,96,91,98,95,134,72,108,82,141,80,140,92,120,156,124,94,121,52,152,145]

ব্যাখ্যা

সহায়ক ফাংশনটি #দুটি সংখ্যায় নেয় nএবং k, এবং kজোড়ের অদলবদল অপারেশন প্রতিটি nতম সংখ্যায় প্রয়োগ করে সংজ্ঞায়িত তালিকার তম সংখ্যাটি দেয় returns উদাহরণস্বরূপ, n = 4ফলন সহ প্রথম 20 সংখ্যায় এটি প্রয়োগ করুন :

map (4#) [1..20]
[1,2,3,8,5,6,7,4,9,10,11,16,13,14,15,12,17,18,19,24]

ফলে s nহ্রাস ( "ভাঁজ") তালিকা দ্বারা প্রাপ্ত হয় [2..n]দ্বিতীয়-অর্ডার ফাংশন দ্বারা (.).(#), যা একটি সংখ্যা লাগে mএবং একটি ফাংশন f(প্রথমদিকে পরিচয় ফাংশন id), এবং একটি ফাংশন যে সময় লাগে ফেরৎ kএবং আয় f (m # k)। উদাহরণস্বরূপ, ক্ষেত্রে n = 4তালিকাকে [2,3,4]একটি ফাংশনে নেওয়া হয় যা নেয় kএবং ফিরে আসে id (4 # (3 # (2 # k)))idশুধুমাত্র বেস ক্ষেত্রে জন্য প্রয়োজন হয় n = 1, যেখানে তালিকা খালি। অবশেষে, আমরা এই ফাংশনটি ইনপুট দিই k = n, nশ শটগান নম্বর পেয়ে obtain



5

রুবি, 92 বাইট

def s(d,n)
d==1?n:s(d-1,n%d==0?n+(n%(d*2)==0?-d :d):n)
end
n=ARGV[0].to_i
print s(n,n).to_s

আমার প্রথম কোড গল্ফ প্রচেষ্টা। অন্য কোনও উত্তরের ভিত্তিতে নয়।


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


84 বাইট

n=ARGV[0].to_i
d=n
while d>1
n+=(n%d==0?(n%(d*2)==0?-d :d):0)
d-=1
end
print n.to_s

অন্যান্য উত্তরগুলি দেখার পরে এবং উপলব্ধি করার পরে যে একটি পুনরাবৃত্তি সমাধান সম্ভব।


2
1. পরিবর্তন করুন: আপনার 84 বাইট সমাধান জন্য কয়েক উন্নতি ARGVকরতে $*যাদু গ্লোবাল। ২. to_sঅপ্রয়োজনীয়। পরিবর্তে বরাদ্দ 3. dথেকে nএকটি পৃথক লাইনে, শুধু কি d=n=...একটি অক্ষর বন্ধ শেভ। আপনার প্রথম গল্ফের জন্য দুর্দান্ত কাজ! :)
ডুরকনব

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

@ ডুরকনব এর পরামর্শগুলিতে যুক্ত করার জন্য, n+=লাইনের দুটি সেট বন্ধনী অপ্রয়োজনীয় এবং উভয়ের উপস্থিতি ==0নিরাপদে পরিবর্তিত হতে পারে <1
পিটার টেলর

5

পাইথন 2, 97 79 অক্ষর

g=lambda n,k:n>1and g(n-1,k-(k%n<1)*n*(-1)**(k/n%2))or k
n=input()
print g(n,n)

এটি প্রতিটি সূচকের জন্য সংখ্যার পিছনে পিছনে পিছনে অনুসরণ করে সঠিক মান নির্ধারণ করে। অ্যালগরিদম স্বাধীন আবিষ্কার হয়েছিল।

সম্পাদনা: এখন এটি nপ্রথম nসংখ্যাগুলির পরিবর্তে কেবলমাত্র তম সংখ্যাটি প্রিন্ট করে । অবশ্যই একটি পুনরাবৃত্তি পদ্ধতির সংক্ষিপ্ত হবে, তবে আমি স্প 3000 এর কোডটি অনুলিপি করতে চাই না।


হ্যাঁ, আমি মনে করি প্রত্যেকেই এতে রূপান্তর করবে। আমি g(i,i)বিশেষ করে বিরক্তিকর অংশটি পেয়েছি ...
Sp3000

2
ভাষাকে পাইথন 2 হিসাবে চিহ্নিত করা উচিত, printবিবৃতিটির কারণে ।
mbomb007

@ mbomb007 এটি সংশোধন করেছে।
জাকুবে

4

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

1#i=i
s#i|i`mod`(2*s)==0=(s-1)#(i-s)|i`mod`s==0=(s-1)#(i+s)|1<2=(s-1)#i
p n=n#n

ব্যবহার: p 66যা আউটপুট145

বোঝানোর মতো বেশি নয়: ফাংশনটি বার বার ধাপের #অবস্থানে শটগান নম্বর গণনা করে । পদক্ষেপের স্থানে নম্বরটি প্রদান করে ।isp nnn


ওহ, আমার জমা দেওয়ার আগে আমি আপনার উত্তরটি দেখতে পেলাম না। দেখে মনে হচ্ছে আমাদের বেশ আলাদা পদ্ধতি রয়েছে।
জাগারব

4

k, 41 বাইট

{{x+$[y!x;0;$[2!_x%y;y;-y]]}/[x;|2+!x-1]}

 / apply to an int
 {{x+$[y!x;0;$[2!_x%y;y;-y]]}/[x;|2+!x-1]} 42
111
 / apply to 1 through 66
 {{x+$[y!x;0;$[2!_x%y;y;-y]]}/[x;|2+!x-1]}'1+!66
1 4 8 6 12 14 16 9 18 20 24 26 28 22 39 15 36 35 40 38 57 34 48 49 51 44 46 33 60 77 64 32 75 56 81 68 76 58 100 55 84 111 88 62 125 70 96 91 98 95 134 72 108 82 141 80 140 92 120 156 124 94 121 52 152 145
  • {...} ল্যাম্বদা, এক্স এবং ওয়াই অন্তর্ভুক্ত 1 ম এবং 2 য় আর্গুমেন্ট
  • $[b;t;f] টেরিনারি অপারেটর, খ অনুসরণ করে যথাক্রমে টি / এফ
  • b!a একটি মডুলো খ
  • _ মেঝে, বিভাগের ফলাফলকে একটি আন্তঃতে কাস্ট করে
  • % বিভাগ
  • {...}/[x;y] x এর সাথে প্রাইম {...} এবং y এর তালিকার উপর প্রয়োগ করুন, f [f [.. f [f [x; y0]; y1]; .. yn-1]; yn] এর সমান
  • | বিপরীত
  • ! আইওটা ফাংশন, এন -1 এর মাধ্যমে 0 জেনারেট করুন

4

কমন লিস্প, 113 91

(পুনরাবৃত্তি: 91)

(defun s(n)(do((r n(1- r)))((= r 1)n)(if(= 0(mod n r))(incf n(* r(if(oddp(/ n r))1 -1))))))

(মূল, পুনরাবৃত্ত: 113)

(defun s(n &optional(r n))(cond((= r 1)n)((= 0(mod n r))(s(+ n(* r(if(oddp(/ n r))1 -1)))(1- r)))(t(s n(1- r)))))

উদাহরণ

পুনরাবৃত্ত সংস্করণ সহ:

(trace s)
(s 10)

  0: (S 10)
    1: (S 20 9)
      2: (S 20 8)
        3: (S 20 7)
          4: (S 20 6)
            5: (S 20 5)
              6: (S 15 4)
                7: (S 15 3)
                  8: (S 18 2)
                    9: (S 20 1)
                    9: S returned 20
         ...
    1: S returned 20
  0: S returned 20

টেস্ট

পুনরাবৃত্ত সংস্করণের জন্য চেক এবং ব্যবস্থা:

(let ((list '(1 4 8 6 12 14 16 9 18 20 24 26 28 22 39 15 36 35 40 38 57 34 48 49 51 44
              46 33 60 77 64 32 75 56 81 68 76 58 100 55 84 111 88 62 125 70 96 91 98 95
              134 72 108 82 141 80 140 92 120 156 124 94 121 52 152 145)))
  (time
   (loop for r in list
         for n from 1
         always (= r (s n)))))

 => T

Evaluation took:
  0.000 seconds of real time
  0.000000 seconds of total run time (0.000000 user, 0.000000 system)
  100.00% CPU
  807,160 processor cycles
  32,768 bytes consed

4

গণিত, 53 49 বাইট

(For[i=n=#,n>1,--n,If[n∣i,i+=Mod[i,2n]2-n]];i)&

আমি আমার রেফারেন্স বাস্তবায়ন গল্ফ করার সিদ্ধান্ত নিয়েছে। "ভাগ", এবং 3 বাইট জন্য গন্য জন্য ইউনিকোড প্রতীক। অন্যথায়, এটি অন্য সবার মতো একই অ্যালগরিদম ব্যবহার করে।

এটি একটি নামবিহীন ফাংশন সংজ্ঞায়িত করে যা nএকক প্যারামিটার হিসাবে গ্রহণ করে এবং nশটগান নম্বর প্রদান করে।


4

গল্ফস্ক্রিপ্ট, ২rs টি চর

~.,(~%{):i\.@%!~)1$i/?i*-}/

ব্যাখ্যা

যদি রূপান্তরের পরে f(i, n)অবস্থানের মান হয় তবে আমাদের আছেni-1

f(1, n) = n
f(i, n) = f(i - 1, n % i == 0 ? (((n / i - 1) ^ 1) + 1) * i : n)  for i > 1

যেখানে ^বিটওয়াইজ জোর বোঝায়; প্রদত্ত ইনপুট n, আমরা গণনা করতে চাই f(n, n)

একটি পুনরাবৃত্ত ফাংশন থেকে একটি লুপে রূপান্তর উদ্বেগজনক; কি আকর্ষণীয় হয় উপায় যা

n % i == 0 ? (((n / i - 1) ^ 1) + 1) * i : n

আবার লেখা যেতে পারে। আরও সুস্পষ্ট পন্থাটি হ'ল এটি অবশ্যই হওয়া উচিত

n + (n % i == 0 ? i : 0) * g(n / i)

কিছু জন্য g। একথাও ঠিক যে gমধ্যবর্তী বিকল্পসমূহ 1এবং -1, যেমন অবস্থানের পর্যায়ক্রমে আপ করুন এবং নিচে অদলবদল; যেহেতু g(1) = 1(কারণ 1অদলবদল হয় 2), আমাদের আছে

n + (n % i == 0 ? i : 0) * -1**(1 + n / i)

যেখানে **ক্ষয়ক্ষতি বোঝায়। চূড়ান্ত সঞ্চয় হিসাবে এটি পুনরায় লেখা থেকে আসে

n - i * (n % i == 0 ? -1 : 0)**(n / i)

ব্যবচ্ছেদ

~             # Evaluate input to get n
.,(~%{        # For n-1 downto 1...
  ):i         #   Let i be that value + 1, so for i = n downto 2...
  \.@%!       #   Find n % i == 0 ? 1 : 0
  ~)          #   Negate
  1$i/?       #   Raise to the power of n/i
  i*-         #   Multiply by i and subtract
}/

আপনার সংক্ষিপ্ত জিএস এবং সিজেএম উত্তর রয়েছে বলে দেখছেন, তবে কেন পাইথেরও সংক্ষিপ্ত উত্তর নেই? u-G*H^_!%GH/GHrhQ2Qআপনি যদি নিজে এটি পোস্ট করতে চান না, আমাকে বলুন / সিডাব্লু উত্তরে এটি যুক্ত করুন।
FryAmTheEggman

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

4

সিজেম, 24 বাইট

l~__(,f-{_Imd!~)\#I*-}fI

অনলাইন ডেমো

এটি আমার গল্ফস্ক্রিপ্ট উত্তরের একটি বন্দর যা মার্টিনের সিজে্যাম উত্তর থেকে লুপ ধার নিয়েছে এবং সিজেমের divmodঅপারেটরকে শোষণ করে । ( আমি বললাম এটি কার্যকর হবে!)।


4

জুলিয়া, 61 57 বাইট

n->(i=n;while~-i!=0 n+=(n%i<1)*i*(n÷i%2*2-1);i-=1;end;n)

এটি একটি নামবিহীন ফাংশন তৈরি করে যা একটি একক আর্গুমেন্ট নেয় nএবং nতম শটগান নম্বরটি দেয়। এটি কল করার জন্য, এটির একটি নাম দিন f=n->(...)

উদাহরণ:

julia> for i = 1:10 println(f(i)) end
1
4
8
6
12
14
16
9
18
20

বর্তমানে এটি @ Sp3000 এর দুর্দান্ত পাইথন উত্তরের উপর ভিত্তি করে । আমি শীঘ্রই এটিকে আবার ঘুরে দেখব কারণ জুলিয়ায় এটি করার জন্য এখানে যা করেছি তার চেয়ে আরও ছোট একটি উপায় থাকতে হবে। যে কোনও ইনপুট বরাবরের মতো স্বাগত।



3

সিজেম, 28 27 বাইট

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

l~__(,f-{_I_+%_+I-_zI=*+}fI

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

ব্যাখ্যা

l~                          "Read input N and eval.";
  __(,                      "Duplicate twice, create range [0 1 2 ... N-2].";
      f-                    "Subtract each from N, giving [N N-1 N-2 ... 2].";
        {               }fI "For each element, storing the element in I.";
         _I_+%_+I-          "Compute 2(N % 2I)-I - the shuffling offset";
                  _zI=      "Check that this offset is ±I.";
                      *+    "Multiply the offset by this boolean and update to N.";

3

জে, 34 32 বাইট

   (]+[*(1-~2*2|%~)*0=|)/@(_1}2+i.)

   ((]+[*(1-~2*2|%~)*0=|)/@(_1}2+i.)) every 1+i.20  NB. running with inputs 1..20
1 4 8 6 12 14 16 9 18 20 24 26 28 22 39 15 36 35 40 38

এটি আরও কিছুটা গল্ফ দেওয়ার চেষ্টা করবে এবং পরে কিছু ব্যাখ্যা যুক্ত করবে।

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



1

রুবি, 57 47 বাইট

এটি মূলত Sp3000 এর পাইথন সলিউশন ( xnor এর পরামর্শ সহ ) রুবিতে অনুবাদ করা। আমি সম্ভবত এটি কয়েকটি জায়গায় গল্ফ করতে পারি।

->n{n.downto(2).map{|i|n+=i*(n/i%2-~-n/i%2)};n}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.