รายการหมายเลขโมดูลัสดัชนีของพวกเขาในรายการ


25

ง่าย ๆ หนึ่ง: จดรายการจำนวนเต็มบวกขณะป้อนและเอาท์พุทตัวเลขจะปรับค่าดัชนี 1 รายการในรายการ

ถ้าจำนวนเต็มเข้าเป็น{a, b, c, d, e, f, g}ผลลัพธ์ที่ควรจะ{a%1, b%2, c%3, d%4, e%5, f%6, g%7}อยู่ที่ไหน%เป็นผู้ประกอบการโมดูลัส


กรณีทดสอบ:

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

คำตอบ:



9

ภาษาสคริปต์การทำงานของ Flashpoint 73 ไบต์

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

โทรด้วย:

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

เอาท์พุท:


1
อะไรนะ ... นี่มันอะไรกัน?
JAD

2
@JarkoDubbeldam ใช่ เกมดังกล่าวอนุญาตให้ผู้เล่นสร้างสถานการณ์ของตนเองและมีภาษาสคริปต์ในเกมที่ออกแบบมาเพื่อเสริมการออกแบบภารกิจ อย่างไรก็ตามเนื่องจากภาษาทัวริงสมบูรณ์คุณสามารถทำสิ่งที่คุณต้องการได้
Steadybox

8

Python 2 , 35 ไบต์

i=1
for x in input():print x%i;i+=1

ลองออนไลน์!

นับดัชนีขึ้นด้วยตนเองตามเคล็ดลับของฉัน


1
หากคุณสามารถออกจากที่มีข้อผิดพลาด (ฉันลืมว่าที่เริ่มต้น) คุณสามารถโกนไบต์คู่
FryAmTheEggman

7

เยลลี่ 2 ไบต์

%J

ลองออนไลน์!

คำอธิบาย:

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

โดยทั่วไปรหัส modulos รายการเดิมโดยรายการดัชนี


2
ทันทีที่ฉันเห็นคำถามนี้ฉันคิดว่า "นั่นเป็น%Jเยลลี่ฉันสงสัยว่ามีใครตอบด้วยคำตอบนั้นไหม" ฉันเดาว่ามีคนอื่นที่มีความคิดเดียวกัน :-D

1
@ ais523 คุณคิดว่าคุณเป็นคนเดียวหรือไม่? คิดอีกครั้ง!
Erik the Outgolfer

6

R, 24 18 ไบต์

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

ประเมินฟังก์ชั่น:

function (x) 
x%%seq(x)

ซึ่งใช้seq_along()ในการสร้างเวกเตอร์ที่มีความยาวเท่ากับxเริ่มต้นที่ 1 จากนั้นจึง%%ใช้โมดูโล่

พฤติกรรมเริ่มต้นของseqเมื่อนำเสนอด้วยเวกเตอร์seq(along.with = x)ซึ่งเป็นผลลัพธ์เดียวกันseq_along(x)แต่สั้นกว่า 6 ไบต์


seq(x)1:length(x)เป็นสิ่งที่มีประโยชน์ที่มีรอบตั้งแต่ฉันมักจะใช้
Giuseppe

@Giuseppe ใช่ฉันรู้สึกประหลาดใจเช่นกัน
JAD

6

R, 27 ไบต์

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

บันทึก 5 ไบต์ด้วย @Jarko

บันทึกอีก 4 รายการขอบคุณ @Giuseppe

บันทึกอีก 2 รายการขอบคุณ @Taylor Scott

บันทึกอีก 2 รายการขอบคุณ @returnbull


35 มันคือ - ลบ paren สุดท้ายที่ไม่จำเป็นออกไป
Zahiro Mor

1
คุณไม่ต้องการ' '(พื้นที่) ในตอนท้ายของcat; นั่นคือตัวคั่นเริ่มต้น
จูเซปเป้

