Bebek, Bebek, Yosefus


49

Diberikan array Integer:

  1. Mulai dari angka pertama
  2. Melompat maju n posisi di mana n adalah nilai dari posisi saat ini
  3. Hapus posisi saat ini, buat posisi apa yang selanjutnya menjadi posisi sekarang.
  4. Langkah 2 sampai ada satu nomor yang tersisa
  5. Cetak nomor itu

Aturan

Array membungkus (nomor berikutnya setelah nomor terakhir dalam array adalah nomor pertama).

Nol menghapus dirinya sendiri (Jelas).

Angka negatif tidak diperbolehkan sebagai input.

Uji Kasus

[1] => 1
[1,2] => 1
[1,2,3] => 3
[1,2,2] => 1
[1,2,3,4] => 1
[6,2,3,4] => 4
[1,2,3,4,5] => 5
[0,1] => 1
[0,0,2,0,0] => 0

Contoh langkah demi langkah

[1,4,2,3,5]
 ^          start from the first position
   ^        jump 1 position (value of the position)
[1,  2,3,5] remove number in that position
     ^      take next position of the removed number (the 'new' 'current' position)
         ^  jump 2 positions
[1,  2,3  ] remove number in that position
 ^          take next position (looping on the end of the array)
     ^      jump 1 position
[1,    3  ] remove number in that position
       ^    take next position (looping)
 ^          jump 3 positions (looping on the end of the array)
[      3  ] remove number in that position
print 3

Contoh # 2

[4,3,2,1,6,3]
 ^            start from the first position
         ^    jump 4 positions
[4,3,2,1,  3] remove number in that position    
           ^  take next position
     ^        jump 3 positions
[4,3,  1,  3] remove number in that position    
       ^      take next position
           ^  jump 1 positions
[4,3,  1    ] remove number in that position    
 ^            take next position
   ^          jump 4 positions
[4,    1    ] remove number in that position    
       ^      take next position
 ^            jump 1 position
[      1    ] remove number in that position
print 1

Ini adalah , jawaban terpendek dalam byte menang!


14
Tantangan pertama yang bagus!
Luis Mendo

2
@LuisMendo Ya .. tantangan "lewati seperti ..."
J42161217

2
@ Jenny_mathy Saya tidak berpikir akan ada yang serupa, tapi seperti kata Luis, susunan sampulnya membuat tantangan yang menarik untuk bermain golf. Saya pikir: /
workoverflow

3
@EriktheOutgolfer Tidak benar-benar penipu. Elemen-elemen di sana tidak bisa dibedakan dan ukuran langkah diperbaiki. Luis jauh lebih dekat, tapi saya pikir masih cukup berbeda.
Martin Ender

3
Apakah perlu mencetak nomor akhir, atau bisakah mengembalikannya? Apakah itu perlu mengembalikan nomor, atau bisakah itu hanya beroperasi pada array di tempat sehingga setelah fungsi dijalankan, array hanya berisi nomor?
iamnotmaynard

Jawaban:


9

Sekam , 7 byte

Ini mengembalikan hasilnya sebagai daftar tunggal

ΩεSotṙ←

Cobalah online!

Penjelasan

Ω               Until
 ε              the result is a singleton list
     ṙ          Rotate left by
  S   ←         the first element
   ot           Then remove the first element  

7

Haskell , 54 50 48 byte

f[x]=x
f(x:r)=f$snd<$>zip r(drop(x+1)$cycle$x:r)

Cobalah online!

Penjelasan:

  • f[x]=x: Jika daftar yang diberikan adalah daftar tunggal, kembalikan elemennya.
  • f(x:r)=f$ ...: Jika tidak, secara rekursif berlaku fke daftar berikut:
    • Elemen-elemen dari daftar saat ini bersepeda tak terbatas ( cycle$x:r),
    • dengan x+1elemen pertama dihapus ( drop(x+1)$),
    • dan dipotong panjangnya r. ( snd<$>zip radalah alternatif yang lebih pendek untuk take(length r)).

Versi 54 byte sebelumnya:

f=(%)=<<head
_%[x]=x
n%(x:r)|n<1=f r|s<-r++[x]=(n-1)%s

Cobalah online!



6

MATL , 21 byte

