Samanlıkta İğne Bul (Soyguncular)


18

Bu bir mücadelesinin bir parçası . Polisler için buraya gidin .

Soyguncuların Mücadelesi

Bir polisin cevabı o verir, böylece, Haystack programından herhangi bir karakter alt kümesini kaldırarak kırık olabilir Needleyerine Haystack(hala aynı dilde geçerli bir gönderme olurken). Yukarıdaki kısıtlamalar ile sizinki geçerli olduğu sürece, amaçlanan polisle aynı çözümü bulmak zorunda değilsiniz.

Bunu yönetirseniz, polisin cevabına bağlantı vererek çözüme bir cevap gönderin ve polisin cevabına kendinize geri bağlantı veren bir yorum bırakın.

En çok polise cevap veren hırsız kazanır. Bağlar, çatlamış polis cevaplarının boyutlarının toplamı ile kırılır (daha uzun gönderimleri çatlatan hırsız lehine).

Her polis yanıtı sadece bir kez kırılabilir ve tabii ki kendi cevabınızı kırmanıza izin verilmez. Polisin cevabı, çatlamadan önce veya sonra geçersiz görünüyorsa, soyguncu puanına dahil edilmez.

Örnekler

Farklı dillerde birkaç basit örnek:

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]

Kaldırılan karakterlerin alt kümesinin bitişik olması gerekmediğini unutmayın.


Soyguncu kullanımına hashing, encryption or random number generationizin verilirse (küçük olasılıkla olsa da)
l4m2

Yanıtlar:


11

JavaScript, 85 bayt (ES6)

Çatlaklar Arnauld cevabı

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

"İğne" demosu

açıklama

Orijinal fonksiyon:

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

hangi daha okunabilir:

f = (k=b=x=35) => {
    if (x--) {
        return f(k*74837258394056219&268435455);
    } else {
        if (k&2) {
            return 'N'+(k^124038877).toString(b);
        } else {
            return 'Haystack';
        }
    }
}

Not zaman o n=21625674, o zaman n.toString(35)olduğunu 'eedle'.

Girişteki 35 muhtemelen bir alt kümeye değiştirilemez (çünkü tüm 'del' harflerini içerecek kadar büyük bir taban istiyoruz, bu yüzden en az 22 olan bir tabana ihtiyacımız var). Sayılar değiştirmeye Yani vardır 74837258394056219, 268435455ve 124038877. Bunları, her biri orijinal sayıların basamaklarının bir alt kümesiyle oluşturulan a, b, c sayılarıyla değiştirmek istiyoruz, böylece işlev 35 g(k) = (k * a & b)ile başlayan k=35ve yinelenen ve daha sonra c ile XORed21625674 .

Bu biri için, uzunluk (maksimum küçük olduğundan, biraz düşünerek auzunluğu 17 vardır, bve cuzunluğu 9) sahip olması, sadece kaba kuvvet kullanılan :-) Yazılan bir C ++ programı tüm olası sayı üretmek için a, b, calt kümeleri olarak oluşturulan orijinal sayılar, yinelerler tüm aracılığıyla ave bve çek gerekli olmadığını csette oldu. Yaklaşık 15 saniye içinde çalışır ve sadece çıkış ise a=4853461, b=268435455, c=12408877(sayı dışarı dönüşler bdeğiştirilmesi gerekmez). Bu işlevi tersine çevirmenin daha akıllı bir yolu olup olmadığından emin değilim.



5

Brain-Flak , 96 bayt

Funky bilgisayar adam cevap çatlaklar .

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

Çevrimiçi deneyin!

Bu eğlenceli bir mücadeleydi.

Dönüştürür başında -24 ykadar aorijinal şimdi dönüştürmek için kullanılır eiçin Mdaha sonra dönüştürülür, Ntamamını uç döngü değiştirerek yerine ()). İlk itilen harf k, eona 6 ekleyen bir push-pop kaldırılarak değiştirildi . Geri kalanı çoğunlukla yol boyunca, mizahi yanlış adımlarla (çıktısı olan bir program dahil) düştü Meddle.

İki programın karşılaştırılması:

Haystack: ([((((()()())){}){}){}](()([()](()({}([((((()()()){})))[]])[]({}({})[{}]()({}((()(({}){}){}){}){}())))[][][][][][]))[]))(((()[]){}){({}[()()])}{})
Needle:   ([((((()()())){}){}){}](() [()]   ({}([ (((()()()){})) []])[]({}({}     ()(  ((()(({}){}){}){}){}())))[]              ))   ()  )

