पाई में उनकी पहली घटना के आधार पर अंकों को क्रमबद्ध करें


17

एक गैर-नकारात्मक संख्या को देखते हुए n, पीn में उनकी पहली घटना के अंकों को क्रमबद्ध करें ।

इनपुट को फ़ंक्शन क्ली तर्क, या एसटीडीआईएन और एक स्ट्रिंग, चार [] या पूर्णांक के रूप में लिया जा सकता है। आप वापसी मूल्य, निकास स्थिति या STDOUT के माध्यम से आउटपुट कर सकते हैं।



क्या हम इनपुट और आउटपुट को स्ट्रिंग्स के रूप में या अंक के सरणियों के रूप में ले सकते हैं?
ETHproductions

@ETHproductions स्पष्ट।
रोमन ग्रैफ

19
कुछ परीक्षण मामले अच्छे होंगे।
डेनिस

1
अब जब 12 उत्तर पहले से मौजूद हैं, जिनमें से सभी एक ही कार्य कर रहे हैं, यदि आप अभी भी अस्पष्ट हैं कि क्या पूछा जा रहा है, तो यह प्रश्न की समस्या नहीं है।
लीक नून

जवाबों:


14

पायथ, 8 6 बाइट्स

ox+.n0

इसे यहाँ आज़माएँ।

-1 लीक नन के लिए धन्यवाद : इनपुट 0कभी भी ज़रूरत पड़ने पर प्रदान करेगा ।
तुच्छ -1 जैकब का धन्यवाद : बैकटिक की जरूरत नहीं है (आह, मुझे यह कैसे याद आया, एचओवी?)?)।


वाह, यह भी 05AB1E धड़कता है! संपादित करें: यह 05AB1E को नहीं हराता है, और मैं चोरी नहीं करना चाहता :(
आउटगॉल्फ

3
मुझे यह मिला। आप 0अंत में की जरूरत नहीं है । यदि इनपुट में ए है 0, 0तो इनपुट द्वारा प्रदान किया जाएगा; यदि इनपुट में ए नहीं है 0, तो इससे कोई फर्क नहीं पड़ेगा।
लीकी नून

3
@LeakyNun और आप बैकटिक को भी बचा सकते हैं:ox+.n0
Jakube

ठीक है, पहली टिप्पणी की अवहेलना, लीकेन और जेक्यूब के लिए धन्यवाद, मैंने फिर से 05AB1E को हराया, मुझे इस बार अच्छे की उम्मीद है।
आउटगोल्फर

1
यह एक शानदार मात्रा में निहित इनपुट है।
isaacg


18

05AB1E , 10 9 7 बाइट्स

लीक हुए नन को 1 बाइट धन्यवाद कहा कि डुप्लिकेट को फ़िल्टर करना अनावश्यक है। अदनान
के लिए धन्यवाद 2 बाइट्स बचाए

žqRvy†J

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

व्याख्या

žq       # push pi to 15 decimals (contains all digits but 0)
  R      # reverse
   vy    # for each char in pi
     †J  # move it's occurrences in the input to the front

13žsRvy†J9 बाइट्स के लिए
लीक नन

@ लीक: ओह, हाँ, डुप्लिकेट कोई फर्क नहीं पड़ता। धन्यवाद :)
एमिग्ना

3
के žqबजाय आप का उपयोग कर सकते हैं 13žs?
अदनान

@ अदनान यह काम नहीं करता है।
एलिक्जेल आउट आउटोलफर

2
@ अदनान: हां बिल्कुल। मुझे एहसास नहीं था कि एक और पीआई स्थिर था :)
एमिग्ना

8

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

“ṀSṪw’ṾiµÞ

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

अंकों की एक स्ट्रिंग के रूप में इनपुट लेता है।

-3 बाइट्स @ETHproductions के लिए धन्यवाद

व्याख्या

“ṀSṪw’ṾiµÞ
        µ  - Separate chain into function “ṀSṪw’Ṿi and sort atom Þ.
         Þ - Sort the input by
       i   - Each digit's index in: 
“ṀSṪw’     - the literal 3145926870 ...
      Ṿ    - transformed into the list 3,1,4,5,9,2,6,8,7,0

मुझे लगता है कि 31459268704-अंकों के बेस -505 स्ट्रिंग के रूप में प्रतिनिधित्व किया जा सकता है (जिसका अर्थ है कि यह 10 के बजाय 6 बाइट्स लेता है), लेकिन मुझे यकीन नहीं है कि इसे इस तरह से कैसे कंप्रेस किया जाए।
ETHproductions