1`yy)+ynX\[]w(5Mynq]x

Cobalah online! Atau verifikasi semua kasus uji .

Penjelasan

1        % Push 1: current position in the array
`        % Do...while
  yy     %   Duplicate top two elements in the stack. Takes input implicitly
         %   in the first iteration.
         %   STACK: array, position, array, position
  )      %   Get specified entry in the array
         %   STACK: array, position, selected entry
  +      %   Add
         %   STACK: array, position (updated)
  y      %   Duplicate from below
         %   STACK: array, position, array
  n      %   Number of elements of array
         %   STACK: array, position, number of elements or array
  X\     %   1-based modulus
         %   STACK: array, position (wrapped around)
  []     %   Push empty array
         %   STACK: array, position, []
  w      %   Swap
         %   STACK: array, [], position
  (      %   Write value into specified entry in array. Writing [] removes
         %   the entry
         %   STACK: array (with one entry removed)
  5M     %   Push latest used position. Because of the removal, this now
         %   points to the entry that was after the removed one
         %   STACK: array, position
  y      %   Duplicate from below
         %   STACK: array, position, array
  n      %   Number of elements of array
         %   STACK: array, position, number of elements of array
  q      %   Subtract 1
         %   STACK: array, position, number of elements of array minus 1
]        % End. If top of the stack is nonzero, proceed with next iteration
         % STACK: array (containing 1 entry), position
x        % Delete. Implicitly display
         % STACK: array (containing 1 entry)

1
Catatan: menggunakan rotasi daftar alih-alih mempertahankan pointer mungkin akan membuat ini jauh lebih pendek.
Erik the Outgolfer

1
@Erik, terima kasih. Tetapi sekarang setelah saya menambahkan penjelasan, saya pikir saya akan membiarkannya seperti ini
Luis Mendo

Nah, Anda selalu dapat menghapus penjelasan, itu akan disimpan dalam sejarah :)
Erik the Outgolfer

6

Python 3 , 54 51 byte

f=lambda x:x and f((x+x*x[0])[x[0]:][1:len(x)])or x

Output adalah daftar tunggal.

Cobalah online!


Sama sekali tidak berhubungan, tapi aku suka topi unicorn-mu, Dennis. xD (Dan jawaban yang bagus tentu saja, seperti biasa!)
Kevin Cruijssen

5

CJam , 15 byte