Bunun gibi son vereceği emindim bu
H.PWiz

Bu kesinlikle işe yarıyor , ama kendimi bir şekilde N78 yerine 77 olarak ikna etmiştim, bu yüzden onu yakalamadım.
Nitrodon

Seninki zaten daha kısadır.
H.PWiz

İlginç bir çözüm! Görmek isterseniz orijinal çözümüm için hedeflediğim çözümü ekledim.
Rock Garf Hunter Post

5

Haskell

Çatlaklar @ Laikoni'nin cevabı .

s=map;hay=zipWith;a=head;h=s a.(hay(scanr id).s a<*>s(succ<$))$words"Haysta ayst ackH ays k ayst"

Çevrimiçi deneyin!

Orijinal kod:

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"

kaldırılan karakterlerin alt çizgi ile değiştirilmesi:

___s=map;hay=zipWith;__a__=head;h=s______
 _a_.(hay__(s__c_an_______r id).s____ _a_
<*>___s(su_____c________c_<$____))__$words
 "Haysta__ _ayst ackH ays__ _k_ ayst____"

Nasıl Needleoluşturulur: kodun sonundaki dize kelimelere bölünür. Her kelimenin ilk karakteri, kelimede karakterler olduğu kadar artar, örn. Haysta-> Hartı 6 karakter -> N.


5

Altıgen , 17 bayt, H.PWiz

], N, CI: e ;; (\ s;.. _

Çevrimiçi deneyin!

Orijinal ile karşılaştırma:

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

Görselleştirme:

  ] ; N
 @ c l ;
e ; ; ( \
 . s . ;
  _ . .

açıklama

Bonus işaretleri - 6 IP'nin tümünü ve hücrelerden biri hariç tümünü kullanır!

Coloured paths

IP # 0, siyah yol boyunca sağa doğru ilerleyerek başlar ].
Kırmızı yol boyunca başları, baskı IP # 1'e Sonra geçiş Nile N;sonra tekrar içine sarılması ]tekrar.
Daha sonra mavi yol boyunca ilerleyen e, mevcut bellek hücresinde saklanan, daha sonra yeşil yol boyunca ilerleyen , bellek hücresini baskılayan, azaltan (bir yansımayla \) yürüten IP # 2'ye geçiyoruz;;(;eee için ddaha sonra baskı d.
IP , geçerli bellek hücresinde Nl;sehangi baskıların lve depolamanın yürütüldüğü turuncu yol boyunca devam eder e. Kahverengi yol boyunca devam eder e,;. Bu noktaya kadar zaten baskı yaptıkNeedle, yani geri kalanı sadece bitiyor. IP csonra depolar ]. Daha sonra, mavi yol boyunca ilerleyen, vurarak , sıçrayan IP # 3'e geçiyoruz . Daha sonra yeşil yol boyunca ilerleyen, zıplayan ve sonra da IP # 4'e .
Coloured paths 2
\_]
_\ve dallanma ]( cpozitif olduğu için).
Son olarak, esaklanan ve daha sonra çıkan 5 numaralı IP'ye geçiyoruz.@


Güzel! Amaçlanan çözüm buydu.
H.PWiz

4

Python 2 , 123 bayt

Çatlaklar cevabı agtoever

import numpy
print "".join([dir(numpy)[int(i)][0] for i in numpy.poly1d([-143/2e1,-31,14,131,61,184])(numpy.arange(-3,3))])

repl.it

karşılaştırma:

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))])
print "".join([dir(numpy)[int(i)][  0] for i in numpy.poly1d([-1  43 /2  e1,-3    1    ,               1     4    ,       1         3 1   ,  6     1       ,1   8  4  ])(numpy.arange(-   3, 3  ))])

Basılı çözümler buldum Meedleve Needlfher harfle başlayan numpy sembollerinin endekslerinin medyanına bir polinom yerleştirerek çok eğlendim Needle. Daha sonra orijinal programın alt kümeleriyle benzer katsayıları elle bulmaya çalıştım, ancak geçerli bir çözüm bulmak için kaba zorlamaya başvurmak zorunda kaldım.


Vaov! İyi iş! Yakında çatlamasını beklemiyordum.
agtoever

Başlangıçta, herhangi bir repl ortamında bulamadığım numpy 1.13'e dayanan meydan okumayı geliştirdim, bu yüzden numpy 1.12 ... ;-) için
agtoever yazdım

