Musisz napisać funkcję / program, który pobiera dane wejściowe za pomocą stdin
argumentów / wiersza poleceń / argumentów funkcji, miesza znaki w ciągu, a następnie wyprowadza końcowy ciąg przez stdout
.
Dane wejściowe będą najpierw zawierać ciąg znaków (nie pusty lub null
), spację, a następnie parzystą liczbę liczb nieujemnych, wszystkie oddzielone spacjami. Jeśli dane wejściowe są pobierane za pomocą argumentów funkcyjnych, ciąg będzie jednym z argumentów, podczas gdy liczby całkowite, które są oddzielone spacją, będą drugim. Musisz zamienić znaki ciągu na indeksy odpowiadające kolejnym parom liczb.
Na przykład:
Hello_world! 0 6
musi skutkować
wello_Horld!
Założenia
- Możesz wybrać między indeksowaniem opartym na 0 i opartym na 1 i możesz założyć, że podane indeksy zawsze będą w zakresie.
- Ciąg nie będzie dłuższy niż 100 znaków i będzie zawierać tylko znaki ASCII w zakresie
!
od~
(kody znaków od 0x21 do 0x7E włącznie). Zobacz tabelę ASCII w celach informacyjnych. - Dwa wskaźniki w parze mogą być identyczne (w takim przypadku nic nie jest zamieniane na tym etapie).
Punktacja
To jest kod golfowy, więc wygrywa najkrótsze przesłanie (w bajtach).
Przypadki testowe
Hello_world! 0 6 => wello_Horld!
First 1 2 1 0 0 4 => tFisr
(Second!$$) 8 7 10 1 => ()econd$!$S
~Third~ 0 0 6 6 0 6 6 0 => ~Third~
Odpowiedzi:
CJam, 11 bajtów
Jak to działa
Jest to nieco inne podejście, w którym po prostu uruchamiam pętlę „do-while”, dopóki nie pozostaną pary liczb na wejściu.
Wypróbuj online tutaj
źródło
Python 3,
8986 bajtówRozpakuj wszystkie rzeczy. (3 bajty zapisane dzięki @potato)
źródło
[*s],*L=input().split()
możesz następnie zabrać linię po niej. Naprawdę podoba mi się twoje rozwiązanie, bo jest prawie eleganckie, mimo że jest bardzo golfa.CJam, 13 bajtów
Sprawdź to tutaj.
Wyjaśnienie
źródło
C (137 b)
Wyjaśnienie nadchodzi ...
Argumenty
T = słowo typu char * .
V = tablica parzystej liczby elementów całkowitych.
L = długość V
Wynik
mieszany sznurek
Jak to działa ? :
zamiata liczby z tablicy V na odwrót i umieszcza n-ty element ciągu po śledzeniu całego jego postępu do faktycznego punktu. Przykład
input = T = „First”, V = {1,2,1,0,0,4}
V odwrócone = {4,0,0,1,2,1}
Wypróbuj tutaj
źródło
int
nie jest potrzebny (może powodować nieoczekiwane zachowanie), aint
zmienne, które są parametrami, nie wymagająint
zmiennej, zamiast deklarować w pętli, można zadeklarować w jednym miejscu poza pętlą, użyćputchar
zamiastprintf
itp.Python 3 -
161149Grał w golfa, zamieniając niektóre zmienne i używając
;
jak w komentarzu Tima.Spodziewałem się, że będzie wyglądać na golfa, ale nie aż tak bardzo.
źródło
while
TOwhile c<len(t):line1;line2;line3...
.c=c+2
idzie doc+=2
c
faktycznie indeksujet
(dane wejściowe), aby uzyskać pozycje, które musimy zamienić. Ale ponieważt[0]
jest to ciąg, który musimy zamienićt[1]
it[2]
zatrzymać pierwszą parę zamian .C,
109107102 bajtówUwaga:
s
ia
należy zadeklarować jako tablice globalne.s
jest ciągiem, który chcesz zamienić ia
jest tablicąint
zawierającą wszystkie wartości liczbowe.Jeśli powyższy kod nie działa, spróbuj użyć
void f(){...}
zamiastf(){...}
Nieskluczony kod:
Sprawdź to tutaj
źródło
Python 3, 135
Wyjaśnienie:
źródło
C, 70 bajtów
Biorąc pod uwagę, że łańcuch wejściowy ma co najwyżej 100, postanowiłem ustawić bajt „NULL” wskazujący, że koniec tablicy liczb całkowitych jest jednoznaczny
0xFF
. Przypuszczalnie nie jest to liczone jako dodatkowe dane wejściowe, chociaż przy koszcie(najwyżej) 73 bajtów można go przekształcić w indeksowanie 1 i użyć'\0'
jako końca tablicy.Prawie tylko dokonuje regularnej zamiany ze zmienną tmp i wykorzystuje to, że operator przecinka wprowadza punkty sekwencji, aby mieć określone zachowanie (w przeciwieństwie do niektórych przejawów zamiany xor, które miałyby mniejszą liczbę znaków, ale prowadziłyby do nieokreślonego zachowania).
Edycja: zgodnie z prośbą możesz to przetestować: http://rextester.com/OVOQ23313 .
źródło
Dart - 123
Zakłada, że dane wejściowe w wierszu polecenia są automatycznie dzielone w spacjach. W przeciwnym razie potrzebuje inicjału,
x=x[0].split(' ');
aby podzielić ciąg na tekst i indeksy.Z większą ilością białych znaków:
Uruchom / przetestuj to na dartpad.dartlang.org .
źródło
Rebol - 71
Nie golfowany:
źródło
input
funkcji nie będzie mógł zadzwonić STDIN stamtąd. Obejściem tego problemu jest proste ustawienieinput
wartości, którą chcesz przetestować. Oto pełny przykład pierwszego testu -input: "hello_World 1 7" s: take i: split input" "foreach[a b]i[swap at s do a at s do b]print s
i kliknij Do w Rebol 3 NB. Rebol używa indeksowania 1.C, 143 bajty
Powyższy program pobiera dane z argumentów wiersza poleceń, kopiuje ciąg do tablicy, zamienia odpowiednie znaki, a następnie wysyła zmodyfikowany ciąg.
Nieskluczony kod:
źródło
10
jeden z indeksów.JavaScript (ES6), 95
95 bajtów z pojedynczym wejściem łańcuchowym (funkcja f poniżej)
75 bajtów z 2 parametrami, ciągiem znaków i tablicą liczb (funkcja g poniżej)
(EcmaScript 6, tylko Firefox)
źródło