क्या जेली के पास पी के लिए बिलिन नहीं है?
गणित दीवाने

@ मैथजंकी लेकिन जेली स्ट्रिंग हेरफेर पर बहुत कुशल नहीं है
लीक नून

@mathjunkie हाँ, लेकिन सूची में हेरफेर बहुत सारे बाइट्स
लेती है

“ṀSṪw’आपको दे देंगे 3145926870
लीकेई नून

8

जाप , 10 9 बाइट्स

-Pध्वज के लिए कोड के 8 बाइट, +1 ।

–!bMP+U

इसे ऑनलाइन आज़माएं! एक स्ट्रिंग के रूप में इनपुट लेता है।

व्याख्या

–!bMP+'0  // Implicit input

¬          // Split the input into chars.
 ñ         // Sort each char in the resulting list by
  !b       //   its index in
    MP+U   //     Math.PI + the input.
-P         // Join the result back into a single string.
           // Implicit: output result of last expression

7

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

f=
s=>[...s].sort((a,b)=>k[a]-k[b],k=`9150236874`).join``
<input oninput=o.textContent=f(this.value)><pre id=o>

I / O के लिए स्ट्रिंग्स का उपयोग करता है।


7

जेली ,  8  7 बाइट्स

डेनिस के लिए 1 बाइट धन्यवाद ( 0इनपुट में मौजूद किसी भी तरह का उपयोग करें , चतुर।)

ØP;ṾiµÞ

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

कैसे?

ØP;ṾiµÞ - Main link: string s (char list)
     µÞ - sort the characters, c, of s by:
    i   -   first index of c in:
ØP      -     pi yield: 3.141592653589793
  ;     -     concatenate with left: [3.141592653589793, c]
   Ṿ    -     un-evaluate: "3.141592653589793,c" (a char list with the digit character c)
                                if any c is 0 ^ it will then be to the right of all others

... और वहाँ मैं वर्गों की खोज कर रहा था - 3820009(वर्गमीटर 14592468760081) अभी भी 3आधार में अंक है 250
जोनाथन एलन

अपने विवरण में गलत स्थान पर है।
एरिक आउटोलॉफ़र

@EriktheOutgolfer - धन्यवाद, समायोजित।
जोनाथन एलन

6

सीजाम , 15 12 10 8 बाइट्स

r{P`#c}$

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

-3: Pशाब्दिक के बजाय पाई चर पर आधारित एक स्ट्रिंग का उपयोग करें ।
-2: तय किया है कि मैं सभी को विशिष्ट करने की जरूरत नहीं है, क्योंकि एक सूचकांक खोजने के लिए पहली घटना वैसे भी होती है। -2: x mod 65536 का उपयोग करके एक दिलचस्प दृष्टिकोण के लिए jimmy23013 का धन्यवाद ।

स्पष्टीकरण:

r {P` # c} $ e # एक इनपुट टोकन लेता है
पुनः # पूर्णांक को एक स्ट्रिंग के रूप में लें
 {P` # c} e # सॉर्टिंग कुंजी:
  पी ई # पुश पी (3.141592653589793 पर डिफ़ॉल्ट)
   `ई # स्ट्रिंग प्रतिनिधित्व में कनवर्ट करें
    # ई # हमारे द्वारा बनाए गए स्ट्रिंग में चार का सूचकांक खोजें
         ई # ए '।' एक पूर्णांक में कभी नहीं मिलेगा, लेकिन यह कोई फर्क नहीं पड़ता, क्योंकि स्थानांतरण आदर्श छँटाई को संरक्षित करता है।
         e # A '0' को -1 के रूप में अनुक्रमित किया जाएगा।
     CE # कन्वर्ट इंडेक्स को चार
         e # यह पहली बार इंडेक्स% 65536 की गणना करता है, और फिर चार्ट में परिवर्तित होता है। हमें इसकी आवश्यकता है क्योंकि अन्यथा 0 को -1, यानी सबसे छोटे सूचकांक के रूप में अनुक्रमित किया जाएगा।
         e # हमें पूर्णांक में बदलने की आवश्यकता नहीं है, क्योंकि हम लेक्सोग्राफिक सॉर्टिंग का उपयोग कर सकते हैं।
       $ e # कुंजी के साथ क्रमबद्ध करें


1
आहा, Matl :) धड़कता है
एरिक Outgolfer


@ jimmy23013 वाह यह चतुर है। यह लगभग ऐसा है कि इंट (x)% 65536 के लिए एक बिलिन है, और ciयहां तक ​​कि पूर्णांक में बदल जाएगा।
एरिक आउटगोल्फ

5

PHP, 71 बाइट्स

Regex समाधान कम है

for(;~$c=_3145926870[$i++];)echo str_repeat($c,substr_count($argn,$c));

या

for(;~$c=_3145926870[$i++];)echo str_pad("",substr_count($argn,$c),$c);

ऑनलाइन संस्करण

PHP, 78 बाइट्स

for(;~$c=$argn[$i++];)$j[strpos("3145926870",$c)].=$c;ksort($j);echo join($j);

PHP, 112 बाइट्स

$a=str_split($argn);usort($a,function($x,$y){return strpos($d="3145926870",$x)<=>strpos($d,$y);});echo join($a);

ऑनलाइन संस्करण


मैंने एक 69 बाइट समाधान जोड़ा है । हो सकता है कि हम इसे एक साथ 66 बाइट पर ले जाएं;)
क्रिस्टोफ

