ตำแหน่งที่หมุนของจำนวนเต็ม


20

ท้าทาย:

การป้อนข้อมูล:

รายการที่เรียงลำดับของจำนวนเต็มบวก

เอาท์พุท:

จำนวนของจำนวนเต็มซึ่งยังคงอยู่ที่ดัชนีเดียวกันแน่นอนหลังจากหมุนตัวเลขในแต่ละจำนวนเต็มจำนวนดัชนีของมันไปทางซ้ายและเรียงลำดับรายการแก้ไขอีกครั้ง

ตัวอย่าง:

อินพุต: [8,49,73,102,259,762,2782,3383,9217,37846,89487,7471788]
เอาต์พุต (การจัดทำดัชนีตาม 0): 6
เอาท์พุท (การจัดทำดัชนีที่ 1):5

ทำไม?

การจัดทำดัชนีแบบ 0:

After rotating each: [8,94,73,102,592,276,8227,3338,9217,63784,89487,7887471]
Sorted again:        [8,73,94,102,276,592,3338,8227,9217,63784,89487,7887471]

Input indices:        0  1  2   3   4   5    6    7    8     9    10      11
Original input-list: [8,49,73,102,259,762,2782,3383,9217,37846,89487,7471788]
Modified list:       [8,73,94,102,276,592,3338,8227,9217,63784,89487,7887471]
Modified indices:     0  2  1   3   5   4    7    6    8     9    10      11
Equal indices:        ^         ^                      ^     ^     ^       ^

So the output is: 6

การจัดทำดัชนีแบบ 1:

After rotating each: [8,49,37,021,925,762,2278,3383,2179,37846,94878,8874717]
Sorted again:        [8,(0)21,37,49,762,925,2179,2278,3383,37846,94878,8874717]

Input indices:        1  2  3   4   5   6    7    8    9    10    11      12
Original input-list: [8,49,73,102,259,762,2782,3383,9217,37846,89487,7471788]
Modified list:       [8,21,37,49,762,925,2179,2278,3383,37846,94878,8874717]
Modified indices:     1  4  3  2   6   5    9    7    8    10    11      12
Equal indices:        ^     ^                               ^     ^       ^

So the output is: 5

กฏท้าทาย:

  • รายการอินพุตรับประกันว่าจะมีจำนวนเต็มบวกเท่านั้น
  • รายการอินพุตรับประกันว่าจะเรียงลำดับจากต่ำสุดไปสูงสุด
  • รายการอินพุตรับประกันว่ามีอย่างน้อยสองรายการ
  • ดังที่คุณเห็นด้านบนอนุญาตให้ทำดัชนีทั้งแบบ 0 และ 1 ได้ โปรดระบุในคำตอบของคุณว่าคุณใช้สองในข้อใดเนื่องจากเอาต์พุตอาจแตกต่างกันไป!
  • ชั้นนำ0หลังจากหมุนจะถูกละเว้นซึ่งสามารถมองเห็นได้ด้วยตัวอย่างเช่น 1 ตามข้างต้นที่จำนวนเต็ม102จะกลายเป็น02121หลังจากหมุนและได้รับการรักษาแล้ว
  • จำนวนเต็มรับประกันว่าจะไม่ซ้ำกันในรายการอินพุตและรับประกันว่าจะไม่ซ้ำกันหลังจากการหมุนเสร็จสมบูรณ์
  • โปรดทราบว่าเราดูที่ตำแหน่งของจำนวนเต็มที่หมุนแล้วเท่านั้นซึ่งสัมพันธ์กับตำแหน่งของอินพุตไม่ใช่กับค่าของรายการอินพุต ในการชี้แจงสิ่งที่ผมหมายถึงนี้ด้วยการป้อนข้อมูลรายการ[1234,3412]และการจัดทำดัชนี 1 ตามรายการกลายเป็นหลังจากการหมุนแต่ละจำนวนเต็มของมันจำนวนดัชนีครั้งและจากนั้นเมื่อเรียงกลายเป็น[2341,1234] [1234,2341]แม้ว่าทั้งรายการอินพุตดั้งเดิมและรายการหมุนจะมีจำนวนเต็มที่1234ตำแหน่งนำ แต่ก็ไม่เหมือนกัน! หมุน1234เป็น3412ก่อน ดังนั้นเอาต์พุต 1 ดัชนีสำหรับรายการอินพุตนี้จึง0เนื่องจากจำนวนเต็มสองตัวได้เปลี่ยนตำแหน่งไปแล้ว
  • อินพุตมีความยืดหยุ่น สามารถเป็นรายการ / สตรีม / อาร์เรย์ของจำนวนเต็ม / สตริง / ดิจิตอาร์เรย์ ฯลฯ กรุณาระบุสิ่งที่คุณใช้ถ้าคุณไม่ใช้อินพุตเป็นจำนวนเต็ม

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
    อย่าปล่อยให้ภาษาโค้ดกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานใช้สำหรับคำตอบของคุณด้วยกฎ I / O เริ่มต้นดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและประเภทผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ (เช่นTIO )
  • นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ

กรณีทดสอบ:

Input: [8, 49, 73, 102, 259, 762, 2782, 3383, 9217, 37846, 89487, 7471788]
0-based output: 6
1-based output: 5

Input: [1234, 3412]
0-based output: 2
1-based output: 0

Input: [2349, 2820, 17499, 21244, 29842, 31857, 46645, 56675, 61643, 61787]
0-based output: 3
1-based output: 0

Input: [4976, 11087, 18732, 22643, 52735]
0-based output: 2
1-based output: 3

Input: [4414, 5866, 7175, 8929, 14048, 16228, 16809, 19166, 24408, 25220, 29333, 44274, 47275, 47518, 53355]
0-based output: 4
1-based output: 4

Input: [11205, 16820, 63494]
0-based output: 1
1-based output: 3

อย่าลังเลที่จะสร้างกรณีทดสอบแบบสุ่มด้วย (หรือดึงแรงบันดาลใจจาก) โปรแกรม 05AB1Eที่ไม่ได้รับการตอบรับซึ่งอินพุตมีขนาดของรายการแบบสุ่ม (หมายเหตุ: ผลลัพธ์ของเครื่องกำเนิดไฟฟ้านี้อาจไม่สอดคล้องกับกฎ " จำนวนเต็มจะรับประกันเฉพาะ รายการอินพุตและรับประกันว่าจะไม่ซ้ำกันหลังจากการหมุนเสร็จสิ้น "ดังนั้นควรคำนึงถึงเมื่อใช้งาน)


เราขอสมมติว่าอินพุตมีองค์ประกอบอย่างน้อย 2 องค์ประกอบได้หรือไม่
Robin Ryder

2
@RobinRyder อืมความคิดแรกของฉันคงจะไม่ใช่ แต่เนื่องจากฉันไม่มีกรณีทดสอบที่มีรายการเดียวและมันไม่ได้เพิ่มความท้าทายมากนักทำไมล่ะ ฉันจะเพิ่มกฎที่รับประกันว่ารายการเข้ามีอย่างน้อย 2 รายการ
Kevin Cruijssen

เราขอยอมรับอินพุตเป็นรายการสตริงได้หรือไม่?
ศูนย์รวมแห่งความไม่รู้

1
@Shaggy ฉันได้แจ้งคำตอบที่ฉันคิดว่าจะได้รับประโยชน์จากมัน หากคุณเห็นสิ่งใดก็ตามที่สามารถได้รับประโยชน์จากมันเช่นกันโปรดแจ้งให้ทราบด้วย
Kevin Cruijssen

