পুনরাবৃত্তাকার বাইনারি বিবরণ


14

পুনরাবৃত্তাকার বাইনারি বিবরণ

সম্প্রতি, আমি ক্রম A049064 ক্রমটিতে একটি বি-ফাইল যুক্ত করে ওইআইএস -তে আমার প্রথম অবদান রেখেছি । ক্রমটি শুরু হয় 0এবং তারপরে পরবর্তী মানগুলি শেষ আইটেমটির "বাইনারি বিবরণ" প্রদান থেকে নেওয়া হয়।

উদাহরণস্বরূপ, দ্বিতীয় পদটি হবে 10, কারণ 0প্রথম উপাদানটিতে একটি ছিল। তৃতীয় পদটি হবে 1110, কারণ সেখানে একটি 1এবং একটি ছিল 0। চতুর্থ হবে 11110। কারণ সেখানে তিনটি ( 11বাইনারি!) 1 গুলি এবং একটি রয়েছে 0। এই প্রক্রিয়াটি পরিষ্কার করার জন্য নীচে পঞ্চম মেয়াদের একটি ভাঙ্গন রয়েছে:

> 11110
> 1111 0    (split into groups of each number)
> 4*1 1*0   (get count of each number in each group)
> 100*1 1*0 (convert counts to binary)
> 100110    (join each group back together)

এবং এখানে 6 তম থেকে 7 তম পর্বে যাওয়ার উদাহরণ রয়েছে:

> 1110010110
> 111 00 1 0 11 0
> 3*1 2*0 1*1 1*0 2*1 1*0
> 11*1 10*0 1*1 1*0 10*1 1*0
> 111100111010110

আপনি একটি রেফারেন্স প্রোগ্রাম চেক করতে পারেন φ আমি শর্তাদি গণনা করতে তৈরি করেছি।

আপনার কাজ

আপনাকে এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করতে হবে যা স্ট্যান্ডার্ড ইনপুট বা ফাংশন আর্গুমেন্টেরn মাধ্যমে সংখ্যার মধ্যে নেয় এবং একটি শব্দটিকে নতুন পংক্তিতে পৃথক করে শব্দ থেকে ক্রমটি প্রিন্ট করে । আপনি যদি কম সংখ্যার দিকে নজর রাখতে চান তবে আপনি OEIS পৃষ্ঠা থেকে বি-ফাইলটি উল্লেখ করতে পারেন। যাইহোক, আপনার প্রোগ্রাম / ফাংশনটি সমর্থন করা উচিত , অর্থাৎ 31 তম মেয়াদ পর্যন্ত। এটি কোন ছোট কৃতিত্ব, কারণ 140,000 ওভার সংখ্যা বিশিষ্ট হয় δ । যদি আপনি দেখতে চান যে 31 তম শব্দটি কী হওয়া উচিত, আমি এটি পাস্তেবিনে রেখেছি ।1st(n+1)th0 <= n <= 30A049064(30)

উদাহরণ I / O

func(10)
0
10
1110
11110
100110
1110010110
111100111010110
100110011110111010110
1110010110010011011110111010110
1111001110101100111001011010011011110111010110
1001100111101110101100111100111010110111001011010011011110111010110

func(0)
0

func(3)
0
10
1110
11110

কেবল একটি নিয়ম রয়েছে: কোনও মানসম্মত লুফোল নেই!

এটি , তাই সর্বনিম্ন বাইট গণনা জিতে।


φ - সারকথা পাওয়া যাবে এখানে , এবং একটি ideone ডেমো হয় এখানে

। - আপনি যদি ভাবছিলেন তবে 100 ম পদের দৈর্ঘ্যে আমার অনুমানগুলি এটিকে প্রায় 3.28x10 250 টি অক্ষর লম্বা করে রেখেছিল , এটি যে কারও পক্ষে গণনা করা যথেষ্ট।


তালিকা হিসাবে আউটপুট অনুমোদিত? লাইক[0]\n[1, 0]\n[1, 1, 1, 0]\n...
জাকুব

@ জাকুব না, আপনি এটিতে একটি স্ট্রিং যোগদান করতে হবে।
কেদে

5
ওইআইএসে অবদান রাখায় অভিনন্দন!
অ্যালেক্স এ।

উত্তর:


8

সিজেম, 18 17 বাইট