5

सी, 103 97 बाइट्स

char*p="3145926870";s(*a,*b){return strchr(p,*a)-strchr(p,*b);}f(char*t){qsort(t,strlen(t),1,s);}

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


धन्यवाद, @ceilingcat, MSVC को यह बिल्कुल पसंद नहीं है, मुझे लगता है कि मुझे gcc के साथ प्रोटोटाइप करना चाहिए :-)
जोहान डू टिट

MSVC शायद नहीं होगा तथ्य यह है कि जीसीसी आप खाई की सुविधा देता है की तरह charमें char*pऔरchar*t
ceilingcat


3

MATL , 14 बाइट्स

YP99Y$uj!y=sY"

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

एक उदाहरण के साथ स्पष्टीकरण

प्रतीक ;का उपयोग मैट्रीस में पंक्ति विभाजक के रूप में किया जाता है। तो [1 2 3]एक पंक्ति वेक्टर है, [1; 2; 3]एक स्तंभ वेक्टर है, और [1 2; 3 4]एक वर्ग मैट्रिक्स है। उत्तरार्द्ध को भी स्पष्टता के लिए प्रतिनिधित्व किया जा सकता है, जैसा कि

[1 2;
 3 4]

2325उदाहरण के रूप में इनपुट पर विचार करें ।

YP     % Push approximation of pi as a double (predefined literal)
       % 3.14159265358979
99Y$   % Variable-precision arithmetic with 99 digits. Gives a string.
       % The input 3.14159265358979 is recognized as representing pi
       % STACK: '3.141592653589793238462 ··· 707'
u      % Unique entries, keeping order of their first appearance
       % STACK: '3.145926870'
j      % Input line as a string
       % STACK: '3.145926870', '2352'
!      % Transpose
       % STACK: '3.145926870', ['2'; '3';'5'; '2']
y      % Duplicate the second-top element in the stack
       % STACK: '3.145926870', ['2'; '3';'5'; '2'], '3.145926870'
=      % Test for equality, with broadcast. This gives a matrix with
       % all pairwise comparisons)
       % STACK: '3.145926870', [0 0 0 0 0 0 1 0 0 0 0;
       %                        1 0 0 0 0 0 0 0 0 0 0;
       %                        0 0 0 0 1 0 0 0 0 0 0;
       %                        0 0 0 0 0 0 1 0 0 0 0]
s      % Sum of each column
       % STACK: '3.145926870', [1 0 0 0 1 0 2 0 0 0 0]
Y"     % Run-length decoding. Implicitly display
       % STACK: '3522'


2

सी # इंटरएक्टिव, 37 36 बाइट्स

i.OrderBy(c=>"145926870".IndexOf(c))

वास्तव में आपको उचित परिणामों के लिए C # इंटरैक्टिव में इसे निष्पादित करना होगा, लेकिन मुझे लगता है कि यह वही है जो आप निकास स्थिति के साथ थे । चर मैं वास्तव में इनपुट चर है (यह उदाहरण के लिए एक स्ट्रिंग हो सकता है), इसलिए यह मूल रूप से विधि पैरामीटर है।

मुझे लगता है कि कोड ही बहुत सीधे आगे है।


कहाँ है 3?
पॉल

1
@Paul यह neccessary नहीं है, क्योंकि यह तत्व नहीं मिलने पर -1 देता है।
मेटाकालेन

