Hide the Needle in the Haystack (Cops)


38

To część wyzwania . Idź tutaj po część rabusiów.

Wyzwanie gliniarzy

Powinieneś napisać program lub funkcję w wybranym języku, który wypisze ciąg znaków Haystack. Jednak musi być możliwe usunięcie niektórych podzbiorów znaków z programu (bez zmiany kolejności pozostałych), tak aby wynikowy łańcuch był również poprawnym programem w tym samym języku, który Needlezamiast tego drukuje . Oba programy / funkcje mogą opcjonalnie wydrukować pojedynczy znak nowej linii (niezależnie od siebie), ale nic więcej. W danych wyjściowych rozróżniana jest wielkość liter i musi być zgodna z dostarczoną dokładną obudową.

Twoim celem jest oczywiście bardzo dobre ukrycie „igły”. Pamiętaj jednak, że zgłoszenie może zostać złamane za pomocą dowolnego ważnego rozwiązania, nie tylko tego, które zamierzałeś.

Podaj w swojej odpowiedzi:

  • Język (i wersja, jeśli dotyczy) Twojego zgłoszenia.
  • Rozmiar programu Haystack w bajtach.
  • Sam program Haystack.
  • Metoda wyjściowa, jeśli nie jest to STDOUT.
  • Jeśli to możliwe, link do tłumacza / kompilatora online dla wybranego języka.

Twoje zgłoszenie może być programem lub funkcją, ale nie fragmentem kodu i nie możesz zakładać środowiska REPL. Nie możesz przyjmować żadnych danych wejściowych i możesz generować dane wyjściowe za pomocą STDOUT, wartości zwracanej przez funkcję lub parametru funkcji (wyjściowej).

Oba programy / funkcje muszą zakończyć się w ciągu 5 sekund na rozsądnym komputerze stacjonarnym i muszą być deterministyczne. Nie wolno używać wbudowanych funkcji do mieszania, szyfrowania lub generowania liczb losowych (nawet jeśli generator liczb losowych zostanie ustawiony na stałą wartość).

W trosce o sprawiedliwość musi istnieć darmowy tłumacz lub kompilator dla wybranego przez ciebie języka.

Odpowiedź zostanie złamana, jeśli program Needle zostanie znaleziony. Jeśli twoja odpowiedź nie została złamana przez 7 dni, możesz ujawnić zamierzony program Needle w swojej odpowiedzi, co sprawia, że ​​przesyłanie jest bezpieczne. Dopóki nie ujawnisz swojego rozwiązania, może ono zostać złamane przez rabusiów, nawet jeśli minęło już 7 dni. Najkrótszy bezpieczny program Haystack (mierzony w bajtach) wygrywa.

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.

Nieprzetworzone zgłoszenia

<script>site = 'meta.codegolf'; postID = 5686; isAnswer = false; QUESTION_ID = 144600;</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>


1
Związane z. (Główną różnicą jest to, że jeden z nich miał programy wdrażające sekwencje OEIS i pozwalał krakowanemu programowi wyprowadzać dowolną inną sekwencję OEIS, co znacznie utrudnia gliniarzom ochronę przed niezamierzonymi pęknięciami. Umożliwiło to także rabusiom kradzież pęknięć od innych rabusiów, znajdując jeszcze krótsze rozwiązania.)
Martin Ender

