Sembunyikan Jarum di Tumpukan Jerami (Polisi)


38

Ini adalah bagian dari tantangan . Buka di sini untuk bagian perampok.

Tantangan Polisi

Anda harus menulis sebuah program atau fungsi dalam bahasa pilihan Anda, yang menghasilkan string Haystack . Namun, harus dimungkinkan untuk menghapus beberapa subset karakter dari program Anda (tanpa menata ulang sisanya), sehingga string yang dihasilkan juga merupakan program yang valid dalam bahasa yang sama, yang mencetak Needlesebagai gantinya. Kedua program / fungsi secara opsional dapat mencetak satu baris baru (tidak tergantung satu sama lain), tetapi tidak ada yang lain. Output case-sensitive dan harus mengikuti casing yang disediakan.

Tujuan Anda, tentu saja, adalah menyembunyikan "jarum" dengan sangat baik. Tapi catatan bahwa kiriman Anda dapat retak dengan setiap solusi yang valid, bukan hanya satu yang Anda inginkan.

Harap sertakan dalam jawaban Anda:

  • Bahasa (dan versi jika relevan) dari kiriman Anda.
  • Ukuran program tumpukan jerami dalam byte.
  • Program tumpukan jerami itu sendiri.
  • Metode output jika bukan STDOUT.
  • Jika memungkinkan, tautan ke juru bahasa / kompiler online untuk bahasa pilihan Anda.

Kiriman Anda bisa berupa program atau fungsi, tetapi bukan cuplikan dan Anda tidak boleh menganggap lingkungan REPL. Anda tidak boleh mengambil input apa pun, dan Anda dapat mengeluarkan melalui STDOUT, nilai pengembalian fungsi atau parameter fungsi (keluar).

Kedua program / fungsi harus selesai dalam waktu 5 detik pada mesin desktop yang masuk akal dan harus deterministik. Anda tidak boleh menggunakan built-in untuk hashing, enkripsi, atau pembuatan angka acak (bahkan jika Anda menyemai generator nomor acak ke nilai tetap).

Untuk kepentingan keadilan, harus ada juru bahasa atau kompiler yang tersedia secara bebas untuk bahasa pilihan Anda.

Sebuah jawaban retak jika program Jarum ditemukan. Jika jawaban Anda belum retak selama 7 hari, Anda dapat mengungkapkan program Needle yang dimaksud dalam jawaban Anda, yang membuat kiriman Anda aman. Selama Anda tidak mengungkapkan solusi Anda, itu mungkin masih bisa dipecahkan oleh perampok, bahkan jika 7 hari telah berlalu. Brankas terpendek tumpukan jerami (diukur dalam byte) menang.

Contohnya

Berikut adalah beberapa contoh sederhana dalam berbagai bahasa:

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]

Perhatikan bahwa subset dari karakter yang dihapus tidak harus bersebelahan.

Pengajuan Tidak Rusak

<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
Terkait (Perbedaan utama adalah bahwa seseorang memiliki program yang menerapkan urutan OEIS dan memungkinkan program yang retak untuk menghasilkan setiap urutan OEIS yang berbeda, yang membuatnya jauh lebih sulit bagi polisi untuk menjaga dari celah yang tidak disengaja. Ini juga memungkinkan perampok untuk mencuri celah dari yang lain perampok dengan mencari solusi yang lebih pendek.)
Martin Ender