यह कोड का एक स्निपेट है, हालांकि, मुझे पूरा यकीन है कि इंटरैक्टिव में भी आपको यह निर्दिष्ट करना होगा कि iकहीं न कहीं यह इनपुट के रूप में लिया जा सकता है। यदि आप C # कह रहे हैं तो आपको using System.Linq;बाइट की गिनती में शामिल होना होगा। हालाँकि, यदि यह इंटरएक्टिव है, तो आपको भाषा को C # इंटरएक्टिव नहीं केवल C # के रूप में निर्दिष्ट करना चाहिए।
TheLethalCoder

@ TheLethalCoder मैंने इसे C # इंटरएक्टिव में अपडेट किया। इंटरेक्टिव में उपयोग करना neccesaary नहीं है, क्योंकि यह स्वचालित रूप से शामिल है।
मेटाकाॅलोन

2

05AB1E , 5 6 बाइट्स ( नॉनकमेटिंग )

यह महसूस करना था कि 0मानक लंबाई पाई स्थिरांक में मौजूद नहीं है।

Σтžsyk

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

Σтžsyk
Σ      Sort by the result of code
 тžs   Push 100 digits of pi
   yk  Index of digit in pi

आपको इस गैर-प्रतिस्पर्धा को चिह्नित करना चाहिए क्योंकि Σचुनौती से नया है।
एमिगा

@Eigna ने इसे चिह्नित किया, धन्यवाद। लेकिन आवश्यक सुधार के बाद यह अब वैसे भी जीतने वाले उत्तर से कम नहीं है):
कलसोवरस

बहुत बुरा आप इस विधि के लिए शून्य की जरूरत है। यह इस भाषा के लिए कम से कम इष्टतम होना चाहिए। कि अधिक से अधिक :) के लिए पूछना नहीं कर सकता
Emigna

2

PHP, 66 65 बाइट्स

टाइटस की बदौलत बचा 1 बाइट।

while(~$d=_3145926870[++$i])echo preg_filter("/[^$d]/",'',$argn);

1

जावा 7, 110 बाइट्स

String c(String s){String r="";for(char i:"3145926870".toCharArray())r+=s.replaceAll("[^"+i+"]","");return r;}

स्पष्टीकरण:

String c(String s){                       // Method with String parameter and String return-type
  String r="";                            //  Result String
  for(char i:"3145926870".toCharArray())  //  Loop over the characters of "3145926870"
    r+=s.replaceAll("[^"+i+"]","");       //   Append the result-String with all the occurrences of the current character
                                          //  End of loop (implicit / single-line body)
  return r;                               //  Return the result-String
}                                         // End of method

टेस्ट कोड:

इसे यहाँ आज़माएँ।

class M{
  static String c(String s){String r="";for(char i:"3145926870".toCharArray())r+=s.replaceAll("[^"+i+"]","");return r;}

  public static void main(String[] a){
    System.out.println(c("12345678908395817288391"));
  }
}

आउटपुट:

33311145599922688888770

1

क्लोजर, 38 बाइट्स

#(sort-by(zipmap"3145926870"(range))%)

स्ट्रिंग में इनपुट, वर्णों का एक क्रम देता है। zipmapएक "शब्दकोश" ऑब्जेक्ट बनाता है, जिसका उपयोग फ़ंक्शन संदर्भ में भी किया जा सकता है।

(f "1234")
(\3 \1 \4 \2)

यदि इनपुट अंकों को विशिष्ट होने की गारंटी दी जाती है तो आप बस कर सकते हैं #(filter(set %)"3145926870")


1

PHP, 69 68

for(;(~$d=$argn[$j++])||~$c=_3145926870[$i+++$j=0];)$c==$d&&print$d;

फिर भी प्रीग_फिल्टर से पिट गया लेकिन मुझे लगा कि यह अपने आप में काफी अच्छा है। हो सकता है कि कोई व्यक्ति कुछ बाइट्स निकाल सकता है।


$c!=$d?:print$dजैसा कि $c==$d&&print$dमैं केवल क्षण में देख रहा हूं
Jörg Hülsermann

1
_3145926870'' 3145926870 '' के बजाय 1 बाइट
बचाएं

for(;(~$d=$argn[$j++])?:~$c=_3145926870[++$i+$j=0];$c!=$d?:print$d);एक कामकाजी विकल्प भी है
Jörg Hülsermann


0

k, 19 बाइट्स

{x@<"3145926870"?x}

स्पष्टीकरण:

{                 } /function(x)
    "3145926870"?x  /for each x: "3145926870".index(x)
   <                /get indices with which to sort
 x@                 /sort x by those indices
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.