Список модуля числа їх індексів у списку


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


7

Желе , 2 байти

%J

Спробуйте в Інтернеті!

Пояснення:

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

В основному, код модулює вихідний список списком індексів.


2
Як тільки я побачив це запитання, я подумав, що "це %Jв Джелі, мені цікаво, чи хтось відповів на цю відповідь?". Напевно, хтось інший мав таку ж ідею :-D

1
@ ais523 Ви думаєте, що ви були єдиними? Подумати ще раз!
Ерік Аутгольфер

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 Так, я теж був здивований.
JAD

6

R, 27 байт

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

збережено 5 байт завдяки @Jarko

врятувало ще 4 завдяки @Giuseppe

врятувало ще 2 завдяки @Taylor Scott

Збережено ще 2 завдяки @returnbull


35 це - вилучений непотрібний останній
батьків

1
вам не потрібно ' '(пробіл) наприкінці cat; це роздільник за замовчуванням
Джузеппе

2
ви можете опустити 2 байти, щоб отримати 33, зменшивши це до x<-scan();cat(x%%1:length(x)," ")- ой, і пара підказок щодо форматування, 1) вам потрібно лише 4 пробіли зліва від коду, щоб він був належним чином відведений та позначений 2) ви можете додати <!-- language-all: lang-r -->прапор перш ніж ваш код буде виділений (хоча це мало змінюється в цьому прикладі) 3) вам не потрібні дужки навколо назви вашої мови 4) ой, і вам не потрібно робити коментарі під час редагування публікації
Тейлор Скотт

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 to R: (⊢~∘.×⍨)1↓⍳Rі GoL (у версії 16.0): K∊⍨⊢∘⊂⌺3 3де K - константа.
Adám

@YiminRong Спробуйте шукати праймери тут !
Adám

5

Cubix , 19 байт

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

Спробуйте в Інтернеті!

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

Дивись, як це працює

Досить пряма реалізація.

  • 1 натисніть 1 до стеку, щоб запустити індекс
  • I!@ отримати цілий вхід і зупинити, якщо 0
  • s%Ow поміняти індекс вгору, мод, вихідний результат та змінити смугу
  • ;) видалити результат та індекс приросту
  • 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%, приємно.
Чарівний восьминога Урна

@carusocomputing я спочатку мав, gL%бо про нього забув ā.
Райлі

пам'ятаю, що āдля мене трохи глибше ? Я вважаю, я ніколи не використовував це так, як, for eachале таким 1 to n+1чином, vy<code>})але мається на увазі vy<code>})?
Magic Octopus Urn

@carusocomputing він висуває масив зі значеннями 1 до довжини спливаючого масиву. Це рівнозначно gL. TIO
Райлі

Це також обробляти вхід? Або неявний ввід тепер автоматично поширюється на найближчий доступ?
Чарівний восьминога Урна


4

Зоряний , 75 70 байт

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

Спробуйте в Інтернеті!

Пояснення

Це нескінченний цикл, який зберігає читання чисел з вхідних даних і збільшує лічильник, ініціалізований на 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.
Кудлатий

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

Excel VBA, 59 46 байт

Гольф

Функція негайного вікна Anonymous 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

Введення / вихід:

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

Безумовно

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 до цієї довжини (так і індекси).

|є оператором моди ( 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
Essentially what I'd do in C# +1, could also comment about it working for C# too if you change -> to => and capitaliselength.
TheLethalCoder
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.