एक सेट की नौवीं सबसेट


13

काम

सेट दिया

S=[1,2,3,4,5,6,7,8]

और एक पूर्णांक

0N<2|S|

Nth सबसेट खोजें।

इनपुट आउटपुट

N को stdin पर अहस्ताक्षरित पूर्णांक के रूप में दिया जाता है। आप अपनी भाषा के लिए उपयुक्त एक प्रारूप में वां सबसेट मुद्रित चाहिए (इसमें शामिल हो सकते हैं [1,2,3], {1,2,3}, [1, 2, 3], 1 2 3, 1,2,3आदि जब तक यह एक मानव पठनीय है के रूप में के लिए पाठ प्रारूप)।

थोड़ा सा सबटेट्स के बारे में

आधार दो में सबसेट और संख्याओं के बीच एक संबंध है। प्रत्येक अंक निर्दिष्ट करता है कि क्या सेट का i th तत्व सबसेट के भीतर है। उदाहरण के लिए 00000000 खाली सेट होगा और 10000001 वाला सबसेट (अंतिम और पहला तत्व) है। आप संख्या 2 को आधार 2 में परिवर्तित करके Nth सब्मिट प्राप्त करते हैं और फिर सब्मिट में वे सभी तत्व शामिल होते हैं जहाँ d i > 0 होता है । इस प्रकार 3 सबसेट (3 = 00000011) शामिल है । सबसे सही अंक # 0 अंक है। छापना ठीक है । सेट को क्रमबद्ध नहीं करना है।

di
[1,8]
di>0
[1,2][2,1]

परिशिष्टों:

हां, सेट तय है 1..8। सेट इनपुट का हिस्सा नहीं है। इनपुट सिर्फ N है

हां, आप वैकल्पिक इनपुट फ़ॉर्म का उपयोग कर सकते हैं।

सभी एन के लिए सभी अपेक्षित आउटपुट : https://tio.run/##SyotykktLixN/f/fyNS02qIoP8soJd1CwSAg2kY32LPWPPqqb7jg/38A


1
सेट विशेष रूप 1से है 8, या यह कोई सेट है?
जो राजा

2
मुझे आश्चर्य नहीं है कि पहले किसी ने भी नहीं पूछा: क्या आप ऐसे कार्यों को प्रस्तुत करने की अनुमति देने के लिए दयालु होंगे जो इनपुट को तर्क के रूप में लेते हैं और भाषाओं को स्टडिन का उपयोग करने के लिए मजबूर नहीं करते हैं (जो कुछ करने में सक्षम नहीं हैं)? सवाल सबसेट्स के बारे में है और इनपुट्स के साथ नहीं।
ბიმო

5
आपको हर किसी को यह बताने की ज़रूरत नहीं है कि उनका समाधान सही है या नहीं, यह बताने के लिए आप खुद को सीमित कर सकते हैं।
'14

1
चूँकि सेट 1..8 तक सीमित है , जैसे कि आउटपुट "123"असंदिग्ध होगा। क्या यह मान्य है?
अरनौलद

2
क्या हम [1,8] के बजाय 0-अनुक्रमित [0,7] का उपयोग कर सकते हैं?
निकोलग्राफ

जवाबों:


17

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

BUT

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

यह काम किस प्रकार करता है

BUT  Main link. Argument: n

B    Binary; convert n to base 2.
 U   Upend; reverse the resulting array, so it starts with the LSB.
  T  Truth; find all 1-based indices of set bits.

5
लेकिन, लेकिन, लेकिन ...?
अरनौलद

2
@ अरनल्ड बट्ट सब कुछ एक झूठ है! आपको लगता है कि सब कुछ बाइनरी है, एह? खैर ... कि upended सत्य है! तो, नहीं, सब कुछ द्विआधारी नहीं है। ग्रे क्षेत्र में आपका स्वागत है!
निकोलगर्फ़

7

आर , 52 26 बाइट्स

which(intToBits(scan())>0)

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

इनपुट को उसके बिट्स में रूपांतरित करता है और 1-आधारित सूचकांकों को लौटाता है जहां वे हैं TRUE। यह डेनिस के जेली जवाब का एक बंदरगाह बनाता है ।

रिटर्न integer(0), पूर्णांक की खाली सूची, इनपुट के लिए 0


हालांकि इस उत्तर में कोई IFs, ANDs या BUTs नहीं हैं।
एनएमसी




2

K4 , 7 बाइट्स

उपाय:

1+&|2\:

उदाहरण:

पहले 10 ...

q)k)(1+&|2\:)@'!10
`long$()
,1
,2
1 2
,3
1 3
2 3
1 2 3
,4
1 4

स्पष्टीकरण:

1+&|2\: / the solution
    2\: / convert to base-2
   |    / reverse
  &     / indices where true
1+      / add 1



1

भूसी , 5 बाइट्स

`fN↔ḋ

कमांड लाइन तर्क के रूप में इनपुट को स्टड पर ले जाता है ( मुझे आशा है कि यह ठीक है ), इसे ऑनलाइन आज़माएं!

व्याख्या

`fN↔ḋ  -- example input: 6
    ḋ  -- convert to binary: [1,1,0]
   ↔   -- reverse: [0,1,1]
`      -- flip the arguments of
 fN    -- | filter the natural numbers by another list
       -- : [2,3]

1

हास्केल , 55 54 बाइट्स

s n=[x|(x,d)<-zip[8,7..]$mapM(pure[0,1])[1..8]!!n,d>0]

आउटपुट को उल्टे क्रम में सेट करता है, इसे ऑनलाइन आज़माएं!

सामान्य संस्करण, 56 बाइट्स

{मैं}मैं=18

s n=[x|(x,d)<-zip[n,n-1..]$mapM(pure[0,1])[1..n]!!n,d>0]

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

व्याख्या

शब्द mapM (pure [0,1]) [1..n]सूची बनाता है ( n=4) [[0,0,0,0],[0,0,0,1],[0,0,1,0],..,[1,1,1,1]]- यानी। की बाइनरी अभ्यावेदन [0..2^n-1]। इसके साथ अनुक्रमण nहमें द्विआधारी प्रतिनिधित्व देता है n

अब हम zipइसे उलट संख्याओं के साथ कर सकते हैं [1..n]और केवल उन तत्वों को रख सकते हैं जहां बाइनरी-अंक गैर-शून्य है:

 [ x | (x,digit) <- zip [n,n-1,..1] binaryRepN, digit > 0 ]

1

चारकोल , 11 बाइट्स

↓⭆⮌↨N²×ιI⊕κ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। यदि रिक्त स्थान के बिना क्षैतिज रूप से उत्तर को प्रिंट करना स्वीकार्य है तो पहले चरित्र को हटाया जा सकता है। स्पष्टीकरण:

    N       Input as a number
   ↨        Converted to base
     ²      Literal 2
  ⮌         Reversed
 ⭆          Map over bits and join
          κ Current index (0-indexed)
         ⊕  Incremented
        I   Cast to string
       ι    Current bit
      ×     Repeat string
↓           Print vertically








0

पायथन 3.6, 58 बाइट्स

f=lambda n:[8-v for v,i in enumerate(f'{n:08b}')if int(i)]



0

एपीएल + विन, 13 बाइट्स

एन के लिए संकेत:

((8⍴2)⊤⎕)/⌽⍳8

इसे ऑनलाइन आज़माएं! दरियाल क्लासिक के सौजन्य से

स्पष्टीकरण:

((8⍴2)⊤⎕) prompt for N and convert to binary

/⌽⍳8 generate a vector from 1 to 8, reverse and select integers according to 1s in binary

रिवर्स ऑर्डर में सब्मिट करता है



0

ओरेकल SQL, 77 बाइट्स

select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r

एसक्यूएल प्लस में टेस्ट

SQL> var n number
SQL> exec :n:=67;

PL/SQL procedure successfully completed.

SQL> with t as (select ku$_vcnt(1,2,3,4,5,6,7,8) x from dual)
  2  select*from(select rownum r,value(p)from t,table(powermultiset(x))p)where:n=r
  3  /
        67
KU$_VCNT('1', '2', '7')

0

मठगोल्फ , 8 बाइट्स

â^mÉ┤\*─

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

व्याख्या

â         Convert first input to binary list
 ^        Zip with [1,2,3,4,5,6,7,8] (other input)
  mÉ      Map 2D array using the next 3 instuctions
    ┤     Pop from right of array
     \*   Swap top two elements and repeat array either 0 or 1 times
       ─  Flatten to 1D array

वैकल्पिक आउटपुट स्वरूप

अधिक लचीले आउटपुट स्वरूप के साथ (जो मुझे व्यक्तिगत रूप से काफी अच्छा लगता है) मैं 6-बाइट के साथ आ सकता हूं:

â^É┤\*

मैपिंग के बजाय, मैं प्रत्येक के लिए निहित का उपयोग करता हूं, और मैं चपटे को छोड़ देता हूं। आउटपुट इस तरह दिखता है:

[1][2][][4][5][6][7][]


0

एफ # (मोनो) , 45 बाइट्स

let m x=Seq.where(fun y->x>>>y-1&&&1>0)[1..8]

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

मैंने एक सामान्य / पुनरावर्ती कार्य भी कार्यान्वित किया, लेकिन इसकी बहुत बदसूरत और बाइट गिनती बहुत बड़ी है ...

एफ # (मोनो) , 107 बाइट्स

let rec g y i=
 if y>0 then seq{
  if y%2>0 then yield i
  yield!g(y/2)(i+1)
 }else Seq.empty
let f x=g x 1

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


0

05AB1E , 6 बाइट्स

bRSƶ0K

इसे ऑनलाइन आज़माएं या सभी संभावित परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

b         # Convert the (implicit) integer input to binary
          #  i.e. 22 → "10110"
 R        # Reverse it
          #  i.e. "10110" → "01101"
  S       # Convert it to a list of 0s and 1s
          #  i.e. "01101" → ["0","1","1","0","1"]
   ƶ      # Multiply each with its 1-indexed index
          #  i.e. ["0","1","1","0","1"] → [0,2,3,0,5]
    0K    # Remove all 0s (and output implicitly)
          #  i.e. [0,2,3,0,5] → [2,3,5]

0

जावा 8, 58 बाइट्स

n->{for(int i=0;i<8;)if((1&n>>i++)>0)System.out.print(i);}

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

स्पष्टीकरण:

n->{                        // Method with integer as parameter and no return-type
  for(int i=0;i<8;)         //  Loop `i` in the range [0,8):
    if((1&n>>i++)>0)        //   If 1 AND `n` bitwise right-shifted to `i` is larger than 0
                            //   (with `i` increased by 1 afterwards with `i++`)
      System.out.print(i);} //    Print `i+1`
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.