1 কে কেবল কোনও ক্রিয়াকলাপ * 3 এবং / 2 ব্যবহার করে ধনাত্মক পূর্ণসংখ্যায় রূপান্তর করুন


11

1 দিয়ে শুরু করে এবং ক্রমের ক্রম প্রয়োগ করে যে কোনও ধনাত্মক পূর্ণসংখ্যার প্রাপ্তি পাওয়া যায় , যার প্রত্যেকটি হয় "3 দ্বারা গুণিত" বা "বিভাজন 2 দ্বারা, কোনও অবশিষ্টাংশ বাদ দিয়ে"

উদাহরণ (* 3 এর জন্য f লিখুন এবং / 2 এর জন্য জি):

4 = 1 *3 *3 /2 = 1 ffg
6 = 1 ffggf = 1 fffgg
21 = 1 fffgfgfgggf

নিম্নলিখিত আচরণ সহ একটি প্রোগ্রাম লিখুন:

ইনপুট : স্টিডিন বা হার্ড-কোডডের মাধ্যমে কোনও ধনাত্মক পূর্ণসংখ্যা। (যদি হার্ড-কোডেড থাকে তবে ইনপুট সংখ্যা প্রোগ্রামের দৈর্ঘ্য থেকে বাদ দেওয়া হবে))
আউটপুট : এফ এবং জি এর একটি স্ট্রিং <input> = 1 <string>( উদাহরণস্বরূপ )। বিপরীত ক্রমে এ জাতীয় স্ট্রিং গ্রহণযোগ্য। এনবি: আউটপুটটিতে কেবলমাত্র চ এবং জি রয়েছে, বা খালি রয়েছে।

বিজয়ী হ'ল প্রোগ্রাম-প্লাস-আউটপুটটির স্বল্পতম বাইট সহ এন্ট্রি হয় যখন 41 ইনপুট হয়।


1
আপনি কিভাবে জানেন যে এটি সত্য?
মেরিনাস

@ মারিনাস এটি সত্য বলে বিশ্বাস করা হয় (তবে এখনও প্রমাণিত হয়নি)। কিছু প্রমাণ খুঁজছি
ফেবিনআউট

@ মারিনাস, আপনি প্রমাণ করতে পারেন যে এটি বংশোদ্ভূত দ্বারা (বা সমানভাবে শক্তিশালী অন্তর্ভুক্তি দ্বারা) সম্ভব। কেস-বিভক্ত চালু x mod 3: যদি x=3yy নির্মাণ করে এবং তারপর প্রয়োগ করে f; যদি x=3y+1কনস্ট্রাক্ট 2y+1এবং আবেদন fতারপর g; যদি x=3y+2তা জটিল হয়ে ওঠে তবে মূলত পুনরাবৃত্ত হয়।
পিটার টেলর

একটি পৃথক নোটে, আউটপুটটি অবশ্যই প্রয়োগ ক্রমে হওয়া উচিত বা রচনা আদেশটিও গ্রহণযোগ্য হবে?
পিটার টেলর

@ পিটারটেলর যেভাবেই হোক ঠিক আছে।
মাঝামাঝি

উত্তর:


3

গল্ফস্ক্রিপ্ট, স্কোর 64 (43-2 + 23)

0{)1.$2base:s{{3*}{2/}if}/41=!}do;s{103^}%+

(41 হার্ডকডযুক্ত, সুতরাং স্কোরের জন্য 2-অক্ষর)। আউটপুট হয়

fffgffggffggffgggffgggg

যা 23 টি অক্ষর (নিউলাইন ছাড়াই)। নির্মাণ করে কোডটি গ্যারান্টি দেয় যে এটি সর্বদা সংক্ষিপ্ত উপস্থাপনা (একটির) প্রত্যাবর্তন করে।


বরাত দিয়ে ব্যবহারকারী ড্যারেন স্টোন মধ্যে একটি প্রস্তাবিত সম্পাদন করা এই পোস্টে। "। আমি এখানে একটি মন্তব্য করতে তাই আমি একটি সম্পাদনা ছাড়বে পারছি না এই আউটপুট প্রথম দুই অক্ষর অন্তর্ভুক্ত নয়" 1 "কিংবা স্কোর প্রতিফলিত যারা একটি হওয়া উচিত সহজ সমাধান এবং এখনও একটি অবিশ্বাস্যভাবে সংক্ষিপ্ত সমাধান। চিয়ার্স! " (আমি প্রত্যাখ্যাত কিন্তু ভাবলাম বার্তা বহন উচিত)
Doorknob