Saya akan melakukan ini di Haystack tetapi tidak memiliki dokumentasi dan saya cbb melihat melalui kode :(
Okx


1
Cuplikan tumpukan mendapatkan panjang yang salah untuk jawaban ini
mbomb007

1
@ kamoroso94 Ya, tetapi itu berarti Anda dapat menghentikan program kandidat setelah 5 atau 6 detik, karena jika belum selesai mereka tidak dapat menjadi solusi yang Anda cari.
Martin Ender

Jawaban:


16

Tumpukan jerami , 84 byte, retak

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

Cobalah online!

Ini kelihatannya (bagi saya) agak berbelit-belit tetapi jika Anda menemukan subset yang tepat itu agak terlalu mudah ... oh well, hanya untuk memulai saja: P



1
@icrieverytim 1. oo keren keduanya mesin terbang unicode 2. yang saat ini lebih akurat secara ilmiah
HyperNeutrino

1. Ya, saya tahu, mereka terlihat sangat keren. : PI menemukannya di tambang emas ini di blok Unicode . Jangan heran jika mereka berakhir di halaman kode Neo. 2. TBH, yang lama tampak IMO lebih baik. : P
totallyhuman

1
@HyperNeutrino Mengapa Anda tertarik pada benzene?
Michthan

3
@Michthan Menimbang bahwa saya adalah neutrino, itu adalah pertanyaan yang bagus, tapi saya tidak tahu: P
HyperNeutrino

12

Hexagony , 37 byte

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

Cobalah online!

Hanya entri Hexagony wajib saya ...

Untuk kenyamanan, berikut adalah kode yang tidak dilipat:

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

Bagaimana ini bekerja:

Program dimulai dengan H, lalu kita pindah ke IP # 5. IP ini dimulai di sudut barat, memantul dan membungkus sambil mengeksekusi (berlaku) ;a;y;s;(jadi kami sudah mencetak Hays). Kemudian sakan bertambah menjadi toleh )dan dicetak, lalu kami melewati Ne...(csebelum sampai ke a;c;(masih memantul sekitar bagian kecil dari segi enam). Program ini hits_ , mencerminkan melalui \untuk lyang akan dikurangi untuk koleh (, yang melewati lain \sebelum dicetak dan program berakhir pada yang@ .

Versi verbal


3
Bahasa ini masih membuatku bingung. Aku mencintaimu karenanya.
phroureo

Otak saya meledak sekarang. Saya mencoba untuk mencari tahu ini cukup untuk memecahkan kode, tetapi YEESH man. Pria bengkok macam apa yang membuat ini ??
phroureo

@phroureo ...> _>
Martin Ender

Setelah jawaban Anda aman, bisakah Anda memberi saya selangkah demi selangkah tentang apa yang dilakukannya? (Atau jika Anda sudah memiliki langkah-demi-langkah di suatu tempat yang serupa, tunjukkan saya di sana?)
phroureo

1
@ phroureo Saya tidak keberatan menambahkan penjelasan tentang program polisi sebelum aman, dan saya tidak berpikir saya akan mengklaimnya aman (saya tidak terlalu tertarik untuk memenangkan tantangan saya sendiri dengan kiriman yang saya masukkan nyaris upaya di). Saya akan mencoba menambahkan penjelasan besok. Sementara itu, saya senang membantu Anda dengan Hexagony di chatroom esolangs .
Martin Ender

10

Brain-Flak , 146 byte ( Retak )

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

Cobalah online!

Solusi yang dimaksudkan, 80 byte

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


8

JavaScript, 95 byte (ES6), Retak

Fungsi mengembalikan string.

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

Demo "tumpukan jerami"


Teka-teki yang sangat bagus. Cracked
ShreevatsaR

8

Haskell , 168 bytes ( 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"

Cobalah online! Mengevaluasi pengidentifikasi hmengembalikan string "Haystack", setelah beberapa penghapusan hmenghasilkan "Needle".


1
Retak . Cukup menyenangkan untuk dipecahkan.
nimi


4

Hexagony , 32 byte.Retak

Saya tidak bisa menyelesaikan masalah Martin , jadi saya memposting sendiri.

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

Cobalah online!

Ini diformat:

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

Tujuan saya dengan ini adalah untuk kedua solusi menggunakan IP sebanyak mungkin, saya mendapat 6 untuk Needle dan hanya 5 untuk Haystack .




3

Java (OpenJDK 8) , 226 217 byte ( Retak )

Golf kode pertama kali, mungkin sangat mudah tapi itu tantangan yang menyenangkan!

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;}

Cobalah online!


TIO Anda tidak berfungsi. Anda mungkin ingin mengubah return new Main().d();ke System.out.print(new Main().d());dalam metode utama.
Kevin Cruijssen

@KevinCruijssen Terima kasih atas semua yang sudah ada!
Luke Stevens

1

3

dc , 148 byte ( Cracked )

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

Cobalah online!

Ini agak sederhana, tapi saya harap setidaknya akan sedikit menyenangkan untuk diselesaikan: з



2

JavaScript, 119 byte (ES6), Retak

Fungsi mengembalikan string. Cukup lama dan tidak terlalu sulit, tapi semoga menyenangkan.

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

Demo "tumpukan jerami"


Retak . Jsfuck github README.md banyak membantu.
kata ganti saya adalah monicareinstate

2

Python 2.7.2, 103/117 byte, Retak

Versi Fungsi (117 byte):

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

Versi Program (103 byte):

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

Ini harus dicetak dengan Haystackbaik. Diuji pada Python Fiddle .

Btw ini adalah upaya pertama.

Tidak yakin apakah versi program dihitung sebagai cuplikan, jadi saya taruh kedua versi di sini.



2

Python 2.7.10 dengan Numpy 1.12.1, 208 209 byte ( retak )

Tampaknya ada Jarum dan tumpukan jerami di Numpy! Ini tumpukan jerami; lihat apakah Anda dapat menemukan Jarum. Saya harap Anda bersenang-senang mencari Jarum seperti saya menyembunyikannya.

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))])