Zrobiłbym to w Haystack, ale nie ma dokumentacji i przeglądam kod :(
Okx,


1
Fragment kodu stosu ma nieprawidłową długość dla tej odpowiedzi
mbomb007,

1
@ kamoroso94 Tak, ale to oznacza, że ​​możesz zakończyć programy kandydujące po 5 lub 6 sekundach, ponieważ jeśli nie zostaną ukończone, nie mogą być rozwiązaniem, którego szukasz.
Martin Ender

Odpowiedzi:


16

Stóg siana , 84 bajty, pęknięty

0\\1-c\
//    
?10F17+c8F+4+cd8F+3+c6-c1+c,c2+c8+c|
 0   \1++c,c|
F/c++2F8
c\8F+2+cd

Wypróbuj online!

Wygląda to (dla mnie) dość skomplikowane, ale jeśli znajdziesz odpowiedni podzbiór, jest to trochę zbyt łatwe ... no cóż, po prostu na początek: P



1
@icrieverytim 1. oo cool, oba są glifami Unicode 2. obecny jest bardziej naukowo dokładny
HyperNeutrino

1. Tak, wiem, wyglądają naprawdę fajnie. : PI znalazł je w tej kopalni złota bloku Unicode . Nie zdziw się, jeśli trafią na stronę kodową Neon. 2. TBH, stary wyglądał lepiej IMO. : P
całkowicie ludzki,

1
@HyperNeutrino Dlaczego interesujesz się benzenem?
Michthan,

3
@Michthan Biorąc pod uwagę, że jestem neutrino, to dobre pytanie, ale nie wiem: P
HyperNeutrino

12

Sześciokąt , 37 bajtów

H[@;(...e<l.a;./$.>;\sN;\ac.>).;;;._y

Wypróbuj online!

Właśnie mój obowiązkowy wpis w Heksagonię ...

Dla wygody oto rozwinięty kod:

   H [ @ ;
  ( . . . e
 < l . a ; . 
/ $ . > ; \ s
 N ; \ a c .
  > ) . ; ;
   ; . _ y

Jak to działa:

Program zaczyna się od H, następnie przechodzimy do IP # 5. To IP zaczyna się w zachodnim rogu, podskakuje i owija się podczas wykonywania (w efekcie) ;a;y;s;(więc wydrukowaliśmy Hays). Następnie szwiększa się do to )i drukuje, a następnie przechodzimy przez nie, Ne...(czanim się do niego dostaniemy a;c;(wciąż podskakując wokół małej części sześciokąta). Program uderza _, odzwierciedla się poprzez \do lktórego zostanie zmniejszona do kprzez (, które przechodzi przez inny \przed drukowaniem i kończy program na @.

Pełna wersja


3
Ten język wciąż mnie psuje. Kocham cię za to.
phroureo

Mój mózg teraz eksploduje. Próbowałem to rozgryźć na tyle, aby złamać kod, ale człowiek YEESH. Jakiego rodzaju pokręcony facet to wymyśla?
phroureo

@phroureo ...> _>
Martin Ender

Czy po udzieleniu bezpiecznej odpowiedzi możesz podać mi krok po kroku, co robi? (Lub jeśli masz już gdzieś krok po kroku coś podobnego, skieruj mnie tam?)
phroureo

1
@ phroureo Nie mam nic przeciwko dodaniu wyjaśnienia programu policjanta, zanim będzie on bezpieczny, i nie sądzę, że i tak uznam go za bezpieczny (nie jestem zbytnio chętny do wygrania własnego wyzwania dzięki oświadczeniu, które ledwo przedstawiłem wszelkie wysiłki w). Spróbuję dodać wyjaśnienie jutro. Tymczasem cieszę się, że mogę pomóc Ci z Hexagony w czacie esolangs .
Martin Ender

10

Brain-Flak , 146 bajtów ( pęknięty )

([((((()()())){}){}){}](()([()](()({}([((((()()()){})))[]])[]({}({})[{}]()({}((()(({}){}){}){}){}())))[][][][][][]))[]))(((()[]){}){({}[()()])}{})

Wypróbuj online!

Zamierzone rozwiązanie, 80 bajtów

([((((()()())){}){}){}](()([()](()({}([((((()()()){})))[]])[]({}({})[{}]()({}((()(({}){}){}){}){}())))[][][][][][]))[]))(((()[]){}){({}[()()])}{})
( ((   )(                  [(  (( (         )()()){})) []]   ({}(  )    ( (  ( ()(({}){}){}){}){}())))            ))    (((()[]){}){({}[()  ])}{})


8

JavaScript, 95 bajtów (ES6), pęknięty

Funkcja zwracająca ciąg znaków.

f=(k=b=x=35)=>x--?f(k*74837258394056219&268435455):k&2?'N'+(k^124038877).toString(b):'Haystack'

Demo „Stogu siana”


Bardzo fajna łamigłówka. Cracked
ShreevatsaR

8

Haskell , 168 bajtów ( Cracked by nimi )

hays=map;hay=zipWith;stack=head;h=stack{-
 hay.(hays.(stackany hay$or id).stack hay
<*>hays(sum$stack haystack<$>hay))-}$words
 "Haystack Hayst ackH aysta ckH aystac k"

Wypróbuj online! Ocenianie identyfikator hZwraca napis "Haystack"po pewnym delecji hplonów "Needle".


1
Pęknięty . Było całkiem fajnie rozwiązać.
nimi


4

Sześciokąt , 32 bajty. Pęknięty

Nie mogłem rozwiązać Martina , więc zamieszczam własne.

];N.@cl;e@;;(\H/;ya;_.>s.;t//<._

Wypróbuj online!

Tutaj jest sformatowany:

   ] ; N .
  @ c l ; e
 @ ; ; ( \ H
/ ; y a ; _ .
 > s . ; t /
  / < . _ .
   . . . .

Moim celem było, aby oba rozwiązania wykorzystywały jak najwięcej adresów IP, dostałem 6 za Needle i tylko 5 za Haystack .




3

Java (OpenJDK 8) , 226 217 bajtów ( pęknięty )

Pierwszy w historii golf golfowy, prawdopodobnie bardzo łatwy, ale było to zabawne wyzwanie!

String d(){int h=3609000-5055+911,m=557558,s=15441301-157*10000;String d="0"+h*2+""+m*20+""+s*7,x="",y;for(int g=0;g<d.length();g+=3){y="";for(int e=0;e<3;e++)y+=d.charAt(e+g);x+=(char)Integer.parseInt(y);}return x;}

Wypróbuj online!


Twoje TIO nie działa. Może chcesz zmienić return new Main().d();, aby System.out.print(new Main().d());w głównym sposobem.
Kevin Cruijssen

@KevinCruijssen Dzięki za informacje!
Luke Stevens


3

dc , 148 bajtów ( pęknięty )

6 93 3 9 2 2**+*+483622 1 2 3 3*+3*+89 47*+*+3 5 2* 269 158 9**107 97*2 4*++2 3 3*+42 14 2**+*+5*+5 2148 1 6 2*+*+68262 5 280 7 2 3 3*+5 2**+*+*+*+P

Wypróbuj online!

Jest to raczej proste, ale mam nadzieję, że rozwiązanie będzie przynajmniej zabawne: з



2

JavaScript, 119 bajtów (ES6), pęknięty

Funkcja zwracająca ciąg znaków. Dość długi i nie taki trudny, ale mam nadzieję, że zabawa.

_=>(+{}+['H'])[+[3]]+(+[][[]]+[])[+!!3]+(+[][[]]+['y'])[3]+(+[][[]]+['s'])[-~2]+(~![]+['t'])[2]+(+[][[]]+[])[+!!3]+'ck'

Demo „Stogu siana”


Pęknięty . Jsfuck github README.md bardzo pomógł.
mój zaimek to monicareinstate

2

Python 2.7.2, 103/117 bajtów, pęknięty

Wersja funkcji (117 bajtów):

def e():
 a,b,s=20070763850923833476353301471991752,0b1010100010010011,""
 while a>0:
  s=chr(a%b)+s
  a//=b
 print s

Wersja programu (103 bajty):

a,b,s=20070763850923833476353301471991752,0b1010100010010011,""
while a>0:
 s=chr(a%b)+s
 a//=b
print s

To powinno Haystackdobrze wydrukować . Testowane na Python Fiddle .

Przy okazji jest to pierwsza próba.

Nie jestem pewien, czy wersja programu jest liczona jako fragment, więc umieściłem tutaj obie wersje.



2

Python 2.7.10 z Numpy 1.12.1, 208 209 bajtów ( pęknięty )

Wygląda na to, że w Numpy jest Igła i Stóg Siana! Oto stóg siana; sprawdź, czy możesz znaleźć Igłę. Mam nadzieję, że szukanie Igły sprawia tyle samo radości, co ja.

import numpy
print "".join([dir(numpy)[int(i)][1-0] for i in numpy.poly1d([-1*1433/252e1,-3232/1920.,4026./72/2/3.,613/(6*4.)*1,-4723./1.8e2,-9763/120.,-2689/(-1+5*17.),1+138*.4*2])(numpy.arange(-12/3,13%9))])

Wyprowadza zgodnie ze specyfikacją:

Haystack

Można repl.it .


Nie znaczy to, że to naprawdę ma znaczenie, ale to 209 bajtów, a nie 208
caird coinheringaahing


2

Java 8, 321 bajtów, pęknięty

v->{String h="Haystack";int x=-7;return x<0?h:new String(new java.math.BigInteger(new byte[]{(byte)((~-~-~-~-~-~-~-~-~-~1^-x++*x)+151),new Byte("2"+"1+\"0+\"".length()+(x=h.length()*4/x)+"-x-7")}).toByteArray())+(new StringBuffer("hidden".substring(++x%3^4,--x-x--).replaceFirst("dd","e"+(char)(x*211%+93))).reverse());}

Wypróbuj tutaj.

Bardziej czytelny:

v->{
  String h="Haystack";
  int x=-7;
  return x<0?
          h
         :
          new String(new java.math.BigInteger(new byte[]{
            (byte)((~-~-~-~-~-~-~-~-~-~1^-x++*x)+151),
            new Byte("2"+"1+\"0+\"".length()+(x=h.length()*4/x)+"-x-7")
          }).toByteArray())
          +(new StringBuffer("hidden".substring(++x%3^4,--x-x--)
             .replaceFirst("dd","e"+(char)(x*211%+93))
            ).reverse());
}

Nie jestem pewien, czy jest za długi / trudny. Z drugiej strony Java jest na początek dość długa, więc prawidłowe ukrycie „Igły” oczywiście znacznie zwiększa liczbę bajtów ..
Jeśli nikt jej nie złamie, ja ” Później dodam kilka porad spoiler.


1
TIO ma o jedną postać mniej, ale pękło w obu kierunkach.
jacobly

2

Rubinowy , 185 bajtów, cracked przez cab404

x='yGwztsPXhxDkBKlCYdFjQnpUROfoHvqmTgbaJSLcEiZrIAuMVNW'
s="n=x.to_i 36;x.bytjs.jach_cons(3){|a,b,c|n+=n*b%c;n*=a^b};puts n%8675309==1388649 ?'Njjdlj':'Haystack'"
eval s.tr ?j,s.size.chr

Wypróbuj online!

Spróbuję wymyślić coś podstępnego, ale na razie oto „prosty, ale wstrętny”.



1
to było fajne ^^
cab404

Dobra robota! Cieszę się, że brutalna siła nie była zbyt nudna.
histocrat

2

Brain-Flak , 188 bajtów ( pęknięty )

I dopiero zobaczyłem Funky Komputer Człowieka odpowiedź Jak pisał ten.

To jest trochę zaciemnione.

((((((((((()()()){}){}()){}){}()){}()))<({}[(()()()()){}])(([[]]({})<>)<>)>((()()())){}{})[()]))<[[]()]>((()){}){}((){}[][(<>){}<>])(<>){}(({}<>()[()])[(((()()()){}<[()]>)<(()){}>{}){}()])

Wypróbuj online!

Zamierzone rozwiązanie, 96 bajtów:

((((((((((()()()){}){}()){}){}()){}()))<({}[(()()()()){}])(([[]]({})<>)<>)>((()()())){}{})[()]))<[[]()]>((()){}){}((){}[][(<>){}<>])(<>){}(({}<>()[()])[(((()()()){}<[()]>)<(()){}>{}){}()])((((((((()()()){}){}){}()){}){}()<>)<>)(()()()){}())<>(((({}[()]<>)()))[(((()()()){}())()){}{}])
(((((((( (()()()){}){}  ){}){}()){}()))      ()()                   <>)     (()()()) {}    () ) <      >((()      ((){}    <>)     )   )  (({}        )[(((()()  ){}  ()  )  () {}   ){}()])

Wypróbuj online!


Masz na myśli nieco zaciemnione poza zwykłe zaciemnianie mózgu.
Gryphon - Przywróć Monikę

@Gryphon Tak, dodałem kilka dodatkowych bitów.
H.PWiz


2

T-SQL, 757 znaków PĘKNIĘTY

Przepraszam za usunięcie mojej poprzedniej odpowiedzi - edytowałem ją zbyt wiele razy, gdy zaciemniłem i nie chciałem nic zdradzać. :)

W każdym razie, kasował w SQL jest nieco trudne, chyba że chcesz robić szalone rzeczy, jak to , i nie było to, że zainwestował.

Ponadto bez wahania nie przepraszam za nazwanie moich zmiennych po Docie.

SQL Fiddle

create table a(l int,c int)
insert into a values (1,10),(2,1),(3,8),(4,0)
go
;CREATE FUNCTION b(@ varchar(max)) returns varchar(max) as
begin return 'char('+@+'),'''','end 
go
;CREATE FUNCTION h(@ varchar(max),@a varchar(max), @b varchar(max), @c varchar(max), @d varchar(max), @e varchar(max), @f varchar(max), @g varchar(max), @h varchar(max))
returns varchar(max) as 
begin
return replace(replace(replace(replace(@,@a,@b),@c,@d),@e,@f),@g,@h)
end
declare @x varchar(max),@ int=1,@y varchar(99)=''
,@D varchar(4)='Ha',@O varchar(4)='ys'
,@T varchar(3)='ta',@A varchar(4)='ck'
WHILE @<=4
BEGIN
set @y+=(SELECT dbo.b(c+100)from a where l=@)+' '
set @+=1
END
SELECT @x='select
left(dbo.h('''+@D+@O+@T+@A+''','+ left(@y,len(@y)-1) +'),char(56))'
execute(@x)

Jeśli jest to najłatwiejsza odpowiedź w tym wątku, prawdopodobnie masz rację. : P Trudno oszukać SQL.


czy „stóg siana” nie powinien być „stogiem siana”?
cab404

SQL nie radzi sobie z dużymi literami (chyba że wyraźnie zdefiniujesz schemat, którego ma używać dla liter). Zdecydowałem się nie. : P
phroureo,

1
@phroureo Specyfikacja wyraźnie stwierdza, że ​​musi być poprawnie pisana wielkimi literami.
LyricLy,

W porządku, poprawiłem powyższy kod (chociaż niekoniecznie naprawiłem SQL Fiddle, ponieważ działa tak samo).
phroureo,

1
cracked (przepraszam ...)
Robert Fraser

1

Ly , 40 bajtów, pęknięty

(78)"e"&p"Ha"s"yst"l"ck"&o(100)"l"l'&'o;

Wypróbuj online!

O, chłopcze, kolejne zgłoszenie Ly CNR. Te historycznie nie działały zbyt dobrze (prawdopodobnie ze względu na mnie, a nie język), ale zobaczymy, jak się to potoczy i dziś nie jest wyjątkiem.

Rozwiązanie:

(78)"e"sl(100)"l"l&o;, usuń za XXXXXX XXXXX XXXXXX X Xpomocą siedmiu wiodących spacji



1

Java , 345 bajtów, pęknięty

import java.util.*;interface Main{static void main(String[]args){Stack<Hay>s=new Stack();s.add(new Needle());for(int i=0;i<1000;i++)s.add(new Hay());System.out.println(s.get(s.indexOf(new Hay())+1).a);}}class Needle extends Hay{{a="Needle";}}class Hay{String a="Haystack";public boolean equals(Object o){return getClass().equals(o.getClass());}}

Wypróbuj online!

Naprawdę długie i prawdopodobnie łatwe do złamania, ale przynajmniej ma Stack<Hay>!


bardzo fajny! ale tak, dość łatwe do złamania.
Tytus

0

TI-BASIC, 119 bajtów (bezpieczny)

Dane wyjściowe przechowywane w Ans.

"TIBASIC→Str1
length(Ans→X
Str1
For(I,X,2(7-4not(X-1
Ans+sub("ACDEHKLNSTY",inString("ABCDEFGHIJK",sub("KCBADAEDJDHIGF",1+remainder(11I-1,14),1)),1
End
sub(Ans,1+X,length(Ans)-X

Rozwiązanie

Usuń postacie z, Str1aby uzyskać długość 1.

"C→Str1
length(Ans→X
Str1
For(I,X,2(7-4not(X-1
Ans+sub("ACDEHKLNSTY",inString("ABCDEFGHIJK",sub("KCBADAEDJDHIGF",1+remainder(11I-1,14),1)),1
End
sub(Ans,1+X,length(Ans)-X


0

Aceto , 154 bajtów (bezpieczny)

              27 \ 'dNU QJi9MLJ € {{x (}] J {'! O∑ € xiDQxsJ (] sicpicp1.2sJJicp90I.2 + D / edxi - '> xd80J0IJicx'NIx5sJsJidcpIcpL7sssJicpei7 + UJJicpx7 + UJJicpx   

Wypróbuj online!

'N'ed'd80J0IJic'eUpppppp Wypróbuj online!

Explanation:
<space>*2 - Two spaces for the hilbert curve to work right
'N pushes 'N' onto the stack
'e pushes 'e'
d duplicates it
'd pushes d
80 pushes 8, 0
J concats top two values
0I pushes 0, pops, increments, pushes back on, net effect: pushes 1
J concats to '108'
i converts to integer
c pops and pushes ascii equiv on stack
'e pushes 'e' (again)
U reverses the stack
and the p's print out the stack
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.