0{sN1$e`2af.b}ri*

এক বাইট বন্ধ করে দেওয়ার জন্য @ মার্টিনব্যাটনারকে ধন্যবাদ!

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

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

0                 e# Push 0.
 {           }ri* e# Repeat int(input)) times:
  s               e#   Stringify the element on top of the stack.
                       EXAMPLE: [[[1 1] '1] [[1] '0]] -> "11110"
   N              e#   Push a linefeed.
    1$            e#   Copy the last stack.
      e`          e#   Perform run-length encoding.
                  e#   EXAMPLE: "100110" -> [[1 '1] [2 '0] [2 '1] [1 '0]]
        2a        e#   Push [2].
          f.b     e#   For each pair [x 'y], execute: [x 'y][2].b
                  e#   This pushes [x2b 'y], where b is base conversion.

4

পাইথ, 18 17 বাইট

J]0VQjk~JsjR2srJ8

অনলাইনে চেষ্টা করুন: বিক্ষোভ

একটি বাইট বাঁচানোর জন্য @ আইস্যাচকে ধন্যবাদ।

ব্যাখ্যা:

                     implicit: Q = input number
 ]0                  create an initial list [0]
J                    and store in J
   VQ                for loop, repeat Q times:
              rJ8       run-length-encoding of J
             s          sum, unfolds lists
          jR2           convert each value to base 2
         s              sum, unfolds lists
       ~J               store the result in J

                        but return the old list,
     jk                 join it and print it

এটি সত্যটি ব্যবহার করে যে বাইনারিতে 0 এবং 1 এছাড়াও 0 এবং 1 হয়।


এটি এর Vপরিবর্তে 1 বাইট সংক্ষিপ্ত .u:J]0VQjk~JsjR2srJ8
isaacg

2

পাইথন 2, 125 116 110 বাইট

from itertools import*
v='0'
exec"print v;v=''.join(bin(len(list(g)))[2:]+k for k,g in groupby(v));"*-~input()

রিডান্ট্যান্ট intকলটি সরিয়ে @ স্প3000 এবং 5 বাইটকে 1 বাইট ধন্যবাদ সংরক্ষণ করা হয়েছে ।

পুরানো সংস্করণ:

import itertools as t
v='0'
exec"print v;v=''.join(bin(int(len(list(g))))[2:]+k for k,g in t.groupby(v));"*-~input()

@ ভিওজ- এর জন্য অনেকগুলি, অনেকগুলি বাইট সংরক্ষণ করা হয়েছে!

মূল সংস্করণ:

import itertools as t
v='0'
for n in range(input()+1):print v;v=''.join(bin(int(len(list(g))))[2:]+k for k,g in t.groupby(v))

1

রুবি, 80 72 69 বাইট

একটি ফাংশন হিসাবে:

f=->m{l=?0;0.upto(m){puts l;l.gsub!(/1+|0+/){$&.size.to_s(2)+$&[0]}}}

এটির সাথে উদাহরণস্বরূপ কল করুন: f[6]


আপনি কোনও ফাংশন আর্গুমেন্ট হিসাবে ইনপুট নিলে আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন:->m{l=?0;0.upto(m){puts l;l.gsub!(/1+|0+/){$&.size.to_s(2)+$&[0]}}}
ব্লুটোরেঞ্জ করুন

@ ব্লুটোরেজ সুন্দর! সম্পূর্ণরূপে ভুলে গিয়েছিলাম uptoএবং ! - ধন্যবাদ :)
ডানিরো

1

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

import re
o='0'
exec"print o;o=''.join(bin(len(x))[2:]+x[0]for x in re.findall('0+|1+',o));"*-~input()

কোনওভাবে itertoolsদীর্ঘস্থায়ী বস্তুর চেয়ে দীর্ঘ হওয়ার reএবং groupbyপ্রত্যাবর্তনের সংমিশ্রণের grouperঅর্থ হ'ল রেজেক্স ব্যবহার করা কিছুটা খাটো ...


0

কোবরা - 128

do(i)=if(i-=1,(r=RegularExpressions).Regex.replace(f(i),'1+|0+',do(m=r.Match())=Convert.toString('[m]'.length,2)+'[m]'[:1]),'0')

0

হাস্কেল, 136 130 বাইট

import Text.Printf
import Data.List
f n=putStr.unlines.take(n+1).iterate(concatMap(\n->(printf"%b"$length n)++[head n]).group)$"0"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.