1
จากตัวอย่างดูเหมือนว่าผลลัพธ์ควรเป็น "จำนวนเต็มซึ่งยังคงอยู่ที่ดัชนีเดียวกันแน่นอนหลังจากหมุนตัวเลขในแต่ละจำนวนเต็มจำนวนดัชนีครั้งไปทางซ้ายและเรียงลำดับอีกครั้ง "?
qwr

คำตอบ:


11

R , 114 107 ไบต์

-5 ไบต์ขอบคุณ Giuseppe

โดดเด่นด้วย digEmAll

function(l){for(j in seq(l))l[j]=rep(l[j]%/%(e=10^(b=nchar(l[j]):1-1))%%10,j+1)[j+0:b]%*%e
sum(sort(l)==l)}

ลองออนไลน์!

0 การจัดทำดัชนี

เวอร์ชันที่ไม่ถูกปรับแต่ง:

function(l) {
  n = length(l)                         # size of input
  for (j in 1:n) {  
    b = nchar(l[j]) -1                  # number of digits in l[j] -1
    e = 10 ^ (b:0) 
    d = l[j] %/% e %% 10                # convert to vector of digits
    l[j] = rep(d, j + 1)[j + 0:b] %*% e # rotate digits and convert back to an integer
  }
  sum(sort(l) == l)                     # number of integers which are in the same position
}

เพื่อหมุนbตัวเลขของจำนวนเต็มโดยjตำแหน่งรหัสซ้ำตัวเลขหลายครั้งแล้วจะใช้เวลาตัวเลขในตำแหน่งที่จะj+1 j+bตัวอย่างเช่นหากต้องการหมุน1024 ครั้งให้เก็บค่าที่ทำเครื่องหมายไว้ด้วยx(ตำแหน่ง 5 ถึง 7):

102102102102
    xxx

021ดังนั้นผลที่ได้คือ



@iuseppe ขอบคุณ! seq(a=...)ฉันต้องการที่จะจำ ฉันคาดหวังว่าจะมีMapเวทมนตร์บางอย่างที่จะแสดง แต่ความพยายามของฉันทำให้นับไบต์ไม่เปลี่ยนแปลงที่ดีที่สุด
Robin Ryder

Mapอาจมีราคาแพงเกินไปเนื่องจากแผ่นfunctionสำเร็จรูปมีอย่างน้อย 9 ไบต์ แต่หากคุณเปลี่ยนเป็นดัชนี 0 เราสามารถทำ109 ไบต์ได้
Giuseppe

1
หาดี! ลงมาที่ 107 โดยตระหนักว่าseq(a=l)สามารถseq(l)ตราบใดที่อินพุตมีองค์ประกอบอย่างน้อย 2 องค์ประกอบ (ฉันถามว่าจะเป็นเช่นนี้หรือไม่)
Robin Ryder


6

05AB1E , 9 ไบต์

ΣN._ï}-_O

ลองออนไลน์!

ใช้การจัดทำดัชนีแบบ 0

คำอธิบาย:

Σ    }       # sort the input by
 N._         # each number rotated its index to the left
    ï        # then cast to int (otherwise the sort is alphabetic)
      -      # subtract the input from the result
       _O    # then count the 0s

6

Japt -x , 10 9 ไบต์

0-based

í¶UñÈséYn

ลองมัน

í¶UñÈséYn     :Implicit input of integer array U
í             :Interleave with
  Uñ          :U sorted by
    È         :Passing each integer at 0-based index Y through the following function
     s        :  Convert to string
      é       :  Rotate right by
       Yn     :    Y negated
 ¶            :Reduce each pair by testing for equality
              :Implicit output of sum of resulting array

4

เยลลี่ขนาด 9 ไบต์

Dṙ"JḌỤ=JS

ลองออนไลน์!

ลิงก์ Monadic ที่รับรายการจำนวนเต็มและส่งคืนจำนวนเต็มที่ระบุจำนวนของจำนวนเต็มที่ยังคงอยู่หลังจากดำเนินการหมุนโดยใช้ดัชนี 1 รายการ