@ ডুরকনব চ্যালেঞ্জটি বলে যে "1 "আউটপুটে অন্তর্ভুক্ত করা উচিত নয়।
হাওয়ার্ড

3

আমরা নোংরা হয়ে যাচ্ছি বন্ধুরা!

জাভা 210 207 199 টি অক্ষর

public class C{public static void main(String[] a){int i=41;String s="";while(i>1){if(i%3<1){s+="f";i/=3;}else if(i%3<2){s+="g";i+=i+1;}else{s+="g";i+=i+(Math.random()+0.5);}}System.out.println(s);}}

অ golfed:

public class C {

    public static void main(String[] a) {

        int i = 41;
        String s = "";
        while (i > 1) {
            if (i % 3 == 0) {
                s += "f";
                i /= 3;
            } else {
                if (i % 3 == 1) {
                    s += "g";
                    i += i + 1;
                } else {
                    s += "g";
                    i += i + (Math.random() + 0.5);
                }
            }
        }
        System.out.println(s);
    }
}

আউটপুট: পুরানো দেবদেবীদের বিশ্বাসের উপর নির্ভর করে আমার কাছে সবচেয়ে কম 30 ছিল Note

234

1 ggfgfgfgfggfggfgffgfggggfgffgfggfgfggggfgffgfggfgfggfgfggfgfgggggfffgfggfgfggfgfgggffgggggfffgfggggfgffgfggfgfggfgfggfgfggfgfggfgfggfgfggggfgffgfggfgfggfgfggfgfggfgfggfgfggggggggggggfgfgfggggfgfgfggfffgfgfggffgfgfggfgfggggffgfgfffff

108

1 gggffgfgfggggggfggggfgffggggfgfgfgfgfgffgggfgggggfggfffggfgfffffgggffggfgfgggffggfgfgggffggggggfgfgffgfgfff

45 সম্পাদনা করুন

1 ggfgfgfgfgggfggfffgfggfgfgggggggffgffgfgfff

পয়েন্ট: 318 199 + 30 = 229

edit1 (2 * আমি + 1)% 3 == 0 -> (2 * আমি)% 3 == 1

নোটা বেনি আপনি গল্ফ করার সময় জাভা 6 এবং জাভা 7 ব্যবহার না করে আপনি ব্যবহার করতে পারেন

public class NoMain {
    static {
        //some code
        System.exit(1);
    }
}

39 টি অক্ষর দীর্ঘ যা একটি স্ট্যান্ডার্ড কাঠামোর পরিবর্তে 39 টি অক্ষরের কাঠামো।


(2*i+1)%3==0সমতুল্যi%3==1
হাওয়ার্ড

হ্যাঁ তাই হয়। ধন্যবাদ
ফেবিনআউট

if(X){A}else{if(Y){B}else{C}}চেয়ে দীর্ঘতর হয় if(X){A}else if(Y){B}else{C}। এছাড়াও আপনি আপনার ==শর্তগুলি সংক্ষিপ্ত <অবস্থার সাথে প্রতিস্থাপন করতে পারেন ।
পিটার টেলর

@ পিটারটেলর সত্য, আমার সমাধান এখনও কুৎসিত। আমি জানি না এলোমেলো অংশটি কোডটি ছোট করে কিনা, তবে এটির ফলে আউটপুট ক্রপ্পিয়ার হয়ে যায়।
ফেবিনআউট

আপনার f / g স্ট্রিংগুলি 'g' দিয়ে শুরু হয় (যা '/ 2' এর জন্য দাঁড় করা উচিত), সুতরাং তারা 41 এ পরিবর্তে 1 তে 0 রূপান্তর করবে the 41. দিতে
মাঝামাঝি

3

পাইথন, স্কোর 124 (90-2 + ​​36)

