গণনা এবং পুনর্ব্যবহারযোগ্য


14

কাউন্টডাউন

এই কোড-গল্ফ চ্যালেঞ্জের জন্য আপনার লক্ষ্য হ'ল গণনা এবং এর মধ্যে সংখ্যার পুনর্ব্যবহার করা । আমাকে ব্যাখ্যা করতে দাও.

প্রথমে আপনার অ্যাপ্লিকেশন একটি নম্বর পড়বে, হয় প্রোগ্রাম আর্গুমেন্ট হিসাবে বা স্টিডিন ব্যবহার করে। এর পরে আপনাকে কেবল এটির মতো গণনা করতে হবে: 10 9 8 7 6( উতরিত ক্রমে)

তবে অপেক্ষা করুন, আরো আছে!

পুনর্ব্যবহারযোগ্য

এমন পরিস্থিতিতে রয়েছে যেখানে আমরা প্রতিটি সংখ্যা মুদ্রণ করতে পারি, তবে প্রতিটি সংখ্যার তালিকা না করে আমরা পুনর্ব্যবহার করতে পারি! আমাকে একটি দ্রুত উদাহরণ দিতে দিন:

Input: 110

Output:   11091081071061051041031021010099... etc
Recycled:  10                        1

আমরা এখনই ১১০, ১০৯, ১০৮ টি সমস্ত সংখ্যা তালিকাভুক্ত করেছি, তবে আমরা 0 এবং একটি 1 পুনর্ব্যবহার করেছি ।

আরেকটি উদাহরণ:

Input: 9900

Output:   9900989989897989698959894... etc
Recycled:        9 98  

কোড-গল্ফ চ্যালেঞ্জ

  • একটি সংখ্যা পড়ুন (যুক্তি বা স্টিডিন)
  • সমস্ত সম্ভাব্য সংখ্যার পুনর্ব্যবহার করার সময় উত্থিত ক্রমে কাউন্টডাউন আউটপুট আউটপুট (স্টাডাউট বা ফাইলে)
  • আপনি 1 বা পৌঁছানোর মুহুর্তটি 0 থেকে 9 পুনর্ব্যবহার করার সময় থামুন (প্রথমে যা কিছু ঘটুক)

সাধারণ উদাহরণ (1 পৌঁছানো পর্যন্ত):

Input: 15
Output: 15141312110987654321

(Notice the 110 instead of 1110)

আরও উন্নত উদাহরণ (সমস্ত পুনর্ব্যবহৃত):

Input: 110
Output:   110910810710610510410310210100998979695949392919089887868584838281807978776757473727170696867665646362616059585756554535251504948474645443424140393837363534332313029282726252423221
Recycled:  10                            9                    8                    7                    6                    5                    4                    3                    2

