Utwórz program cat, czyli program, który pobiera dane wejściowe i drukuje je.
... Z wyjątkiem tego, że program losowo odbierze znaki od tekstu i wydrukuje je.
Każda postać na wejściu powinna mieć jednakowo równe szanse na usunięcie z programem, ponieważ trudno to zrobić, szanse dla każdej postaci mogą się różnić maksymalnie o 10%.
Twój program powinien pobrać dane wejściowe, a następnie losowo usunąć z nich znaki, a następnie ponownie wydrukować tę wersję. (Możesz drukować z końcowymi znakami nowej linii lub innymi znakami na wypadek, gdyby Twój język musiał drukować znaki nowej linii).
Jeśli dane wejściowe BOOOWL
byłyby, nie powinno to usuwać wszystkich Os z równą szansą: każda postać (nie unikalna) powinna być brana pod uwagę, więc zamiast każdego O połączonego z szansą 1/5 (na przykład), każdy O powinien mieć 1 / 5 szansa, więc, zamiast tam będąc 1/5 szansa BWL
, nie powinno być 1/5 szansa BOWL
, BOOWL
.
Dane wejściowe są ograniczone do STDIN lub najbliższego odpowiednika.
Każda postać musi mieć minimum 10% i maksimum 30% szans na usunięcie.
Szanse każdej postaci należy obliczać indywidualnie.
Możesz użyć dowolnego elementu swojego języka obsługującego akcje losowe, niezależnie od tego, czy jest to funkcja czy coś innego.
Dane wyjściowe muszą być przesyłane przez STDOUT lub najbliższy odpowiednik. Jeśli twój język ma STDOUT, nie wysyłaj w żaden inny sposób. Jeśli twój język nie może wyprowadzać ciągów jako tekstu, użyj najbliższego odpowiednika (tutaj wyjście z tablicy znaków C jest OK).
To jest kod golfowy. Najkrótszy program wygrywa.
BOWL OF SOUP
mogąO
być usunięte za jednym razem?Output must be through STDOUT, as a text. Do not output a character array.
<- Mam język, który pozwala wypisać tablicę znaków (jest spłaszczona przed wyjściem). Czy to jest niedozwolone? Co powiesz na języki takie jak C, gdzie ciąg znaków jest w zasadzie tablicą znaków?Odpowiedzi:
Japt
-f
, 2 bajty-f
Flaga „uruchamia program na każdym elemencie w pierwszym wejściu, wyprowadzanie tablicę tych, które zwracają wartość truthy”.5ö
zwraca losową liczbę od 0 (włącznie) do 5 (wyłącznie). Podobnie jak JavaScript, 0 jest fałszem w Japt.Spróbuj
źródło
-f
, w tytule.Python 3 , 63 bajty
Wypróbuj online!
Python 2 ,
6765 bajtówWypróbuj online!
Każda postać ma 20% szans na upuszczenie.
Inne podejście, ta sama długość:
Wypróbuj online!
źródło
Create a cat program, a.k.a a program that takes an input and prints it.
Węgiel drzewny , 4 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Możesz użyć dowolnego numeru z
4
do,10
aby uzyskać szansę25%
na10%
odpowiednio.źródło
Befunge-98 (PyFunge) , 11 bajtów
Wypróbuj online!
Każda postać ma 25% szans na usunięcie. Ta decyzja jest podejmowana na trzech
?
instrukcji.?
ustawia licznik programu na jeden z czterech kierunków, z jednakowym prawdopodobieństwem. W takim przypadku w górę i w dół zawiń ponownie do tej samej instrukcji, abyśmy mogli je zignorować jako opcje.Istnieją dwa wyjścia z lasup2=1/2 szansa na wyjście. Prawdopodobieństwo, że na wyjściu, gdy wychodząc od prawego p3=1/2∗1+1/2∗p2=3/4 . Dlatego po przeczytaniu znaku przeskakujemy do skrajnej prawej strony,
?
s: w prawo (wyjście) i w lewo (brak wyjścia). Sytuacja ta jest symetryczna, więc jeśli zaczynając od środka?
, jest?
jest?
aby ustalić, czy wypisać dane.źródło
Oktawa , 23 bajty
Generuje tablicę tego samego rozmiaru co dane wejściowe (łańcuchy w Octave są tablicami znaków), sprawdza każdą z liczb losowych, czy jest większa niż,
0.2
a następnie używa indeksowania logicznego, aby wyodrębnić znaki z odpowiednich pozycji.Wypróbuj online!
źródło
Galaretka ,
95 bajtówWypróbuj online!
Monada, która przyjmuje argument Jelly jako argument i zwraca przetworzony ciąg Jelly. Gdy jest używany jako pełny program, domyślnie drukuje dane wyjściowe. Każda postać ma 20% szans na usunięcie.
Wyjaśnienie
źródło
Japt , 3 bajty
Każda postać ma szansę na usunięcie 1 na 5.
5
Można zmienić na coś pomiędzy4
i9
włącznie, lubA
na10
zmianę kursów.Spróbuj
źródło
Wolfram Language (Mathematica) , 24 bajty
Wypróbuj online!
Pobiera na wejściu listę znaków. Każda postać ma
.2
szansę zostać usunięta.źródło
05AB1E ,
54 bajtów-1 bajt dzięki @Grimy .
Wypróbuj online lub uruchom ten sam program 10 razy .
Każda postać ma 25% zmiany upuszczenia.
Wyjaśnienie:
≠
może być również_
(==0
).źródło
5L
może wynosić₄
-1 (zmienia szansę z 20% na 25%, co jest nadal dopuszczalne).MATL , 9 bajtów
Exaplanation:
Wypróbuj online!
źródło
Pyth ,
85 bajtówWypróbuj online!
Poprzednia wersja, 8 bajtów:
Wypróbuj online!
źródło
Q
zwróci błąd, jeśli dane wejściowe nie są python-esque. Błędy na przykład z[1
luba/b
.Q
,w
iz
będzie działać tylko w przypadku wprowadzania jednowierszowego, więc najlepszą opcją prawdopodobnie byłbyj.z
Cubix , 20 bajtów
Wypróbuj online!
Dłużej, niż się spodziewałem, ponieważ miałem wiele operacji, których nie mogę się pozbyć. Szansa na upuszczenie postaci wynosi 25%. Zakładam, że to w porządku.
Zobacz, jak biegnie
Krótkie wyjaśnienie:
A|A
to inicjuje stos, Wprowadź wszystko, odbij z powrotem, Wprowadź wszystko (tylko EOI -1);?
pop to of stack, test EOI (-1)._?@
w przypadku wartości ujemnej, powróć do testu i zakończ przy zatrzymaniu$D
wskocz\
do setera losowego kierunku.o
wyjścia, a następnie wracają do pętli, jeden omijao
ścieżkę i idzie prosto do pętli.źródło
APL (dzaima / APL) ,
109 bajtów SBCSAnonimowa ukryta funkcja prefiksu. Każda postać ma dokładnie 20% szans na usunięcie.
Wypróbuj online!
5¨
zero dla każdego znaku?
losowy zakres liczb całkowitych 1–5 dla każdego znaku4≥
Maska logiczna dla liczb całkowitych, które są mniejsze lub równe 4⊢⌿⍨
odfiltruj argument za pomocą tej maskiźródło
Siatkówka , 15 bajtów
Wypróbuj online! Wyjaśnienie:
Przetwarzaj każdą postać osobno.
Wykonaj podstawienie losowo. Pierwsze zastąpienie usuwa postać, podczas gdy pozostałe trzy pozostawiają ją bez zmian, co daje
25%
szansę na usunięcie postaci. W razie potrzeby można to zmniejszyć, dodając dodatkowe pary znaków nowej linii.źródło
R ,
3223 bajtyWypróbuj online!
Funkcja przyjmująca wektor znaków jako dane wejściowe i zwracająca przetworzony wektor znaków. Każda postać ma 20% szans na usunięcie.
Dzięki @Roland i @Giueseppe za pomoc w oszczędzaniu 7 bajtów oraz @JDL za kolejne 2!
źródło
function(x)x[!rbinom(x,1,0.2)]
function(x)x[rf(x,1,1)>1]
;df(1,1,1)
chodzi o to,0.16
co robi lewę.rt(x,3)>1
(około 20% szansy)<1
, ale dzięki! Kolejne 2 zapisane.T-SQL 2012, 83 bajty
Pętla przechodzi przez wejście od prawej do lewej, usuwając 0 lub 1 znak.
25% szansy na usunięcie każdej postaci.
Wyjaśnienie:
Wypróbuj online
źródło
STR
, muszę o tym pamiętać. Nie jestem pewien, czy sprawiedliwe jest nakładanie na siebie (niepoliczonegoDECLARE
) kodu (policzonego); ale zmiana tego kosztowałaby cię tylko 1 bajt, ponieważ możesz wyeliminować dodatkowySET
przy pomocyDECLARE @ INT=len(@i)
J , 10 bajtów
Wypróbuj online!
Podobne do odpowiedzi APL Adama, chociaż napisałem ją przed spojrzeniem na jego.
6.. $~ #
Weź długość danych wejściowych#
i ukształtuj$~
liczbę 6 na tak długą listę.?@
Traktuj każdą szóstkę z tej listy jako kość i rzuć?
nią.>5
Czy matryca jest mniejsza niż 5 (możliwe wartości to 0..5)? Użyj tego wyniku logicznego, aby utworzyć maskę bitową.#~
Filtruj dane wejściowe za pomocą tej maski.źródło
Perl 5
-p
, 18 bajtówWypróbuj online!
Każda postać ma 20% szans na upuszczenie.
źródło
JavaScript,
464451 bajtów+7 bajtów z powodu dodanego wymagania STDOUT
-2 bajty dzięki Birjolaxew
oryginalna odpowiedź: 44 bajty bez wymagania STDOUT
źródło
f=
prowadzi do 44 bajtów. Możesz także wprowadzać / wyprowadzać dane jako tablicę, co powinno znacznie cię zaoszczędzić.join``
znaczy Nie mogę tego znaleźć w specyfikacji (bo tak naprawdę nie wiem, co to jest)join("")
mdn revelent page
Scala ,
514630 bajtówWypróbuj online!
PS. Podobnie jak w wielu innych rozwiązaniach prawdopodobieństwo upuszczenia zwęglenia wynosi 20%.
Aktualizacja:
-5 bajtów za pomocą ciągu zamiast opcji [ciąg] w płaskiej mapie
30 bajtów przy użyciu filtra
źródło
scala.math.random
namath.random
i0.2
na.2
. Fajna sztuczka, używając ^ w ten sposób.C # (interaktywny kompilator Visual C #) , 71 bajtów
Wypróbuj online!
źródło
new Random().Next(5)
directly possible?new Random().Next(5)
, all you will get is the whole input or nothing.new Random()
, the default seed value is Environment.TickCount, which increments every millisecond. If they're all created in the same millisecond tick, they will all have the same seed. The answer is only using a single instance of Random, and when it's called it updates the internal seed value - so each time Next() is called, it creates a different output value. .Net Core however uses a singleton RNG to generate the seed, so it doesn't have this problemSTDIN
, butrestricted to STDIN or closest equivalent
, and function arguments may be the closest equivalent, but I'm not going to do thatPHP,
4342 bytesTry it online!
Each character has 20% of chance to be removed.
źródło
C (gcc), 50 bytes
This program has a 20% chance of dropping a letter. Unfortunately the random number generator isn't seeded so you get the same sequence on each run. Basically the only trick is inverting the input character to halt the loop on EOF.
Try it online!
C (gcc),
6459 bytesThanks to ceilingcat for the -5 bytes.
If you want the RNG seeded on each run.
Try it online!
źródło
main()
for Code Golf submissions, you can also define an arbitrary function that does what is required. So you can writef(c){...}
.Lua,
6968 bytesTry it online!
Kinda straightforward, but seems to be shortest version: iterate over stdin char by char (with
io.lines
… that name is misleading), then based on random value either print one or empty string (e.g. nothing).źródło
Java
Non-terminating: 82 bytes
Terminating (TIO): 105 bytes
źródło
s->s.filter(c->Math.random()<.2)
is too.Input is restricted to STDIN or closest equivalent.
andOutput must be through STDOUT or the closest equivalent. If your language does have STDOUT, do not output in any other way.
So no, that answer is not validZsh,
5341 bytes-12, thanks to GammaFunction
41 bytes: try it online!
Converts the input to an array of characters, then tries to print each element
c
, unless it's eaten by the((RANDOM%4))
evaluating to false!53 bytes: try it online!
A more straightforward, but verbose, iteration over string-length.
źródło
\c
, I would not have remembered that! There's still a few optimizations to be made...RANDOM
and array conversionZsh, 50 bytes
Try it online!
Similar to RobLogic's answer, but following the input requirements more closely, and works for inputs with backslashes.
"$(<&0)"
instead of"<&0"
or$(<&0)
because the first doesn't work in substitutions, and the second eats newlines. The-nE
flags are necessary to prevent backslashes from being parsed as escape sequences, and to prevent newlines being inserted.echo -nE
źródło
MathGolf, 5 bytes
Try it online!
Explanation
Each character will be repeated 0 or 1 times, depending on the random value. Since the expected value after the square root is shifted, there is a 25% probability that each character is removed.
Alternative 5-byter
Filter the characters by a random number in [0, 4]. Due to how filtering works, I have to discard the actual character within the filter loop, which adds 1 byte.
źródło
GFortran, 120 bytes
Not too bad, if we use the deprecated
RAN()
function, which is pseudo-random, i.e. you get the same sequence each time. The proper way to generate random numbers in GFortran is withCALL RANDOM_SEED()
andCALL RANDOM_NUMBER(R)
but that's a lot of bytes!Try it online!
źródło
Oracle SQL, 133 bytes
It works with an assumption that input data is stored in a table t(x), e.g.
źródło