To część wyzwania gliniarzy i rabusiów . Idź tutaj po część gliniarzy.
Wyzwanie rabusiów
Odpowiedź gliniarza może zostać złamana przez usunięcie dowolnego podzbioru znaków z programu Haystack, tak aby wyświetlał Needle
zamiast Haystack
(podczas gdy nadal jest prawidłowym przesłaniem w tym samym języku). Nie musisz znaleźć dokładnie tego samego rozwiązania, jakie zamierzał policjant, o ile twoje jest zgodne z powyższymi ograniczeniami.
Jeśli poradzisz sobie z tym, opublikuj odpowiedź z rozwiązaniem, łącząc się z odpowiedzią policjanta, i zostaw komentarz na temat odpowiedzi policjanta z powrotem do twojej.
Rabuś, który łamie najwięcej odpowiedzi gliniarzy, wygrywa. Więzy są zerwane przez sumę rozmiarów odpowiedzi na złamane gliny (na korzyść rabusia, który pęka z dłuższych postów).
Każdą odpowiedź gliniarza można złamać tylko raz i oczywiście nie wolno ci złamać własnej odpowiedzi. Jeśli odpowiedź gliniarza okaże się nieprawidłowa przed lub po pęknięciu, nie jest liczona do wyniku rabusia.
Przykłady
Oto kilka prostych przykładów w różnych językach:
Ruby
Haystack: puts 1>0?"Haystack":"Needle"
Delete: XXXXXXXXXXXXXXX
Needle: puts "Needle"
Python 2
Haystack: print "kcatsyaHeldeeN"[-7::-1]
Delete: XXXXXXXX XX
Needle: print "eldeeN"[::-1]
Zauważ, że podzbiór usuniętych znaków nie musi być ciągły.
źródło
hashing, encryption or random number generation
jest dozwolone? (Choć możliwość niewielka)Odpowiedzi:
JavaScript, 85 bajtów (ES6)
Pęknięcia odpowiedź na Arnauld
Demo „Igły”
Pokaż fragment kodu
Wyjaśnienie
Oryginalna funkcja to:
który jest bardziej czytelny jako:
Zauważ, że kiedy
n=21625674
, ton.toString(35)
jest'eedle'
.Liczby 35 na wejściu prawdopodobnie nie można zmienić na podzbiór (ponieważ chcemy, aby podstawa była wystarczająco duża, aby zawierać wszystkie litery „del”, więc potrzebujemy podstawy, która ma co najmniej 22). Więc numery zmienić to
74837258394056219
,268435455
i124038877
. Chcemy zastąpić je liczbami a, b, c, z których każda składa się z podzbioru cyfr liczb pierwotnych, tak aby funkcjag(k) = (k * a & b)
, zaczynając odk=35
i iterując 35 razy, a następnie XORed z c, dawała21625674
.W tym drugim, po myśli się nieco, jak wymiary są małe (maksymalna
a
ma długość 17,b
ic
ma długość 9), po prostu stosuje się brute-force :-) Wrote C ++ programu w celu wytworzenia wszystkich możliwych liczba
,b
,c
ukształtowany jako podzbiorów pierwotnych liczb, powtarzaj wszystkiea
ib
i sprawdź, czy wymaganec
było w zestawie. Działa w około 15 sekund, a jedyne wyjściea=4853461
,b=268435455
,c=12408877
(okazuje numerb
nie musi być zmieniony). Nie jestem pewien, czy istnieje bardziej sprytny sposób na odwrócenie tej funkcji.źródło
Stóg siana , 82 bajty
Pęknięcia Odpowiedź HyperNeutrino
Wypróbuj online!
źródło
0
na początku: P Miło widzieć inne podejście! +1Brain-Flak , 96 bajtów
Cracks Odpowiedź Funky Computer Mana .
Wypróbuj online!
To było zabawne wyzwanie.
-24 na początku, który przekształca
y
toa
w oryginale jest obecnie używany do konwersjie
doM
, który następnie przekształca sięN
w miejscu, zmieniając cały koniec pętlę())
. Pierwsza pchana literak
została zmieniona nae
po prostu przez usunięcie pop-popu, który dodaje do niej 6. Reszta w większości po prostu się na miejscu, z kilkoma humorystycznymi błędami po drodze (w tym jeden program, którego wyjście byłoMeddle
).Porównanie dwóch programów:
źródło
N
to 77 zamiast 78, więc tego nie złapałem.Haskell
Odpowiedź Cracks @ Laikoni .
Wypróbuj online!
Oryginalny kod:
zastępując usunięte znaki podkreśleniami:
Jak
Needle
jest zbudowany: ciąg znaków na końcu kodu jest podzielony na słowa. Pierwszy znak każdego słowa jest zwiększany tyle razy, ile znaków w słowie, np.Haysta
->H
plus 6 znaków ->N
.źródło
Sześciokąt , 17 bajtów, H.PWiz
Wypróbuj online!
Porównanie z oryginałem:
Wyobrażanie sobie:
Wyjaśnienie
Znaki bonusowe - wykorzystuje wszystkie 6 adresów IP i wszystkie komórki oprócz jednej!
Adres IP # 0 zaczyna się od czarnej ścieżki prowadzącej do
]
.Następnie przechodzimy do adresu IP nr 1, który biegnie czerwoną ścieżką, drukując,
N
aN;
następnie zawijając z powrotem w]
ponownie.Następnie przejście do IP # 2, który głowice wzdłuż niebieskiej ścieżce, przechowywania
e
w bieżącej komórce pamięci, a następnie po zielonej ścieżce, wykonywanie (z odbiciem w\
);;(;
która drukujeee
, Zmniejsza komórkę pamięci ze
abyd
następnie drukujed
.Adres IP jest kontynuowany wzdłuż pomarańczowej ścieżki, wykonując,
Nl;se
który drukujel
i zapisujee
w bieżącej komórce pamięci. Kontynuuje wzdłuż brązowej ścieżki, drukując zae
pomocą;
. W tym momencie już wydrukowaliśmyNeedle
, więc reszta właśnie się kończy. Adres IP przechowujec
, a następnie trafia]
. Następnie przechodzimy do IP # 3, który podąża niebieską ścieżką, uderzając , odbijając się, w który odbija się . Następnie przechodzimy do adresu IP 4, który podąża zieloną ścieżką, odbijając się , a następnie rozgałęziając do (ponieważ jest dodatni). Na koniec przechodzimy do adresu IP nr 5, który przechowuje następnie za pomocą .\
_
]
_
\
]
c
e
@
źródło
Python 2 , 123 bajty
Pęknięcia odpowiedzi agtoever
repl.it
Porównanie:
Miałem dużo zabawy ze znalezieniem rozwiązań, które wydrukowałem
Meedle
iNeedlf
dopasowując wielomian do mediany indeksów symboli numpy, które zaczynają się od każdej z literNeedle
. Próbowałem następnie znaleźć podobne współczynniki z podzbiorami oryginalnego programu, ale ostatecznie musiałem uciekać się do brutalnego zmuszania jednego do znalezienia prawidłowego rozwiązania.źródło
JavaScript, 91 bajtów
Rozbija to . To było naprawdę fajne.
Pokaż fragment kodu
źródło
Galaretka , 14 bajtów
Pęknięcia Odpowiedź Jonathana Allana
Wypróbuj online!
Porównanie:
Kiedyś
œc
iterację różnych podgrupach dosłownym smyczki, wykorzystywanychtr -d
dla każdego możliwego filtra igrep
ed dla Needle. Przyjmując założenie, że żaden z użytych znaków w pierwszym ciągu nie został użyty w odpowiedzi, pozwala znaleźć odpowiedź w czasie krótszym niż 15 sekund.źródło
Nebbed
+ruble
bez żadnegorub
.Python 2 , 73 bajty
Pęka odpowiedź użytkownika 71546 .
Wypróbuj online!
Rozwiązany za pomocą tego programu.
źródło
Java (OpenJDK 8), 191 bajtów
Łamie odpowiedź Luke'a Stevena
Wypróbuj online!
Usunięte znaki:
To sprawia, że
d
ocenia078101101100108101
, które zaklęciaNeedle
.źródło
Rubin , 149 bajtów
Pęka to: /codegolf//a/144790/74216
Moduł był dość mały, więc napisałem wielowątkową rzecz urodzinową i liczyłem na najlepsze.
Edycja: A potem znalazłem jeszcze krótszą odpowiedź.
Wypróbuj online!
Zmiany:
źródło
dc , 34 bajty
Rozbija to . TIO .
Zacząłem od uzyskania reprezentacji numerycznej Haystack (5215583380252484459) i Needle (86197399743589). Następnie dokonałem faktoryzacji tego drugiego, czyli 47 * 432323 * 4242169. Z tego dość łatwo było zrekonstruować te liczby.
Oznaczanie użytych znaków:
źródło
Sześciokąty , 19 bajtów, Martin Ender
Wypróbuj online!
Porównanie z oryginałem
Rozłożony kod
Tak więc nigdy nie napisałem nic w Hexagony, ale doszedłem do wniosku, że mam tylko 37 bajtów, że mógłbym wymyślić crack. Martin, mam nadzieję, że wiesz, że dużo włożyłem czasu, próbując to rozgryźć. :)
Mogę się mylić, ale wyjaśnię, co myślę robi ten kod:
Program rozpoczyna się od
[
, który automatycznie przechodzi do IP # 5. To IP zaczyna się w zachodnim rogu, kierując się[
ponownie w stronę, która przenosi go do IP # 4. Stamtąd wykonuje,N;e
a następnie kieruje się do południowo-wschodniego rogu i wykonuje;
, odbija się w prawo,;
a następnie zawija, do(
którego zmniejsza prąde
do ad
. Następnie kontynuuje (z zawijaniem),...;.
a następnie podskakuje dol
i przechodzi do[
ostatniego, przechodząc do adresu IP # 3. Wykonuje;
,>
przekierowuje na północny zachód,.
a następnie<
przekierowuje na zachód, uderzające
, owijając;
i kończąc na@
.Pełna wersja
Pokaż fragment kodu
Tak się cieszę, że użyłeś normalnego rozmiaru sześciokąta dla programu Igła; Sprawdzałem programy w rozmiarze 19 (dla sześciokąta bocznego o długości 3), kiedy zdałem sobie sprawę, że możesz usunąć dowolną liczbę znaków, a to automatycznie wypełniłoby sześciokąt literą
.
s na końcu, co znacznie utrudniłoby złamanie. W tej chwili Hexagony jest złym językiem dla tego wyzwania, ponieważ (głównie) każda usunięta postać zmienia całą ścieżkę wykonania programu. To powiedziawszy, lubiłem próbować to wymyślić, nawet jeśli w końcu brutalnie zmusiłem to do końca. :)źródło
Java (OpenJDK 8) , 151 bajtów
Pęknięcia Odpowiedź Kevina Cruijssena
Wypróbuj online!
Porównanie:
Czuję, że ostatnia część nie była zamierzona.
źródło
v->{String h="Haystack";int x=7;return new String(new java.math.BigInteger(new byte[]{(byte)((~-~-~-~-~-~-~-~1^-x++*x)+15),new Byte(""+10+((x=h.length()*4/x)+x-7))}).toByteArray())+(new StringBuffer("hidden".substring(++x%3,x).replaceFirst("d","e"+(char)(x*21+3))).reverse());}
(nie wiem, dlaczego dołączyłem BigInteger, ponieważ wystarczy tablica bajtów ..) , ale ja lubię twoją lepiej .. :)Brain-Flak , 102 bajty
Pęknięcia odpowiedź H.PWiz użytkownika .
Wypróbuj online!
źródło
Ly , 21 bajtów
Wypróbuj online!
Pęknięcia odpowiedź LyricLy użytkownika .
źródło
Java autorstwa Johnathan S.
TiO
Wystarczy usunąć pętlę, która dodaje siano, a na stosie nie pozostanie nic oprócz igły.
źródło
equals
metody działa równie dobrze.Pyt , 21 bajtów
pęknięcia to .
Wypróbuj online!
źródło
T-SQL przez phroureo , 757 bajtów
Jakoś nie sądzę, że to było zamierzone rozwiązanie. Używa znaków otoczonych przez
{}
:źródło
PHP
Pęknięcia odpowiedzi Tytusa
Wypróbuj online
źródło