Sayıların listesi, listedeki endekslerini değiştirir.


25

Basit olanı: Giriş olarak pozitif tamsayıların bir listesini alın ve sayıları listedeki 1-temelli indeksini modüle edin.

Girilen tamsayılar ise {a, b, c, d, e, f, g}çıktı modülün işleci olduğu {a%1, b%2, c%3, d%4, e%5, f%6, g%7}yerde olmalıdır %.


Test durumları:

10  9  8  7  6  5  4  3  2  1
 0  1  2  3  1  5  4  3  2  1

8 18  6 11 14  3 15 10  6 19 12  3  7  5  5 19 12 12 14  5
0  0  0  3  4  3  1  2  6  9  1  3  7  5  5  3 12 12 14  5

1
0

1  1
0  1

Yanıtlar:



9

İşlem Flashpoint kodlama dili, 73 bayt

f={l=_this;r=[];i=0;while{i<count l}do{r=r+[(l select i)%(i+1)];i=i+1};r}

İle ara:

numList = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
hint format["%1\n%2", numList, numList call f];

Çıktı:


1
Ne ... bu bir şey mi?
JAD

2
@JarkoDubbeldam Evet. Oyun, oyuncuların kendi senaryolarını yaratmalarına olanak tanır ve görev tasarımını desteklemek için tasarlanmış oyun içi bir betik dili vardır. Ancak, dil Turing-eksiksiz olduğundan, onunla ne istersen yapabilirsin.
Steadybox


7

Jöle , 2 bayt

%J

Çevrimiçi deneyin!

Açıklama:

%J
 J List 1 .. len(input). This is results in a list of the indexes.
%  Modulo.

Temel olarak, kod orijinal listeyi indeks listesine göre modüle eder.


2
Bu soruyu görür görmez, "Bu %JJelly'te, bu cevabı birisinin cevap verdiğini merak ediyorum mu?" Diye düşündüm . Sanırım başkası aynı fikri vardı:

1
@ ais523 Yalnız sen olduğunu mu düşünüyorsun? Tekrar düşün!
Outgolfer Erik,

6

R, 24 18 bayt

pryr::f(x%%seq(x))

İşleve değerlendirir:

function (x) 
x%%seq(x)

Hangi kullandığı seq_along()aynı uzunlukta bir vektör yaratmak için x1'den başlayan ve daha sonra %%modüle almak için.

seqBir vektörle sunulduğunda varsayılan davranış, seq(along.with = x)çıktının aynı seq_along(x)olmasına karşın 6 bayt daha kısadır.


seq(x)Ben her zaman kullanıyorum, çünkü sahip olmak için kullanışlı bir şey 1:length(x).
Giuseppe

@Giuseppe Evet, ben de şaşırdım.
JAD

6

R, 27 bayt

x=scan();cat(x%%1:sum(1|x))

@Jarko sayesinde 5 byte kurtarıldı

@Giuseppe sayesinde 4 işletme daha kaydetti

@Taylor Scott sayesinde 2 kişi daha kurtardı

@Returnbull sayesinde 2 kişi daha kurtardı


35 - Gereksiz geçen paren kaldırıldı
Zahiro Mor

1
' 'sonunda (boşluğa) ihtiyacınız yoktur cat; varsayılan ayırıcı budur
Giuseppe

2
Eğer bu aşağı düşürerek 33 almak için 2 bayt bırakabilirsiniz x<-scan();cat(x%%1:length(x)," ")- düzgün girintili ve 2 işaretlenmesi için ah ve ipuçları biçimlendirme birkaç, 1) yalnızca bir ekleyebilirsiniz) kodunuzun sola 4 boşluk ihtiyaç <!-- language-all: lang-r -->bayrağı kodunuzu o (küçük bu örnekte bu değişiklikler olsa da) 3) Eğer dilin adının 4 civarında brakets gerekmez vurgulanan) ah ve edilecek olması önce, bir yayına düzenlemeler yapmak zaman yorum yapmak gerekmez
Taylor Scott

2
(1) Bir bayt kaydetmek =yerine kullanabilirsiniz <-. (2) Spesifikasyonda "yazdırmak" yerine "çıktı" yazıyor, bu yüzden cat()5 bayt tasarrufu yaparak muhtemelen düşürebilirsiniz . (3) sum(1|x)bir bayttan daha kısa length(x).
rturnbull

5

APL (Dyalog) , 5 bayt

⍳∘≢|⊢

Çevrimiçi deneyin!

 endeksler

 arasında

 argümanın uzunluğu

| bu modül

 argüman


