เรียงลำดับตัวเลขตามการเกิดขึ้นครั้งแรกใน pi


17

รับจำนวนที่ไม่ใช่เชิงลบnเรียงลำดับตัวเลขของnโดยเกิดขึ้นครั้งแรกของพวกเขาในปี่

การป้อนข้อมูลสามารถนำมาผ่านการโต้แย้งฟังก์ชั่น cli หรือ STDIN และเป็นสตริงถ่าน [] หรือจำนวนเต็ม คุณสามารถส่งออกผ่านทางค่าตอบแทนสถานะทางออกหรือ STDOUT



เราสามารถรับอินพุตและเอาต์พุตเป็นสตริงหรือเป็นอาร์เรย์ของตัวเลขได้หรือไม่
ETHproductions

@ETHproductions ชี้แจง
Roman Gräf

19
กรณีทดสอบสองสามจะดี
เดนนิส

1
ตอนนี้มีคำตอบ 12 ข้อที่มีอยู่แล้วซึ่งทั้งหมดทำหน้าที่เหมือนกันหากคุณยังไม่ชัดเจนในสิ่งที่ถูกถามนั่นก็ไม่ใช่ปัญหาของคำถาม
Leun Nun

คำตอบ:


14

Pyth, 8 6 ไบต์

ox+.n0

ลองที่นี่

-1 ขอบคุณLeaky Nun : อินพุตจะให้ข้อมูล0ถ้าจำเป็น
Trivial -1 ขอบคุณJakube : ไม่ต้องการ Backtick (อาฉันพลาดได้ยังไงดี?!?)


Woohoo นี่ก็เต้น 05AB1E! แก้ไข: มันไม่ชนะ 05AB1E และฉันไม่ต้องการขโมย :(
Erik the Outgolfer

3
เจอแล้ว. คุณไม่ต้องการ0ตอนท้าย ถ้าใส่มี0ที่0จะให้บริการโดยการป้อนข้อมูล; หากอินพุตไม่มี0มันจะไม่สำคัญ
Leun Nun

3
@LeakyNun และคุณสามารถบันทึก backtick:ox+.n0
Jakube

ตกลงไม่สนใจความคิดเห็นแรกขอบคุณ LeakyNun และ Jakube ฉันชนะ 05AB1E อีกครั้งฉันหวังว่าจะดีในครั้งนี้
Erik the Outgolfer

1
นั่นเป็นจำนวนอินพุตที่สวยงามโดยนัย
isaacg


18

05AB1E , 10 9 7 ไบต์

บันทึก 1 ไบต์ขอบคุณLeaky Nunสังเกตว่าการกรองรายการที่ซ้ำซ้อนออกไปนั้นไม่จำเป็น
ที่บันทึกไว้ 2 ไบต์ขอบคุณที่Adnan

ž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†Jfor 9 bytes
Leaky Nun

@LeakyNun: โอ้ใช่การทำซ้ำไม่สำคัญ ขอบคุณ :)
Emigna

3
คุณสามารถใช้žqแทนได้13žsหรือไม่?
Adnan

@Adnan ดูเหมือนจะไม่ทำงาน
Erik the Outgolfer

2
@Adnan: ใช่แน่นอน ผมไม่ทราบว่ามีพี่คงอีก :)
Emigna

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

ฉันคิดว่า3145926870สามารถแสดงเป็นสตริงฐานสี่หลัก -250 (หมายถึงมันใช้เวลา 6 ไบต์แทน 10) แต่ฉันไม่แน่ใจว่าจะบีบอัดได้อย่างไร
ETHproductions

เยลลี่ไม่มีบิวอินสำหรับปี่หรือไม่?
คณิตศาสตร์ junkie

@mathjunkie แต่ Jelly นั้นไม่ค่อยมีประสิทธิภาพในการจัดการสตริง
Leaky Nun

@mathjunkie ใช่ แต่กิจวัตรในรายการใช้จำนวนไบต์มากเกินไป
fireflame241

“ṀSṪw’3145926870จะทำให้คุณ
Leun Nun

8

Japt , 10 9 ไบต์

8 ไบต์ของรหัส +1 สำหรับ-Pธง

–!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

เยลลี่ ,  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(sqrt ของ14592468760081) ยังคงเป็นตัวเลขในฐาน3 250
Jonathan Allan

ในคำอธิบายของคุณจะถูกใส่ผิดที่
Erik the Outgolfer

@EriktheOutgolfer - ขอบคุณปรับแล้ว
Jonathan Allan

6

CJam , 15 12 10 8 ไบต์