x=41;m=f=g=0
while(3**f!=x)*(m!=x):
 f+=1;m=3**f;g=0
 while m>x:m/=2;g+=1
print'f'*f+'g'*g

কোডের 90 টি অক্ষর (প্রতিটি 1 হিসাবে নিউলাইনস) - হার্ড-কোডেড ইনপুট সংখ্যার জন্য 2 + আউটপুটের 36 টি অক্ষর

আউটপুট:

ffffffffffffffffgggggggggggggggggggg

1
আপনি যদি করেন তবে আপনি m=f=0বাহিরের লুপটি তৈরি করতে while(n!=x)*(m!=x)পারেন এবং বিরতিগুলি সরাতে পারেন। এটি কোডের 95 টি অক্ষরে নিয়ে আসে।
ড্যানিয়েল লুবারভ

@ ড্যানিয়েল: আপনি স্যার, একজন ভদ্রলোক এবং পণ্ডিত। ধন্যবাদ! আপনার জমাটি এখনও আমার চেয়ে নিরাপদে 10 জন এগিয়ে রয়েছে। :)
ড্যারেন স্টোন

1
যদি আপনি সেই সমস্ত প্রতিস্থাপন আপনি আরও একটু সংরক্ষণ করতে পারবেন nদ্বারা 3**f
হাওয়ার্ড

1
ইনপুট = 1 এর জন্য, আপনার প্রোগ্রামটি ত্রুটি উত্পন্ন করে ("নাম 'g' সংজ্ঞায়িত করা হয়নি", বহির্মুখী লুপটি প্রবেশ না করায়)।
মাঝামাঝি

1
আপনি লেখা আরেকটি চরিত্র কেটে পারে print'f'*f+'g'*g, যা 90-2 + + 36 = 124. স্কোর দিতে হবে
মাঝামাঝি

3

পাইথন, স্কোর 121 (87 - 2 + 36)

t=bin(41)
l,n,f=len(t),1,0
while bin(n)[:l]!=t:f+=1;n*=3
print(len(bin(n))-l)*'g'+f*'f'

@ ড্যারেন, আউটপুট বিবরণটি কীভাবে ব্যাখ্যা করা যায় তা আমি নিশ্চিত ছিলাম না তবে আপনি সম্ভবত সঠিক বলেছেন। আমি '1' যুক্ত করেছি। ধন্যবাদ!
ড্যানিয়েল লুবারভ

1
আপনি '1' (আবার!) ফেলে দিতে পারেন আপনার আউটপুট বর্ণনার মূল ব্যাখ্যাটি সঠিক ছিল। আবার পাইথনের সীসা উপভোগ করুন! :-)
ড্যারেন স্টোন

1
আপনি আপনার 2nd, 3 য়, এবং মধ্যে 4 র্থ লাইন মিলিত তাহলে l,n,f=len(t),1,0, এবং সরানো '1',মুদ্রণ বিবৃতি থেকে আপনার স্কোর হবে 87-2 + + 36 = 121.
মাঝামাঝি

ধন্যবাদ বলছি - আমি বাদ 1,l,n,f=len(t),1,0অক্ষর একই সংখ্যা দেয়, তাই না? (প্রতিটি ভেরিয়েবলের জন্য, =দুটি এবং ,এর সাথে একটি নতুন লাইন প্রতিস্থাপন করা হয় )
ড্যানিয়েল লুবারভ

প্রতিটি নিউলাইন যদি একটি অক্ষর হয় (যেমন ইউনিক্স-স্টাইলের এলএফ), তবে এক-লাইন এবং তিন-লাইনের সংস্করণগুলির দৈর্ঘ্য একই হবে। যদি প্রতিটি নিউলাইন দুটি অক্ষর হয় (যেমন এমএস উইন্ডোজ-স্টাইল সিআর + এলএফ), তবে এক-লাইন সংস্করণটি তিন-লাইন সংস্করণের চেয়ে দুটি অক্ষর সংক্ষিপ্ত। 121 এর স্কোর এক-চরিত্রের নতুন লাইন ধরেছে।
মাঝামাঝি

1

পার্ল, স্কোর 89 (63 - 2 + 28)

