Uwaga: to wyzwanie zostało zakończone. Zgłoszenia są nadal mile widziane, ale nie można wygrać.
To jest wątek gliniarzy. Wątek rabusiów idzie tutaj .
Napisz kod, który wyświetli liczbę całkowitą 1
. Jeśli dodasz, usuniesz lub podmienisz pojedynczy znak (swojego wyboru), kod powinien wypisać liczbę całkowitą 2
. Zmień jeszcze jeden znak (taki sam lub inny), a kod powinien zostać wyświetlony 3
. Kontynuuj tak, jak to możliwe, ale maksymalnie do 10. Domyślne formaty wyjściowe, takie jak ans = 1
są akceptowane. Możesz zignorować dane wyjściowe dla STDERR (lub odpowiednika).
Musisz ujawnić język, liczbę bajtów kodu początkowego, liczbę liczb całkowitych, dla których on działa, a także opcjonalną liczbę znaków kodu początkowego. Uwaga: Nie musisz ujawniać żadnych postaci, ale pamiętaj, że ujawnienie postaci może utrudnić złodziejom, ponieważ muszą używać tej samej postaci w tej samej pozycji. Możesz wybrać znak, którego używasz do oznaczania nieujawnionych znaków (na przykład podkreślenie), ale pamiętaj, aby to określić.
Policjanci mogą dostarczyć niezrackowany kod po tygodniu i nazwać zgłoszenie „BEZPIECZNY”. Zwycięskie zgłoszenie będzie najkrótszym niezakończonym zgłoszeniem, które daje liczbę 10. Jeśli żadne niezrakowane zgłoszenia nie będą w stanie wydrukować 10, wygra najkrótszy kod, który daje 9, i tak dalej. Pamiętaj, że złodzieje nie muszą wprowadzać takich samych zmian jak ty i nie muszą odtwarzać dokładnego kodu (chyba że ujawnisz wszystkie znaki). Muszą tylko reprodukować dane wyjściowe.
Zgłoszenia wysłane później niż 24 listopada są mile widziane, ale nie kwalifikują się do wygranej (ponieważ prawdopodobnie będzie mniej rabusiów).
Przykładowy post:
Poniższy post jest przesłaniem w języku MyLang
, ma długość 9 bajtów i działa z cyframi 1–8.
MyLang, 9 bajtów, 8 cyfr
To poddanie pracuje dla 1 - 8. znaki objawione są oznaczone znakiem podkreślenia: _
.
abc____i
Tabela liderów
Oświadczenie: Tabela liderów nie jest testowana, a niekontrolowane zgłoszenia mogą nie pojawić się na liście.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><style>table th,table td{padding: 5px;}th{text-align: left;}.score{text-align: right;}table a{display: block;}.main{float: left;margin-right: 30px;}.main h3,.main div{margin: 5px;}.message{font-style: italic;}#api_error{color: red;font-weight: bold;margin: 5px;}</style> <script>QUESTION_ID=99546;var safe_list=[];var uncracked_list=[];var n=0;var bycreation=function(x,y){return (x[0][0]<y[0][0])-(x[0][0]>y[0][0]);};var byscore=function(x,y){return (x[0][1]>y[0][1])-(x[0][1]<y[0][1]);};function u(l,o){jQuery(l[1]).empty();l[0].sort(o);for(var i=0;i<l[0].length;i++) l[0][i][1].appendTo(l[1]);if(l[0].length==0) jQuery('<tr><td colspan="3" class="message">none yet.</td></tr>').appendTo(l[1]);}function m(s){if('error_message' in s) jQuery('#api_error').text('API Error: '+s.error_message);}function g(p){jQuery.getJSON('//api.stackexchange.com/2.2/questions/' + QUESTION_ID + '/answers?page=' + p + '&pagesize=100&order=desc&sort=creation&site=codegolf&filter=!.Fjs-H6J36w0DtV5A_ZMzR7bRqt1e', function(s){m(s);s.items.map(function(a){var he = jQuery('<div/>').html(a.body).children().first();he.find('strike').text('');var h = he.text();if (!/cracked/i.test(h) && (typeof a.comments == 'undefined' || a.comments.filter(function(b){var c = jQuery('<div/>').html(b.body);return /^cracked/i.test(c.text()) || c.find('a').filter(function(){return /cracked/i.test(jQuery(this).text())}).length > 0}).length == 0)){var m = /^\s*((?:[^,;(\s]|\s+[^-,;(\s])+).*(0.\d+)/.exec(h);var e = [[n++, m ? m[2]-0 : null], jQuery('<tr/>').append( jQuery('<td/>').append( jQuery('<a/>').text(m ? m[1] : h).attr('href', a.link)), jQuery('<td class="score"/>').text(m ? m[2] : '?'), jQuery('<td/>').append( jQuery('<a/>').text(a.owner.display_name).attr('href', a.owner.link)) )];if(/safe/i.test(h)) safe_list.push(e);else uncracked_list.push(e);}});if (s.items.length == 100) g(p + 1);else{var s=[[uncracked_list, '#uncracked'], [safe_list, '#safe']];for(var i=0;i<2;i++) u(s[i],byscore);jQuery('#uncracked_by_score').bind('click',function(){u(s[0],byscore);return false});jQuery('#uncracked_by_creation').bind('click',function(){u(s[0],bycreation);return false});}}).error(function(e){m(e.responseJSON);});}g(1);</script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/Sites/codegolf/all.css?v=7509797c03ea"><div id="api_error"></div><div class="main"><h3>Uncracked submissions</h3><table> <tr> <th>Language</th> <th class="score">Score</th> <th>User</th> </tr> <tbody id="uncracked"></tbody></table><div>Sort by: <a href="#" id="uncracked_by_score">score</a> <a href="#" id="uncracked_by_creation">creation</a></div></div><div class="main"><h3>Safe submissions</h3><table> <tr> <th>Language</th> <th class="score">Score</th> <th>User</th> </tr> <tbody id="safe"></tbody></table></div>
źródło
1
, w jaki sposób można zapobiec złodziei od dodawania)
kilkakrotnie , aby wygenerować ciąg liczb? To samo dotyczyłoby kilku języków1
wydaje, CJam wydaje się złym wyborem języka dla tego wyzwania. Nie ma sposobu, aby temu zapobiec.10
. Ta zasada obowiązuje, ponieważ wiele zgłoszeń można prawdopodobnie rozszerzyć do nieskończoności (teoretycznie), więc punktowanie na podstawie najwyższej osiągniętej liczby nie miałoby sensu.cracked
w jakiejś formie. To właśnie robi obecnie przeprojektowany skrypt użytkownika .Odpowiedzi:
Sześciokąt , 18 bajtów, 10 cyfr, BEZPIECZNY
To poddanie pracuje dla 1 - 10. znaki objawione są oznaczone znakiem podkreślenia:
_
.Możesz wypróbować Hexagony online tutaj.
Moje rozwiązanie:
Hex dla wyjścia 1:
Wypróbuj online!
<
brzegu pamięci jest0
, więc się pojawia.1
5
8
, ale zostaje odwrócony<
i8
wraca.5
ponownie1
<
w tym momencie wartość pamięć 1585, która mod 256, dzieje się ASCII1
;@
.Hex dla wyjścia 2:
Wypróbuj online!
Podąża tą samą ścieżką, ale w drodze powrotnej uderza w,
)
która zwiększa krawędź pamięci do 1586 lub2
.Hex dla wyjścia 3-9:
Wypróbuj online!
2
<
, więc się zmniejsza.]
Zmienia wskaźnik instrukcji, ale natychmiast wraca z[
)
przyrosty do3
!
Wydruki3
$
pozostaje z pierwszych dwóch liczb, więc przeskakujemy nad końcem (@
)1
zmienia krawędź pamięci, ale teraz to nie ma znaczenia.<
odzwierciedla wskaźnik z powrotem.1
nie ma to znaczenia, ponieważ uderzamy,@
aby zakończyć program.źródło
Siatkówka , 2 bajty, 10 cyfr, Pęknięty
Działa od 1 do 10,
_
jest postacią ukrytą. Nie powinno to być zbyt trudne, ale mam nadzieję, że stanowi nieco interesującą łamigłówkę. :)Możesz spróbować Retina online tutaj.
źródło
Oktawa, 55 bajtów, 10 cyfr, pęknięty
_
jest nieznaną postacią.Rozwiązanie
źródło
Python 2, 9 bajtów, 10 liczb, pęknięty
Żadnych ukrytych znaków. Czy potrafisz go złamać bez brutalnego zmuszania?
źródło
Perl, 12 bajtów, 10 cyfr, pęknięty!
Podkreślenia przedstawiają nieznane postacie.
Prawdopodobnie dość łatwe i nie zaskoczyłoby mnie, gdyby istniało wiele rozwiązań. Mimo to złamanie go może być fajne.
(Zamierzone rozwiązanie było takie samo jak crack. Jest to zasadniczo tylko problem związany z przypisaniem 10 zmiennej do czterech znaków, co jest zaskakująco trudne w Perlu; w przeciwieństwie do wielu języków golfowych, nie ma zmiennej, która z początku zaczyna się od 10.)
źródło
$_=1;say;#-9
, ale nie mogłem wymyślić, jak zdobyć 10.Perl, 46 bajtów, 10 cyfr, bezpieczny
Problem
Krótsze problemy mają tendencję do szybkiego pękania, więc pomyślałem, że spróbuję dłużej. Dłuższe mają również tendencję do pękania, jeśli ludzie zostawią wystarczająco dużo odstępu, aby zakraść coś niegrzecznego, jak
say
lubexit
wewnątrz, więc wszystkie luki tutaj są krótkie. Ukryte postacie są reprezentowane za pomocą_
.Moje rozwiązanie
Aby wydrukować 2, 3, itd., Aż do 9, ciągle się zmienia numer przypisany
$b{0}
w drugiej linii (tj$b{0}=2
,$b{0}=3
etc.). Program dla 9 wygląda następująco:Następnie, aby uzyskać 10, skomentuj pierwszy wiersz, przygotowując
#
do niego znak.Wyjaśnienie
Pierwszą rzeczą, na którą należy zwrócić uwagę, jest to, że rozwiązanie nie jest tak naprawdę gra w golfa oprócz usuwania białych znaków: jeśli rozłożymy je na bardziej czytelne białe znaki, otrzymujemy:
Zwykle, kiedy uzyskujesz dostęp do argumentów podprogramu w Perlu, robisz to poprzez skopiowanie ich z
@_
. Jest ku temu dobry powód:@_
aliasy argumentów podanych podprogramowi (np. Do(sub { $_[0] = 3 })->($x)
przypisania$x
), co zwykle nie jest pożądane.Chociaż
@_
może się to wydawać magiczne, w rzeczywistości wykorzystuje tylko standardową funkcję wewnętrznych elementów Perla (która jest łatwo dostępna z XS, ale pojawia się tylko w kilku dziwnych przypadkach w czystym Perlu, takim jak ona@_
sama): tablica nie przechowuje bezpośrednio swoich elementów , ale raczej przez odniesienie. Tak więc, gdy wywołujemyb
drugą linię poniżej, Perl generuje tablicę (nazywając ją@_
), której pierwszy element jest odwołaniem do tej samej pamięci, z której$b{0}
korzysta. (Wartości skrótu są również przechowywane przez odniesienie; $ _ [0] i $ b {0} odnoszą się do tego samego magazynu w tym momencie.) Ponieważ@_
nie robi się nic specjalnego z wewnętrznego punktu widzenia, możemy wziąć odniesienie do niego, tak jak moglibyśmy z każdą inną tablicą, powodując, że przeżył on podprogram, w którym jest zdefiniowany.Zmienne Perla odnoszą się również do przechowywania danych przez odniesienie. Dawno, dawno temu, ludzie wykorzystywane do kodu użytkowania jak
*x = *y;
do zestawu$x
jako alias do$y
(przez co czyni je odwołać samo), podobnie@x
jak aliasu@y
,%x
jako alias do%y
, i tak dalej. To raczej łamie niezmienność, że zmienne o podobnych nazwach nie muszą działać podobnie, więc współczesny Perl stanowi alternatywę; przypisanie odwołania do kafelka powoduje zastąpienie tylko zmiennej pasującej do typu odwołania (więc*x = \%y
alias%x
wskazywałby na to samo miejsce do przechowywania,%y
ale pozostawiłoby, powiedzmy,$x
sam). Ta składnia w szczególności nie dba o to, czy pamięć, do której aliasing ma nazwę, ma więc znaczenie, kiedy przypisujemy wartość zwracanąb
(który jest odwołaniem do tablicy, która utrzymuje tablicę poprzednio nazywaną „@_
żywą”)*b
, dzieje się to, że@b
zmienia się na alias listy argumentów do wywołania dob
(pozostawiając%b
niezmieniony). Oznacza to w szczególności, że$b[0]
i$b{0}
teraz wskazują na ten sam magazyn, a przypisanie do jednego spowoduje zatem zmianę drugiego. Od tego momentu wszystko jest całkowicie proste.Dokumentacja Perla tak naprawdę nie mówi o takich szczegółach, więc nie dziwię się, że ktoś dostał crack; natura
@_
nie do końca podobna do innych tablic nie jest czymś, co jest naprawdę podkreślane, a większość stylów kodowania ma na celu zminimalizowanie efektów, a nie ich wzmocnienie.źródło
q
is
i (y
im
głównie próbuję zmusić ich do zakończenia po$b[0]
zadaniu), ale nic dla mnie nie działa (jeszcze).sub b{\@_}
cementuje się w mojej głowie, i, choć eksperymentował ze*b
nie mogłem się go! Dziękuję za wyjaśnienie. Mógłbym przelotnie nad tym wyjaśnić w twoim wyjaśnieniu, ale dlaczegosub b{\@_}*b=b$b[0]
nie robi tego samego?\@_
)*b
, ale musisz samodzielnie wymienić element skrótu. Z*b=b$b[0]
, po prostu aliasingujesz nowy$b[0]
(po zmianie gdzie@b
punkty) do$b[0]
istniejącego na początku programu, co jest bezużyteczne.JavaScript, 30 bajtów, 10 cyfr, pęknięty
Nie powinno to być zbyt trudne, ale mam nadzieję, że jest to wystarczająco trudne, aby zapewnić wyzwanie. :) Nie objawione znaki są oznaczone
_
.źródło
Perl, 14 bajtów, 10 cyfr, pęknięty
Działa od 1 do 10.
_
są ukrytymi postaciami.Myślę, że nie powinno to być zbyt trudne do złamania. Mam trudniejszy, na 22 bajty, opublikuję go, jeśli ten jest pęknięty.
Oryginalny kod:
I zastąpić
"!"
przez ciąg długości numeru, który chcesz wydrukować, na przykład!
,!!
,!!!
, itd.Jednak ais523 znalazł inny sposób:
źródło
JavaScript, 22 bajty, 10 cyfr, pęknięty
Prawdopodobnie raczej łatwe do złamania.
_
będąc ukrytą postaciąźródło
xc_de
było tylko czerwonym śledziemOktawa, 17 bajtów, 10 liczb, Pęknięty
Oryginalne rozwiązanie
_
jest ukrytą postacią.źródło
Galaretka , 7 bajtów , 10 cyfr, pęknięta
Bez symboli wieloznacznych.
Osiągnięte pęknięcie (używając eval z argumentem) było, jak wielu wydaje się być w tym wątku, nie zamierzone.
Zamierzonym pęknięciem było:
źródło
10
, ponieważ miałem szczęście przy tym, próbując rzeczy, które mogą zadziałać.10
Uważam, że sposób, w jaki działasz, polega na ocenie kodu galaretki w ciągu9
z argumentem0
(domyślna wartość danych wejściowych), który następnie usuwasz kolejność (bez efektu), a następnie zwiększasz.10
działa na ciebie, oceniając kod galaretki w ciągu9
z argumentem[]
- domyślnej wartości wejściowej0
, odznaczonej - którą następnie zwiększasz., jak“1‘‘‘‘‘‘‘‘‘Ọv0Ḋ¤‘
Befunge-93, 11 bajtów, 10+ liczb, Pęknięty
To zgłoszenie działa dla co najmniej 1–10. Nie objawione znaki są oznaczone symbolem
□
.Wypróbuj online
Muszę powiedzieć, że byłem pod wrażeniem, że dwoje ludzi mogło wymyślić niezależne rozwiązania, z których żadna nie była tym, czego się spodziewałem. Podczas gdy Martin dotarł tam pierwszy, daję „wygraną” Sp3000, ponieważ ich rozwiązanie jest bardziej przenośne.
To było moje zamierzone rozwiązanie:
źródło
"15:**-6-.@
daje 1, ale nie jestem pewien, czy fakt, który"
przesuwa 32 na wierzch (z powodu niejawnych spacji) jest artefaktem interpretera TIO, czy częścią specyfikacji Befunge, ponieważ próbując kilku tłumaczy, wydaje się, że nie wszyscy to robią. Czy planowane rozwiązanie zależy od tego zachowania?R, 21 bajtów, 10 cyfr Pęknięty
Działa dla 10 liczb.
_
jest ukrytą postacią.Oryginalne rozwiązanie:
źródło
Ruby, 16 bajtów, 10 liczb, spakowane przez xsot
#
jest dowolną postacią.źródło
Oktawa, 32 bajty, 10 liczb. Pęknięty
_
jest ukrytą postacią.Możesz wypróbować Octave online tutaj .
Oryginalne rozwiązanie:
1:
nnz(isprime(floor(sqrt(i):pi')))
2:
nnz(isprime(floor('sqrt(i):pi')))
3:
nnz(isprime(floor('sqrt(i):pia')))
4:
nnz(isprime(floor('sqrt(i):piaa')))
...
źródło
Oktawa, 17 bajtów, 10 liczb, Pęknięty
Nie objawione znaki są oznaczone
_
.Zamierzone rozwiązanie:
źródło
Oktawa, 19 bajtów, 10 cyfr, pęknięty
_
jest ukrytą postacią.Zamierzone rozwiązanie:
źródło
sca
. Pochodząc od ciebie, powinienem pomyśleć o funkcjach macierzy :-)05AB1E , 5 bajtów, 10 cyfr, pęknięty!
Niezbyt trudne, ale fajne :)
_
jest losową postacią. Wykorzystuje kodowanie CP-1252 . Wypróbuj online!źródło
05AB1E , 6 bajtów, 10 cyfr, pęknięty
Próba 2, tym razem bez ciągu trzech znaków: str.
_
jest losową postacią. Wykorzystuje kodowanie CP-1252 . Wypróbuj online!źródło
JavaScript, 22 bajty, 10 cyfr, pęknięty
_
jest ukrytą postacią.Wskazówka na temat zamierzonego rozwiązania
Znak, który należy zmienić, aby wygenerować wszystkie liczby, jest zawsze taki sam.
źródło
JavaScript 21 bajtów, 10 pękniętych liczb
Nie objawione znaki są oznaczone
_
Pęknięty
Moja wersja:
źródło
Python 3, 19 bajtów, 10 liczb, pęknięty
Nie objawione znaki są oznaczone
?
. Testowane w Python 3.5.2.źródło
Python 3, 16 bajtów, 10 liczb, pęknięty
Nie objawione znaki są oznaczone
?
. Jest to prawdopodobnie trochę łatwe, ponieważ jest tylko pięć znaków zapytania, ale mam nadzieję, że będzie fajnie.źródło
C #, 90 bajtów, 10 cyfr, pęknięty
Naprawdę nie mam pojęcia, jak trudno to złamać.
Edycja: Ups, błąd transkrypcji. O jeden
_
za mało późniejusing
.Teraz złamane przez Hedi , który znalazł zamierzone (z wyjątkiem nazwy klasy) rozwiązanie.
źródło
JavaScript 33 bajtów, 10 pękniętych liczb x2
Ups, opublikowałem, opublikowałem moją linię do generowania 10, które Hedi złamał tak, jakby to było dla 1
Wersja przeznaczona do opublikowania w celu wygenerowania 1
Nie objawione znaki są oznaczone
_
źródło
console.log(atob|"0Xc0"-0xB6|("Zp=="))
MyślęPython, ponad 10 liczb, 61 bajtów, pęknięty!
Oto kod, który opublikowałem:
Oryginalny kod to:
Zasadniczo generuje błąd (
'x' is not defined
), a następnie wypisuje wiersz, w którym znaleziono błąd. Więc po prostu dodawaj nowe wiersze na początku, aby zwiększyć liczbę.Wiedziałem, że nie będzie trudno go złamać - chciałem po prostu zabawny sposób na drukowanie liczb - ale nie spodziewałem się, że Sp3000 dostanie go tak szybko, to pewne umiejętności pro!
źródło
STDOUT
i wydrukować numer, ale chyba zbytnio go zawęziłem. Ach tak.sys
zdecydowanie uprościło sprawę, ponieważ stanowiło dobry punkt wyjścia do wyszukiwania: P05AB1E, 11 bajtów, pęknięty!
Działa od 1-10.
_
jest ukrytą postacią.Zamierzone rozwiązanie:
źródło
Oktawa, 24 bajty, 9 cyfr, pęknięty
_
jest ukrytą postacią.(Zainspirowany wyzwaniem @ LuisMendo .)
źródło
JavaScript, 9 bajtów, 10 liczb, Pęknięty
_
jest ukrytą postacią.źródło
Oktawa, 25 bajtów, 9 liczb. Pęknięty
_
jest ukrytą postacią.źródło