यह लुटेरों का धागा है। पुलिस का धागा यहाँ है ।
आपकी चुनौती पुलिस के थ्रेड से अनियोजित सबमिशन लेने की है और मूल अप्रतिबंधित प्रोग्राम को खोजने का प्रयास करना है। जब आपने उनका कोड क्रैक किया है तो कृपया पुलिस के सबमिशन पर टिप्पणी करें।
यह लुटेरों का धागा है। पुलिस का धागा यहाँ है ।
आपकी चुनौती पुलिस के थ्रेड से अनियोजित सबमिशन लेने की है और मूल अप्रतिबंधित प्रोग्राम को खोजने का प्रयास करना है। जब आपने उनका कोड क्रैक किया है तो कृपया पुलिस के सबमिशन पर टिप्पणी करें।
जवाबों:
>>>>>+>,[>++++++[-<-------->]<+>,]<[-[█<█<]++++++++++<]>[-]>>██[>█>>█>]+[<]<<[<]>█<<+>>[>]█>[>]█+[<]<<[<]>-█>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<█]>]>[>]<[[█]<]<<<<<[<]<<██>>[>]<█[->+<]<█>>[>]<[-[[<]<]++++++++++<]>███>[<<]>[[[>]>████[<]<[-[[<]<]++++++++++<]>[-]>[█<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>███████>[[█]>]<]<[[<]<]<[█]>]>>>[[>]<->>]]>[[>]>]<<[[[█]<]<]<<<[█]<<█>>>[>]█[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
>>>>>+>,[>++++++[-<-------->]<+>,]<[-[[<]<]++++++++++<]>[-]>>[[[>]>>[>]+[<]<<[<]>[<<+>>[>]>>[>]<+[<]<<[<]>-]>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]<]<<<<<[<]<<[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>[[-]+>]>[[>]>]<]<[[<]<]<[<]>]>>>[[>]<->>]]>[[>]>]<<[[[-]<]<]<<<[<]<<]>>>[>]<[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
यह एराटोस्थनीज की छलनी को लागू करता है।
प्रारंभिक >>>>>+>,[>++++++[-<-------->]<+>,]
अंक प्रत्येक अंक को एक वर्ण कोड के रूप में लेते हैं और 47 को घटाकर इसे 1-10 की सीमा में रखते हैं। यह संख्याओं के बीच अंतर को निरूपित करने के लिए 0 का सेल मान देता है। +>
इस खंड बलों की शुरुआत के निकट संख्या कम से कम दो अंक है, जो महत्वपूर्ण जल्दी ही हो जाएगा किया जाना है।
इसके बाद, और पहली चीज़ों में से एक जो मुझे लगा, वह है सेक्शन <[-[[<]<]++++++++++<]>[-]>
। कोड में यह कई बार दिखाई देता है, प्रत्येक में विभिन्न प्रकार के पुनर्विकास होते हैं, लेकिन यह अनुमान लगाना मुश्किल नहीं था कि उन सभी उदाहरणों में शायद एक ही कोड था। इस कोड को टेप पर दशमलव संख्या के बाईं ओर तीन शून्य की आवश्यकता होती है, और इसका प्रभाव संख्या को घटाना है। लूप के अंतिम पुनरावृत्ति मूल्य को संख्या के बचे 10 दो कोशिकाओं को डाल देगा, लेकिन [-]
इसे साफ करता है।
यदि दशमलव संख्या 0 थी, तो कोई बाहरी 10 नहीं बनाया गया है, और इसके द्वारा शून्य सेल [-]
सबसे महत्वपूर्ण अंक है। टेप हेड तब दूसरे सबसे महत्वपूर्ण अंक पर होता है (यही कारण है कि कम से कम दो अंक आवश्यक हैं)। इस स्निपेट के अधिकांश उदाहरणों का तुरंत पालन किया जाता है [<<]>
, जो सामान्य स्थितियों में नॉनज़रो सेल पर सिर रखता है और मूल दशमलव संख्या शून्य होने पर शून्य सेल होता है। ऐसा लगता है कि इस कार्यक्रम में, दशमलव का निरूपण n-1
निरूपित करने के लिए किया जाता है n
, ताकि विघटन करने के 0
बजाय घटने को पकड़ा जाए -1
।
अगला भाग टेप पर n-1 (n) से नीचे 0 (1) तक की संख्या डालता है:
>[ until the number reaches zero:
[ for each digit:
[>]>>[>]+[<]<<[<]> create a placeholder for the next copy
[ while the original value of the digit is nonzero:
<<+ add 1 to copy two cells left (to keep one copy)
>>[>]>>[>]<+ go to new copy and increment that cell
[<]<<[<]>- go back to original digit and decrement
] (this is effectively the same as [<+>>+<-] but with the cells at variable locations)
>] next digit
>>[->] cancel the placeholder 1s that were used for the new copy
<[-[[<]<]++++++++++<]>[-]>[<<]> decrement
]
>[>]<[[-]<] clean up the trash 10s on the tape while ending at a known location relative to the last number
अब, ये संख्याएं दो शून्य कोशिकाओं के साथ टेप पर हैं जो उन्हें अलग करती हैं। <<<<<[<]<<
हमें टेप पर दंडात्मक संख्या के अंतिम सेल में रखता है, जहां हम लूप के प्रत्येक पुनरावृत्ति में होंगे। लूप समाप्त हो जाता है जब मूल को छोड़कर सभी संख्याओं को संभाला जाता है।
लूप की शुरुआत में, हम वर्तमान संख्या (टेप पर पिछले एक अभी भी) को स्थानांतरित करने के लिए कमरे के लिए एक सेल अधिकार को स्थानांतरित करते हैं, और फिर आगे बढ़ते हैं और घटते हैं:
[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>
यदि यह गिरावट कम नहीं हुई, तो हम संख्या को एकात्मक में बदलने के लिए आगे बढ़ते हैं:
[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]
ध्यान दें कि यह स्निप एक अयोग्य है [
। नतीजतन, इस लूप के बाकी को छोड़ दिया जाता है यदि संख्या 0 (1 का प्रतिनिधित्व करती है) थी। यूरीरी में परिवर्तित होने के बाद, हम बचे हुए 10 को साफ करते हैं, हमारे साथ एकात्मक प्रतिनिधित्व को बाईं ओर खींचते हैं:
>[>]<[[-]>+[>]<-<[<]<]+
मैंने अभी तक इसे लिखने तक ध्यान नहीं दिया, लेकिन +
इस स्निपेट के अंत में एकल प्रतिनिधित्व द्वारा एकल 0. से अलग किया गया है। यह भी एकता प्रतिनिधित्व का एक हिस्सा है: अनुक्रम 1011...11
0 mod k का प्रतिनिधित्व करेगा। निम्नलिखित <<<<<[<]>
हमें संख्या की शुरुआत में k+1
एक नया लूप शुरू करता है।
आंतरिक लूप यहां सेल पर 1 के साथ टेप पर हर नंबर को तुरंत "सही" निशान लगाता है, और एक संख्या के रूप में यह निर्धारित करने के लिए एक घड़ी के रूप में यूरी प्रतिनिधित्व का उपयोग करता है k
।
[
[>]+ mark the current decimal number
[[>]>] move to end of decimal part of tape
>[>] move to 0 in middle of unary "clock"
>[-<+>] move the following 1 to the left if possible
<[<]< if a 1 was moved this will bring us back to a zero before the start of this "clock";
otherwise the looped move command doesn't move us at all and we are at the final 1
[ if there was no gap (happens every kth iteration):
>+[<]>>- reset to original position
<<<<<[[<]<]>> go to number that was just marked
[[-]+>] replace digits with 0s (cell value 1)
>[[>]>]< go back to where we would be without this conditional
]
<[[<]<]<[<]> return to first unmarked number
]
[[-]+>]
उस अनुभाग में अंतिम भाग मैं पता लगा था। इससे पहले, मैंने मान लिया था कि कार्यक्रम केवल परीक्षण प्रभाग कर रहा था, लेकिन मैं यह नहीं देख सकता था कि परिणाम का उपयोग कहां किया गया था।
यह लूप दूर बाईं संख्या के दो कोशिकाओं को समाप्त करता है, और >>>[[>]<->>]]
टेप पर रखे मार्करों को हटा देता है और हमें फिर से टेप के अंत तक ले जाता है। उसके बाद >[[>]>]<<[[[-]<]<]
या तो एकरी घड़ी को हटा देता है या, यदि यह पूरा खंड छोड़ दिया जाता है, तो बचा हुआ 10 एस। लूप इसकी शुरुआती स्थिति के साथ सेट है <<<[<]<<]
।
इसके बाद बस यह पढ़ना है कि क्या इनपुट नंबर को किसी बिंदु पर 1 से बदल दिया गया था:
>>>[>]<[-[[<]<]++++++++++<]>> do the check
[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>] conditionally print "not "
>[>]+[------->++<]>++.++.---------.++++.--------. unconditionally print "prime"
सौभाग्य से, वास्तविक उत्पादन को बिल्कुल भी कम नहीं किया गया था।
इस उत्तर को क्रैक करता है ।
f[x_]:=(p=ToString@Boole@PrimeQ@x;StringMatchQ[p&@@Infinity,RegularExpression@"(\
\n{}\b+, )?1"])
Boole
कुछ है PrimeQ
।
(({████){██[████)█>(({}))<>}<>{}███{}((██({}))█████{}]██)({}(<>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{})██[██()██(()█[()]██{}██}{}<>{})
(({})<>){([[]]{})<>(({}))<>}<>{}{}{{}(([]({}))[({}[{}])])({}(<>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{})}([][()])((){[()](<{}>)}{}<>{})
यह कार्यक्रम n-2 से 1 तक परीक्षण प्रभाग करता है, फिर 1 को आउटपुट करता है यदि और केवल यदि यह कारक 1 के साथ समाप्त होता है।
xxd
एनकोडिंग और अशक्त बाइट्स और अन्य डरावने सामानों के कारण प्रतिनिधित्व:
00000000: 31c0 b90a 0031 dbbe 8100 ac3c 0d74 3c3c 1....1.....<.t<<
00000010: 2075 f7ac 3c0d 7410 2c30 7c2f 3c09 7f2b u..<.t.,0|/<..+
00000020: 93f7 e193 01c3 ebeb 83fb 027c 19c6 0653 ...........|...S
00000030: 0159 b902 0039 d974 1289 d831 d2f7 f109 .Y...9.t...1....
00000040: d274 0341 ebef c606 5301 4eb4 09ba 5301 .t.A....S.N...S.
00000050: cd21 c341 0d0a 24 .!.A..$
पहले पुलिस वाले को मैन्युअल रूप से डिसाइड किया, फिर यासम का इस्तेमाल करके असेंबल किया। कुछ बाइट्स को कोन्सर जोशुआ द्वारा उपयोग किए जाने से दूषित हो गया है, लेकिन मैंने अभी-अभी उनका इलाज बचे हुए बाइट्स की तरह किया है। मैं उनकी वास्तविक सामग्री के बारे में 99.72% निश्चित हूं। हालांकि, अगर मैं गलत हूं, तो इसे ठीक करने में लंबा समय नहीं लेना चाहिए। का आनंद लें:
; A COM file is just a 16-bit flat binary
; loaded at 0x100 in some segment by DOS
org 0x100
bits 16
; Unsurprisingly, we start by converting
; the commandline string to a number. During
; the conversion, SI is a pointer to the
; string, CX is the base, and BX holds the
; partial result
parse_input:
; We'll read the input character by character
; into AL, but we need the resulting digit as
; a 16-bit number. Therefore, initialise AX to
; zero.
xor ax, ax
mov cx, 10
xor bx, bx
; When a DOS program is loaded, it's preceded
; in memory by the Program Segment Prefix,
; which holds the commandline arguments at
; offset 0x81, terminated by a carriage return
mov si, 0x81
.skip_prog_name:
; Load a character and move the pointer
lodsb
; If we find the terminator here, the program
; was not given any arguments.
cmp al, 13
je finish
cmp al, ' '
jne .skip_prog_name
.input_loop:
lodsb
cmp al, 13
je got_input
; If the ASCII value of the character is less
; than the one of '0', error out. Adjust the
; value in AL so that it holds the digit
; itself. This exploits the fact that the
; comparison instruction is just a subtraction
; that throws away the actual result.
sub al, '0'
jl finish
; If we have a value larger than 9, this
; character wasn't a digit.
cmp al, 9
jg finish
; Multiply the intermediate result by 10 and
; add the new digit to it.
xchg ax, bx
mul cx
xchg ax, bx
add bx, ax
jmp .input_loop
got_input:
; The loop below would go haywire when given a
; zero or a one, so make them a special case.
cmp bx, 2
jl composite
; Patch the output string to say that it's
; prime
mov byte[outstr], 'Y'
; BX = number being checked
; CX = loop counter, potential divisor of BX
mov cx, 2
.loop:
; If CX = BX, we looked everywhere and couldn't
; find a divisor, therefore the number is prime
cmp cx, bx
je finish
; DIV takes DX:AX as a 32-bit number for the
; dividend. We don't want nor need the extra
; precision, so we set DX to 0.
mov ax, bx
xor dx, dx
div cx
; DX now contains the remainder. To check if
; it's 0, we perform some noop operation, that
; happens to set the flags appropriately. AND
; and OR are commonly used for this purpose.
; Because of what's presumably a bug in the
; encoder used by Joshua, I do not yet know
; which for certain. However, I can make an
; educated guess. All other instances of the
; bug happened with a codepoint below 32.
; Moreover, no other bytes from that range
; occur in the code. Because an AND would be
; encoded as an exclamation mark, while OR -
; - as a tab, I am highly confident that Joshua
; used an OR.
or dx, dx
jz composite
; Increment the counter and loop again!
inc cx
jmp .loop
composite:
mov byte[outstr], 'N'
finish:
mov ah, 9
mov dx, outstr
int 0x21
ret
outstr:
db 'A', 13, 10, '$'
bx < 2
समग्र के बजाय खत्म करने के लिए गया था । FYI करें भ्रष्टाचार मूल रूप से X का उपयोग मुखौटा चरित्र के रूप में किया गया था और properly पर स्विच करते समय सब कुछ ठीक से तय नहीं किया गया था।
इस उत्तर को क्रैक करता है ।
25██26█966836897364918299█0█1█65849159233270█02█837903312854349029387313█ị██v
250126,9668368973649182994001,658491592332700020837903312854349029387313ṖịØJv
स्पष्टीकरण:
देखते हुए ị
और v
, मैं संख्याओं की एक सूची बनाने के बारे में सोचता हूं, ị
इसे कुछ सूची में ndex करता हूं और इसका मूल्यांकन करता हूं ।
जेली में primality की जाँच का "तुच्छ" तरीका है ÆP
, इसलिए (यदि यह सबमिशन क्रैक कर सकता है):
Æ
और P
।256
साथ अनुरूप मॉड्यूल होना चाहिए [14, 81]
।तो ... कार्यक्रम [14, 81, 49]
256 की शुरुआत के लिए सूची mod ( टीआईओ ) के अनुरूप है और Ṗ
अंतिम तत्व को पॉप करता है।
इस उत्तर को क्रैक करता है ।
e█ec█s█ █c "██████WyAkKHNoIC1jICJg█WNobyBabUZqZEc5eWZIUnlJQ2█2SnlBblhHNG5m██JoYVd3Z0t6SjhkMk1nTFhjSyB8YmFzZTY0IC1kYCIpIC1lcSAxIF0K█b█se6███d`"
exec sh -c "`echo WyAkKHNoIC1jICJgZWNobyBabUZqZEc5eWZIUnlJQ2M2SnlBblhHNG5mSFJoYVd3Z0t6SjhkMk1nTFhjSyB8YmFzZTY0IC1kYCIpIC1lcSAxIF0K|base64 -d`"
कोई ऑनलाइन कोशिश करो! इस बार कुछ मुद्दों की वजह से । हालाँकि आप jdoodle का उपयोग कर सकते हैं ।
एग्जिट कोड द्वारा रिटर्न। 0
(सफलता) प्राइम के लिए, 1
(त्रुटि) कम्पोजिट के लिए।
निष्पादित वास्तविक कमांड है
factor|tr ':' '\n'|tail +2|wc -w
base64
कमांड का उपयोग करना सीखें ।+
एक वैध आधार 64 चरित्र है।sh -c "`echo ...|base64 -d`"
वापस आवरण लागू करें ।tail +n
। जब मैंने काम पर मशीन में आपकी दरार की कोशिश की तो इसके बारे में शिकायत की। आपने सही कोड को अनमास्क किया ...:
@(x)eval([(str2num(cell2mat([cellstr(reshape('0█1███1█0█0█00',████))])')█'█')','(x)'])
@(x)eval([(str2num(cell2mat([cellstr(reshape('04141113040800',2,[]))])')+'e')','(x)'])
यह एक मजेदार था! मैंने एक-दो दिनों तक इसके लिए संघर्ष किया।
पहले सुराग पहचानने था eval([...,'(x)'])
एक निर्माण के लिए एक कॉल बनाने के रूप में isprime
के संयोजन के रूप में, समारोह ints
और char
परोक्ष को सरणी में परिवर्तित कर देंगे char
, इसलिए ...
जरूरत या तो होना करने के लिए isprime
या किसी सरणी के ASCII मूल्यों था isprime
, [105, 115, 112, 114, 105, 109, 101]
।
बाकी यह सिर्फ reshape
एक अज्ञात आयाम के साथ ले जाने के लिए प्रलेखन के माध्यम से नारेबाजी कर []
रहा था, हालांकि मुझे लगता है कि मैं reshape(...,2, 7)
एक ही बाइट गिनती में कर सकता था ।
का उपयोग +'e'
करने के बजाय (101) +'d'
(100) था एक अच्छा स्पर्श है कि मुझे एक और कुछ मिनट के लिए फेंक दिया जब तक मैंने देखा है पिछले अंक (सुलझे) थे 00
बजाय 01
, और है कि यह आसान था के साथ।
x=>{if(x<4)return(!0);for(y=x>>>Math.log10(p=████;--y-1;(p=x/y%1)████if(██&&(███))break████return(███)}
x=>{if(x<4)return(!0);for(y=x>>>Math.log10(p=2-1);--y-1;(p=x/y%1)){;;if(!p&&(1<2))break;;;}return(!!p)}
मुझे किसी भी तरह यह संदेह है कि आपके मन में वास्तव में क्या था, लेकिन यह काम करता है।
:1@v>~~:?1n;█$-1<█?=2:}*{█@:$@:
सेवा
:1@v>~~:?1n;
$-1</?=2:}*{%@:$@:
एक न्यूलाइन को नया रूप देने के चतुर प्रयोग ने मुझे थोड़ा भ्रमित कर दिया। हालांकि 1 या 2 के लिए काम नहीं लगता है।
^
, v
, /
, या \
दूसरे खाली के लिए वहां काम कर सकता था। काश अब मैं *
इसके बजाय कवर किया गया होता /
।
class X{public static void main(String[]args){System.out.println(new String(████████[Integer.parseInt(args[0])]).matches("█████████████")?███);}}
class X{public static void main(String[]args){System.out.println(new String(new char[Integer.parseInt(args[0])]).matches(".?|(..+?)\\1+")?0:1);}}
कोड RosettaCode से लिया गया है और SO पर समझाया गया है ।
p=lambda x,i=2:i>=x or(x%i and p(x,i+1))or 0
काम नहीं करता है जब x <2। or 0
साथ बदला जा सकता >0{2 spaces}
या यहाँ तक कि 4 स्थानों
X <2 समस्या के लिए, चूँकि i>=x
सामने रखा जाना चाहिए (अन्यथा एक अनंत लूप होगा), और i>=x
x <2 के तुरंत बाद रिटर्न सही हो जाता है, इसलिए मुझे लगता है कि इसके साथ कोई फ़िक्स नहीं है।
ÆPø“;;“»VOḣ2S⁵++3Ọ;”Pv
यह शायद इच्छित समाधान नहीं था।
ÆP
निर्मित में primality परीक्षण है।
ø
एक नई, निलादिक श्रृंखला बनाता है। चूँकि पिछला रिटर्न मान (का परिणाम ÆP
) कार्यक्षेत्र से बाहर हो जाता है, यह इसे स्पष्ट रूप से छापता है।
“;;“»
तार की सूची का मूल्यांकन करता है ["< Aalst" ""]
, और V
उन्हें निकालने की कोशिश करता है। s
अपने तर्क को लंबाई 0 के टुकड़ों में विभाजित करने की कोशिश करता है , जो एम दुभाषिया को दुर्घटनाग्रस्त होने का कारण बनता है, आगे के उत्पादन को दबा देता है।
q]tQ #aQ{*MyP
import random
def f(z):
if z<4:return z>>1
d,s,n,e,c=~-z,0,z,0,50
while not d&1:d//=2;s+=1
while n>0:n//=2;e+=1
random.seed()
while c>0:
a=0
while a<2or a>z-1:
a,b=0,e
while b>0:a=a*2+random.randint(0,1);b-=1
x,r=pow(a,d,z),~-s
if ~-x and x!=~-z:
while r>0:
x,r=pow(x,2,z),~-r
if not ~-x:return 0
elif x==~-z:break
else:return 0
c-=1
else:return 1