একটি অনুসন্ধান সূচি তৈরি করুন


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                     

আমি কি আউটপুটে শীর্ষস্থানীয় স্থান রাখতে পারি?
এরিক দি আউটগল্ফার

আউটপুট ফর্ম্যাটটি কি কঠোর হতে হবে?
ফাঁস নুন

পুনঃটুইট যোগ করা হয়েছে।
অ্যাডম

পছন্দ করেছেন
অ্যাডম

2
মুদ্রণযোগ্য আসকি নয় এমন চরিত্রগুলির জন্য কি এই কাজ করা দরকার? এমন কোনও অক্ষর রয়েছে যা আমরা ধরে নিতে পারি যে স্ট্রিংটিতে থাকবে না (বিশেষত শ্বেতস্থান)?
FryAmTheEggman

উত্তর:


6

এপিএল (ডায়ালগ) , 4 বাইট

,⌸

এটি অনলাইন চেষ্টা করুন!

( 3 বাইট হয়)

1-ভিত্তিক সূচক ব্যবহার করে।

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



4
@ আদম আমি সন্দেহ এই প্রতিদ্বন্দ্বিতা APL জন্য 😉 বিশেষভাবে উপযোগী করা হয়েছে
ঊরীয়েল

@ উরিল অন্যদিকে। আমি এপিএল ঝরঝরে কী করতে পারে তা দেখছিলাম এবং ভেবেছিলাম যে এটি একটি ভাল চ্যালেঞ্জ তৈরি করবে।
অ্যাডম

আমি সেখানে 4 বাইট দেখতে পাচ্ছি।
অ্যাডম

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

গণিত, 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

কিউবিআইসি , 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.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.