Ini output seperti yang ditentukan:

Haystack

Anda bisa menggantinya .


Bukan berarti itu penting, tapi ini 209 byte, bukan 208
caird coinheringaahing


2

Java 8, 321 byte, Retak

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());}

Coba di sini.

Lebih mudah dibaca:

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());
}

Tidak yakin apakah itu terlalu lama / sulit .. Kemudian lagi, Java secara umum cukup panjang untuk memulai, jadi menyembunyikan 'Jarum' dengan benar tentu saja meningkatkan byte-count cukup sedikit ..
Jika tidak ada yang retak, saya ' Saya akan menambahkan beberapa tip-spoiler nanti.


1
TIO memiliki satu karakter lebih sedikit, tetapi retak baik.
jacobly

2

Ruby , 185 byte, dipecahkan oleh 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

Cobalah online!

Saya akan mencoba untuk datang dengan sesuatu yang licik, tetapi untuk sekarang ini adalah mencoba di "sederhana tetapi menjengkelkan."



1
itu menyenangkan ^^
cab404

Sudah selesai dilakukan dengan baik! Senang kekuatan kasar tidak terlalu membosankan.
histokrat

2

Brain-Flak , 188 byte ( Retak )

Saya baru saja melihat jawaban Funky Computer Man Ketika saya memposting ini.

Ini agak dikaburkan.

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

Cobalah online!

Solusi yang dimaksudkan, 96 byte:

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

Cobalah online!


Maksud Anda agak dikaburkan di luar kebingungan Otak-Flak yang normal.
Gryphon - Reinstate Monica

@Gryphon Ya, saya menambahkan beberapa bit tambahan.
H.PWiz


2

T-SQL, 757 karakter retak

Permintaan maaf karena menghapus jawaban saya sebelumnya - saya mengeditnya terlalu sering ketika saya mengaburkan, dan tidak mau memberikan apa pun. :)

Bagaimanapun, mengaburkan dalam SQL agak sulit, kecuali jika Anda ingin melakukan hal-hal gila seperti ini , dan saya tidak berinvestasi.

Juga, saya tanpa malu-malu tidak meminta maaf karena memberi nama variabel saya setelah Dota.

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)

Jika ini adalah jawaban termudah di utas ini, Anda mungkin benar. : P Sulit untuk mengelabui SQL.


tidakkah 'tumpukan jerami' menjadi 'tumpukan jerami'?
cab404

SQL tidak menangani kapitalisasi dengan sangat baik (kecuali Anda secara khusus mendefinisikan skema yang seharusnya digunakan untuk huruf-huruf). Saya memilih untuk tidak. : P
phroureo

1
@ phroureo Spec secara eksplisit menyatakan bahwa ia harus ditulis dengan huruf besar dengan benar.
LyricLy

Baiklah, saya memperbaiki kode di atas (walaupun saya belum tentu memperbaiki SQL Fiddle, karena kerjanya sama).
phroureo

1
retak (Maafkan aku ...)
Robert Fraser

1

Ly , 40 byte, retak

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

Cobalah online!

Oh boy, pengajuan Ly CNR lain. Ini tidak berfungsi dengan baik secara historis (mungkin karena saya dan bukan bahasa), tetapi kita akan melihat bagaimana ini tarif dan hari ini tidak terkecuali.

Larutan:

(78)"e"sl(100)"l"l&o;, hapus XXXXXX XXXXX XXXXXX X Xdengan tujuh spasi utama



1

Java , 345 byte, Retak

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());}}

Cobalah online!

Sangat panjang dan mungkin mudah retak, tapi setidaknya ada Stack<Hay>!


sangat bagus! tapi ya, cukup mudah retak.
Titus

0

TI-BASIC, 119 byte (Aman)

Output disimpan di 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

Larutan

Hapus karakter dari Str1untuk memberi panjang 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

PHP, 44 byte, Retak

cukup mudah retak; tapi aku suka itu.

for($i=~1;$c=H_aNyesetdalcek[$i+=2];)echo$c;

Jalankan dengan -nratau coba online .


0

Aceto , 154 byte (Aman)

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

Cobalah online!

'N'ed'd80J0IJic'eUpppppp Cobalah secara 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.