Codegolf - Исчезающие Элементы

  • Автор темы AHPER2
  • Обновлено
  • 23, Oct 2024
  • #1

Учитывая строку

 
 
 S = 'abc', x = [0]
'abc'
'bc'

S = 'abc', x = []
'abc'

S = 'abc', x = [2, 0, 0]
'abc'
'ab'
'b'
''

S = '', x = []
''

S = 'codegolfing', x = [10, 9, 8, 3, 2, 1, 0]
'codegolfing'
'codegolfin'
'codegolfi'
'codegolf'
'codgolf'
'cogolf'
'cgolf'
'golf'
 
and a list of indices S , изменить x by removing the element at each index of S используя этот результат в качестве нового значения x .

Например, учитывая S and [A-Za-z0-9] ,

S

Ваша задача выполнить этот процесс, собрать значения X after each operation, and display each on a newline in order. The final answer would be

S = 'codegolf' X = [1, 4, 4, 0, 2] Answer: codegolf cdegolf cdeglf cdegf degf def
  • Это значит, что ваш код должен быть как можно короче.
  • Вы можете предположить, что значения в S are always valid indices for 0 1 2 3 4 5 6 7 | c o d e g o l f | Remove 1 c d e g o l f | Remove 4 c d e g l f | Remove 4 c d e g f | Remove 0 d e g f | Remove 2 d e f , и вы можете использовать индексацию с отсчетом от 0 или от 1.
  • Строка будет содержать только X = [1, 4, 4, 0, 2]
  • Или S = 'codegolf' or S может быть пустым. Если S is empty, it follows that S также должно быть пустым.
  • Вы также можете взять X as a list of characters instead of a string.
  • Вы можете либо распечатать вывод, либо вернуть список строк. Допускаются начальные и конечные пробелы. Любая форма вывода хороша, если она легко читаема.

Тестовые случаи

S

#код-гольф #код-гольф #строка #массив

AHPER2


Рег
14 Apr, 2006

Тем
80

Постов
163

Баллов
583
  • 26, Oct 2024
  • #2

Хаскель, 38 33 байта

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 X,S=input()
for a in X:

print S

S=S[:a]+S[a+1:]
print S
 

Прямо вперед: повторно берите элементы до и после индекса i, соединяйте их и собирайте результаты.

Попробуйте онлайн!

Изменить: @Lynn сохранила 5 байт. Спасибо!

 

Maksi


Рег
11 Nov, 2005

Тем
85

Постов
190

Баллов
645
  • 26, Oct 2024
  • #3

JavaScript (ES6), 57 50 48 45 42 байта

Принимает строку как массив отдельных символов, выводит массив, содержащий исходную строку, разделенную запятыми, за которой следует подмассив строк, разделенных запятыми, для каждого шага.

+zm=z.DzdQ # implicit: input and iteration variable m Q # for each of the elements of the first input (the array of numbers, Q) .Dzd # remove that index from the second input (the string, z) =z # Store that new value in z +z # prepend the starting value
  • 3 байта сэкономлены благодаря Арно Предлагая мне злоупотреблять свободной спецификацией вывода больше, чем раньше, что привело меня к еще большему злоупотреблению ею ради еще одной экономии 3 байтов.

Проверьте это

+zm=z.Dz func f(l:[String],c:[Int]){var t=l;for i in c{print(t);t.remove(at:i)};print(t)} ò ' <M-r>ecursively until error dt, ' (d)elete (t)o the next , (errors when no more commas) G ' (G)oto the last line Ù ' Duplicate it down | ' Goto column ... @- ' (deleted number from the short register) x ' And delete the character there H ' Go back home x ' And delete the comma that I missed

Объяснение

Мы принимаем два входа через параметры 11,10,9,4,3,2,1, codegolfing (the string array) and òdt,GÙ@-|xHx (целочисленный массив) в синтаксисе каррирования, что означает, что мы вызываем функцию с помощью + Add the string to the list ⟪Seḥ+⟫⊣ Cumulatively reduce by this block: S Split around index n e Dump the list ḥ Remove the first char of the second part + Concatenate back together ṣ Join the result with newlines .