(We've recycled all 0-9)


2
এটি আসলেই "এগুলিকে শাসন করার জন্য একটি রিং" সমস্যার সাথে মোটেই সম্পর্কিত নয়।
উইল

@ রোভানআরআইজন আপনি আপনার প্রশ্নে আরোহী ক্রম সম্পর্কে কিছু উল্লেখ করেননি - যদি আমার নকল হিসাবে নিকটতম ভোট না হয় তবে আমার কাছে "আপনি কী জিজ্ঞাসা করছেন" তা অস্পষ্ট থাকব। যদি সংখ্যাগুলি অবশ্যই আরোহী ক্রমে হতে থাকে তবে 10 (আপনার দ্বিতীয় উদাহরণে) অনুক্রমের শুরুতে কীভাবে সঠিক হতে পারে?
গর্বিত হাসেলেলার

1
@proudhaskeller প্রশ্ন নির্দিষ্ট করে না সাজানো অর্ডার? "গণনা ডাউন" বোঝা যাচ্ছে বোঝা যাচ্ছে উতরাই অর্ডার বলতে।
উইল

1
রায়, আমি সদৃশ হিসাবে বন্ধ করার জন্য ভোট দিইনি। তবে সুস্পষ্টভাবে সম্পর্কিত প্রশ্নের উল্লেখ করা সিস্টেমের সম্পর্কিত প্রশ্নগুলির স্বয়ংক্রিয় অনুমানের পরিপূরক। @ উইল, অবশ্যই এটি সম্পর্কিত। প্রারম্ভিক স্টপিং শর্তটি সরান এবং এই প্রশ্নটি আপনাকে "একটি স্ট্রিং সমস্তটিতে শাসন করার জন্য" একটি নির্দিষ্ট অ-অনুকূল কৌশল বাস্তবায়নের জন্য বলছে।
পিটার টেলর

উত্তর:


11

টি-এসকিউএল - 291 277 267 217 199 191 166 158 153 145 142 128 117

এটি একটি নতুন উপায়ে পৌঁছানোর পরে, আমি খুব জঞ্জাল নয়, 145 (142 কয়েক দম্পতির ছোট্ট টুইটের পরে) নামতে সক্ষম হয়েছি। তার মানে আমি রৌপ্য বা ব্রোঞ্জের জন্য প্রতিযোগিতা করতে সক্ষম হতে পারি। ^^

DECLARE @ INT=100;WITH N AS(SELECT 1A UNION ALL SELECT A+1FROM N WHERE A<@)SELECT LEFT(A,LEN(A)-1+A%11)FROM N ORDER BY-A

এটি কোনও তালিকা মুদ্রণ করে না, এটি ফলাফলগুলি নির্বাচন করে। প্রশ্ন কখনই আউটপুট সম্পর্কে সুনির্দিষ্ট বিবরণ দেয় নি, সুতরাং এটি ঠিক করা উচিত। এটি ইনপুটটিতে এখনও একই পরিমাণ 100 রয়েছে, আংশিক কারণ যে আমি এই সত্যটি গালাগালি করছি যে প্রতি 100 এর অধীনে 11 তম শব্দটি একটি চরিত্র হারায় এবং আংশিকভাবে সাধারণ টেবিল এক্সপ্রেশনগুলিতে ডিফল্ট 100 পুনরাবৃত্তির সীমাবদ্ধতার কারণে।

DECLARE @ INT=100;

WITH N AS
(
    SELECT 1A
    UNION ALL
    SELECT A+1
    FROM N
    WHERE A<@
)

SELECT LEFT(A,LEN(A)-1+A%11)
FROM N
ORDER BY-A

1
হাহা টি-এসকিউএল, দুর্দান্ত!
রায় ভ্যান রিজন

7

পাইথন 143 147

def t(n):
 p=o='';r=0 # p is previous string, o is output string, r is recycled bitmap
 while n and r<1023: # 1023 is first 10 bits set, meaning all digits have been recycled
    s=`n`;i=-1 # s is the current string representation of n
       # i is from end; negative offsets count backwards in strings
    while p.endswith(s[:i])-1:i-=1 # find common ending with prev; s[:0] is '',
       # which all strings end with
    for j in s[:i]:r|=1<<int(j) # mark off recycled bits
    o+=s[i:];p=s;n-=1 # concatenate output, prepare for next number
 print o # done

প্রথম স্তরের ইন্ডেন্টটি স্থান, দ্বিতীয় স্তরটি ট্যাব চর।


2
কিছু মানক চর সংরক্ষণ করে: p=o=''ফাংশনে optionচ্ছিক প্যারামের মতো জিনিস রাখুন ; আপনি ব্যবহার করতে পারেন *জন্য andমধ্যে n and r<1023হয়তো বা এমনকি r<1023*n; while x-1:হিসাবে একটি স্থান শেভ করতে পারেন while~-x। এছাড়াও, কোন অঙ্কগুলি ব্যবহৃত হয়েছে তা সংরক্ষণ করার জন্য বিট-মাস্কের চেয়ে অঙ্কের একটি সেট ব্যবহার করা সংক্ষিপ্ত হতে পারে।
xnor

5

হাস্কেল, 154 149 147 145 128 120 119 117 বাইট

import Data.List
(r%x)n|n>0&&r<":"=[(r\\t)%(x++(show n\\t))$n-1|t<-tails x,isPrefixOf t$show n]!!0|0<1=x
h=['0'..]%""

পুনর্ব্যবহারযোগ্য যাচাই-বাছাইয়ের জন্য প্রচুর অক্ষর খরচ হয়েছে ... দীর্ঘশ্বাস ফেলুন

কী অঙ্কগুলি এখনও পুনর্ব্যবহার করা হয়নি তা মনে করে এবং তালিকাটি খালি থাকলে থামিয়ে দিয়ে কিছুটা গল্ফ করেছিল। তারপরে সুস্পষ্ট পুনরাবৃত্তি এবং আরও কয়েকটি কৌশলতে গিয়ে আরও কিছুটা গল্ফ করেছিল।

উদাহরণ আউটপুট:

*Main> h 110
"110910810710610510410310210100998979695949392919089887868584838281807978776757473727170696867665646362616059585756554535251504948474645443424140393837363534332313029282726252423221"

5

পাইথন 2: 119 117

এটি সম্প্রদায়ের উইকি হিসাবে চিহ্নিত করা হচ্ছে কারণ এটি উইলের উত্তরের আরও গল্ফযুক্ত সংস্করণ ।

n=input()
d=s,={''}
exec"t=`n`;i=len(t)\nwhile(s*i)[-i:]!=t[:i]:i-=1\ns+=t[i:];d|=set(t[:i]);n-=len(d)<11;"*n
print s

চমত্কার! কিভাবে d=s,={''}কাজ করে?
উইল

2
@Will d=s,={''}সমতূল্য d={''}; s,={''}s,={''}সিক্যুয়েন্স আনপ্যাকিং ব্যবহার করে, এমন বৈশিষ্ট্য যেমন বিবৃতিতে বেশি ব্যবহৃত হয় a, b = (b, a)তবে আপনি এটি একক-উপাদান ক্রম থেকে একমাত্র উপাদানটি বের করতেও ব্যবহার করতে পারেন।
ফ্লার্নকোপ

1
ওফ, আমার ভুল আমি মনে করি আপনি এখনও করতে পারেন len(d)%11*n, যদিও দেখে মনে হচ্ছে এটি এক্সিকিউট লুপ ব্যবহার করে আপনার সাথে চলছে ।
xnor

1
@ উইল ব্যাকগ্রাউন্ড হিসাবে কেন এই চতুর কৌশলটি দক্ষ, এটি set()একটি একক-উপাদান সেটের তুলনায় খালি সেট তৈরি করা দীর্ঘ সময় ব্যয় করা উচিত {x}। সুতরাং, ফ্লর্নকোকে এটিকে ফিলার সদস্যের সাথে আরম্ভ করে এবং এগারো উপাদান রয়েছে কিনা তা দেখে এটির দশটি সংখ্যা রয়েছে কিনা তা যাচাই করে। যেহেতু খালি স্ট্রিংটির মধ্যে আরম্ভ করা দরকার s, তাই চরগুলি সংরক্ষণের জন্য এই সূচনাটি সংযুক্ত করে এই ফিলার সদস্য হিসাবে পরিবেশন করা হয়।
xnor

1
@ উইল হ্যাঁ, len(d)%11*nখুব ভাল হত। :)
ফ্লর্নকোপ