Her zaman "ana akım" bir dilin çok ekonomik olabileceğine şaşırdım. APL yolu doğal olarak kod golf gibi görünüyor: örneğin (~T∊T∘.×T)/T←1↓⍳R ⍝ primes up to Rveyalife←{↑1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω} ⍝ Game of Life

@YiminRong Daha iyisini yapabilirsiniz: (⊢~∘.×⍨)1↓⍳RAsallar R: ve GoL (Sürüm 16.0'da): ki K∊⍨⊢∘⊂⌺3 3burada K sabittir.
Adám,

@YiminRong Burada asal bulucuyu deneyin !
Adám,

5

Cubix , 19 bayt

;ww.1I!@s%Ow;)Sow.$

Çevrimiçi deneyin!

    ; w
    w .
1 I ! @ s % O w
; ) S o w . $ .
    . .
    . .

Çalıştırılmasını İzleyin

Oldukça yalındır bir uygulama.

  • 1 dizini başlatmak için yığına 1 basın
  • I!@ tamsayı girişini al ve 0 ise dur.
  • s%Ow endeksi yukarı kaydır, mod, çıktı sonucu ve şeridi değiştir
  • ;) sonucu ve artış endeksini kaldır
  • Sow 32, çıkış alanı itin ve şeridi değiştirin (o dan aşağı doğru)
  • $O çıktıyı atlamak
  • w;wşeridi değiştirin, 32'yi istiften çıkarın ve şeridi Igirişe çevirin

5

05AB1E , 2 bayt

ā%

Çevrimiçi deneyin! veya Tüm testleri deneyin

ā  # Push the range(1, len(a) + 1)
 % # Mod each element in the input by the same one in this list

İlginç, DgL%güzel olacağını düşünmüştüm .
Magic Octopus Urn

@ carusocomputing Başlangıçta gL%unuttum çünkü vardı ā.
Riley

ābenim için biraz daha derinlere iniyor musun? Asla kullanmadığımma inanıyorum for eachama 1 to n+1aynen vy<code>})ama ima ettiği gibi vy<code>})mi?
Magic Octopus Urn,

@carusocomputing onu, 1 dizgesini, dizilen dizinin uzunluğuna kadar iter. Eşittir gL. TIO
Riley

Aynı zamanda girişi bozuyor mu? Veya örtük giriş şimdi otomatik olarak en yakın girişe genişletiliyor mu?
Sihirli Ahtapot Urn

4

Mathematica, 22 bayt

#&@@@Mod~MapIndexed~#&

Bir tane daha Mathematica yaklaşımı.


1
MapIndexed@Modolduğu neredeyse yeterince iyi: '(
ngenisis

4

Yıldızlı , 75 70 bayt

      +`  , + +   *    +  + +      +*   +    *  .               + + .'

Çevrimiçi deneyin!

açıklama

Bu, girilen sayıları okumaya devam eden ve başlangıçta başlatılan bir sayacı artıran sonsuz bir döngüdür 1. Her giriş ve sayaç çifti için modül hesaplanır ve yazdırılır.

Giriş tükendiğinde döngüyü sonlandırmak için aşağıdaki numara kullanılır. Başka giriş olmadığında, bir numara daha okumaya çalışmak a'yı verir 0. Bu nedenle, okuma numarasını kendi başımıza böleriz ve eğer 0program buysa bir hata ile biter. Aksi takdirde sonucu atar ve devam ederiz.

      +              Push 1. This is the initial value of the counter
`                    Mark label
  ,                  Read number from input and push it. Gives 0 if no more input
 +                   Duplicate top of the stack
 +                   Duplicate top of the stack
   *                 Pop two numbers and push their division. Error if divisor is 0
    +                Pop (discard) top of the stack
  +                  Swap top two numbers
 +                   Duplicate top of the stack
      +              Push 1
*                    Pop two numbers and push their sum. This increases the counter
   +                 Rotate stack down, to move increased counter to bottom
    *                Pop two numbers and push their modulus
  .                  Pop a number and print it as a number
               +     Push 10
 +                   Duplicate top of the stack
 .                   Pop a number (10) and print it as ASCII character (newline)
'                    If top of the stack is non-zero (it is, namely 10) go to label



3

Japt, 5 4 bayt

®%°T

Dene


açıklama

     :Implicit input of array U
®    :Map over the array
%    :Modulo of the current element
°T   :T (0, initially) incremented by 1

1
Sanırım bir bayt kurtarabilirsin ®%°T(aslında, istersen hala Yorada kullanabilirsin )
ETHproductions

Aha. Teşekkürler, @ETHproductions.
Shaggy,

3

R, 22 bayt

pryr::f(x%%1:sum(x|1))

R, modülü yapmadan önce 1: uzunluk (x) yapar.


Güzel bulmak sum(x|1)!
JAD