คำอธิบาย

D         | Convert to decimal digits
 ṙ"J      | Rotate left by index
    Ḍ     | Convert back to integer
     Ụ    | Index in sorted list
      =J  | Check if equal to index in original list
        S | Sum

4

Python 2 , 104 100 97 93 ไบต์

b=[int((s*-~i)[i:i+len(s)])for i,s in enumerate(input())]
print map(cmp,b,sorted(b)).count(0)

ลองออนไลน์!

การทำดัชนีแบบ 0

ก่อนอื่นหมุนแต่ละหมายเลขแล้วเปรียบเทียบผลลัพธ์กับผลลัพธ์ แต่เรียงลำดับ


ที่บันทึกไว้:

  • -3 ไบต์ขอบคุณ Erik the Outgolfer
  • -4 ไบต์ขอบคุณ Kevin Cruijssen (และการเปลี่ยนแปลงกฎ)

-3 เป็นโปรแกรมเต็มรูปแบบ
Erik the Outgolfer

@eriktheoutgolfer ขอบคุณฉันยุ่งเกินไปที่จะลองทำแลมบ์ดาซึ่งฉันลืมไปinput():) :)
TFeld

นั่นเป็นเหตุผลที่ฉันพยายามทำโปรแกรมเต็มรูปแบบ ... : D อย่างจริงจังถ้าคุณพยายามทำโปรแกรมเต็มรูปแบบในตอนแรกคุณจะเห็นได้อย่างชัดเจนว่ามันคุ้มค่าที่จะเปลี่ยนเป็นแลมบ์ดาหรือไม่ อย่าเริ่มต้นdefทันที (ค่อนข้างไร้ประโยชน์ใน Python 2 ซึ่งตรงกันข้ามกับ Python 3)
Erik the Outgolfer

ฉันอนุญาตให้รายการอินพุตเป็นสตริงในขณะนี้ดังนั้นคุณสามารถลด 4 ไบต์ได้โดยลบเครื่องหมายเน้นเสียงที่อยู่รอบs
Kevin Cruijssen

4

R , 90 88 85 ไบต์

function(x)sum(rank(as.double(substr(strrep(x,L<-sum(x|1)),y<-1:L,y+nchar(x)-1)))==y)

ลองออนไลน์!

  • การหมุน 0 ดัชนี
  • กลยุทธ์การหมุนได้แรงบันดาลใจจาก คำตอบของ @ RobinRyder
  • -5 ไบต์ขอบคุณ @Giuseppe

รหัสที่ไม่ได้ควบคุมพร้อมคำอธิบาย:

function(x){
    L=sum(x|1)                         # store the length of x

    R=strrep(x,L)                      # repeat each string of vector x L times

    S=substring(R,1:L,1:L+nchar(x)-1)) # for each string of R, extract a substring of the same 
                                       # length of the original number starting from index 1 
                                       # for the 1st element, index 2 for the 2nd and so on
                                       # (this basically rotates the strings )

    Y=as.double(S)                     # convert the strings to numbers

    sum(rank(Y)==1:L)                  # return the number of times the ranks of Y
                                       # match with their original positions
}

3

J , 28 26 ไบต์

-2 ไบต์ขอบคุณโจนาห์

1#.i.@#=[:/:#\".@|.&>":&.>

ลองออนไลน์!


1
ดี ดูเหมือนว่าคุณจะสูญเสีย"0( ลองออนไลน์! ) แต่นอกเหนือจากนั้นฉันไม่เห็นวิธีการเล่นกอล์ฟต่อไป
โยนาห์

@Jonah ขอบคุณ! ฉันไม่รู้ว่าทำไมฉันถึงไม่ลองทำไม่ได้
Galen Ivanov



2

Pyth , 15 ไบต์