r{P`#c}$

ลองออนไลน์!

-3: ใช้สตริงที่ขึ้นอยู่กับPตัวแปร pi แทนตัวอักษร
-2: ตัดสินใจฉันไม่จำเป็นต้องไม่ซ้ำกันเลยเนื่องจากการค้นหาดัชนีจะเกิดขึ้นครั้งแรกอย่างไรก็ตาม -2: ขอบคุณjimmy23013สำหรับแนวทางที่น่าสนใจโดยใช้ x mod 65536

คำอธิบาย:

r {P` # c} $ e # รับโทเค็นอินพุต
re # ใช้จำนวนเต็มเป็นสตริง
 {P` # c} e # คีย์การเรียงลำดับ:
  P e # Push P (ค่าเริ่มต้นคือ 3.141592653589793)
   `e # แปลงเป็นตัวแทนสตริง
    # e # ค้นหาดัชนีของ char ในสตริงที่เราทำ
         e # A '.' จะไม่ถูกค้นพบในจำนวนเต็ม แต่มันไม่สำคัญเนื่องจากการเลื่อนจะรักษาการเรียงลำดับในอุดมคติ
         e # A '0' จะถูกจัดทำดัชนีเป็น -1
     ce # แปลงดัชนีเป็นถ่าน
         e # นี่เป็นครั้งแรกที่คำนวณดัชนี% 65536 แล้วแปลงเป็นถ่าน เราต้องการสิ่งนี้เพราะมิฉะนั้น 0 จะถูกจัดทำดัชนีเป็น -1 นั่นคือดัชนีที่เล็กที่สุด
         e # เราไม่จำเป็นต้องแปลงกลับเป็นจำนวนเต็มเนื่องจากเราสามารถใช้การเรียงลำดับพจนานุกรม
       $ e # เรียงลำดับด้วยรหัส


1
Yay, เต้น MATL :)
Erik the Outgolfer


@ jimmy23013 ว้าวช่างฉลาดจริงๆ มันเกือบจะเหมือนกับว่ามี builtin สำหรับ int (x)% 65536 และciจะแปลงกลับเป็นจำนวนเต็ม
Erik the Outgolfer

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 ไบต์ด้วยกัน)
Christoph

5

C, 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 :-)
โยฮัน du Toit

MSVC อาจไม่ชอบความจริงที่ว่า gcc ช่วยให้คุณสามารถcharเข้าchar*pและออกchar*t
แมวป่า


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

C # Interactive, 37 36 Bytes

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

ที่จริงคุณจะต้องดำเนินการใน C # โต้ตอบเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง แต่ผมคิดว่านี่คือสิ่งที่คุณหมายกับสถานะทางออก ตัวแปรiจริง ๆ แล้วคือตัวแปรอินพุต (สามารถเป็นตัวอย่างของสตริงได้) ดังนั้นโดยพื้นฐานแล้วมันคือพารามิเตอร์เมธอด

ฉันคิดว่ารหัสนั้นค่อนข้างตรงไปตรงมา


ในกรณีที่เป็น3?
พอล

1
@Paul ไม่จำเป็นเพราะมันส่งคืน -1 ถ้าไม่พบองค์ประกอบ
MetaColon

นี่เป็นเพียงตัวอย่างของรหัส แต่ฉันค่อนข้างแน่ใจว่าแม้จะอยู่ในรูปแบบโต้ตอบคุณต้องระบุสาเหตุว่าทำไมiอยู่ที่ไหน นอกจากนี้หากคุณกำลังบอกว่า C # คุณต้องรวมusing System.Linq;เข้าไปในจำนวนไบต์ อย่างไรก็ตามหากเป็นแบบ Interactive คุณควรระบุภาษาเป็น C # Interactive ไม่ใช่ C # เท่านั้น
TheLethalCoder

@TheLethalCoder ฉันอัปเดตเป็น C # Interactive การใช้ไม่จำเป็นในการโต้ตอบเนื่องจากมันถูกรวมไว้โดยอัตโนมัติ
MetaColon

2

05AB1E , 5 6 ไบต์ (ไม่ใช่การลบ)

ต้องตระหนัก0ว่าไม่ได้อยู่ในค่าคงที่ความยาวมาตรฐาน pi

Σтžsyk

ลองออนไลน์!

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

คุณควรทำเครื่องหมายว่าไม่ใช่การแข่งขันเนื่องจากΣใหม่กว่าความท้าทาย
Emigna

@Emigna ทำเครื่องหมายขอบคุณ แต่หลังจากการแก้ไขที่ต้องการจะไม่สั้นกว่าคำตอบที่ชนะอีกต่อไป):
kalsowerus

น่าเสียดายที่คุณต้องการศูนย์สำหรับวิธีนี้ มันควรจะดีที่สุดสำหรับภาษานี้อย่างน้อย ไม่สามารถขอมากกว่านั้น :)
Emigna


1

Java 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

Clojure, 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;

ยังคงพ่ายแพ้โดยpreg_filterแต่ฉันคิดว่ามันค่อนข้างดีเอง บางทีใครบางคนสามารถตีกอล์ฟออกจากไบต์


$c!=$d?:print$dเป็นทางเลือกสำหรับ$c==$d&&print$dฉันเท่านั้นที่เห็นในช่วงเวลา
JörgHülsermann

1
_3145926870แทน `" 3145926870 "บันทึก 1 Byte
JörgHülsermann

for(;(~$d=$argn[$j++])?:~$c=_3145926870[++$i+$j=0];$c!=$d?:print$d);นอกจากนี้ยังเป็นทางเลือกในการทำงาน
JörgHü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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.