Мы создаем новый массив и начинаем его с исходного +⟪Seḥ+⟫⊣ṣ . However, as the V+E0sQ .(QN Метод, который мы будем использовать позже, изменяет массив, нам нужно сделать его копию, что мы можем сделать, преобразовав ее в строку (просто добавьте пустую строку).

Чтобы сгенерировать подмассив, мы V+E0Q .(QN over the integer array (…n⟇ # 'o' flag forces output of the last value ( # For every number in the list... … # Print the string without popping n # Get the current value ⟇ # Remove the char at the index # The result is printed on next iteration (где (…n⟇ is the current integer) and, for each element, we o 1 элемент из >@({&.>/\.&.|.@;<^:4"0) , beginning at index S=>I=>{for(int i=0;;S=S.Remove(I[i++],1))System.Console.WriteLine(S);} . Возвращаем измененный i % Input string. Input has to be done explicitly so that the string % will be displayed even if the row vector of indices is empty i % Input row vector of indices " % For each t % Duplicate current string [] % Push empty array @ % Push current index ( % Assignment indexing: write [] to string at specified index % End (implicit). Display stack (implicit) , again making a copy of it by converting it to a string.

 

HyipInvest.net


Рег
27 Sep, 2018

Тем
53

Постов
211

Баллов
506
  • 26, Oct 2024
  • #4

Япт, 6 байт

ii"t[]@(

Проверьте это онлайн!

Объяснение

sub{print($s=shift);for(@_){substr$s,$_,1,"";print$s}}

Альтернативно:

-l

Это работает, потому что удаление элемента по индексу -1 does nothing and so returns the original string.

 

Svold


Рег
24 Nov, 2019

Тем
81

Постов
199

Баллов
634
  • 26, Oct 2024
  • #5

EnadaRarf9


Рег
25 Oct, 2024

Тем
62

Постов
201

Баллов
551
  • 26, Oct 2024
  • #9

Р, 46 32 байта

$x

Попробуйте онлайн!

Принимает ввод в виде списка символов и [char[]] is 1-based. param($s,$x),-1+$x|%{$z=$_;$i=0;-join($s=$s|?{$z-ne$i++})} является R-эквивалентом .u.DNYEz , the function in this case is $#1 что является подмножеством. Перебирает $2$3$4 because negative indexing in R removes the element, and ¶.* установлено на $#1 , with ((?<-1>.)*) (.*) поэтому мы накапливаем промежуточные результаты.

Р, 80 байт

$#1

функция с двумя аргументами, принимает ( . ¶) 1-indexed. Takes $#1 как строка.

Попробуйте онлайн!

 

Graterr


Рег
24 Nov, 2019

Тем
93

Постов
205

Баллов
720
  • 26, Oct 2024
  • #11

q/kdb+, 27 10 байт

Решение:

+1`

Примеры:

¶¶1$&$*

Объяснение:

Пользуется преимуществом сходиться функциональность ¶\d+ as well as drop ¶\d+ ¶¶1$&$* +1`(?=.*¶¶.(.)*)(((?<-1>.)*).(.*)¶)¶.* $2$3$4 .

=s # Print original string, swap with indices. v # Loop through indices... õyǝ # Replace current index with empty string.

Примечания:

Если бы нам не нужно было печатать исходный результат, это было бы 2 байт в =svõyǝ= :

j;f(s,a,i)char*s;int*a;{puts(s);for(j=0;j<i;j++){memmove(s+a[j],s+a[j]+1,strlen(s)-a[j]);puts(s);}} ||answer||

PowerShell, 94 84 байта

s,i=input() for j in i+[0]:print s;s=s[:j]+s[j+1:]

Попробуйте онлайн!

Принимает ввод -join$a as a string and $a как явный массив. Затем мы создаем -join based on .removeAt() как список.

Массивы в PowerShell имеют фиксированный размер (для наших целей), поэтому нам нужно использовать длинный [System.Collections.Generic.list] type in order to get access to the $s функция, которая делает именно то, что написано на банке.

Я пожертвовал 10 байтами, чтобы включить два $a statements to make the output pretty. OP has stated that outputting a list of chars is fine, so I could output just $x скорее, чем $s , but that's really ugly in my opinion.

Сэкономлено 10 байт благодаря briantist.

 

Elideloba


Рег
29 Sep, 2013

Тем
67

Постов
188

Баллов
533
  • 26, Oct 2024
  • #14

05AB1E, 9 7 байт

q

Попробуйте онлайн!


{x _\0N,y} { } / lambda function, x and y are implicit variables 0N,y / join null to the front of list (y), drop null does nothing _\ / drop over (until result converges) printing each stage x / the string (need the space as x_ could be a variable name)

-2 благодаря идее от @ETHProductions.

 

Posev


Рег
11 Oct, 2004

Тем
71

Постов
188

Баллов
593
  • 26, Oct 2024
  • #15

сетчатка, 58 байт

_

Попробуйте онлайн! Объяснение:

\

Сопоставьте индексы (которые никогда не находятся в первой строке, поэтому им всегда предшествует новая строка).

q){x _\0N,y}["codegolf";1 4 4 0 2] "codegolf" "cdegolf" "cdeglf" "cdegf" "degf" "def" q){x _\0N,y}["abc";0] "abc" "bc" q){x _\0N,y}["abc";()] "abc" q){x _\0N,y}["abc";2 0 0] "abc" "ab" ,"b" "" q){x _\0N,y}["";()] ""

Увеличьте индексы двойным интервалом, преобразуйте их в унарные и добавьте 1 (потому что нули в Retina сложны).

{x _\0N,y}

Повторно измените первое совпадение, которое всегда является текущим значением строки.

scanl(\s i->take i s++drop(i+1)s)

Получить следующий индекс в S .

X

Захватите строку, включая function(S,X,g=substring)Reduce(function(s,i)paste0(g(s,0,i-1),g(s,i+1)),X,S,,T) th character and one newline.

accum=TRUE

Отдельно захватите префикс и суффикс S th character of the string.

init

Сопоставьте индекс.

