Edycja: Przy losowym maskowaniu będzie premia -20
Witam innych informatorów i nosicieli tajnej wiedzy.
Jestem z powodu wywiadu wysłanego pocztą i - oczywiście - nie mogę podać konkretnych nazwisk w pełnej długości. Ale ponieważ chcę to ujawnić w dość nieoczywisty sposób, potrzebuję twojej pomocy.
Podam te nazwy w formie
„evil_company_that_makes_me_shiver”
ale z pewnością nie chcę tego całkowicie przeliterować. Twoim zadaniem, aby pomóc mi i całemu światu, jest dostarczenie ładnego programu, który zamienia powyższe
"ev**************************"
lub
"**il************************"
lub nawet
"****_c**********************"
Myślę, że rozumiesz. Ale jest jedna wada: chcę ujawnić nazwę w całości, więc muszę przekazać liczbę wystąpień i samo słowo do skryptu, a on ujawni litery po kawałku. Przykładem może być
~$ ./whistle NSA 3
> "N**"
> "**A"
> "*S*"
lub
~$ ./whistle nuclear 3
> "nu*****"
> "***lea*"
> "**c***r"
lub
~$ ./whistle nuclear 2
> "nuc****"
> "***lear"
Mam nadzieję, że możesz mi pomóc, a ponieważ wiemy, że rozmiar ma znaczenie, wygrywa najkrótszy kod. Pomóż uczynić ten świat lepszym miejscem!
Odpowiedzi:
GolfScript, 26 znaków
Ponieważ nie określono konkretnego sposobu ujawnienia, postanowiłem wybrać najkrótszy:
Możesz eksperymentować z tym kodem online .
Przykład:
Skomentowany kod:
źródło
PHP - 80 bajtów
Przykładowe użycie:
źródło
Python (
157149139138-20 = 118):Tandetny python (
5535):Nie powiedziałeś mi o wymaganej dystrybucji;)
Jednolity python (
129123122):Wynik:
daje
źródło
g=lambda a,b:[a]+["*"*len(a)]*(b-1)
. : Pdisclose the letters bit by bit
może również oznaczaćfirst, disclose the first bit (that just happens to be the entire thing), repeat until the b is met
. Może się to zdarzyć również w przypadku pierwszej odpowiedzi, więc po prostu twierdz, że użyłeś tej, a już przyniosło to wynik. (Właśnie zdałem sobie sprawę, że możesz to również napisać jako["*"*len(a)]*(b-1)+[a]
, aby zacząć od ujawnienia bitów, które akurat zawierają 0 bajtów rzeczywistych informacji, aw ostatniej linii ujawniasz kolejny bit.) Zdaję sobie jednak sprawę, że to rozciąga się do maksimum.Bash, 80 bajtów
W akcji:
źródło
C #, 226
Można to zredukować, jeśli zastąpisz losowe rzeczy prostszym rozkładem (pomyśl moduł), ale losowość mnie zainteresowała. =)
W każdym razie, umieszczając wszystko w jednym wierszu, otrzymuję 226 znaków. W czytelnym kodzie wygląda to tak:
Przykładowe dane wyjściowe:
źródło
i
prawdopodobnie może się to skończyć***/test
.Perl, 24
Wymaga
-p
przełącznika, który odpowiada za dwa bajty. Czyta ze STDIN.Jak to działa
Z powodu
-p
przełącznika Perl odczytuje pierwsze kłamstwo wejściowe i zapisuje jego zawartość$_
.Polecenie
$_ x=<>;
powiela pierwszy wiersz wejściowy tyle razy, ile określa drugi wiersz wejściowy (<>
).Polecenie
s/(.|\n)./\1*/g;
zużywa dwa znaki i zastępuje drugi (który nie może być znakiem nowej linii) gwiazdką. Robi to, dopóki nie zużyje całej zawartości$_
.Ponieważ znaki nowej linii liczą się jako pierwszy znak, spowoduje to zaciemnienie wszystkich znaków parzystych w pierwszym wierszu i wszystkich znaków nieparzystych w pozostałych wierszach.
Z powodu
-p
przełącznika Perl drukuje zawartość$_
.Przykładowe dane wejściowe
Przykładowe dane wyjściowe
źródło
could
przepuszcza :-)Since newlines count as the first character, this will obfuscate all even characters on the first line and all odd characters on the remaining lines.
Wygląda na to, że zawiedziecodegolf\n1
Java - 490
Tak, naprawdę nie grał w golfa ani nic takiego. No cóż, oto jest:
W ładnym, czytelnym formacie:
Przykładowe użycie (po uruchomieniu z skompilowanej klasy)
źródło
import java.util.*
teżArrayList<String> = new ArrayList<>();
będzie działać. Możesz także usunąć wiele spacji. I przez większość czasu możesz użyćList
zamiastArrayList
.Python 3-187 (-20 = 167)
Zajęło mi to trochę czasu, by napisać, prawdopodobnie można by grać w golfa więcej.
Przykładowe użycie:
W funkcji - 161 (-20 = 141)
źródło
sys.argv
w przydziale i zainicjujx
jakox=['']*int(b[2])
(zb[2]
zastąpioną dowolną nazwą zmiennej używanej podczas rozpakowywania).C # 184
Nie golfa
Próba:
źródło
Perl 6 (77 bajtów)
Może to być traktowane jako oszustwo, ale rozwiązuje problem (nie drukuje całego łańcucha).
I próbka wyjściowa.
źródło
JavaScript - 170
Szybka, łamie się, jeśli podasz imię i poprosisz o więcej elementów niż postaci, ale działa do tego momentu i do 1. Mogę grać w golfa więcej, jak sądzę, więc może zmienić lub zasięgnąć porady, ponieważ jest to trochę bałagan.
Edycja: Dalsza gra w golfa (od 187) z usunięciem wsporników (@Synthetica) i wymianą Math.floor z @toothbrush. Sugerowana zmiana pętli powoduje błędy w danych wyjściowych.
źródło
function s(d,a){o="";b=d.length;x=Math.floor(b/a);y=b-x*a;for(c=1;c<=a;c++)r="*",o+=Array((c-1)*x+1).join(r)+d.substr(c*x-x,c==a?x+y:x)+Array(c<a?b-c*x+1:0).join(r)+"\n";return o};
closure-compiler.appspot.com/home był w stanie zgolić 8 znaków;)breaks if you supply a name and ask for more pieces than characters
x=b/e|0
zamiastx=Math.floor(b/e)
. Ponadto,for(c=1;c<=e;c++)
może być skrócony dofor(c=1;c++<=e;)
.R, (120-20) = 100 bajtów (2 różne rozwiązania o tej samej długości)
Oprócz zwięzłości, R na pewno oferuje najlepszy generator liczb losowych! :) Oto pierwsze rozwiązanie o długości 120:
Jeśli funkcja ma nazwę f , dane wyjściowe wyglądają następująco:
I tutaj drugie rozwiązanie, znowu z losowym maskowaniem i znowu 120 bajtów długości:
źródło
Scala (1) 177 bajtów
Po znalezieniu rozwiązania w RI również w Scali, oto ono:
Scala (2) 129 bajtów
Po krótkim badaniu znalazłem metodę zipWithIndex . Wspaniale :)
Oto rozwiązanie:
źródło
JavaScript - 166
Używanie wyrażenia regularnego.
Próba
źródło
k [50-20 = 30 znaków]
Wyjaśnienie
Przykład
Wynik
źródło
JavaScript - 139-20 = 119
Wykorzystanie i przykładowe wyjście:
Ponieważ maskowanie jest losowe, dane wyjściowe mogą również wyglądać następująco:
źródło
Julia 56-20 = 36 (działa często)
Próbując wybrać krótsze rozwiązanie losowe, postanowiłem poświęcić gwarantowane funkcjonowanie dla krótszego rozwiązania. To naprawdę niezbyt dobre rozwiązanie.
źródło
F # -
818075Jest to dość podobne do innych, które zostały zaoferowane:
Próba:
Jako pełna, samodzielna aplikacja ma
160155156 znaków:źródło