$_=41;$_=${$g=$_%3||$_==21?g:f}?$_*2+$_%3%2:$_/3while$_>print$g

অনুমান: নীচের আমার মূল সমাধানে বর্ণিত নিষ্পাপ দৃষ্টিভঙ্গি যদি কোনও চক্র পর্যন্ত পৌঁছে যায় তবে সেই চক্রটি [21, 7, 15, 5, 10, 21, ...] হবে । যেহেতু 1 ≤ n counter 10 6 এর কোনও পাল্টা উদাহরণ নেই, সম্ভবত এটি সত্য বলে মনে হচ্ছে। এই প্রমাণ করার জন্য, এটা দেখাতে হবে যে এই শুধুমাত্র চক্র যা যথেষ্ট হবে পারেন বিদ্যমান, যা আমি বা সময় একটি পরবর্তীকালে না পারে।

উপরের সমাধানটি অনুমান করা (ভুলভাবে) পরিবর্তে চক্রটিকে তাত্ক্ষণিকভাবে এড়িয়ে চলে এবং দ্বিতীয়বারের মাধ্যমে এড়িয়ে চলে।

আউটপুট (২৮ বাইট):

ggfgfgfgfggfggfgfgfggfgfgfff

পার্ল, 100 স্কোর (69 - 2 + 33)

$_=41;1while$_>print$s{$_=$$g?$_*2+$_%3%2:$_/3}=$g=$_%3||$s{$_/3}?g:f

অনুমান এবং পরীক্ষা করার পদ্ধতি ব্যবহার করা। স্ট্রিংটি বিপরীত ক্রিয়াকলাপগুলি ব্যবহার করে (মানটিকে 1 এর পরিবর্তে অন্যদিকে পরিবর্তিত করে) তৈরি করা হয় এবং স্ট্রিংটি সেই অনুযায়ী মিরর হয়ে যায়, যা সমস্যা স্পেসিফিকেশন দ্বারা অনুমোদিত is

যখনই তিনটির কোনও বহুনির্বাণীর মুখোমুখি হয়, তখন এটি দুটি দ্বারা গুণিত হয়, ফলাফল যুক্ত হলে তিনটির একাধিক হয়। যখন তিনটির একাধিকের মুখোমুখি হয়, তখন এটি তিনটি দিয়ে বিভক্ত হয়ে যায় ... যদি না এই মানটির আগে কোনও চক্রের ইঙ্গিত দেয়, তবে অনুমান-পরীক্ষা করুন।

আউটপুট (33 বাইট):

ggfgfgfgfggfggfgffgfgggfggfgfgfff

1

জে, স্কোর 103 (82-2 + 23)

* দ্রষ্টব্য: আমি আমার ক্রিয়াগুলির নাম দিয়েছি fএবং gআউটপুট স্ট্রিংগুলির সাথে বিভ্রান্ত হওয়ার দরকার নেই fএবং g

হার্ড কোডেড:

f=:3 :'s=.1 for_a.y do.s=.((<.&-:)`(*&3)@.a)s end.'
'gf'{~#:(>:^:(41&~:@f@#:)^:_)1

সাধারণ ফাংশন:

f=:3 :'s=.1 for_a.y do.s=.((<.&-:)`(*&3)@.a)s end.'
g=:3 :'''gf''{~#:(>:^:(y&~:@f@#:)^:_)1'

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

জে, স্কোর 197 (174 + 23)

f =: 3 : 0
acc =. 1
for_a. y do. acc =. ((*&3)`(<.&-:)@.a) acc end.
)

g =: 3 : 0
f2 =: f"1 f.
l =. 0$0
i =. 1
while. 0=$(l=.(#~(y&=@:f2))#:i.2^i) do. i=.>:i end.
'fg'{~{.l
)

আউটপুট: ffffffffggggggggfgffggg

fবুলিয়ানদের একটি তালিকাকে সংখ্যায় রূপান্তর করে, 0 হিসাবে *3এবং 1 গুলি হিসাবে /2(এবং floor) ব্যবহার করে। #:i.2^iদৈর্ঘ্যের সমস্ত বুলিয়ান অ্যারে সমন্বিত একটি র‌্যাঙ্ক 2 অ্যারে তৈরি করে i

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