-X

Замените строку самой собой, а индекс префиксом и суффиксом [ th character.

 

GoldenScrew


Рег
04 Feb, 2011

Тем
68

Постов
220

Баллов
590
  • 26, Oct 2024
  • #16

Пиф, 8 байт

fold

Демонстрация

Сократите функцию удаления, начиная со строки и перебирая список индексов.

 

Dtolstoy


Рег
06 Nov, 2012

Тем
61

Постов
183

Баллов
528
  • 26, Oct 2024
  • #17

PowerShell, 54 58 байт

Reduce

Попробуйте онлайн!

Объяснение

Принимает входные данные в виде массива символов ( X ).

Перебирает массив индексов ( function(S,X)Reduce(`[`,-X,S,,T) ) plus an injected first element of (s=#;For[t=1,t<=Length@#2,Print@s;s=StringDrop[s,{#2[[t]]+1}];t++];s)& , затем для каждого присваивает текущий элемент v # For each index: = # Print without popping ā # Push range(1, len(a) + 1) 0m # Raise each to the power of 0. # This gives a list of equal length containing all 1s 0yǝ # Put a 0 at the location that we want to remove Ï # Keep only the characters that correspond to a 1 in the new list }, # Print the last step , initializes v=ā0m0yǝÏ}, к l->s->{System.out.println(s);for(int i:l)System.out.println(s.delete(i,i+1));} , then iterates through the array of characters ( StringBuffer ), возвращая новый массив только из тех символов, индекс которых ( StringBuilder ) does not equal ( int[] ) текущий индекс для исключения ( a,b=input();print a for i in b:a.pop(i);print a ). This new array is assigned back to s,i=input() for i in i+[0]:print s;s.pop(i) , одновременно возвращаясь (это происходит, когда присваивание выполняется в круглых скобках). Этот возвращенный результат G§+oh↑↓ G Scan from left by function: Arguments are string, say s = "abcde", and index, say i = 3. ↓ Drop i elements: "de" ↑ Take i elements oh and drop the last one: "ab" §+ Concatenate: "abde" Implicitly print list of strings on separate lines. ed to form a string which is sent out to the pipeline.

Инъекция G§+oh↑↓ at the beginning ensures that the original string will be printed, since it's the first element and an index will never match " .

 

Vuec


Рег
19 Oct, 2007

Тем
68

Постов
192

Баллов
542
  • 26, Oct 2024
  • #18

Перл 5, 55 байт (54 + " uQ åjV UuQ Push a quotation mark to the beginning of U. å Cumulatively reduce by j removing the item at that index in the previous value, V with an initial value of V. ")

UåjV uV Implicit: U = array of integers, V = string Uå Cumulatively reduce U by j removing the item at that index in the previous value, V with an initial value of V. uV Push V to the beginning of the result.

Попробуйте онлайн!

 

Ната123


Рег
01 May, 2012

Тем
74

Постов
171

Баллов
571
  • 26, Oct 2024
  • #19

МАТЛ, 8 байт

åjV uV

Индексация начинается с 1.

Попробуйте онлайн! Или проверить тестовые примеры.

Объяснение

s ||answer||

С# (.NET Core), 87 87 74 70 байт

x

Попробуйте онлайн!

Просто показывает, что рекурсия не всегда является лучшим решением. На самом деле это короче моего первоначального недействительного ответа. По-прежнему печатает в STDOUT, а не возвращает, что необходимо, поскольку заканчивается ошибкой.

-4 байта благодаря TheLethalCoder

 

Utique33


Рег
07 Apr, 2020

Тем
63

Постов
219

Баллов
544
  • 26, Oct 2024
  • #22

Гайя, 9 байт

s

Мне действительно следует добавить функцию «удалить по индексу»...

Попробуйте онлайн!

Объяснение

f(s)(a) ||answer||

В, 12 байт

a

Попробуйте онлайн!

Это 1-индексированный, ввод такой:

s

Объяснение

<label for=i>String: </label><input id=i><label for=j>Indices: </label><input id=j><pre id=o> ||answer||

Свифт 3, 80 байт

label,input{font-family:sans-serif;font-size:14px;height:20px;line-height:20px;vertical-align:middle}input{margin:0 5px 0 0;width:100px;}

Попробуйте онлайн!

 

Kostramenko.eduard


Рег
01 Dec, 2019

Тем
83

Постов
206

Баллов
631
  • 26, Oct 2024
  • #23

Пиф, 8 байт

o.innerText=JSON.stringify((f= s=>a=>[s+"",a.map(x=>s.splice(x,1)&&s+"")] )([...i.value="codegolf"])(j.value=[1,4,4,0,2]));oninput=_=>o.innerText=JSON.stringify(f([...i.value])(j.value.split`,`))

Тестовый набор!

объяснение

s=>a=>[s+"",a.map(x=>s.splice(x,1)&&s+"")] ||answer||

Питон 2, 54

s#i=take i s++drop(i+1)s scanl(#)

Попробуйте онлайн

 

2-12


Рег
08 Oct, 2008

Тем
69

Постов
198

Баллов
563
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно