Znajdź Interwoven Kody źródłowe (Rabusie)

13

To wątek złodziei. Przejdź do wątku gliniarzy tutaj .

Wprowadzenie

W tym wyzwaniu dla gliniarzy / rabusiów gliniarze napiszą programy produkujące dane wyjściowe i przeplatają je razem. Zadaniem rabusia jest rozróżnienie programów gliniarzy w celu uzyskania pożądanych rezultatów.

Rabuś rządzi

Rabusie spróbują znaleźć różne programy, które ludzie zamieszczają w wątkach gliniarzy (link powyżej). Jeśli złodziej rozwiązuje kod gliniarza, musi opublikować oddzielne programy i dopasować je do swoich wyników w odpowiedzi tutaj i napisać, że złamał kod w odpowiedzi policjanta.

Punktacja

Istnieją dwa składniki, które są dodawane razem podczas oceniania pękniętego przesłania.

  • 2 do potęgi liczby różnych programów użytych w odpowiedzi policjanta
  • Zaokrąglij liczbę bajtów w przeplataniu w dół do najbliższej potęgi 2.

Na przykład, jeśli złodziej pęknie TIliGoEnRjako TIGERi lion, wtedy rabuś otrzymuje 2 ^ 2 + 8 = 12 punktów.

Zwycięzcą wyzwania złodziei będzie osoba, która zdobędzie najwięcej punktów po upływie wystarczającego czasu na uczestnictwo.


(Kto chce pomóc z fragmentem?)

Arktur
źródło

Odpowiedzi:

6

Vitsy , 12 punktów

'o'2\I/NO

Wypróbuj online!

a5F\aZ

Wypróbuj online!

NaNW NaNobył martwy gratisów.

Oczywistym sposobem naciśnięcie NaNbędzie podzielić 0 sama, 2\Ipopycha długość sygnału ( 0 ) dwa razy, /wykonuje dzielenie i Ndrukuje pływaka.

Pozostaje nam drukowanie oi 'o'jest to dosłowny ciąg znaków, który Odrukuje.

Wszelkie pozostałe znaki musiały należeć do innego programu. W rzeczywistości awypycha wysuw 5Flinii, silnia 5 ( 120 ), \azamienia to w 120 wysuwów i Zdrukuje cały stos.

Dennis
źródło
Tak fantazyjne, takie piękne. Dobra robota. +1
Addison Crump
4

BitShift , 2 ^ 2 + 64 = 68 punktów

policja wątku

0101100110110101001001010110111011101110111011101101010

odciski ! ?

1011101110111011101110110101000000000110010101101101010

odciski ? !

Kod

0101100110110101001001010110111011101110111011101101010 # '! ?'
01011001101101010 # '! '
0101              # XOR 0 with 128 
                  # Making current value 128 (1000 0000)
    10            # Bitshift 1 to left making 10000000 -> 01000000
      01          # Bitshift 1 to left making 01000000 -> 00100000  
        101       # XOR 00100000 with 1 making it 00100001
           101010 # print 00100000 which is binary for !
010010101         #
010               # XOR 00100001 with 1 making it 00100000
   010101         # print 00100000 which is binary for <space>
10111011101110111011101101010  # '?'
101               # XOR 00100000 with 1
   1              # Bitshift 1 to left making 00100001 -> 01000010
                      # This gets repeated till 01000010 becomes 0111111
101010                # print 0111111 which is binary for ?

Później dodam opis (podziel kod na części drukujące poszczególne części)

Dennis_J
źródło
Czy ktoś może wyjaśnić, jak obliczyć wynik Nie do końca rozumiem obliczenia
Dennis_J,
1
Dobra robota. Wynik obliczany jest przez 2^programs + 256/bytes=points. W tym przypadku jest 2^2 + 256/128=6 points. Myślę, że zostanie to zredagowane, ponieważ obecnie mniej programów z liczbą bajtów otrzymuje wyższą premię dla złodziei. Co jest nie tak
Bassdrop Cumberwubwubwub
1
@Bas Od wczoraj to się zmieniło.
Arcturus,
4

PHP , 68 punktów

$c=tR;$h=s;$c=$h.$c._.$h.plit;echo$c($h);

Wynik: Array

echo quotemeta('^/]'.co.'[$');

Wynik: \^/\]co\[\$


Podoba mi się to zgłoszenie, ponieważ opiera się na kilku mniej znanych funkcjach - można powiedzieć, że są błędne - PHP. PHP pozwala przypisywać odwołania do funkcji do zmiennych, więc na przykład:

$f = function($a, $b) { return pow($a, $b); };
echo $f(2, 4);

zrobiłby dokładnie to, czego oczekujesz. Jakby:

$f = pow;
echo $f(2, 4);

... z wyjątkiem tego, że nie robi tego, co myślisz. $f = pownie przypisuje odwołania do funkcji $f(miałoby to zbyt duży sens, prawda?), ale ciąg znaków 'pow' . Oznacza to, że dowolny ciąg znaków może być użyty jako wywołanie funkcji, jeśli reprezentuje nazwę zdefiniowanej funkcji. Zły kod czeka na zdarzenie. Nie wiem nawet, dlaczego chcesz na to pozwolić.

Innym błędem PHP jest to, że nazwy funkcji i słowa kluczowe nie rozróżniają wielkości liter. Chciałbym żartować. Tak więc echo pow(2, 4), ECHO POW(2, 4)i EcHo PoW(2,4)wszystkie są funkcjonalnie równoważne.

Ostatnim błędem w prezentacji jest to, że za każdym razem, gdy tablica jest wpisywana jako ciąg, na przykład do drukowania, wynikiem jest zawsze niezwykle pomocny ciąg Array. Poświęć chwilę na zastanowienie się nad faktem, że ktoś rzeczywiście to zrobił celowo.

Więc w pierwszym programie @insertusernamehere buduje ciąg stR_split, ten ciąg jest używany jako odwołanie do funkcji (które z powyższych powodów faktycznie działa), a wynik, tablica, jest generowany.

primo
źródło
1
Dobra robota, która zawiera świetne wyjaśnienie. :)
inserttusernamehere
3

Ruby , 68 punktów

Pierwszy:

p %w(b n n s)*?a%?}

Druga:

w,=?(.ord,40,?);"jivivi{2".bytes{|b|putc b-w}

Wynikało to całkiem naturalnie z wypracowania końca putc.

Mitch Schwartz
źródło
1
Ups, miałem nieco inne zamierzone rozwiązanie z jeszcze jedną dziwną sztuczką składni, ale myślę, że zatrzymam to w tylnej kieszeni na kolejne wyzwanie. Dobra robota!
histocrat
3

JavaScript, 68 punktów

Wątek gliniarzy

Pierwszy program

Wynik: ffttff

(![]+[])[+[]]+(![]+[])[+[]]+(!![]+[])[+[]]+(!![]+[])[+[]]+(![]+[])[+[]]+(![]+[])[+[]]

Drugi program

Wynik: 1010

+!![]+[+[]]+(+!![])+(+[])

Przeplatający się

+     !!    []             +                [    +[]]          +      (+     !![])                 +     (+[])
 (![]+  [])[  +[]]+(![]+[]) [+[]]+(!![]+[])[ +[]]    +(!![]+[]) [+[]]+  (![]+     [])[+[]]+(![]+[]) [+[]]
intrepidcoder
źródło
2

Java, 132 punkty

Wątek gliniarzy

Pierwszy program:

interface c{static void main(String[]g){System.out.println("Hell"\u002bg.length);}}

Drugi program:

class i{public static void main(String[]n){System.out.print("Bye!\n");}}

Pierwszy program wyjściowy Hell0i drugi program wyjściowyBye!

Adnan
źródło
Ach, spóźniłem się o godzinę. Dobra robota.
Arcturus,
2

JavaScript , 132 punkty

Program 1

var x;{;alert((f=>(f.reverse(f+~~f,Math.pow(2,Math.E))))(new Array(99).fill(0).map((x,i,f)=>i/3)).join("").replace(/../g,""))}

Program 2

try{"function";Object.keys(f)}catch(e){f=s=>!s?f(1):"";alert(f(f(f(0/0) +f(7/5)))+f(f)+`${f}`.split``.map(e=>e.charCodeAt()*23))}

Uff To było okropne.

Po wielu debugowaniach dowiedziałem się, że po wywołaniu (części) drugiego programu nie uruchomi się ponownie. Wynika to z faktu, że zmienna globalna fzostała jeszcze przypisana. Z fpowodu przypisania try / catch nie powiodło się Object.keys(f). Nie wiem, czy to podstępna sztuczka, czy niezamierzona, ale sprawiło mi to ból głowy.

Ponadto uważam, że wyniki pierwszego programu są specyficzne dla platformy.
/../gusuwa wszystkie znaki z mojego komputera, ponieważ wyrażenie regularne .oznacza dowolny znak. /\../gJednak uciekając od tego działa, mam nadzieję, że ktoś może rzucić na to więcej światła. Ponadto moje dane wyjściowe są podatne na błędy zaokrąglania, być może niektóre globalne zmienne javascript mogą to zmienić?

Wynik

32666666666666643233333333333336323166666666666668313333333333333231306666666666666830333333333333323029666666666666682933333333333332292866666666666668283333333333333228276666666666666827333333333333322726666666666666682633333333333332262566666666666668253333333333333225246666666666666824333333333333322423666666666666682333333333333332232266666666666668223333333333333222216666666666666821333333333333322120666666666666682033333333333332201966666666666668193333333333333219186666666666666818333333333333321817666666666666681733333333333332171666666666666668163333333333333216156666666666666615333333333333341514666666666666661433333333333334141366666666666666133333333333333413126666666666666612333333333333341211666666666666661133333333333334111066666666666666103333333333333410966666666666666933333333333334986666666666666683333333333333487666666666666677333333333333337666666666666667633333333333333656666666666666753333333333333354666666666666674333333333333334366666666666666533333333333333353266666666666666523333333333333352166666666666666713333333333333331066666666666666603333333333333330

Zostało to przetestowane na chrome 46 (moja jedyna przeglądarka), Windows 7.

Mam nadzieję, że mimo różnych wyników jest to wciąż poprawny wniosek

Bassdrop Cumberwubwubwub
źródło
Było tam cięcie, nie wiem, jak to przeoczyło. Dobra robota! To jest poprawne. Zaktualizuję swoje zgłoszenie, gdy nie będę na telefonie komórkowym;)
Conor O'Brien
2

JavaScript (ES6) , 68 punktów

Program 1

alert((c=>c.replace(/[a-z]/gi,a=>String.fromCharCode(("Z">=a?90:122)>=(a=a.charCodeAt(0)+13)?a:a-26)))("fvzcyr"))

Program 2

alert((b=>b.replace(/[a-zA-Z]/g,s=>String.fromCharCode(s.charCodeAt(0)+(s.toLowerCase()<'n'?13:-13))))("gbnfg"))

Programy z przeplotem

 alaelretrt((((cb=>c=>b.replace(/.replace[a-(/[azA-Z]-z]/gi/g,a,s=>String=>String.fromCharCode(s.fromCharCode(("Z">=a.charCodeAt(0)?90:122)>=(a=a.charCodeAt(0+(s.toLowerCase())+13)?a<'n'?13:-13:a-26)))))))((""gfvbznfcyrg""))))
 al e r t  ( ( c =>c             .replace   (/[a     -z]/gi  ,a  =>String                       .fromCharCode(("Z">=a              ?90:122)>=(a=a.charCodeAt(0                 )+13)?a           :a-26)))    ( "  fv z  cyr " ))
   a l e rt ( ( b   =>b.replace(/        [a-    zA-Z]      /g  ,s        =>String.fromCharCode(s                     .charCodeAt(0)                           +(s.toLowerCase()       <'n'?13:-13        )))) ( "g  b nf   g "  ))

Byłoby to o wiele trudniejsze, gdyby glina rozerwała słowa kluczowe. ;)

ETHprodukcje
źródło
Ręcznie go wplatałem i dostałem lenistwo, ale dobra robota. Próbowałem być podstępny. No cóż. Właściwie dziękuję za złamanie tego, ponieważ straciłem w jakiś sposób oryginalne nie tkane programy.
Użytkownik ogólny
1

Python 2 , 320 punktów

print "This"
print "hello"
print "well"
print "no"
print "alas"
print "but"
print "oh"
print "done"
Arktur
źródło