2

Javascript, 91 bayt

_=>(+{}+[])[+[]]+([][[]]+[])[3]+([][[]]+[])[3]+([][[]]+[])[2]+(![]+['t'])[2]+([][[]]+[])[3]

Bunu çatlatır . Aslında eğlenceliydi.


2

Jöle , 14 bayt

Çatlaklar Jonathan Allen'nin Cevap

“¡#ɦṢÞɠ»ḟ“¡pṄ»

Çevrimiçi deneyin!

karşılaştırma:

“¿ọ⁽ṅ*FỊ⁼g£¡#!ʋzoɦṪ£ṢÞḲÐɠ`”m3⁾“»jVḟ“¡!pṄ»
“          ¡#    ɦ  ṢÞ  ɠ      »  ḟ“¡ pṄ»

Kullandığım œckullanılan tam dizeleri, çeşitli alt kümeleri arasında yineleme için tr -dher olası filtre için ve grepİğne ed. Cevapta ilk dizede kullanılan karakterlerin hiçbirinin kullanılmadığı varsayımıyla 15 saniyenin altında bir cevap bulabilir.


Tam olarak aklımda olan Nebbed + rublehiçbiri olmadan rub.
Jonathan Allan


2

Java (OpenJDK 8), 191 bayt

Luke Steven'ın cevabını çatlatır

String d(){int h=3905055,m=55,s=15443;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;}

Çevrimiçi deneyin!

Silinen karakter sayısı:

int h=3609000-5055+911,m=557558,s=15441301-157*10000
       xx  xxx    xxxx     xxxx       x xxxxxxxxxxxx

Bu , hangi büyüleri ddeğerlendirir .078101101100108101Needle


2

Yakut , 149 bayt

Bunu çatlatır: /codegolf//a/144790/74216

Modül oldukça küçüktü, bu yüzden çok iş parçacıklı bir doğum günü şeyi yazdım ve en iyisini umdum.

Düzenleme: Ve bundan sonra daha kısa bir cevap buldu.

x='hxDKFQOoqJLuVNW'
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

Çevrimiçi deneyin!

değişiklikler:

x='yGwztsPXhxDkBKlCYdFjQnpUROfoHvqmTgbaJSLcEiZrIAuMVNW'
x='        hxD  K    F Q    O o  q     J L       u VNW'

# and here's some more variants for extra pwnage:
x=' G  tsPx     KlCYd  Qn U   o v mT  a SLc    I u  NW'
x='  w  s    D BKl  dF QnpU O        ba SLcEiZrI  MV  '
x='yGwz s Xh Dk K C  F  npU O  Hvq   b   L    rIAu V W'

2

dc , 34 bayt

93 9 2*+432212+ 47*4242160 7 2++*P

Bunu çatlatır . TIO .

Haystack (5215583380252484459) ve Needle'ın (86197399743589) sayısal temsilini alarak başladım. Daha sonra, 47 * 432323 * 4242169 olan ikincisinin çarpanlarına ayrılmasını sağladım. Bundan, bu sayıları yeniden yapılandırmak oldukça kolaydı.

Kullanılan karakterleri işaretleme:

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
  XXX  XXX   XX  X X XX X X     X     XXXX                              X   X      XX X                    X                XXXXX     X     XX     X

İyi oyun! bu kadar çok sayı koymak kötü bir fikir olduğunu biliyordum)
cab404

@ cab404 Sadece merak ediyorum: 86197399743589'a ulaşmak için çok farklı bir hesaplama kullandınız mı?
agtoever


Vay. Bu olağanüstü. Bu başka bir codegolf sorusu olabilir: bir ifadedeki karakterleri silerek belirli bir sonuç elde etmek için kaç yol var ...
agtoever

genellikle tüm olasılıkları hesaplamak ve sadece bu sayıda olduğunu kanıtlamak için bazı ciddi matematik gerektirir sanırım)
cab404 11:17

2

Altıgen , 19 bayt, Martin Ender

