ব্রেইনফের একটি নির্বিচারে বড় কক্ষ জিরো ***


28

আপনার কাজটি এমন একটি কোডের টুকরোটি লিখেছেন যা ব্রেইনফাক বৈকল্পিকের বর্তমান কক্ষটিকে শূন্য করে দেয় যে, প্রতিটি ঘরে সাধারণ 0 থেকে 255 এর পরিবর্তে নির্বিচারে বৃহত্তর মাত্রার একটি স্বাক্ষরিত পূর্ণসংখ্যা থাকতে পারে ।

আপনি ধরে নিতে পারেন যে বামদিকে l কক্ষ রয়েছে এবং বর্তমান ঘরটির ডানদিকে r কক্ষ রয়েছে যা প্রাথমিকভাবে শূন্য। আপনার প্রোগ্রামটি কেবল এই l + r +1 টি কক্ষে অ্যাক্সেস করতে পারে । আপনার কোড শেষ হওয়ার পরে এটি l + r অতিরিক্ত কক্ষগুলি শূন্য এবং মূল অবস্থানে বর্তমান কক্ষে পয়েন্টারটি রেখে যাবে।

আপনি কোনও ইনপুট / আউটপুট ব্যবহার করতে পারবেন না।

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

দরকারী সরঞ্জাম

আপনি mbomb007 দ্বারা টিআইও-তে এই দোভাষীটি ব্যবহার করে এই প্রকরণে একটি ব্রেইনফাক প্রোগ্রামটি পরীক্ষা করতে পারেন ।

আপনি এই উত্তরে বুথবি দ্বারা দোভাষীটিও ব্যবহার করতে পারেন (অন্যান্য পাইথনের উত্তর সম্ভবত কাজ করে তবে আমি পরীক্ষা করিনি)।


আমি এটিকে কোড-গল্ফ ট্যাগ করেছি কারণ আমি মনে করি আমরা দ্রুত সর্বোত্তম ল + আর পৌঁছে যাব।
জিমি 23013

2
আপনার মন্তব্য থেকে মনে হচ্ছে, আপনি নির্বিচারে বড় আকারের পূর্ণসংখ্যার অর্থ, যা ইতিবাচক বা নেতিবাচক হতে পারে। এটি কিছু লোকের জন্য ইংরাজী উপভাষায় একটি পার্থক্য, সুতরাং এটি স্পষ্ট করে বলা যায় যে এটি খুব ইতিবাচক বা খুব নেতিবাচক হতে পারে।
ইসাকাক

4
@ জিমি 23013 আপনি কি স্বাক্ষরিত কক্ষগুলি সহ আমাদের কাছে কোনও বিএফ দোভাষী আছেন যা আমরা এর জন্য ব্যবহার করতে পারি?
mbomb007

@ mbomb007 codegolf.stackexchange.com/a/3085/25180 তবে সম্ভবত খুব গোলাপী ...
জিমি 23013

1
@ মেগো কেন? "আসল" চ্যালেঞ্জে আপনাকে অবশ্যই সর্বোত্তম এল + আর পাওয়া উচিত যা কোডের আকার হ্রাস করতে সম্ভবত আরও জটিল করে তুলবে।
জিমি 23013

উত্তর:


17

l + r = 0 + 2 = 2, 55 53 51 বাইট

[>+[-<+>>+<]<[>]>[+[-<+<->>]<[->+<]]>[-<+>]<<]>[-]<

l + r = 1 + 2 = 3, 46 44 বাইট

[[>+[-<+<+>>]<[<+[->->+<<]]>]>[>]<[-]<<[-]>]

আমার নিজস্ব অ্যালগরিদম। পয়েন্টারটি সেই নম্বর থেকে শুরু করা উচিত যা শূন্য করা দরকার। সময়ের জটিলতা হ'ল ও (এন ^ 2)।

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

  • আমরা সংখ্যাটি দিয়ে শুরু করি n
  • আমরা একটি বৃদ্ধি করি, সুতরাং সংখ্যাটি হয়ে যায় n+1
  • আমরা হ্রাস দুটি, তাই সংখ্যা হয়ে যায় n+1-2 = n-1
  • আমরা তিনটি বৃদ্ধি করি, সুতরাং সংখ্যাটি হয়ে যায় n-1+3 = n+2
  • আমরা চারটি হ্রাস করেছি, সুতরাং সংখ্যাটি হয়ে যায় n+2-4 = n-2

আমরা শূন্য না হওয়া পর্যন্ত প্রতিটি পদক্ষেপ ইন-/ হ্রাস বাড়িয়ে প্রক্রিয়াটি পুনরাবৃত্তি করি।


2
ঠিক এই অ্যালগরিদমটি আমি "এটি এমনকি সম্ভব নয়" পর্যায়ে
পেরোনোর

9

l + r = 0 + 2 = 2; 58 বাইট

>+<[>[<->>+<-]>+<<[>]>[<<+>+>-]<[->+<]>[<]>+[-<+>]<<]>[-]<

জটিলতা হ'ল ও (এন ^ 2)।

নিম্নলিখিতটি আমার পরীক্ষামূলক প্রোগ্রামের জেনারেটর, যাতে আপনি দেখতে পাচ্ছেন যে এটি কাজ না করে এমন পরিস্থিতিতে আমি এটি পরীক্ষার জন্য আসলে চেষ্টা করেছি ...

p='''
>+<
[
>
[<->>+<-]
>+<
<[>]>
[<<+>+>-]
<
[->+<]
>[<]>
+ [-<+>]
<<
]
> [-] <
'''

p = ''.join(p.split())

cpp = '''
#include <bits/stdc++.h>
using namespace std;
void test(int q) {
long long t[3] = {q, 0, 0};
int i = 0;
ZZZ
printf("q=%d %lld %lld %lld\\n", q, t[0], t[1], t[2]);
}
int main() {
while(true) {
    int q; cin >> q; test(q);
}
}
'''

d = {
'>': '++i; assert(i<3);',
'<': '--i; assert(i>=0);',
'+': '++t[i];',
'-': '--t[i];',
'[': 'while(t[i]){',
']': '}',
}

print cpp.replace('ZZZ', ''.join(d[c] for c in p))

আমি সবেমাত্র তৈরি করা দোভাষী ব্যবহার করে এটি পরীক্ষা করতে পারেন। মন্তব্য দেখুন
mbomb007

দেখে মনে হচ্ছে এটি আমার কাছে কাজ করে।
mbomb007

2
এটি সর্বোত্তম ল + আর হতে পারে। দ্রুত প্রমাণ যে 1 অসম্ভব: প্রতিটি পয়েন্টে যেখানে অতিরিক্ত কোষ শূন্যকে আঘাত করে, আপনি কেবলমাত্র মূল কক্ষের মূল্য ছাড়াও সীমাবদ্ধ পরিমাণে ডেটা সংরক্ষণ করতে পারেন (টেপের মাথা অবস্থান এবং নির্দেশ নির্দেশক), যার অর্থ আপনি সেই সীমা থেকে কমপক্ষে একটি দিক থেকে মূল পয়েন্টটি কতটা সামঞ্জস্য করতে পারবেন তা সীমাবদ্ধ।

@ ais523- এর সাথে অন্যান্য সমমানেরও থাকতে পারে। যদি কেউ l + r = 1 + 1 তৈরি করেন তবে এটি আকর্ষণীয় হবে।
mbomb007
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.