2
คุณสามารถวาง 2 ไบต์เพื่อรับ 33 โดยการลดขนาดลงเหลือx<-scan();cat(x%%1:length(x)," ")- โอ้และเคล็ดลับการจัดรูปแบบคู่, 1) คุณต้องการเพียง 4 ช่องทางด้านซ้ายของรหัสของคุณเพื่อให้มีการเยื้องและทำเครื่องหมาย 2) คุณสามารถเพิ่ม<!-- language-all: lang-r -->ธง ก่อนที่จะให้ไฮไลต์รหัสของคุณ (แม้ว่าจะมีการเปลี่ยนแปลงเล็กน้อยในตัวอย่างนี้) 3) คุณไม่จำเป็นต้องใช้วงเล็บล้อมรอบชื่อภาษาของคุณ 4) โอ้และคุณไม่จำเป็นต้องแสดงความคิดเห็นเมื่อคุณทำการแก้ไขในโพสต์
Taylor Scott

2
(1) คุณสามารถใช้=แทน<-การบันทึกไบต์ (2) สเปคบอกว่า "เอาท์พุท" มากกว่า "พิมพ์" ดังนั้นคุณอาจจะทิ้งcat(), ประหยัด 5 ไบต์ (3) เป็นหนึ่งไบต์สั้นกว่าsum(1|x) length(x)
rturnbull

5

APL (Dyalog) 5 ไบต์

⍳∘≢|⊢

ลองออนไลน์!

 ดัชนี

 ของ

 ความยาวของการโต้แย้ง

| โมดูลัสนั้น

 อาร์กิวเมนต์


ประหลาดใจอยู่เสมอว่าภาษา "หลัก" สามารถประหยัดได้ วิธี APL ดูเหมือนเป็นธรรมชาติของการเล่นกอล์ฟ: เช่น(~T∊T∘.×T)/T←1↓⍳R ⍝ primes up to Rหรือlife←{↑1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω} ⍝ Game of Life

@YiminRong คุณสามารถทำได้ดีกว่า: Primes ถึง R: (⊢~∘.×⍨)1↓⍳Rและ GoL (ในเวอร์ชัน 16.0): K∊⍨⊢∘⊂⌺3 3โดยที่ K เป็นค่าคงที่
อดัม

@YiminRong ลองใช้เครื่องมือค้นหาช่วงเวลาที่นี่ !
อดัม

5

Cubix , 19 ไบต์

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

ลองออนไลน์!

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

ดูมันวิ่ง

การดำเนินการไปข้างหน้าอย่างเป็นธรรม

  • 1 กด 1 ไปที่สแต็กเพื่อเริ่มดัชนี
  • I!@ รับอินพุตจำนวนเต็มและหยุดถ้า 0
  • s%Ow สลับดัชนีขึ้น mod ผลลัพธ์ผลลัพธ์และเปลี่ยนช่องทาง
  • ;) ลบผลลัพธ์และดัชนีที่เพิ่มขึ้น
  • Sow กด 32, พื้นที่เอาต์พุตและเปลี่ยนเลน (มุ่งหน้าลงจาก o)
  • $O กระโดดออก
  • w;wเปลี่ยนเหตุมีผลลบ 32 จากสแต็คและเปลี่ยนเลนไปยังIอินพุต

5

05AB1E , 2 ไบต์

ā%

ลองออนไลน์! หรือลองทดสอบทั้งหมด

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

น่าสนใจฉันคิดว่ามันจะเป็นไปได้DgL%ดี
Magic Octopus Urn

@carusocomputing ฉันเดิมมีเพราะผมลืมเกี่ยวกับgL% ā
Riley

ใจฉันจะเจาะลึกลงāไปอีกหน่อย? ฉันเชื่อว่าฉันไม่เคยใช้มันเป็นเหมือนfor eachแต่ใน1 to n+1ลักษณะที่เหมือนvy<code>})แต่บอกเป็นนัยvy<code>})?
Magic Octopus Urn

@carusocomputing มันจะส่งค่าอาร์เรย์ที่มีค่า 1 ถึงความยาวของอาร์เรย์ที่ถูกดึง gLมันเทียบเท่ากับ TIO
Riley

มันยังดักสัญญาณเข้าหรือไม่? หรือตอนนี้การป้อนข้อมูลโดยนัยขยายออกโดยอัตโนมัติไปยังอินพุตที่ใกล้เคียงที่สุดหรือไม่
Magic Octopus Urn

4

Mathematica ขนาด 22 ไบต์

#&@@@Mod~MapIndexed~#&

