Biorąc pod uwagę ciąg znaków S
i listę indeksów X
, zmodyfikuj S
, usuwając element przy każdym indeksie, S
jednocześnie wykorzystując ten wynik jako nową wartość S
.
Na przykład, biorąc pod uwagę S = 'codegolf'
i X = [1, 4, 4, 0, 2]
,
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
Twoim zadaniem jest wykonanie tego procesu, zebranie wartości S
po każdej operacji i wyświetlenie każdego z nich w nowej linii w kolejności. Ostateczna odpowiedź brzmi:
S = 'codegolf'
X = [1, 4, 4, 0, 2]
Answer:
codegolf
cdegolf
cdeglf
cdegf
degf
def
- To jest golf golfowy, więc ustaw swój kod tak krótko, jak to możliwe.
- Możesz założyć, że wartości w
X
są zawsze poprawnymi indeksamiS
i możesz użyć indeksowania opartego na 0 lub na podstawie 1. - Ciąg będzie zawierać tylko
[A-Za-z0-9]
- Albo
S
albox
może być pusty. JeśliS
jest pusty, oznacza to, żex
również musi być pusty. - Możesz również traktować
S
jako listę znaków zamiast ciągu. - Możesz wydrukować dane wyjściowe lub zwrócić listę ciągów znaków. Dopuszczalne są wiodące i końcowe białe znaki. Każda forma wyniku jest w porządku, o ile jest łatwa do odczytania.
Przypadki testowe
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'
code-golf
string
array-manipulation
code-golf
string
ascii-art
code-golf
number
sequence
pi
code-golf
number
array-manipulation
code-golf
string
ascii-art
code-golf
math
number
game
code-golf
math
sequence
polynomials
recursion
code-golf
math
number
sequence
number-theory
code-golf
permutations
balanced-string
code-golf
string
ascii-art
integer
code-golf
decision-problem
hexagonal-grid
code-golf
ascii-art
kolmogorov-complexity
code-golf
number
code-golf
matrix
binary-matrix
code-golf
math
statistics
code-golf
string
polyglot
code-golf
random
lost
code-golf
date
path-finding
code-golf
string
code-golf
math
number
arithmetic
number-theory
code-golf
tetris
binary-matrix
code-golf
array-manipulation
sorting
code-golf
number
code-golf
array-manipulation
rubiks-cube
cubically
code-golf
grid
optimization
code-golf
math
function
code-golf
string
quine
code-golf
ascii-art
grid
code-golf
decision-problem
grid
simulation
code-golf
math
sequence
code-golf
path-finding
code-golf
ascii-art
grid
simulation
code-golf
number
whitespace
code-golf
sequence
code-golf
sequence
code-golf
sequence
integer
code-golf
math
game
code-golf
internet
stack-exchange-api
code-golf
sequence
code-golf
internet
stack-exchange-api
code-golf
math
factoring
code-challenge
sequence
polyglot
rosetta-stone
code-golf
string
browser
code-golf
date
code-golf
base-conversion
code-challenge
cops-and-robbers
hello-world
code-golf
cops-and-robbers
hello-world
mile
źródło
źródło
S
jako listę postaci?len(x)+1
ciągi.Odpowiedzi:
Haskell,
3833 bajtówProsto: wielokrotnie bierz elementy przed i po indeksie i, dołącz do nich ponownie i zbieraj wyniki.
Wypróbuj online!
Edycja: @Lynn zapisał 5 bajtów. Dzięki!
źródło
s#i=take i s++drop(i+1)s
jest faktycznie krótszy, oszczędzając 5 bajtów.q=
tam fragment kodu TIO ^^;JavaScript (ES6),
5750484542 bajtówPobiera ciąg znaków jako tablicę pojedynczych znaków, zwraca tablicę zawierającą ciąg znaków rozdzielony przecinkami oryginału, a następnie podtablicę ciągów znaków oddzielonych przecinkami dla każdego kroku.
Sprawdź to
Wyjaśnienie
Bierzemy dwa wejścia przez parametry
s
(tablicę łańcuchów) ia
(tablicę liczb całkowitych) w składni curry, co oznacza, że wywołujemy funkcję za pomocąf(s)(a)
.Budujemy nową tablicę i zaczynamy od oryginału
s
. Ponieważ jednaksplice
metoda, której będziemy używać później, modyfikuje tablicę, musimy wykonać jej kopię, co możemy zrobić, konwertując ją na ciąg znaków (wystarczy dołączyć pusty ciąg).Aby wygenerować podtablicę,
map
nad tablicą liczb całkowitycha
(gdziex
jest bieżąca liczba całkowita) i dla każdego elementu otrzymujemysplice
1 elements
, zaczynając od indeksux
. Zwracamy zmodyfikowanys
, ponownie wykonując jego kopię, konwertując ją na ciąg.źródło
s=>a=>[s+'',...a.map(x=>s.splice(x,1)&&s+'')]
Japt , 6 bajtów
Przetestuj online!
Wyjaśnienie
Alternatywnie:
Działa to, ponieważ usunięcie elementu z indeksu
"
nic nie robi, a zatem zwraca oryginalny ciąg.źródło
Łuska , 7 bajtów
Pobiera najpierw łańcuch, a następnie indeksy (1). Wypróbuj online!
Wyjaśnienie
źródło
x
?Python 2 , 43 bajty
Wypróbuj online!
To jest drukowane jako listy znaków.
źródło
for i in i+[0]
?+[0]
mówię o tymfor i in i
.for k in i
jest równoważne .Python 2 , 47 bajtów
Można to skrócić 43 bajtów , jak wskazał @LuisMendo, ale to już rozwiązanie @ ErktheOutgolfer.
Wypróbuj online!
źródło
`a`[2::5]
zamiast tego''.join(a)
repr
i dzielenie ciągów, działa dobrze, aby zamienić listę znaków w ciąg,`a`[1::3]
może być również używane z listą cyfr::5
działa tutaj: PJava 8, 78 bajtów
To curry lambda, od
int[]
do konsumentaStringBuilder
lubStringBuffer
. Wyjście jest drukowane na standardowe wyjście.Wypróbuj online
źródło
Stream
s jako dane wejściowe i otrzymałem bardzo ładne odpowiedzi. W rzeczywistości prawie wszystkie języki gry w golfa używają wewnętrznych strumieni równoważnych. Więc wybierając swój wkład, po prostu poziomujesz. Niemniej jednak +105AB1E , 11 bajtów
Wypróbuj online!
źródło
Any form of output is fine as long as it is easily readable
Mathematica, 70 bajtów
Wypróbuj online!
źródło
R ,
4632 bajtówWypróbuj online!
Pobiera dane wejściowe jako listę znaków i
X
jest oparty na 1.Reduce
jest odpowiednikiem R dlafold
funkcji, w tym przypadku jest[
to podzbiór. Powtarza się,-X
ponieważ ujemne indeksowanie w R usuwa element iinit
jest ustawione naS
,accum=TRUE
więc gromadzimy wyniki pośrednie.R , 80 bajtów
Funkcja 2-argumentowa, bierze
X
indeks 1. PrzyjmujeS
jako sznur.Wypróbuj online!
źródło
Reduce
tutaj. Dobra robota!Haskell , 33 bajty
Wypróbuj online!
źródło
PowerShell ,
9484 bajtówWypróbuj online!
Pobiera dane wejściowe
$s
jako ciąg i$x
jawną tablicę. Następnie tworzymy$a
na podstawie$s
jako listy.Arrays in PowerShell are fixed size (for our purposes here), so we need to use the lengthy
[System.Collections.Generic.list]
type in order to get access to the.removeAt()
function, which does exactly what it says on the tin.I sacrificed 10 bytes to include two
-join
statements to make the output pretty. OP has stated that outputting a list of chars is fine, so I could output just$a
rather than-join$a
, but that's really ugly in my opinion.Saved 10 bytes thanks to briantist.
źródło
System
and just use[Collections.Generic.list[char]]
. To keep it pretty without sacrificing bytes, you can put the last-join$a
in the footer in TIO.$a.removeat($_)
to,$a|% r*t $_
.System
from the class name. Sadly the last-join$a
is necessary for the code, so I can't move it to the footer.Python 2, 50 bytes
Try it online!
źródło
05AB1E,
97 bytesTry it online!
-2 thanks to idea from @ETHProductions.
źródło
x
is empty.=sv""yǝ=
or something similar instead of replacing with a newline and then removing the newline?õ
also works :)Retina, 58 bytes
Try it online! Explanation:
Match the indices (which are never on the first line, so are always preceded by a newline).
Double-space the indices, convert to unary, and add 1 (because zeros are hard in Retina).
Repeatedly change the first match, which is always the current value of the string.
Retrieve the next index in
$#1
.Capture the string, including the
$#1
th character and one newline.Separately capture the prefix and suffix of the
$#1
th character of the string.Match the index.
Replace the string with itself and the index with the prefix and suffix of the
$#1
th character.źródło
Pyth, 8 bytes
Demonstration
Reduce, starting with the string and iterating over the list of indices, on the deletion function.
źródło
PowerShell,
5458 bytesTry it online!
Explanation
Takes input as a char array (
[char[]]
).Iterates through the array of indices (
$x
) plus an injected first element of-1
, then for each one, assigns the current element to$z
, initializes$i
to0
, then iterates through the array of characters ($s
), returning a new array of only the characters whose index ($i
) does not equal (-ne
) the current index to exclude ($z
). This new array is assigned back to$s
, while simultaneously being returned (this happens when the assignment is done in parentheses). That returned result is-join
ed to form a string which is sent out to the pipeline.Injecting
-1
at the beginning ensures that the original string will be printed, since it's the first element and an index will never match-1
.źródło
q/kdb+,
2710 bytesSolution:
Examples:
Explanation:
Takes advantage of the converge functionality
\
as well as drop_
.Notes:
If we didn't need to print the original result, this would be 2 bytes in
q
:źródło
Perl 5, 55 bytes (54 + "
-l
")Try it online!
źródło
-pa
) for 44 bytes:$_=<>;substr$_,shift@F,print,""while@F&&$_
&&$_
since you can assume the input is valid (the list of indices can't be longer than the string). Using the return value ofprint
as the number of characters is quite slick.MATL, 8 bytes
Indexing is 1-based.
Try it online! Or verify the test cases.
Explanation
źródło
C# (.NET Core),
87877470 bytesTry it online!
Just goes to show that recursion isn't always the best solution. This is actually shorter than my original invalid answer. Still prints to STDOUT rather than returning, which is necessary because it ends with an error.
-4 bytes thanks to TheLethalCoder
źródło
Func
that returns the otherFunc
,Action
,Predicate
,...C (gcc), 99 bytes
Try it online!
Takes the string, array, and the length of the array.
źródło
Pyth, 10 bytes
Rule changes saved me 1 byte:
Try it online!
Pyth, 11 bytes
Try it online!
źródło
Gaia, 9 bytes
I should really add a "delete at index" function...
Try it online!
Explanation
źródło
V, 12 bytes
Try it online!
This is 1-indexed, input is like:
Explanation
źródło
x
?1,2,3,
. Empty list would be nothing, Singleton would be1,
Swift 3, 80 bytes
Try it online!
źródło
Pyth, 8 bytes
Test suite!
explanation
źródło
Python 2, 54
Try It Online
źródło
APL,
313028 bytesTry it online!
źródło
C# (Mono), 85 bytes
Try it online!
źródło