एक अनुक्रमणिका बनाएं


12

एक स्ट्रिंग को देखते हुए, एक ऐसी तालिका लौटाएं, जिसमें पहले स्तंभ में स्ट्रिंग के अनूठे अक्षर होते हैं, और बाद के कॉलम शून्य या एक-आधारित अनुक्रमण का उपयोग करते हुए स्ट्रिंग में उस पत्र के सूचकांकों को सूचीबद्ध करते हैं। क्षैतिज व्हाट्सएप कोई फर्क नहीं पड़ता है, जब तक कि बाएं-सबसे स्तंभ लंबवत रूप से गठबंधन नहीं किया जाता है। संकेत बाएं से दाएं तक आरोही क्रम में होना चाहिए।

उदाहरण

शून्य-आधारित अनुक्रमण और दिए गए "अब्राकद्र" का उपयोग करके, वापस लौटें

a 0 3 5 7 10
b 1 8       
r 2 9       
c 4         
d 6   

एक-आधारित अनुक्रमण और दिए गए "3141592653589793238462643383279503" का उपयोग करते हुए, वापसी:

3  1 10 16 18 25 26 28 34
1  2  4                  
4  3 20 24               
5  5  9 11 32            
9  6 13 15 31            
2  7 17 22 29            
6  8 21 23               
8 12 19 27               
7 14 30                  
0 33                     

क्या मेरे पास आउटपुट में अग्रणी स्थान हो सकते हैं?
आउटगोल्फ

क्या आउटपुट फॉर्मेट सख्त होना चाहिए?
लीक नून

@EriktheOutgolfer हां। जोड़ा गया।
अडंम

@LeakyNun नंबर जोड़ा गया।
अडंम

2
क्या यह उन वर्णों के लिए काम करने की आवश्यकता है जो मुद्रण योग्य एएससीआई नहीं हैं? क्या कोई ऐसा चरित्र है जिसे हम मान सकते हैं कि वह स्ट्रिंग (विशेष रूप से व्हॉट्सएप) में नहीं होगा?
FryAmTheEggman

जवाबों:


6

एपीएल (डायलॉग) , 4 बाइट्स

,⌸

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

( 3 बाइट्स है)

1-आधारित अनुक्रमण का उपयोग करता है।

प्रमुख ऑपरेटर है। यहाँ यह एक राक्षसी ऑपरेटर के रूप में व्यवहार करता है। यह फ़ंक्शन को लागू करता है ,, बाएं तर्क को सही तर्क के साथ, प्रत्येक सही तत्व को उसके सही तर्क में और मूल तर्क में उस अद्वितीय तत्व के सूचकांकों को लागू करता है।


हम्म, इसे स्पष्टीकरण की आवश्यकता है :-)
एडम

4
@ Adám मुझे संदेह है कि यह चुनौती विशेष रूप से APL U
Uriel

@ एरियल दूसरे तरीके से। मैं देख रहा था कि एपीएल बड़े करीने से क्या कर सकता है, और उसने सोचा कि इससे अच्छी चुनौती होगी।
14:27 पर Adám

मैं वहाँ 4 बाइट्स देखता हूं।
14:27 पर Adám

2

हास्केल , 86 बाइट्स

import Data.List
f s=unlines[x:concat[' ':show i|i<-[0..length s-1],s!!i==x]|x<-nub s]

एक फ़ंक्शन को परिभाषित करता है f, जो इस आउटपुट वाले स्ट्रिंग को लौटाता है।

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

कैसे?

import Data.List                                                            -- Imports Data.List. This contains the nub method which is necessary
f s =                                                                       -- Define a function, f, which takes one argument, s
            [                                               |x<-nub s]      -- Loop through nub s with the variable x. Nub removes duplicates from a list, in this case the input.
                     [          |i<-[0..length s-1]        ]                -- Go thourgh the list [0,1,2...] until the length of the input - 1. Basically a indexed for-loop
                                                   ,s!!i==x                 -- Filter out everything where the char at this index isn't x
                      ' ':show i                                            -- i as a string with a space before it
               concat                                                       -- Flatten the whole list
             x:                                                             -- Append x before it
     unlines                                                                -- Insert newlines between every element in the list and flatten it, effectively putting every element on it's own line

2
मुझे नहीं लगता कि मैंने कभी उस टिप्पणी प्रारूप को देखा है जिसका उपयोग हास्केल के लिए किया गया था।
आदम

आपकी आंतरिक सूची की समझ को छोटा किया जा सकता है [' ':show i|(i,c)<-zip[0..]s,c==x]
लाकोनी

2

kdb + / q , 5 बाइट्स

group

बिल्ट फैब हैं

q)group"abracadabra"
a| 0 3 5 7 10
b| 1 8
r| 2 9
c| ,4
d| ,6

मैं आमतौर पर कश्मीर में गोल्फ , लेकिन 2-बाइट कश्मीर संस्करण ( =:) अच्छी तरह से उत्पादन स्वरूपित नहीं करता है

k)=:"abracadabra"
"abrcd"!(0 3 5 7 10;1 8;2 9;,4;,6)

परिणाम बिल्कुल समान हैं, लेकिन स्वरूपण खो गया है। प्रारूप करने के लिए, और रिटर्न ऑब्जेक्ट को हटाने के लिए, हम वास्तव में q संस्करण की तुलना में अधिक बाइट्स उठाते हैं

k)f:{1@.Q.s x;} //11 bytes!
k)f"abracadabra"
a| 0 3 5 7 10
b| 1 8
r| 2 9
c| ,4
d| ,6

हम्म, यह एक शब्दकोश देता है। दिलचस्प।
एडम





0

05AB1E , 14 बाइट्स

ÙvSyQƶ0Ky¸ìðý,

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

व्याख्या

Ùv              # for each unique char y in input
  S             # split input into a list of chars
   yQ           # compare each to y for equality
     ƶ          # multiply each by its 1-based index
      0K        # remove zeroes
        y¸ì     # prepend y to the list of indices
           ðý,  # join by spaces and print

0

गणितज्ञ, 85 बाइट्स

एक-आधारित अनुक्रमण का उपयोग करना

(t=#;j=First/@t~StringPosition~#&/@(s=First/@Tally@Characters@t);Row[Column/@{s,j}])&

0

जावास्क्रिप्ट (ईएस ड्राफ्ट), 77 बाइट्स

s=>s.replace(/./g,(c,i)=>a[c]=(a[c]||c)+` `+i,a={})&&Object.values(a).join`
`

पुराने ब्राउज़रों में 88 बाइट्स:

f=
s=>s.replace(/./g,(c,i)=>a[c]=(a[c]||c)+` `+i,a={})&&Object.keys(a).map(c=>a[c]).join`
`
<input oninput=o.textContent=f(this.value)><pre id=o>



0

QBIC , 95 बाइट्स

dim X(126)[_l;||i=asc(_sA,a,1|)┘X(i)=X(i)+@ `+!a$][_lA||_SA,b,1|i=asc(C)~X(i)<>D|?C,X(i)┘X(i)=@

व्याख्या

यह इस चुनौती पर मेरे उत्तर के महत्वपूर्ण हिस्सों को कॉपी करता है :

dim x(126)      Create an array of 126 elements (one for each ASCII element)
[_l;||          Read cmd line input, loop over its length
i=asc(_sA,a,1|) Read the next char's ascii value
┘               (Syntactic linebreak)
X(i)=           Set the value for this ascii-codepoint to
 X(i)             everything we've put in before
 +@ `             and a literal space
 +!a$             and the current (1-based) index cast as string
 ]              close the FOR loop
 [_lA||         Loop over the original string again (to preserve order of appearance)
 _SA,b,1|       Read 1 char, assign to C$ (note the capital S in the function call,
                this auto-creates C$ abd assigns it the value of the substring-call)
 i=asc(C)       Get the index in our storage array from C$'s ascii value
 ~X(i)<>D       IF the storage array holds data for i (<> D$, which we'll set to "" in a second), 
 |?C,X(i)       THEN PRINT the character, followed by the indices saved for this char
 ┘              (Syntactic linebreak)
 X(i)=@         Clear out the data stored for C$
                @ declares a string lit, ` would close it and that gets auto-added at EOF, 
                creating the literal @`, which gets assigned to D$

नमूना रन:

Command line: abracadabra
a              1 4 6 8 11
b              2 9
r              3 10
c              5
d              7

0

सी (क्लैंग) , 176 बाइट्स

G(S,V,c,g,i,H,L)char*S,*V;{for(V=malloc(8),H=strlen(S),c=g=-1;++g<H;){if(strchr(V,L=S[g]))continue;printf("%c ",V[c++]=L);for(i=-1;++i<H;printf(S[i]==L?"%d ":"",i));puts("");}}

बेशक यह यहां का सबसे लंबा जवाब है ...

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


जावा समाधान कहाँ है?
अदम


0

पायथन 3, 111 106 बाइट्स

def q(f):
 d={a:[]for a in f}
 for a,b in enumerate(f):d[b]+=[a]
 [print(p,*d.pop(p))for p in f if p in d]

repl.it


0

सी # , 138 बाइट्स

using System.Linq;s=>Console.Write(string.Join("\n",s.Distinct().Select(c=>c+string.Join("",s.Select((d,i)=>d==c?i:-1).Where(i=>i>-1)))));

0

एफ # , 120 बाइट्स

let f s=s|>Seq.indexed|>Seq.groupBy(fun(a,b)->b)|>Seq.iter(fun(a,b)->
 printf"\n%c"a 
 Seq.iter(fun(c,_)->printf"%i"c)b)

अधिक पठनीय संस्करण:

let f s =
    s
    |> Seq.indexed
    |> Seq.groupBy (fun (idx, char) -> char)
    |> Seq.iter (fun (char, charIdxSeq) ->
         printf "\n%c" char 
         Seq.iter (fun (idx, _) -> printf "%i" idx) charIdxSeq)

Seq.indexed एक नया अनुक्रम बनाता है जिसमें ट्यूपल्स होते हैं जो मूल तत्व से बने होते हैं और यह मूल अनुक्रम में 0 आधारित सूचकांक होता है।

बाकी काफी आत्म व्याख्यात्मक है जो गोल्फ के लिए अच्छी बात नहीं है!




0

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

§mȯ§:;ms¥u

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

नोट: भूसी (या कम से कम कमांड) ¥ ) इस चुनौती से नया है।

व्याख्या

§mȯ§:;ms¥u  Implicit input, say S = "ababbc".
         u  Remove duplicates: "abc"
§m          Map over this string:
             Argument is a character, say 'b'.
        ¥    1-based indices in S: [2,4,5]
      ms     Convert each to string: ["2","4","5"]
     ;       Wrap argument in a string: "b"
  ȯ§:        Prepend to list of index strings: ["b","2","4","5"]
            Result is a list of lists of strings
             [["a","1","3"],["b","2","4","5"],["c","6"]]
            Implicitly print, separating strings by spaces and lists by newlines.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.