sqVSJ.ev.<`bkQJ

ลองออนไลน์! ใช้การจัดทำดัชนีแบบ 0

sqVSJ.ev.<`bkQJ   Implicit: Q=eval(input())
     .e      Q    Map elements of Q, as b and with index k, using:
          `b        Convert b to string
        .<  k       Rotate the above left k places
       v            Convert back to integer
    J             Store the above as J
   S              Sort the above
 qV           J   Vectorised equality check with the unsorted list
s                 Sum, implicit output

@FryAmTheEggman ฉันได้อนุญาตรายการของสตริงเป็นอินพุตดังนั้นจึงใช้ได้ในขณะนี้
Kevin Cruijssen

@FryAmTheEggman คุณอาจพูดถูกฉันไม่คิดว่าการเรียงลำดับพจนานุกรมและการเรียงจำนวนเต็มเมื่อไม่ใช้s- รหัสต้นฉบับมีvผลเหมือนกัน ฉันจะแก้ไขอีกครั้งใน
Sok

อ่าเควินชี้ให้เห็นตอนนี้คุณสามารถปล่อย backtick และรับอินพุตเป็นรายการสตริงเพื่อบันทึกไบต์
FryAmTheEggman

2

APL + WIN, 23, 21 19 ไบต์

บันทึก 2 ไบต์ด้วยการป้อนจำนวนเต็มเป็นเวกเตอร์ซ้อนของอักขระ

+/i=⍋⍎¨(i←⍳⍴v)⌽¨v←⎕

1 การจัดทำดัชนี

v←⎕ prompt for input. 

(i←⍳⍴v)⌽¨ rotate each set of characters by input indices.

⍋⍎¨ convert characters to integers and get sorted indices.

+/i= sum where original and sorted indices are the same.

ลองออนไลน์! ความอนุเคราะห์จาก Dyalog Classic


ไม่แน่ใจว่ามันจะบันทึกไบต์ใด ๆ หรือไม่ แต่ฉันอนุญาตให้อินพุตเป็นรายการของสตริงหรือรายการของรายการหลักตอนนี้
Kevin Cruijssen

@KevinCruijssen ขอบคุณที่ชี้ให้เห็น การป้อนเวกเตอร์ของสตริงที่ซ้อนกันช่วยประหยัด 2 ไบต์
Graham

2

JavaScript (Node.js) , 107 99 95 ไบต์

-8 ไบต์ขอบคุณ @Shaggy สำหรับการยอมรับอาร์เรย์ของสตริงแทน ต่อจากนี้ไปตี 4 ไบต์ จะไม่ทำให้เกิดข้อผิดพลาดของหน่วยความจำในครั้งนี้

a=>[...b=a.map(F=(x,i)=>i--?F(x.slice(1)+x[c=0],i):x)].sort((p,q)=>q-p).map(x=>c+=x==b.pop())|c

ลองออนไลน์!

JavaScript (Node.js) , 111 107 ไบต์

-4 ไบต์ขอบคุณ @Arnauld!

a=>[...b=a.map((x,i)=>"".padEnd(x+i,x+=c='').substr(i,x.length))].sort((p,q)=>q-p).map(x=>c-=x==b.pop())|-c

ลองออนไลน์!

JavaScript (Node.js) , 113 111 ไบต์

a=>[...b=a.map((x,i)=>"".padEnd(x+i,x).substr(i,`${x}`.length))].sort((p,q)=>p-q).map((x,i)=>x-b[i]||c++,c=0)|c

ลองออนไลน์!

0 การจัดทำดัชนี อาจทำให้เกิดข้อผิดพลาดของหน่วยความจำสำหรับรายการที่มีขนาดใหญ่มาก


2
99 ไบต์รับอินพุตเป็นอาร์เรย์ของสตริงจำนวนเต็ม
Shaggy

@Shaggy Thanks และตอนนี้ 95 ไบต์;)
Shieru Asakoto

2

Perl 6 , 50 ไบต์

{sum ^$_ Z==sort {+[~] rotate .[$^i].comb,$i},^$_}

ลองออนไลน์!

การทำดัชนีแบบ 0 นอกจากนี้ยังเปิดเผยข้อผิดพลาด Rakudo

คำอธิบาย

{                                                }  # Anonymous block
            sort                              ^$_   # Sort indices 0..n
                 {                          },  # by
                              .[$^i]            # element at index i
                                    .comb       # split into chars
                       rotate            ,$i    # rotated i times
                   [~]  # joined
                  +     # converted to number
     ^$_ Z==  # Pairwise equal to original indices 0..n
 sum   # Sum of equal indices

2

PHP ,159 141 134 130 ไบต์

function($a){foreach($a as$x){for($j=$i;$j--;$x=substr($x,1).$x[0]);$b[$x]=$i++;}ksort($b);foreach($b as$z)$y+=++$j==$z;return$y;}

ลองออนไลน์!

การทำดัชนีแบบ zero-based

Ungolfed:

function( $a ) { 
    // iterate through digits
    foreach( $a as $x ) {
        // rotate the digits the number of times based on their index
        for( $j = $i; $j--; ) {
            // move first digit to last digit
            $x = substr( $x, 1 ) . $x[0];
        }
        // the new number is used as key for sort, value is the original index
        $b[ $x ] = $i++;
    }
    // sort by the new numbers
    ksort( $b );
    // iterate sorted array
    foreach( $b as $z ) {
        // if new index matches original index, increment count ($y)
        if ( ++$j == $z ) {
            $y++;
        }
    }
    return $y;
}
  • -4 ไบต์รับอินพุตเป็นอาเรย์ของสตริงขอบคุณไปยัง @KevinCruijssen เพื่อชี้ให้เห็น

ฉันไม่รู้ PHP เกินไป แต่ตอนนี้ฉันอนุญาตรายการของสตริงแทนที่จะเป็นจำนวนเต็มดังนั้นฉันคิดว่าคุณสามารถลบได้.=''หรือไม่
Kevin Cruijssen

@KevinCruijssen คุณถูกต้อง การเป็นอาร์เรย์ของสตริงจะลบสิ่งนั้นออกจากความจำเป็น ฉันจะอัปเดตตามนั้น
640KB


2

แบบสอบถาม T-SQL ขนาด 99 ไบต์

Sql ไม่มีวิธีการหมุนดังนั้นฉันจึงต้องใช้ไวยากรณ์ของตัวเองเนื่องจากนี่เป็นแบบสอบถามจึงต้องทำโดยไม่ต้องวนซ้ำ

การทำดัชนีแบบ 0

การใช้ตัวแปรตารางเป็นอินพุต

SELECT-sum(1/~(z*3))FROM(SELECT~i+rank()over(order by
substring(n+n,i%len(n)+1,len(n))*1)z FROM @)c

ลองออนไลน์



1

Perl 5 , 104 ไบต์

sub f{my$i;grep/\d+$/&&$i++==$&,sort{$a<=>$b}map{my$n=shift;map$n=~s/(.)(.+)/$2$1/,1..$_;"$n.$_"}0..$#_}

ลองออนไลน์!

การจัดทำดัชนี 0 ตามใน Perl Ungolfed และแสดงความคิดเห็น:

sub f {
  my $i;                            #index counter
  grep /\d+$/ && $i++==$&,          #keep/return elems where $i matches original index stored as decimals
  sort { $a<=>$b }                  #sort rotated elems numerically (<=> is the numerical comparison op
  map {                             #loop through input
    my $n = shift;                  #shift(@_) got elem from input array @_
    map $n=~s/(.)(.+)/$2$1/, 1..$_; #rotate left times current index 
    "$n.$_"                         #use rotated number with original index number as decimals (to dont affect sort)
  }
  0..$#_
}

1

Ruby -ap , 77 ไบต์

1 การจัดทำดัชนี ก่อนหน้านี้ถูกลบอุณหภูมิเนื่องจากฉันพลาดบางส่วนของข้อมูลจำเพาะ

-pอ่านบรรทัด STDIN และเอาต์พุต$_ที่ท้าย แยกอ่านได้ว่าเส้นช่องว่างและบันทึกเป็น-a$F

i=0
$_=$F.zip($F.sort_by{|s|s.chars.rotate(i+=1).join.to_i}).count{|a,b|a==b}

ลองออนไลน์!


คุณสามารถบันทึก 2 ไบต์โดยแทนที่[...].join.to_iด้วยeval [...]*''
Doorknob

1
@Doorknob แต่น่าเสียดายที่ไม่มี ... กรณีที่มีขอบที่หากจำนวนหมุนเป็นศูนย์นำevalจะตีความว่ามันเป็นเลขฐาน 8 ซึ่งสามารถทำให้จำนวนของเรา ...
หมึกมูลค่า

1

ภาษา Wolfram (Mathematica) , 65 ไบต์

o=Ordering
g=Count[o@MapIndexed[FromDigits@*RotateLeft,#]-o@#,0]&

ลองออนไลน์!

1-based เรารับอินพุตเป็นรายการของรายการหลักซึ่งทำงานได้เนื่องจากคำสั่งซื้อของ Mathematica เรียงตามความยาวจากนั้นคำย่อเช่นเดียวกับตัวเลขดั้งเดิม


1

ทุบตี , 204 201 ไบต์

สิ่งเดียวที่น่าสนใจที่นี่ (อาจ) คือการใช้ evalคือการใช้ อัลกอริทึมยัง clunky ในการสร้างรายการเรียงแล้วอ่านมันเพื่อกำหนดดัชนี / ดัชนีที่เปลี่ยนแปลง

โซลูชันที่ใช้ 1 ขอบคุณ @RobinRyder สำหรับอัลกอริทึมการหมุนที่เป็นประโยชน์

for((i=1;i<$#+1;i++));do eval s=\${$i};for((j=0;j<i;j++));do eval s=${s}\${$i};done;eval n=\${s:$i:\${#$i}};echo $n $i;done|sort -nk1,1|{ i=1;c=0;while read d j;do((i==j))&&((c++));((i++));done;echo $c; }

ลองออนไลน์!

แก้ไขรหัสตามความเห็นของ Kevin; ลองออนไลน์!


ผมไม่ทราบว่าทุบตีดีเกินไป ;}แต่ฉันคิดว่าคุณสามารถเอาพื้นที่ที่ผ่านมาระหว่าง for((i=0;++i<=$#;));นอกจากนี้คุณยังสามารถเปลี่ยนวงแรกของคุณจะ
Kevin Cruijssen

@KevinCruijssen - โดยปกติแล้วฉันได้พบ Bash และเพื่อน ๆ ต้องการพื้นที่ในการแยกบรรทัดคำสั่ง ในโอกาสนี้คุณถูกต้องมันอาจถูกลบออก เป็นความคิดที่ดีในการปรับพื้นฐานและเพิ่มค่าล่วงหน้า 202 ไบต์
PJF

1

Scala , 200 160 ไบต์

def f(a:Seq[String])=
  a.zipWithIndex
   .map(x=>{val r=x._2%x._1.size;x._1.drop(r)+x._1.take(r)->x._2})
   .sortBy(_._1.toInt)
   .zipWithIndex
   .filter(x=>x._1._2==x._2)
   .size

ลองออนไลน์!

0 การจัดทำดัชนี 160 ตัวอักษรหลังจากลบการเยื้องและการขึ้นบรรทัดใหม่ พิมพ์นี้ 6:

println( f(Seq("8","49","73","102","259","762","2782","3383","9217","37846","89487","7471788")) )
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.