1
Sadece seq()bunun yerine kullanarak seq_along()aynı şeyi yaptığını öğrendim . Bu yüzden yine birkaç bayt daha kısa.
JAD

1
Bunu size söyleyecektim ama yorum yapacak bir cevabım yoktu. Bunu anlamana sevindim.
Shayne03




2

Excel VBA, 59 46 Bayt

golfed

Anonim VBE Bir dizi ( ) dizisini aralıktan girdi olarak alan ( ) ile sınırlandırılmış bir dizi ( ) dizisi [A1]alan ve başlangıç ​​listesindeki 1-temelli dizinlerini VBE hemen penceresine dönüştüren acil pencere işlevi

For Each n In Split([A1]):i=i+1:?n Mod i;:Next

Giriş çıkış:

[A1]="10 9 8 7 6 5 4 3 2 1" ''# or manually set the value
For Each n In Split([A1]):i=i+1:?n Mod i;:Next
 0  1  2  3  1  5  4  3  2  1 

Eski Subrutin sürüm

Girdiyi bir dizi olarak alan ve VBE hemen penceresine outoutlar.

Sub m(n)
For Each a In n
i=i+1
Debug.?a Mod i;
Next
End Sub

Giriş / Çıkış:

m Array(10,9,8,7,6,5,4,3,2,1)
 0  1  2  3  1  5  4  3  2  1 

Ungolfed

Option Private Module
Option Compare Binary
Option Explicit
Option Base 0 ''# apparently Option Base 1 does not work with ParamArrays

Public Sub modIndex(ParamArray n() As Variant)
    Dim index As Integer
    For index = LBound(n) To UBound(n)
        Debug.Print n(index) Mod (index + 1);
    Next index
End Sub

Giriş çıkış:

Call modIndex(10,9,8,7,6,5,4,3,2,1)
 0  1  2  3  1  5  4  3  2  1 

1

CJam , 9 bayt

{_,,:).%}

Yığında bir dizi bekleyen ve çıktı dizisi ile değiştiren adsız blok.

Çevrimiçi deneyin!

açıklama

{       }    e# Define block
 _           e# Duplicate
  ,          e# Length
   ,         e# Range, 0-based
    :)       e# Add 1 to each entry
      .%     e# Vectorized modulus

1

J, 9 bayt

>:@i.@#|[

1 ... n | orijinal liste

| mod





1

GNU APL 1.2, 9 bayt

(⍳⍴R)|R←⎕

APL sağdan sola çalışır, dolayısıyla parantez içinde çalışır.

R←⎕vector öğesine kullanıcı girişi atar R.

⍴Rvektörün uzunluğunu verir; ⍳⍴R1 ile o uzunluk arasındaki tüm sayıları içeren bir vektör verir (yani indeksler).

|mod operatörüdür ( a|bverim b%a). APL diziler üzerinde çalışır, bu yüzden kod kullanıcının giriş modundaki indeksindeki her bir öğeyi içeren bir vektörü snippet eder.



1

Pyth, 5

.e%bh

Çevrimiçi testi .

    hk     # 1-based index of (implicit) lambda variable
   b       # element
  %        # element mod (1-based index)
.e    Q    # enumerated map over (implicit) input


1

Braingolf , 18 bayt

V1R&,{v.m1+v%}&,=;

Çevrimiçi deneyin!

açıklama

V1R&,{v.m1+v%}&,=;  Implicit input from commandline args
V1R                 Create stack2, push 1 to it, and return to stack1
   &,               Reverse stack1
     {.......}      Foreach loop, runs for each item in stack1
      v             Switch to stack2
       .m           Duplicate last item on stack and move duplicate to stack1
         1+         Increment last item on stack
           v%       Return to stack1, pop last 2 items and push modulus result
              &,    Reverse stack1
                =   Output stack1
                 ;  Suppress implicit output

1

Java 8 / C #, 39 bayt

a->{for(int i=0;i<a.length;a[i]%=++i);}

Burada dene.

Ayrıca değiştirerek C # çalışır ->ile =>ve lengthile Length:

a=>{for(int i=0;i<a.Length;a[i]%=++i);}

Burada dene.

Açıklama:

a->{                       // Method with integer-array parameter and no return-type
  for(int i=0;i<a.length;  //  Loop over the indexes of the array (0-indexed)
      a[i]%=++i            //   And replace every integer with itself mod (1+i)
  );                       //  End of loop
}                          // End of method

Girdi dizisini değiştirir, bu nedenle geri dönüş eksikliği olur.


1
Eğer değiştirirseniz Esasen ben C # 1 içinde ne yaparım, ayrıca çok C # için çalışan bu konuda yorum olabilir ->için =>ve büyük harf length.
TheLethalCoder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.