[@;(...e<l.a;./;N>;

Çevrimiçi deneyin!

Orijinal ile karşılaştırma

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

Katlanmamış kod

  [ @ ;
 ( . . .
e < l . a
 ; . / ;
  N > ;

Yani, Hexagony'de hiç bir şey yazmadım, ama sadece 37 baytla çatlamış olabileceğimi düşündüm. Martin, umarım bunu anlamaya çalışmak için çok zaman harcadığımı biliyorsun . :)

Yanlış olabilir, ama bu kod ne yaptığını düşünüyorum açıklayacağım :

Program ile başlar [ve otomatik olarak IP # 5'e geçer. Bu IP, batı köşesinde başlar ve bir [kez daha ilerleyerek IP # 4'e taşınır. Buradan, yürütür N;egüneydoğu köşesinde ve çalıştırır, sonra kafaları ;, diğeri için sağa sıçramalar ;ardından sarar (akımını azaltır hangi ebir etmek d. Daha sonra (bir sargı ile) devam ...;.eder lve daha sonra[ IP # 3'e geçerek sonuncuya geçer. O çalıştırır ;, >için kuzeybatısındaki yönlendirmeler .sonra <isabet batıya yönlendirmeler e, sancı ;ve üzerinde sonlandırma@ .

Ayrıntılı sürüm

İğne programı için normal bir altıgen boyutu kullandığınız için çok mutluyum; Herhangi bir sayıda karakteri kaldırabileceğinizi .ve sonunda altıgeni otomatik olarak s ile dolduracağını fark ettiğimde, boyut 19 programı (uzunluk-3 tarafı altıgen için) kontrol ediyordum , bu da çatlamayı daha da zorlaştıracaktı. Olduğu gibi, Hexagony bu meydan okuma için kötü bir dildir, çünkü (çoğunlukla) kaldırılan herhangi bir karakter, programın tüm yürütme yolunu değiştirir. Olduğu söyleniyor, ben sonunda kaba kaba zorla sonuçlansa bile, bu gelip çalışmaktan zevk. :)


Eğer bir şeyleri mahvetmiş / özlemişsem, lütfen bana bildirin.
Jo.

İyi iş, bu oldukça doğru görünüyor. Bunu haftasonu orjinali ile kıyaslayacağım.
Martin Ender

1

Java (OpenJDK 8) , 151 bayt

Çatlaklar Kevin Cruijssen en Cevap

v->{String h="H";int x=7;return new String(new byte[]{(byte)((-~-~-~-~-~-~1^x++*x)+15),new Byte("10"+h.length())})+new StringBuffer("elde").reverse();}

Çevrimiçi deneyin!

karşılaştırma:

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());}
v->{String h="H       ";int x= 7;return       new String(                         new byte[]{(byte)(( -~-~-~-~-~-~      1^ x++*x)+15 ),new Byte("    1   0  "          +   h.length()    )        })               + new StringBuffer("    e                                 l          d    e"      )             .reverse() ;}

Son bölümün amaçlanmadığını hissediyorum.


Lol ok, bu "edle" yapmanın akıllıca bir yolu. I uğraşırsanız yaparken zaten ben biraz fazla yaptım düşünce ve çözüm yükleri mümkün olacaktır ..;) amaçlanan çözüm oldu: 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());}(sadece bayt dizisi yeterlidir beri BigInteger yer verdik neden bilmiyorum ..) , ama seninkini daha çok seviyorum .. :)
Kevin Cruijssen

1

Brain-Flak , 102 bayt

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

Çatlaklar H.PWiz cevabı .

Çevrimiçi deneyin!

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


1

Java - Johnathan S.

import java.util.*;interface Main{static void main(String[]args){Stack<Hay>s=new Stack();s.add(new Needle());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());}}

TiO

Sadece Saman ekleyen halkayı çıkarın ve yığın üzerinde iğne dışında hiçbir şey kalmayacak.


Ha, güzel olan - Aslında sadece döngüyü kaldırmayı düşünmemiştim! equalsYöntemin kaldırılması da aynı şekilde işe yarar.
Jonathan


0

Phroureo tarafından T-SQL , 757 bayt

seleCT 'Needle'

Her nasılsa, bunun amaçlanan çözüm olduğunu düşünmüyorum. Çevresindeki karakterleri kullanır {}:

create table a(l int,c int)
in{se}rt into a va{l}u{e}s (1,10),(2,1),(3,8),(4,0)
go
;CREATE FUN{CT}ION b(@ varchar(max)) returns varchar(max) as
begin return{ '}char('+@+'),'''','end 
go
;CREATE FU{N}CTION 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))
r{e}turns varchar(max) as 
b{e}gin
return replace(replace(replace(replace(@,@a,@b),@c,@d),@e,@f),@g,@h)
end
{d}ec{l}ar{e} @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)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.