อีกหนึ่งวิธีการทางคณิตศาสตร์


1
MapIndexed@Modเป็นเกือบดีพอ: '(
ngenisis

4

สตาร์รี่ , 75 70 ไบต์

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

ลองออนไลน์!

คำอธิบาย

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

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

      +              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 ไบต์

®%°T

ลองมัน


คำอธิบาย

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

1
ฉันคิดว่าคุณสามารถบันทึกไบต์ด้วย®%°T(จริง ๆ แล้วคุณยังสามารถใช้ที่Yนั่นถ้าคุณต้องการ)
ETHproductions

เอเอชเอ ขอบคุณ @ETHproductions
Shaggy

3

R, 22 ไบต์

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

R ดำเนินการ 1: ความยาว (x) ก่อนทำโมดูลัส


พบกับsum(x|1)!
JAD

1
เพิ่งพบว่าการใช้seq()แทนที่จะseq_along()ทำสิ่งเดียวกัน นั่นคือไม่กี่ไบต์ที่สั้นลงอีกครั้ง
JAD

1
ฉันจะบอกคุณว่า แต่ฉันไม่มีตัวแทนให้ความเห็น ดีใจที่คุณคิดออก
Shayne03



2

Mathematica ขนาด 21 ไบต์

#~Mod~Range@Length@#&

ลองออนไลน์!

หรือ20 ไบต์ (โดย Martin)

#~Mod~Range@Tr[1^#]&

Tr[1^#]Length@#สำหรับ
Martin Ender

อันนั้นใช้ไม่ได้กับวิชาคณิตศาสตร์ดังนั้นฉันจึงเก็บทั้งคู่ไว้
J42161217

คุณไม่มี#อักขระตัวสุดท้ายในคำตอบแรกของคุณ
เอียนมิลเลอร์

2

Excel VBA, 59 46 ไบต์

แข็งแรงเล่นกอล์ฟ

ไม่ระบุชื่อ VBE ฟังก์ชั่นหน้าต่างทันทีที่ใช้ช่องว่าง ( ) สตริงอาร์เรย์แบบมีตัวคั่นเป็นอินพุตจากช่วง[A1]และส่งออกตัวเลขปรับค่าดัชนี 1 รายการของพวกเขาในรายการเริ่มต้นไปยังหน้าต่างทันที VBE

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

อินพุต / เอาต์พุต:

[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 

Subเวอร์ชันประจำเก่า

รูทีนย่อยที่รับอินพุตเป็นอาเรย์ที่ผ่านและออกไปยังหน้าต่าง VBE ทันที

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

อินพุต / Ouput:

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

อินพุต / เอาต์พุต:

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






1

GNU APL 1.2, 9 ไบต์

(⍳⍴R)|R←⎕

APL ทำงานจากขวาไปซ้ายดังนั้นวงเล็บ

R←⎕Rท่านผู้ใช้กำหนดเวกเตอร์

⍴Rให้ความยาวของเวกเตอร์ ⍳⍴Rให้เวกเตอร์ที่มีตัวเลขทั้งหมดตั้งแต่ 1 ถึงความยาวนั้น (ดัชนีดังนั้น)

|เป็นตัวดำเนินการ mod ( a|bอัตราผลตอบแทนb%a) APL ทำงานในอาร์เรย์ดังนั้นโค้ดจึงมีเวกเตอร์ที่มีแต่ละองค์ประกอบจากอินพุตของผู้ใช้ปรับเปลี่ยนดัชนี





1

Braingolf , 18 ไบต์

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

ลองออนไลน์!

คำอธิบาย

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 ไบต์

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

ลองที่นี่

ยังทำงานใน C # โดยแทนที่->ด้วย=>และlengthด้วยLength:

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

ลองที่นี่

คำอธิบาย:

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

ปรับเปลี่ยนอินพุทอาเรย์จึงขาดการส่งคืน


1
หลักสิ่งที่ฉันทำใน C # +1 ยังสามารถแสดงความคิดเห็นเกี่ยวกับเรื่องการทำงานสำหรับ C # เกินไปถ้าคุณเปลี่ยน->ไปและใช้ประโยชน์=> length
TheLethalCoder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.