l~_,({_0=m<1>}*

Cobalah online!

Penjelasan

Alih-alih melacak pointer, saya hanya menggeser array secara siklikal sehingga elemen saat ini selalu di depan.

l~     e# Read and evaluate input.
_,(    e# Get its length L and decrement to L-1.
{      e# Run this block L-1 times...
  _0=  e#   Get the first element X.
  m<   e#   Rotate the array left by X positions.
  1>   e#   Discard the first element.
}*
       e# The final element remains on the stack and gets printed implicitly.

Alternatif menyenangkan yang sayangnya tidak menyimpan byte apa pun:

l~_{;m<1>_0=}*;

5

Brain-Flak , 88 byte

([[]]()){({}<(({})){({}<({}<([]){({}{}<>)<>([])}{}>)<>{({}[<>[]])<>}<>>[()])}{}{}>())}{}

Cobalah online!

Penjelasan

([[]]())                      Push negative N: the stack height - 1
{({}< … >())}{}               Do N times
     (({}))                     Duplicate M: the top of the stack
     {({}< … >[()])}{}          Do M times 
                                  Rotate the stack by 1:
          ({}< … >)               Pop the top of the stack and put it back down after
          ([]){({}{}<>)<>([])}{}  Pushing the rest of the stack on to the other one, in reverse, with the stack height added to each element (to ensure that all are positive)
          <>{({}[<>[]])<>}<>      Push the rest of the stack back, unreversing, and subtracting the stack height from each element
                      {}        Pop the top of stack

1
Golf yang sangat aneh tapi di sini dalam 88 byte .
Wheat Wizard

1
@WheatWizard Bagus, anehnya saya mencoba sesuatu seperti itu sebelumnya.
H.PWiz

Saya tidak pernah tahu bagaimana orang bisa membuat kode seperti itu! apakah ada penerjemah kode semu atau semacamnya?
workoverflow

1
@ workoverflow tidak, ini sejujurnya lebih mudah dari yang terlihat. Itu sangat menakutkan sebelum saya benar-benar mulai, tetapi ketika perintahnya sesederhana ini, mudah dipelajari.
H.PWiz

5

Python 2 , 55 byte

def f(a):
 while a[1:]:l=a[0]%len(a);a[:]=a[-~l:]+a[:l]

Cobalah online!

Keluaran sebagai daftar tunggal, sebagaimana diizinkan secara default . Menyimpan beberapa byte berkat Dennis , dengan mengingatkan saya bahwa memodifikasi argumen fungsi diperbolehkan.

Bagaimana itu bekerja

  • def f(a)- Menentukan fungsi dengan parameter a.

  • while a[1:]:- Ketika aelemen pertama yang dihapus benar, jalankan blok kode untuk diikuti. Daftar dengan satu elemen atau lebih adalah benar, dan daftar kosong palsu di Python, maka ini akan berhenti setelah amencapai panjang 1.

  • l=a[0]%len(a)- Ambil elemen pertama, dan dapatkan sisa dari pembagiannya dengan panjang a. Tetapkan hasilnya ke l.

  • a[:]=a[-~l:]+a[:l]- Putar ake kiri oleh lelemen, dan hapus yang pertama, sambil menempatkan ini adi tempatnya.


Python 2 , 63 byte

f=lambda a,i=0:a[1:]and f(a,a.pop(((a*-~i)[i]+i)%len(a))+1)or a

Cobalah online!

Meskipun lebih lama, ini tampak jauh lebih elegan. Juga terima kasih kepada ovs untuk membantu dalam obrolan.


1
Tidak bisakah Anda melakukan sesuatu seperti a,*b=input()(python3) dan menyimpan beberapa byte? Namun saya tidak yakin bagaimana itu akan mempengaruhi ldan irisan
Rod

1
@Rod Saya tidak berpikir begitu, saya perlu mengevaluasi inputnya juga di Python 3
Tn. Xcoder

4

Jelly , 7 byte

ṙḷ/ḊµḊ¿

Cobalah online!

Program lengkap.


3
Itu ḷ/sangat pintar.
Tn. Xcoder

Bisakah Anda menambahkan penjelasan? Saya sekarang telah melihat Quicks dan Atom pada halaman GIT yang ditautkan, dan +1 berdasarkan itu, tetapi saya dapat membayangkan tidak semua orang memiliki pasien untuk melakukan hal yang sama. ;)
Kevin Cruijssen

4

Jelly , 9 byte

ṙḷ/ḊµL’$¡

Cobalah online!

-2 byte terima kasih kepada pengguna202729

Penjelasan

ṙḷ/ḊµL’$¡  Main Link
     L’$¡  Repeat <length - 1> times
ṙ          Rotate left by
 ḷ/        The first element (from JHT; thanks to user202729)
   Ḋ       Take all but the first element



3

Mathematica, 36 byte

menggunakan algoritma Martin

#//.l:{x_,__}:>Rest@RotateLeft[l,x]&

-5 byte dari Misha Lavrov && Martin Ender

Cobalah online!


1
Anda dapat menyimpan dua byte dengan menggunakan pola untuk memilih elemen pertama #//.{x_,y__}:>Rest@RotateLeft[{x,y},x]&. (Ini berhenti ketika hanya ada satu elemen karena {a}tidak lagi cocok dengan polanya {x_,y__}.)
Misha Lavrov

1
@MishaLavrov tidak dapat menguji sekarang, tetapi Anda mungkin dapat mempersingkat lebih lanjut dengan menjatuhkan y, memanggil seluruh daftar ldan kemudian menggunakan lalih-alih {x,y}.
Martin Ender

1
@ MartinEnder Maksud Anda seperti ini - #//.l:{x_,__}:>Rest@RotateLeft[l,x]&?
Misha Lavrov

1
@MishaLavrov ya
Martin Ender

3

J , 21 17 byte

-4 byte terima kasih kepada FrownyFrog

((1<#)}.{.|.])^:_

Cobalah online!

Asli:

([:}.{.|.])^:(1<#)^:_

Bagaimana itu bekerja:

^:_ ulangi sampai hasilnya berhenti berubah

^:(1<#) jika panjang daftar lebih besar dari 1

{.|.] putar daftar ke kiri kali item pertama

[:}. jatuhkan elemen pertama dan tutup garpu

Cobalah online!


@ FrownyFrog Terima kasih, saya tidak mencoba ini - ini jauh lebih baik!
Galen Ivanov

3

JavaScript (ES6), 54 60 byte

Disimpan 1 byte berkat versi @Shaggy
Fixed (+6 bytes)

Memodifikasi array input , yang direduksi menjadi singleton.

f=(a,p=0)=>1/a||f(a,p=(p+a[p%(l=a.length)])%l,a.splice(p,1))

Uji kasus

Bagaimana?

Kami menerapkan algoritma yang dijelaskan dalam tantangan secara rekursif. Hanya kondisi berhenti 1/amungkin tampak sedikit aneh. Saat menerapkan operator aritmatika:

  • Array lebih dari satu elemen dipaksa NaNdan 1/NaNjuga NaN(falsy).
  • Array tepat satu integer dipaksa ke integer itu, yang mengarah ke salah satu 1/0 = +Infinityatau 1/N = positive floatuntuk N> 0 (keduanya benar).
f = (a, p = 0) =>                 // a = input array, p = pointer into this array
  1 / a ||                        // if a is not yet a singleton:
    f(                            //   do a recursive call with:
      a,                          //     a
      p = (                       //     the updated pointer
        p + a[p % (l = a.length)] //
      ) % l,                      //
      a.splice(p, 1)              //     the element at the new position removed
    )                             //   end of recursive call

Melihat sebagai splicememodifikasi array asli, Anda bisa melakukannya f=(a,p=0)=>1/a||f(a,p=p+a[p]%a.length,a.splice(p,1))selama 52 byte
Shaggy

tampaknya itu tidak memberikan hasil yang tepat untuk contoh langkah demi langkah yang kedua, f=(a,p=0)=>1/a?a:f(a,p=(p%a.length+a[p%a.length])%a.length,a.splice(p,1))tidak apa-apa tetapi mungkin dioptimalkan
Nahuel Fouilleul

@NahuelFouilleul Ups. Saya pikir pada beberapa titik bahwa tanda kurung di sekitar p+a[p]bisa dihilangkan. Yang - tentu saja - bukan itu masalahnya. Terima kasih telah melaporkan ini!
Arnauld

Lihat konsensus ini , yang dibawa @Neil ke perhatian saya di sini .
Shaggy

@Shaggy Oh, begitu. Terima kasih! (Saya melewatkan tautan TIO Anda yang pertama kali ...)
Arnauld


3

Java 8, 79 byte

Lambda ini menerima Stack<Integer>dan mengembalikan intatau Integer.

l->{for(int i=0,s=l.size();s>1;)l.remove(i=(i+l.get(i%s))%s--);return l.pop();}

Cobalah secara Online

Tidak disatukan

l -> {
    for (
        int i = 0, s = l.size()
        ; s > 1
        ;
    )
        l.remove(
            i = (i + l.get(i % s)) % s--
        );
    return l.pop();
}

Ucapan Terima Kasih

  • -2 byte terima kasih kepada Nahuel Fouilleul

1
i%=sdapat dihapus jika l.get(i)diubah olehl.get(i%s)
Nahuel Fouilleul

2

Pyth , 9 byte

.WtHt.<Zh

Coba di sini!

Ini menampilkan hasilnya sebagai daftar tunggal, sebagaimana diizinkan secara default .

Bagaimana itu bekerja

.WtHt.<Zh ~ Full program.

.W        ~ Functional while. It takes three arguments, two functions: A and B
            and a starting value, which in this case is automatically assigned
            to the input. While A(value) is truthy, value is set to B(value).
            Returns the ending value. A's argument is H and B's is Z.
  tH      ~ A (argument H): Remove the first element of H. A singleton list
            turns into [], which is falsy and thus breaks the loop. Otherwise,
            it is truthy and the loops goes on until the list reaches length 1.
     .<Zh ~ B (argument Z): Cyclically rotate Z by Z[0] places, whereas Z[0]
            represents the first element of Z.
    t     ~ And remove the first element.

Catatan: Jika Anda tidak ingin melihat tanda kurung itu, cukup tambahkan hatau edi depan seluruh kode.


2

Swift , 87 byte

func f(a:inout[Int]){var i=0,c=0;while(c=a.count,c>1).1{i=(i+a[i%c])%c;a.remove(at:i)}}

Kembali sebagai daftar tunggal dengan memodifikasi input . Cobalah online!

Penjelasan

func f(a:inout[Int]){
  var i=0,c=0;            // Set the index i to 0
  while(c=a.count,c>1).1{ // While the length of the list > 0:
    i=(i+a[i%c])%c;       //  Add a[i] to i and loop back using modulo
    a.remove(at:i)        //  Remove a[i]
  }
}

2

Perl 6 , 46 45 byte

(-1 byte terima kasih kepada Brad Gilbert)

{($_,{(|$_ xx*)[.[0]+(1..^$_)]}...1)[*-1][0]}

Cobalah online!

($_, { ... } ... 1)menghasilkan urutan daftar, dimulai dengan daftar input $_, setiap elemen berturut-turut dihasilkan oleh ekspresi penjepit, dan berakhir ketika daftar smart-cocok 1--ie, memiliki panjang 1. Trailing [* - 1]memperoleh elemen terakhir, dan final [0]mengeluarkan satu-satunya elemen dari daftar singleton itu.

(|$_ xx *)menghasilkan salinan datar, yang direplikasi tak terbatas dari elemen saat ini. Daftar ini diindeks dengan rentang .[0] + (1 ..^ $_)untuk mengekstrak daftar hingga berikutnya dalam seri.


1
mind blown oO
Adrian

[*-1][0]dapat digabungkan menjadi [*-1;0]penghematan satu byte. Juga 1..$_-1lebih baik ditulis karena 1..^$_menyimpan byte lagi.
Brad Gilbert b2gills

@ BradGilbertb2gills Saya mencoba [*-1;0], tetapi tampaknya tidak setara entah bagaimana. Fungsi kemudian mengembalikan daftar daripada angka.
Sean

Itu tidak menghentikan 1..^$_pengoptimalan
Brad Gilbert b2gills

1

Perl 5 , 47 43 41 + 2 ( -ap) = 43 byte

$\=splice@F,($_+=$F[$_%@F])%@F,1while@F}{

Cobalah online!

Mengambil input sebagai angka yang dipisahkan spasi.


sepertinya tidak persis sama dengan langkah demi langkah yang diikuti contoh tetapi lebih lama$x%=@F,splice@F,$x=($x+$F[$x])%@F,1while$#F;$_="@F"
Nahuel Fouilleul

1
wow oO Perlu meningkatkan permainan saya.
Adrian



1

Java 8 , 325 Bytes

Golf:

static void n(Integer[]j){Integer[]h;int a=0;h=j;for(int i=0;i<j.length-1;i++){if(h.length==a){a=0;}a=(a+h[a])%h.length;h[a]=null;h=m(h);}System.out.print(h[0]);}static Integer[] m(Integer[]array){Integer[]x=new Integer[array.length-1];int z=0;for(int i=0;i<array.length;i++){if(array[i]!=null){x[z]=array[i];z++;}}return x;}

Tidak Disatukan:

 interface ArrayLeapFrog {
static void main(String[] z) throws Exception {
    Integer[] j = {6, 2, 3, 4};
    n(j);
}

static void n(Integer[] j) {
    Integer[] h;
    int a = 0;
    h = j;
    for (int i = 0; i < j.length - 1; i++) {
        if (h.length == a) {
            a = 0;
        }
        a = (a + h[a]) % h.length;
        h[a] = null;
        h = m(h);
    }
    System.out.print(h[0]);
}

static Integer[] m(Integer[] array) {
    Integer[] x = new Integer[array.length - 1];
    int z = 0;
    for (int i = 0; i < array.length; i++) {
        if (array[i] != null) {
            x[z] = array[i];
            z++;
        }
    }
    return x;
  }
}

4
Selamat datang! Beberapa kiat: Tidak perlu menghitung statickata kunci di sini. Biasanya solusi multi-metode diimplementasikan sebagai anggota kelas yang tidak statis, dan mainmenciptakan contoh untuk pengujian. Juga, jika Anda melakukannya dengan cara itu Anda mendukung Java 7 dan dapat mengirimkan sebagai solusi "Java". Untuk referensi di masa mendatang, format input cenderung cukup fleksibel di sini, jadi misalnya Anda dapat memilih untuk mengambil input sebagai List(yang cukup membantu untuk masalah ini).
Jakob

1

APL + WIN, 36 byte

¯1↑⍎¨(1⌈¯1+⍴v←,⎕)⍴⊂'v←(1<⍴v)↓v[1]⌽v'

Penjelasan:

Meminta input layar.

'v←(1<⍴v)↓v[1]⌽v' Loop logic as a string

 (1<⍴v)↓ only drop the first when number of elements n>1

 (1⌈¯1+⍴v←,⎕)⍴⊂ create a nested vector of logic of length 1 max n-1

 ⍎¨ execute each element of the nested vector in turn

¯1↑ take answer from executing final element

1

Python 2, 61 byte

def f(x):
 while x[1:]:y=x[0]%len(x);x=x[y+1:]+x[:y]
 print x

1
Saya tahu ada banyak jawaban python, tapi saya pikir sebaiknya saya tambahkan sendiri.
Rɪᴋᴇʀ

1

JavaScript, 58 56 59 byte

let f =

a=>{for(i=0,k=a.length;k>1;)i+=a[i%=k],a.splice(i%=k--,1)}
<h2>Test</h2>
Enter or paste a valid array literal within square brackets and click Run.
<blockquote>
   <input id = "array" type="text" length="20">
   <button type="button" onclick="run()">Run</button>
</blockquote>
Result: <pre id="o"></pre>

<script>
    function run() {
       let a = JSON.parse(array.value);
       f(a);
       o.textContent = a;
    }
</script>

Mengembalikan hasil sebagai satu-satunya elemen yang tersisa di larik input yang diperbarui di tempat.

Dua byte disimpan dengan menggunakan pernyataan yang dipisahkan koma, bukan pernyataan blok dalam for loop body! Tiga byte hilang untuk dilompati dari elemen yang dihapus di akhir array (:

Kurang bermain golf:

a => {
    for(i=0,k=a.length;k>1;) // once less than array length
        i+=a[i%=k],          // the new index
        a.splice(            // delete an element
           i%=k--,           // ensuring index is within array,
                             // and post decrement loop count
           1
        )
}

Ini sepertinya memberikan jawaban yang salah [3, 5, 7, 9].
Neil

Salah untuk [3,5,7,9]. Nilai yang diharapkan 5
edc65

Fungsi tidak mengembalikan nilai, saya tidak yakin apakah jumlah byte tepat mengingatnya, karena tidak dapat bekerja dengan sendirinya ...
Brian H.

@ edc65 dan Neil, terima kasih - indeks elemen yang dihapus di akhir array tidak disesuaikan dengan awal array yang dipersingkat.
traktor53

@BrianH. fungsi memodifikasi parameternya, ada konsensus tentang codegolf.meta.stackexchange.com/a/4942/21348
edc65

1

Brain-Flak , 104 byte

H.PWiz memiliki jawaban yang lebih pendek di sini yang saya bantu buat, Anda harus memeriksanya.

([[]]()){({}()<(({})){({}[()]<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}{}{}>)}{}

Cobalah online!

Penjelasan

([[]]())   #Push 1 minus stackheight
{({}()<    #N times
 (({}))    #Get a copy of the top
 {({}[()]< #N times
  ({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>
           #Roll the top to the bottom (From the wiki)
 >)}{}     #End loop
 {}        #Remove one value
>)}{}      #End loop

Saya pikir saya akan bersaing . Kemudian saya menyadari bahwa milik saya hampir persis sama dengan milik Anda , terlepas dari "top roll" yang berbeda
H.PWiz

Saya melihat bahwa ;). Menggunakan fakta bahwa semuanya non-negatif agak pintar.
Wheat Wizard


1

R , 111 117 126 byte

Berkat @Giuseppe untuk bermain golf 11 byte dengan mengubah ke loop sementara, dapatkan 4 byte lainnya dengan menghapus fungsi dan membaca input pengguna secara langsung.

Saya tidak merasa senang dengan apa yang diperlukan untuk sampai ke sana - saya yakin ada solusi yang lebih elegan.

i=scan();m=1;while((l=sum(i|1))-1){j=i[m];p=`if`(j+m>l,j%%l+!m-1,j+m);p=`if`(!p,m,p);i=i[-p];m=`if`(p-l,p,1)};i

Cobalah online!

Kode tidak dikunci

i=scan()
m=1
while((l=sum(i|1))-1){
  j=i[m]
  p=`if`(j+m>l,j%%l+!m-1,j+m)
  p=`if`(!p,m,p)
  i=i[-p]
  m=`if`(p-l,p,1)
}
i

117 byte - perhatikan bahwa karena ini adalah fungsi rekursif, nama f=harus dimasukkan
Giuseppe

1
Saya menemukan ini tantangan yang cukup sulit dengan bahasa berbasis-indeks 1 tanpa rotasi array; ini berpotensi 1-3 byte lebih pendek dengan satu whilelingkaran, saya pikir.
Giuseppe


byter 115 saya sebelumnya tidak valid karena kami berdua lupa f=bagian dari fungsi rekursif. :(
Giuseppe

Saya memperbarui skor lama dan skor baru untuk mencerminkan kekambuhan :) Dengan loop 'while' saya bermain golf 4 byte lainnya menggunakan pemindaian.
Tandai
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.