Na podstawie taśmy Duct można naprawić dowolne pytanie, które było zbyt szerokie, z bardzo podobnymi zasadami. Tylko tym razem cel jest bardzo konkretny:
Wyzwanie
Twoim zadaniem jest stworzenie programu, który wyświetla hello mom
- bez pisania ani jednego wiersza kodu.
Możesz używać tylko kodu, który jest już dla Ciebie napisany, zarówno w pytaniach, jak i odpowiedziach StackOverflow. Wszystko, co możesz zrobić, to taśma klejąca, wszystko razem najlepiej, jak możesz. I oczywiście bardzo ważne jest, abyśmy zapewniali odpowiednią atrybucję, abyśmy nie utracili naszych praw.
Zasady
- Musisz dołączyć linki do pytań / odpowiedzi użytych w odpowiedzi.
Nie możesz modyfikować znalezionego kodu, z następującymi wyjątkami:
za. Możesz zmieniać nazwy zmiennych, funkcji i metod. (To nie znaczy, można zmienić metodę do wywołania , zmieniając, powiedzmy
scanner.nextInt()
doscanner.nextLine()
twierdząc, że jesteś zmieniając nazwę metody. Zmiana musi być w definicji lub odniesienie do tego samego podmiotu.). Rozwiązanie powinno nadal działać, jeśli zmieniono by nazwę zmiennej, funkcji lub metody, więc zmiana nazwy kodu nahello mom
nazwę zmiennej nie ma znaczenia.b. Możesz odpowiednio dostosować wcięcie.
do. Możesz założyć, że zostały załadowane odpowiednie moduły do działania fragmentów kodu. (np.
import
instrukcje dla Java i Python,using
instrukcje dla C # i C ++ oraz ich odpowiedniki we wszystkich językach) Jeśli fragment kodu zawiera literyimport
s, możesz przenieść je na początek kodu.re. Jeśli język wymaga, aby kod był w jakiejś formie metody do wykonania (np.
public static void main(String[] args)
Dla Javy,static int Main(string[] args)
dla C # itd.), Możesz owinąć swój kod odpowiednią metodą. Ale zawartość tej głównej metody musi pozostać niezmodyfikowana.Musisz podać jawną listę wykonanych zmian nazw zmiennych / metod / funkcji / klas.
- Nie możesz wziąć urywków fragmentów (co oznacza, że jeśli weźmiesz blok kodu z postu, weźmiesz całość)
- Podaj krótki opis działania kodu dla osób, które nie są intymne z językiem, którego używasz.
- Musisz użyć fragmentów opublikowanych przed rozpoczęciem tego wyzwania.
- Konkurs popularności, więc najwięcej entuzjastów wygrywa!
Ostateczny termin
Zaakceptuję zgłoszenie, które ma najwięcej głosów pod koniec dnia matki (północ strefy czasowej UTC-11), ale późniejsze zgłoszenia wciąż mogą uzyskać głosy.
źródło
m
or an dosalo
. Lub fragment, który konwertuje punkty kodowe na znaki i fragmenty, które pozwalają obliczyć odpowiedni punkt kodowy. Ograniczenie jest dokładnie tym , co pobudza kreatywność. O tym wspomniałem na temat własnego wyzwania i dlaczego zasugerowałem ograniczenie zakresu (a następnie dlaczego został zamknięty).Odpowiedzi:
Brainfuck
Boże, dlaczego to sobie zrobiłem?
Właściwie można znaleźć każdy symbol BF jako fragment kodu w jakiejś odpowiedzi. Interesującym elementem było poskładanie fragmentów kodu innych osób, z których każdy reprezentował blok instrukcji BF. Niestety, w zasadzie nie ma tam żadnych nieporównywalnych symboli
[
i]
symboli, więc musiałem trochę oszukać dla nich, i musiałem uzyskać strasznie dużo kilometrów z funky fragmentu Haskella, który miał sporo plusów. Prawdopodobnie są tam inni. Poza tym oto kod Frankensteined:A ponieważ moja matka jest Brytyjką, wyniki są dość proste
hello mum
Bibliografia:
https://stackoverflow.com/questions/17845014/what-does-the-regex-mean
[
i]
z przeprosinamihttps://stackoverflow.com/a/21460161/2581168
https://stackoverflow.com/questions/6161328/what-exactly-does-this-do-exec-command
https://stackoverflow.com/questions/20130538/what-is-in-haskell
https://stackoverflow.com/questions/21947452/why-is-printing-b-dramatically-slower-than-printing
https://stackoverflow.com/questions/941584/byte-byte-int-why
https://stackoverflow.com/a/160295/2581168
I
https://stackoverflow.com/questions/13273002/what-does-mean-in-r
https://stackoverflow.com/questions/3450420/bool-operator-and
I
https://stackoverflow.com/questions/22776085/in-which-case-will-size-originalvalue-length-in-string-constructor-string
https://stackoverflow.com/questions/3797795/does-mean-stdout-in-bash
https://stackoverflow.com/questions/179123/how-do-i-edit-an-incorrect-commit-message-in-git/179147#179147
I
https://stackoverflow.com/questions/14763413/grep-ls-output-across-tabs/14763499#14763499
https://stackoverflow.com/questions/945288/saving-current-directory-to-bash-history
https://stackoverflow.com/questions/348170/undo-git-add-before-commit/682343#682343
źródło
git add .
ten sam post, jeśli OP ma z tym problem.[]
s, ale te często pochodzą z.
s. stackoverflow.com/questions/21898628/…Jawa
Zacznij od tych:
https://stackoverflow.com/a/19509316/1768232
https://stackoverflow.com/a/8341513/1768232
https://stackoverflow.com/a/23300004/1768232
https://stackoverflow.com/a/20698093/1768232
https://stackoverflow.com/a/19393222/1768232
https://stackoverflow.com/a/1181979/1768232
Dodaj wymagane
class
ipublic static void main(String[] args){ }
dozwolone w Regule # 2d (nie wokół metody statycznej) i zmień niektóre nazwy zmiennych / metod dokładnie w 3 z 6 fragmentów:name
->history
w trzecim fragmencieeditednames
->myString
w trzecim fragmencieName
->myStr
w piątym fragmencieIncome
->myString
w piątym fragmencielast
->titleCase
w szóstym fragmencieWynikowy program:
Wynik:
źródło
titleCase()
raczej niż zmiana nazwy odnośnika zewnętrznego. W ten sposób powiążesz to ze sobą. Reguła 2a stanowi, że zmiana nazw metod / funkcji jest legalna.DO#
Prawdopodobnie szalony, rondo i zawiły sposób na uzyskanie (dokładnego) wyniku - tylko ze zmiennymi nazwami i bez żadnej dosłownej „mamy” w żadnym kodzie.
Czytanie zasady „jeśli weźmiesz blok kodu z posta, weźmiesz wszystko” bardzo dosłownie prawdopodobnie nie pomogło - ale sprawiło, że było fajniej.
.NET Fiddle
http://dotnetfiddle.net/PbjhPn
http://dotnetfiddle.net/bg20wb (z usuniętymi redundantnymi liniami w blokach kodu)
Krótkie wyjaśnienie
Zasadniczo otrzymujemy „Hello world!” z prostego formatu ciągu. Teraz potrzebujemy „mamy”, aby go zastąpić. W tym celu wykorzystujemy zakodowany w Base64 wynik uruchomienia 804 iteracji PBKDF1 przy użyciu MD5 z „world” jako hasłem i „Hello world!” w postaci soli Daje to ciąg „ciSf5cCls1l / MoM ...”. Wydobywamy „MoM” i używamy go jako zamiennika „świata”. Następnie sprzątamy sznurek.
Jak dojść do 804? Poprzedni rok przycięty do trzech znaków (= „201”), a następnie pomnożony przez 4.
Długie wyjaśnienie i atrybucje
1: Zaczynamy od odrobiny przesady wynikającej z reguł. Liczba całkowita 3 jest bardzo ważną stałą w tym programie. Tutaj przypisujemy tę liczbę całkowitą do
n
. Musimy uwzględnić cały blok ze źródła. Może być nadmiarowy, ale dobrze się skompiluje, o ile zmienimy nazwęsplit
zmiennej, której będziemy potrzebować później. ŹródłoZamienione nazwy zmiennych:
2: Ustaw ciąg początkowy („Hello world!”). Źródło
To bardzo osobista wiadomość dla naszej mamy. Więc oczywiście potrzebujemy trochę kryptografii, aby poradzić sobie z tymi typami NSA. W tym celu potrzebujemy parametrów, które teraz przygotowujemy.
3: Konwertuj
greet
(„Witaj, świecie!”) Na tablicę bajtów do solenia. Źródło4: Chociaż korzystamy z kryptografii, tak naprawdę nie musimy tworzyć instancji klasy MD5. Potrzebujemy jednak ciągu „MD5” przypisanego do jednego z naszych parametrów, aby można go było użyć w dalszej części - i nie jest to łatwe do znalezienia w użytecznym kodzie. Więc weźmiemy kolejny ... „skrót”… Raz jeszcze cały blok kodu zawarty zgodnie z regułami, chociaż potrzebujemy tylko drugiej linii. Źródło
5: Teraz potrzebujemy nazwy typu
md5
zmiennej (MD5CryptoServiceProvider
). Toif
kolejna redundancja. Źródło6: Zdobądź pierwsze 3 (ooh, nasze stałe!) Znaki o nazwie typu. Źródło
7: Trolling kodu: używanie
DateTime.Now
oznaczałoby, że działałoby to tylko do 2019 roku. Aby uczynić to nieco bardziej przyszłym, używamy poprzedniego roku. Wtedy będzie działać do 2020 r .;-) Źródło8: Konwertuj nasz
previousYear
na ciąg. Źródło9: Hej, ponowne użycie kodu! ;-) Zdobądź pierwsze 3 (nasze stałe!) Postacie naszego roku. Źródło
10: Aaaaaaa i ... przekształć wynik z powrotem na liczbę całkowitą. Źródło
11: Eric Lippert poprawia każdą odpowiedź. Pomnóż przez 4 na rondzie. Źródło
12: Wyślij
place
(hasło) igreet
(sól) przez PBKDF1, używając MD5 zx
(obecnie201*4 = 804
) iteracjami. Źródło13: Jon Skeet poprawia również każdą odpowiedź. Konwertuj nasze pochodne hasło na bazę 64. Wyrzucamy
bytes
tablicę. Źródło14: Cóż za szalony losowy przypadek! Teraz mamy
base64
„MoM”. Dogodnie, tuż przed „MoM” jest singiel „/”. Podziel łańcuch z tym znakiem jako separator: Źródło15: Hej, nasz ulubiony kawałek taśmy do ponownego użycia kodu! Zdobądź pierwsze 3 (stałe!) Litery
last
. Źródło16: Usuń „!”. Źródło
17: MoM to nasz świat - więc spraw, aby sznur odzwierciedlał to (zamień „world” na „MoM”). Źródło
18: Na koniec przekonwertuj na małe litery. Przycinaj dla dokładności (lub być może dlatego, że jest to część bloku taśmy izolacyjnej). Źródło
19: Dane wyjściowe do konsoli. Źródło
Trochę „materiału bonusowego” / komentarza
Najpierw próbowałem każdej kombinacji wbudowanych skrótów kryptograficznych (każda w połączeniu z HMAC) i danych wejściowych („świat”, „Witaj świecie!”, „Witaj świecie”, „witaj świecie” itp.), Aby sprawdzić, czy coś cudownie dałoby użyteczny wynik, z którego można wyprowadzić „mamę” - zanim przejdzie się łatwą drogą po prostu szukania szeregu iteracji PDKDB1 (lub 2), które byłyby przydatne.
Nie był do końca zadowolony z wykorzystania roku jako danych wejściowych dla iteracji 201 * 4 = 804. Na początku próbowałem znaleźć użyteczny kod
HttpStatusCode.Created
(201) do użycia jako dane wejściowe - z „wymówką trollową” w stylu „stworzyliśmy nasz„ Hello world! ” ciąg, więc dobrą praktyką byłoby użycie tutaj kodu statusu „Utworzono”. Niestety, nigdy nie znalazłem zastosowaniaHttpStatusCode
wyliczenia, które nie wprowadziłoby zależności od większości frameworku ASPAP .NET WebAPI.Początek kodu (format ciągu „Hello world!”) Nigdy nie był oglądany po jego pierwszym dodaniu. Gdybym miał, tak, mógłbym zdać sobie sprawę, że przypisanie
place
było w rzeczywistości w innym bloku w źródle - więc mógłbym po prostu przypisać moją pochodną „mamę”place
raczej niż używać „świata”, a później go zastąpić. Ach tak.źródło
Befunge 98
var abc = function(){};
display: table-*
+
, new {area = ""}
byte z = x + y;
"1,23,4"
String[] temp = data.split("\\s+\\^,?\"'\\|+");
List<Set<Integer>> foo;
: base(name)
10001.10010110011
[5326, 4223, 1204]
https://stackoverflow.com/q/23044400/1896169
$selector.append("somestuff");
-new Date().getTimezoneOffset()/60;
https://stackoverflow.com/a/8928476/1896169
https://stackoverflow.com/q/23569160/1896169
Mój kod:
Działa to, ponieważ pierwszy
v
(w pierwszym wierszu) wysyła adres IP w dół. Więc zasadniczo wykonujemy ten program:Co to robi:
dddddddd+++++++,
popycha104
i drukujebbbbbbbbd++++++++,
popycha101
i drukuje" L"+,
wypycha32
i wartość asciiL
, a następnie dodaje je, duplikuje dwukrotnie i drukuje dwukrotnie111+++,
dodaje 3 i drukuje" ",
drukuje spację."[R }"$$-:111+++
wypycha a9
i powiela je, a następnie dodaje 3 do najwyższej wartości*
mnoży dwie najlepsze wartości1+:,
zwiększa liczbę, duplikuje i drukuje"L "+111+++,
odbitkio
.,
wypisujem
wcześniejsze id @
wypycha13
(co nie robi nic) i kończy program.źródło
hello mom
Jawa
Wynik
Jest tam nieznośny =, ale to najlepsze, co mogłem zrobić
https://stackoverflow.com/a/1050075/573421
źródło
do
Większość tego kodu pochodzi z odpowiedzi na pytanie Znajdź początek pierwszego słowa, które jest palindromem [sic] opublikowanym przez BLUEPIXY , który wypisuje to słowo
mom
. W wierszach 21 i 22hello
jest drukowany fragmentem kodu na końcu odpowiedzi na printf („%%% s”, „hello”) użytkownika 142019 (który na szczęście dodał średnik na końcu) oraz odstęp między słowa pochodzą z odpowiedzi na Jak drukować przestrzeń za pomocą wypełnienia wc M przez Oehm .Wynik:
Niestety nie byłem w stanie wyeliminować dodatkowych spacji ani znaku procentu :(
Kod źródłowy:
źródło
Jawa
Dokumentacja i linki źródłowe znajdują się w komentarzach (zaczynające się od //)
czysta lista użytych źródeł
źródło