झुका हुआ बाइनरी नंबर


15

पूर्णांक को देखते हुए n, पहली nढलान बाइनरी संख्याओं का उत्पादन , या तो 0- या 1-अनुक्रमित। उन्हें इस कारण कहा जाता है कि वे कैसे उत्पन्न होते हैं:

बाइनरी में एक-दूसरे के नीचे (सही-सही) संख्या लिखें:

........0
........1
.......10
.......11
......100
......101
......110
......111
.....1000
.........

फिर, आपको प्रत्येक तिरछे को नीचे-बाएँ से ऊपर-दाईं ओर ले जाने की आवश्यकता है, जैसे कि प्रत्येक अंतिम अंक एक विकर्ण का अंतिम अंक है। यहां चौथा विकर्ण (शून्य-अनुक्रमित) चिह्नित किया गया है x, जो है 100:

........0
........1
.......10
.......11
......10x
......1x1
......x10
......111
.....1000
.........

क्रम में ऊपर की ओर तिरछे विकर्ण हैं:

0
11
110
101
100
1111
1010
.......

फिर, दशमलव में बदलना, देना 0, 3, 6, 5, 4, 15, 10, ...

OEIS A102370

यह , इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है।


12
मुझे नहीं लगता कि यह विनिर्देश बहुत स्पष्ट है। मुझे यह समझने से पहले कि मुझे क्या पूछा जा रहा है, इससे पहले कि मुझे बाहरी पठन करना पड़े।
पोस्ट रॉक गार्फ हंटर

1
यहाँ एक विज़ुअलाइज़ेशन है, अगर यह मदद करता है। "अंडाकार" ऊपर से नीचे तक पढ़ें, और नीचे से दाएं से ऊपर तक अंडाकार के भीतर। वे आपको बाइनरी नंबर देते हैं जिन्हें आपको दशमलव में बदलने की आवश्यकता होती है।
पावेल

आपका क्या मतलब है, " या तो 0- या 1-अनुक्रमित "? क्या आपका मतलब है कि पहले nया पहले n+1नंबरों में से कोई एक आउटपुट हो सकता है ?
smls

4
मुझे लगता है कि अगर आपने सिर्फ n 'मूल्य वापस करना होता तो यह और भी दिलचस्प जवाब दे सकता था।
xnor

1
@PatrickRoberts मैंने कभी भी इस बात की सीमा नहीं रखी कि कितने उत्पन्न करने हैं। मैंने बस कहा "बाइनरी में नंबर लिखो ..."। आपको उतने की आवश्यकता है जितना आप उत्पन्न करते हैं।
mbomb007

जवाबों:


3

जेली, 11 बाइट्स

ḤḶBUz0ŒDUḄḣ

इसे ऑनलाइन आज़माएं!

व्याख्या

ḤḶBUz0ŒDUḄḣ    Main link. Argument: n
Ḥ              Double the argument. This ensures there are enough
               rows, since n + log2(n) <= 2n.
 Ḷ             Get range [0 .. 2n-1].
  B            Convert each number to binary.
   U           Reverse each list of digits. 
    z0         Transpose, padding with zeroes to a rectangle.
      ŒD       Get the diagonals of the rectangle, starting from the
               main diagonal. This gets the desired numbers, reversed,
               in binary, with some extras that'll get dropped.
        U      Reverse each diagonal.
         Ḅ     Convert each diagonal from binary to a number.
          ḣ    Take the first n numbers.

काम करने के लिए निर्मित विकर्णों के लिए सरणी को पैड करने के लिए संक्रमण सबसे सरल तरीका है। फिर सब कुछ सही क्रम में प्राप्त करने के लिए उलटा जोड़ दिया जाता है।


जेली में OEIS सूत्र का कार्यान्वयन वास्तव में कम हो सकता है।
यति दिनांक 23'16

@TuukkaX हो सकता है। मैं कठिन योग के लिए एक ऊपरी सीमा चुनने के लिए काफी थक गया हूं।
पुरकाकूदरी

@TuukkaX मैंने इसे आज़माया, लेकिन मुझे ऐसा होता नहीं दिख रहा है। मुझे यकीन है कि डेनिस और सह इसे 5 बाइट्स में लागू करेंगे।
पुरकाकूदरी