4

রুবি, 145 139 130 বাইট

n=gets.to_i
d=*?0..?9
s=''
n.times{|i|j=(t=(n-i).to_s).size;j-=1 while s[-j,j]!=u=t[0,j];d-=u.chars;s=t;$><<t[j..-1];exit if[]==d}

উইলের অনুরূপ পন্থা, আমি কিছুটা মুখোশ ব্যবহার করছি না, পরিবর্তে অব্যবহৃত অঙ্কের সেট-এর মতো অ্যারে। ইনপুটটি এসটিডিনের মাধ্যমে।

এর whileপরিবর্তে একটি বিকল্প সংস্করণ রয়েছে timesতবে আমি যা যা চেষ্টা করি, বাইটের সংখ্যা একই the

n=gets.to_i
d=*?0..?9
s=''
(j=(t=n.to_s).size;j-=1 while s[-j,j]!=u=t[0,j];d-=u.chars;s=t;$><<t[j..-1];exit if[]==d;n-=1)while 0<n

3

সিজেম, 80 77 65 57 54 অক্ষর

সম্ভবত মোটামুটি অপ্টিমাইজড নয়, তবে প্রচুর অপ্টিমাইজেশান এবং ডিবাগিংয়ের পরে সিজেমে আমার ইএস 6 উত্তরের প্রত্যক্ষ রূপান্তর:

Mr{s:C_,{:H<M_,H->=!_CH@-@}g:T>+:MCT<_O@-+:O,A<Ci(*}h;

এটি এখানে অনলাইনে চেষ্টা করুন । ফাংশনটি STDIN হিসাবে নম্বর নেয় এবং পুনর্ব্যবহারযোগ্য কাউন্টডাউন আউটপুট দেয়, পুনর্ব্যবহারযোগ্য সম্পূর্ণ হলে মাঝখানে বন্ধ হয়ে যায়।

আমি এটি আরও গল্ফ চেষ্টা করব।

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

প্রাথমিক ধারণাটি হ'ল প্রতিটি কাউন্টডাউন নম্বর নম্বরের জন্য, প্রথম এইচ অঙ্কগুলি ফলাফল স্ট্রিংয়ের শেষ এইচ ডিজিটের সমান কিনা তা পরীক্ষা করে দেখুন, যেখানে এইচ সি এর সাথে সংখ্যার সংখ্যা থেকে 0 তে চলে গেছে

Mr                                    "Put an empty string and input on stack";
  { ... }h;                           "Run while top element of stack is true, pop when done";
s:C                                   "Store string value of top stack element in C"
   _,                                 "Put the number of characters in C to stack";
     { ... }g                         "Run while top element of stack is true";
:H<                                   "Store the digit iteration in H and slice C";
   M                                  "M is the final output string in making";
    _,H-                              "Take length of M and reduce H from it";
        >                             "Take that many digits of M from end and..."
         =!_                          "Compare with first H digits of C, negate and copy";
            CH@                       "Put C and H on stack and bring the above result to top of stack";
               -                      "Reduce H if the matched result was false";
                @                     "Bring the matched result on top in order continue or break the loop"
             :T                       "Store top stack element in T after the loop";
               >+:M                   "Take everything but first T digits of C and add it to M and update M";
                   CT<_               "Take first T digits of C and copy them";
                       O@             "Put saved digits on stack, and rotate top three elements";
                         -            "Remove all occurence of first T digits of C from O";
                          +:O         "Add first T digits of C to O and update O";
                             ,A<      "Compare number of saved digits with 10";
                                Ci(   "Decrement integer value of C and put it on stack";
                                   *  "If number of saved digits greater than 9, break loop";

2

জাভাস্ক্রিপ্ট ES6, 149 146 টি অক্ষর

এ জাতীয় ভার্বোস, অনেক অক্ষর, বাহ।

C=n=>{s=c='';while(n>0&s.length<10){j=1;while(t=(n+'').slice(0,-j++))if(c.endsWith(t)){s+=~s.search(t)?'':t;break}c+=(n--+'').slice(1-j)}return c}

এটি সর্বশেষতম ফায়ারফক্সের ওয়েব কনসোলটিতে চালান।

দৌড়ানোর পরে, এটি এমন একটি পদ্ধতি তৈরি করে Cযা আপনি পছন্দ করতে পারেন

C(12)
12110987654321

আপডেট : কখনও কখনও, সরল পুরাতন returnতীর ফাংশন বন্ধের চেয়ে কম হয় :)


কোন অঙ্কগুলি পুনর্ব্যবহার করা হয়েছিল তা আউটপুট করা উচিত নয়, কেবল পুনর্ব্যবহারের পরে গণনা ডাউন ক্রম
গর্বিত হাসেলেলার

উহু! তাই কি ? তাঁর সমস্ত উদাহরণ সেটিকে আউটপুটও করছিল।
অপ্টিমাইজার

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