Wyzwanie:
Czytaj dane wejściowe (w widocznym zakresie ASCII) i dane wyjściowe z kilkoma modyfikacjami:
- W każdym zestawie 10 znaków losowo (50/50):
- zamień jeden znak * (na losowy ** jeden w widocznym zakresie ASCII) (np.
lumberjack
staje sięlumbeZjack
) - lub usuń jeden znak (np.
lumberjack
staje sięlmberjack
)
- zamień jeden znak * (na losowy ** jeden w widocznym zakresie ASCII) (np.
* Jeśli zestaw ma mniej niż 10 znaków, nie musisz go modyfikować, ale możesz.
** Postać może być taka sama jak jedno wejście, o ile nadal jest losowa.
Przykład:
Dane wejściowe: Dane Go home cat! You're drunk!
wyjściowe: Go hom cat! YouLre drunk!
(tylko przykład, ponieważ dane wyjściowe mogą być losowe, nie należy używać ich jako przypadku testowego)
Zasady:
- code-golf , najmniej znaków wygrywa!
Odpowiedzi:
Pyth,
2725 bajtówZestaw testowy dostępny tutaj.
Dzięki Maltysen za zgolenie 2 bajtów.
Wyjaśnienie
Jak to często bywa, uważam, że jest to naiwna metoda, którą można ulepszyć. Zwykle pisząc wyjaśnienie, znajduję coś oczywistego, ale tym razem nic mnie nie wyskoczyło.
źródło
OC\¾
jest taką samą liczbą bajtów, jakO190
i przypisanie K do znaku usuwania nie oszczędza również miejsca.*> <> ,
44465250 bajtówWypróbuj tutaj!
Wykorzystuje dowolny znak ascii w pobliżu / powyżej miejsca dla losowych znaków. To zawsze edytuje szósty znak, chyba że jest to koniec łańcucha, a długość łańcucha nie jest wielokrotnością 10. To ma 50% szans na usunięcie siódmego znaku zamiast edytowania szóstego.
Wejście
Wynik
Edycja:
Ta odpowiedź prawdopodobnie nie zawsze jest w widocznym zakresie ascii, edycja ...Naprawiono.Edit2:
Nie widziałem, że musi istnieć szansa 50/50 na usunięcie postaci, edycję ponownie ...Wierzę, że wszystko jest teraz w porządku :).źródło
Perl 6 ,
7867 bajtówSpróbuj
Wyjaśnienie:
źródło
Pyth - 21 bajtów
Wypróbuj online tutaj .
źródło
Python 3 , 75 bajtów
75-bajtowy stosuje transformację do pierwszego znaku z każdej grupy i wybiera tylko 2 losowe znaki, takie jak w odpowiedzi Jelly (które OP dozwolone):
Wypróbuj online!
Jest to funkcja rekurencyjna, która przy każdej iteracji poprzedza albo nic
'a'
, albo'b'
, a następnie wywołuje się z odciętymi pierwszymi 10 znakami. Końcowe zwarcie w iteracji ws and
(pusty ciąg jest fałszem), unikając nieskończonej rekurencji.Wynik wszystkich osobnych wywołań jest następnie łączony i wracany do kontekstu, który wywołał funkcję.
120 bajtów
Oczywiście to trochę przypomina oszustwo, więc oto jedno, które jest całkowicie losowe:
Wypróbuj online!
źródło
Galaretka ,
15 1413 bajtów 13 znakówTryItOnline!
Zastępuje lub usuwa pierwszy z każdych dziesięciu znaków, w tym ten z ostatnich 1-9, jeśli występuje taki fragment. Wybiera z, co prawda niewielkiego, podzbioru znaków
1
:;2
.W jaki sposób?
Aby wybrać spośród wszystkich drukowalnych ASCII zamiast tylko
1
i2
(wciąż zastępując lub usuwając pierwszy znak każdego fragmentu) w 21 bajtach:Dla wersji w pełni losowej (usuwanie / zamiana 50/50, jednolite losowe ASCII do wydruku i jednolicie losowa lokalizacja znaków w każdej części) mam 30 bajtów (prawdopodobnie nieoptymalnych):
Powoduje to obracanie każdej części o losową liczbę, usuwa ostatnią postać, a następnie wywołuje losowe jedno z pierwszych dwóch łączy, z których jedno jest puste, a drugie łączy się z losowym drukowalnym znakiem ASCII; następnie ponownie obraca porcję w prawo.
źródło
Python3,
188186184114 znakówWydaje się za długi. Prawdopodobnie można go znacznie skrócić za pomocą lambda.Najwyraźniej OP pozwolił wybrać losowy znak z listy dwóch znaków, a indeks znaku, który ma zostać zastąpiony, może być stały. Po modyfikacjach moja odpowiedź wyglądałaby dokładnie tak samo jak przesłanie @FlipTacks w Pythonie, więc jest to forma, w której jestem.
@FlipTack zapisał 5 bajtów!
źródło
Clojure,
135139 bajtówEdycja: Zapomniałem użyć
partition-all
zamiastpartition
.Nie golfowany:
Człowieku, te nazwy funkcji są długie ... W każdym razie dzieli dane wejściowe na partycje po 10 znaków, dzieli je losowo na dwie połowy, losowo wstrzykuje pusty ciąg lub losowy znak między nimi i odrzuca pierwszy znak drugiej połowy.
źródło
Mathematica 133 bajtów (129 znaków)
76 znaków, aby wpisać nazwy 8 funkcji: /
Użycie
⌊..⌋
zamiastFloor[]
zapisuje 5 znaków, 1 bajt.źródło
Python 3, 129 bajtów
Aby zaoszczędzić trochę bajtów, zamiast importować losowy moduł Pythona, po prostu wykonałem kilka operacji modulo na id łańcucha, który powinien być inny za każdym razem. Na przykład program zdecyduje, czy usunąć znak, czy zastąpić znak na podstawie tego, czy
id(string)//10
jest parzysty, czy nie (dzielę liczbę całkowitą przez 10, ponieważ ostatnia cyfra zawsze będzie parzysta).źródło