वर्तमान में आप भाग्यशाली हैं ;)
geisterfurz007

7

जावास्क्रिप्ट (ईएस 6), 53 बाइट्स

n=>[...Array(n)].map(g=(j=1,i)=>j>i?0:j&i|g(j+j,i+1))

0 अनुक्रमित। ऐसा अक्सर नहीं होता है कि मैं एक पैरामीटर के रूप में एक पुनरावर्ती फ़ंक्शन का उपयोग करता हूं map


4

मैथेमेटिका, 46 बाइट्स

Plus@@@Table[BitAnd[n+k,2^k],{n,0,#},{k,0,n}]&

एक nonnegative पूर्णांक #को इनपुट के रूप में लेना और 0-अनुक्रम अनुक्रम को #वें पद पर वापस करना है। BitAnd2 की उपयुक्त शक्तियों के साथ (बिटवाइज़ "और") का उपयोग करते हुए ढलान बाइनरी संख्याओं का निर्माण करता है ।


2

पायथन 3, 63 61 बाइट्स

lambda i:[sum(n+k&2**k for k in range(n+1))for n in range(i)]

OEIS से सूत्र का उपयोग करता है।

लुइस मेंडू के लिए -2 बाइट्स धन्यवाद ! i+1->i


क्या आप बता सकते हैं कि आप Sum_{ k >= 1 such that n + k == 0 mod 2^k } 2^kउस सरल बिटवाइज़ फॉर्मूला से कैसे गए ?
SMLS

@smls यह सीधे ऊपर विकर्ण की गणना करता है। मैंने वास्तव में सोचा था कि यह अन्य रूप से अधिक स्पष्ट था।
नील

1

पीएचपी, 68 बाइट्स

for(;$n++<$argv[1];print$s._)for($s=$i=0;$i<$n;)$s|=$n+$i-1&1<<$i++;

कमांड लाइन तर्क से इनपुट लेता है, अंक को अंडरस्कोर द्वारा अलग करता है। के साथ चला -r


1

MATL , 18 17 बाइट्स

:q"@tt:+5MW\~fWs+

इसे ऑनलाइन आज़माएं!

यह OEIS से सूत्र का उपयोग करता है:

a(n) = n + Sum_{ k in [1 2... n] such that n + k == 0 mod 2^k } 2^k

कोड:

:q"     % For k in [0 1 2 ...n-1], where n is implicit input
  @     %   Push k
  tt    %   Push two copies
  :     %   Range [1 2 ... k]
  +     %   Add. Gives [n+1 n+2 ... n+k]
  5M    %   Push [1 2... k] again
  W     %   2 raised to that
  \     %   Modulo
  ~f    %   Indices of zero entries
  W     %   2 raised to that
  s     %   Sum of array
  +     %   Add
        % End implicitly. Display implicitly

0

पर्ल 6 , 59 43 बाइट्स

{map ->\n{n+sum map {2**$_ if 0==(n+$_)%(2**$_)},1..n},^$_}

{map {sum map {($_+$^k)+&2**$k},0..$_},^$_}

OESIS पृष्ठ से सूत्र का उपयोग करता है।
अद्यतन: TuukkaX के पायथन उत्तर से बिटवाइज़-और आधारित सूत्र पर स्विच किया गया

पर्ल 6 , 67 बाइट्स

{map {:2(flip [~] map {.base(2).flip.comb[$++]//""},$_..2*$_)},^$_}

Naive solution।
उन संख्याओं को परिवर्तित करता है जो विकर्ण का आधार 2 है, प्रत्येक का सही अंक लेता है, और परिणाम को वापस बेस 10 में परिवर्तित करता है।



0

आर, 66 बाइट्स

function(n,k=0:length(miscFuncs::bin(n-1)))sum(bitwAnd(k+n-1,2^k))

फ़ंक्शन जो बाइनरी में प्रतिनिधित्व की लंबाई की गणना करने के binलिए miscFuncsपैकेज से फ़ंक्शन का उपयोग करता है nऔर फिर OEIS फ़ार्मुलों में से एक का उपयोग करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.