अपनी भाषा बनाओ * ज्यादातर * अनुपयोगी! (पुलिस का धागा)


61

इस टिप्पणी से प्रेरित ...

उपयोगकर्ताओं को धन्यवाद हेन , व्हीट-विजार्ड , और डेनिस को पोस्ट करने से पहले इस चुनौती के विनिर्देश को ठोस बनाने में मदद करने के लिए!

यह कॉप्स का धागा है। लुटेरों के धागे के लिए, यहां जाएं


में इस चुनौती , आप कुछ कोड यह है कि इतना है कि अपनी भाषा नहीं रह गया है एक प्रोग्रामिंग भाषा जा रहा है के बारे में हमारी मानदंडों को संतुष्ट चल करने का काम सौंपा गया है। उस चुनौती में, इसका मतलब है कि इसे बनाना ताकि भाषा अब और न हो ...

  • संख्यात्मक इनपुट और आउटपुट लें

  • दो संख्याओं को एक साथ जोड़ें

  • टेस्ट करें कि कोई निश्चित संख्या अभाज्य है या नहीं।

यह एक चुनौती है, जहां दो अलग-अलग उद्देश्यों के साथ दो अलग-अलग चुनौतियां हैं: पुलिस कुछ कोड लिखने की कोशिश करेगी जो भाषा को अधिकतर अनुपयोगी बनाती है, और लुटेरे छिपे हुए वर्कअराउंड को खोजने की कोशिश करेंगे जो पुलिस को अनुमति देता है उनकी भाषा ठीक करने के लिए।

पुलिस वाले के रूप में, आपको कोड के दो स्निपेट लिखने होंगे:

  1. एक जो आपकी भाषा को ज्यादातर अनुपयोगी बनाता है, जैसे कि इनपुट / आउटपुट और संख्यात्मक कार्यों को लेने के लिए अंतर्निहित कार्यों को हटाकर। जितनी अधिक सुविधाएँ आप निकालते हैं, उतना बेहतर है। इस कोड को क्रैश या बाहर निकलने की अनुमति नहीं है । इस स्निपेट के अंत में कोड जोड़ना संभव होना चाहिए, और उस कोड का मूल्यांकन किया जाएगा । तथा...

  2. ... कोड का एक स्निपेट जो इनपुट के रूप में दो गैर-नकारात्मक पूर्णांक लेता है, उन्हें एक साथ जोड़ता है, और उनकी राशि को आउटपुट करता है। पहला स्निपेट चलाने के बाद भी इस स्निपेट को सही ढंग से काम करना चाहिए। जब दो स्निपेट को एक साथ जोड़ दिया जाता है, तो उन्हें एक पूर्ण प्रोग्राम बनाना चाहिए जो दो नंबर जोड़ता है, या एक फ़ंक्शन को परिभाषित करता है जो दो नंबर जोड़ता है। आदर्श रूप में, इस स्निपेट को बहुत अस्पष्ट व्यवहार पर भरोसा करना चाहिए, ताकि खोजने में अधिक मुश्किल हो।

आप इनपुट और आउटपुट का कोई भी मानक तरीका चुन सकते हैं । हालाँकि, आपको यह अवश्य बताना चाहिए कि आप किस प्रारूप (इनपुट और आउटपुट) का उपयोग कर रहे हैं। जब तक वे आपके समान प्रारूप का उपयोग नहीं करते, तब तक एक डाकू आपके उत्तर को नहीं तोड़ सकता।

इन दोनों स्निपेट्स को लिखने के बाद, आपको पहले एक को उत्तर के रूप में पोस्ट करना होगा, दूसरे को प्रकट किए बिना। आपके उत्तर में निम्नलिखित जानकारी होनी चाहिए:

  • पहले स्निपेट (स्पष्ट रूप से नहीं सेकंड)।

  • भाषा (मामूली संस्करण सहित, क्योंकि अधिकांश प्रस्तुतियाँ शायद अजीब धार वाले मामलों पर भरोसा करेंगी)

  • IO प्रारूप, जिसमें यह एक फ़ंक्शन या पूर्ण कार्यक्रम भी शामिल है। लुटेरों को अपनी दरार के वैध होने के लिए उसी प्रारूप का उपयोग करना चाहिए

  • काम करने के लिए आपके उत्तर के लिए किसी भी अजीब बढ़त के मामलों की आवश्यकता है। उदाहरण के लिए, केवल लिनक्स पर चलता है , या इंटरनेट कनेक्शन की आवश्यकता होती है । जाहिर है, यह थोड़ा व्यक्तिपरक है, लेकिन अगर किसी पुलिस वाले के पास कोई चरम किनारे का मामला है जो इसे टूटने से रोकता है, और फिर केवल सुरक्षित होने के बाद यह पता चलता है, तो मैं इस खराब खेल कौशल पर विचार करता हूं। एक संभावित डाकू के पास आपके उत्तर को क्रैक करने से पहले आवश्यक सभी जानकारी होनी चाहिए ।

जब तक आपका जवाब सुरक्षित न हो, आपको अपनी बाइट गिनती प्रकट करने की आवश्यकता नहीं है।

यहाँ एक उदाहरण है। पहले स्निपेट के लिए, आप निम्नलिखित पायथन 3 कार्यक्रम प्रस्तुत कर सकते हैं:

अजगर ३

print=None

STDIN से इनपुट लेता है और आउटपुट से STDOUT में जाता है

और फिर अपने दूसरे स्निपेट के रूप में, आप लिख सकते हैं:

import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)

यह मान्य है क्योंकि यह इनपुट के रूप में दो नंबर लेगा, और यदि आप दो स्निपेट को एक साथ जोड़ते हैं, तो भी उनकी राशि का उत्पादन करते हैं

print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)

हालांकि, यह एक डाकू के लिए एक समाधान खोजने के लिए बेहद आसान होगा। चूंकि यह दरार करना बहुत आसान होगा, आप इस विशेष दृष्टिकोण को पैच करने का प्रयास कर सकते हैं:

import sys
sys.stdout=None
print=None

हालाँकि, यहां तक ​​कि यह बहुत आसान है:

del print
a,b=int(input()),int(input())
print(a+b)

एक पुलिस वाले के रूप में, आपका लक्ष्य छिपे हुए काम को यथासंभव अस्पष्ट बनाना है, ताकि लुटेरों को खोजने से रोका जा सके।

लुटेरों अपने जवाब में से एक को देखो, और यह दरार करने का प्रयास करेंगे। वे किसी भी वैध स्निपेट को लिखकर उसे क्रैक कर सकते हैं जो स्निपेट 2 के रूप में काम कर सकता है (भाषा के बाद दो संख्याओं को एक साथ जोड़कर ज्यादातर असामान्य बनाया जाता है)। यह करता है नहीं के रूप में आप मूल रूप से करना ही टुकड़ा रहना होगा। यदि कोई डाकू आपके उत्तर को क्रैक करता है, तो वे आपके उत्तर पर एक टिप्पणी छोड़ देंगे, और फिर आपको यह इंगित करने के लिए संपादित करना चाहिए कि यह क्रैक हो गया है। यदि आपकी पोस्ट क्रैक की गई है, तो आपको मूल रूप से इच्छित समाधान (स्निपेट 2) दिखाने के लिए अपने उत्तर को संपादित करना चाहिए। यह एक नियम नहीं है , खेल को मज़ेदार रखने के लिए एक अनुकूल सुझाव है। आपको नहीं करना है।

यदि एक उत्तर पूरे एक सप्ताह तक अनियंत्रित रहता है, तो आप अपने दूसरे स्निपेट में संपादित कर सकते हैं और संकेत कर सकते हैं कि आपका उत्तर अब सुरक्षित है । यदि आप सप्ताह समाप्त होने के बाद इसे संपादित नहीं करते हैं, तो अन्य उपयोगकर्ता तब भी इसे क्रैक कर सकते हैं जब तक आप ऐसा नहीं करते। यदि आप अपना दूसरा स्निपेट प्रकट नहीं करते हैं, तो आप अपने उत्तर के लिए बिंदुओं का दावा नहीं कर सकते, या इसे सुरक्षित नहीं कह सकते।

कॉप्स के धागे का विजेता दोनों स्निपेट्स सहित सबसे छोटा सुरक्षित उत्तर है , जो बाइट्स में गिना जाता है, और पर्याप्त समय बीत जाने के बाद इस जवाब को स्वीकार किया जाएगा । आप करते नहीं अपने बाइट गिनती प्रकट करने के लिए जब तक अपने जवाब, सुरक्षित है के बाद से बाइट गिनती जब तक अपने जवाब के लिए सुरक्षित है आपका स्कोर के लिए अप्रासंगिक है की जरूरत है। इस घटना में कि पर्याप्त समय बीत चुका है और कोई भी उत्तर अनियंत्रित नहीं रहता है, विजेता वह उत्तर होगा जो सबसे लंबे समय तक अनियंत्रित रहा।

मज़े करो!

नियम स्पष्टीकरण

  • पहला स्निपेट बिना किसी इनपुट के सही ढंग से चलना चाहिए । यह आपको जो भी पसंद हो आउटपुट कर सकता है, और इस आउटपुट को नजरअंदाज कर दिया जाएगा - जब तक कि स्निपेट हो जाने के बाद, दूसरा स्निप सही तरीके से चलता है।

  • आपके जवाब के मान्य होने के लिए दूसरे स्निपेट को वास्तव में निष्पादित किया जाना चाहिए । इसका मतलब है जैसे उत्तर

    import sys
    sys.exit()
    

    मान्य नहीं है क्योंकि यह भाषा को नहीं तोड़ता है। यह बस बुझती है। इसी तरह, एक अनंत लूप दर्ज करना मान्य नहीं है, क्योंकि दूसरे स्निपेट को कभी भी निष्पादित नहीं किया जाएगा।

  • सुरक्षित होने के बाद, आपका स्कोर दोनों स्निपेट्स की बाइट गिनती है

  • यह आपके काम के जवाब के लिए आवश्यक किसी भी अजीब धार के मामलों को प्रकट करने के लिए वापस जाता है ... आपके प्रस्तुत करने से पहले प्रकट होने के बाद प्रतिलिपि प्रस्तुत करने योग्य होने के लिए पर्याप्त जानकारी होनी चाहिए । इसका मतलब है कि यदि आपका उत्तर सुरक्षित हो जाता है, और फिर आप इसमें संपादित करते हैं: यहाँ मेरा उत्तर है। ओह हाँ, BTW यह केवल काम करता है यदि आप इसे Solaris पर चलाते हैं, तो आप पर मज़ाक करते हैं! आपका उत्तर अमान्य है और हटा दिया जाएगा और जीतने के योग्य नहीं माना जाएगा।

  • राशि के आउटपुट के बाद दूसरे स्निपेट को क्रैश करने की अनुमति दी जाती है - जब तक कि आउटपुट अभी भी सही है (उदाहरण के लिए, यदि आप STDERR को आउटपुट चुनते हैं, और फिर आपको क्रैश जानकारी का एक गुच्छा मिलता है, तो यह अमान्य है)।

  • उत्तर सबमिट करने के बाद आप अपना कोड संपादित नहीं कर सकते।

  • आप क्रिप्टोग्राफ़िक फ़ंक्शंस जैसे एन्क्रिप्शन, हैश फ़ंक्शंस, CSPRNGs आदि पर निर्भर नहीं हो सकते हैं

स्निपेट को अनियोजित सबमिशन खोजने के लिए:


3
C जैसी भाषाओं के लिए क्या करना चाहिए? सामंजस्य केवल एक "मुख्य स्निपेट" के लिए अनुमति देता है, और किसी भी तर्क को वहां जाना है। जैसे, यदि मेरे पास int main(){ do_evil_stuff(); }उपयोगकर्ता कोड कहां जाना चाहिए? एक समारोह में? में सभी बयान के बाद main?
कॉनर ओ'ब्रायन

1
क्या दूसरे स्निपेट को पहले स्निपेट में कहीं रखा जा सकता है?
लीजियनममाल 978

1
मुझे पता है कि कोडिंग के बारे में कुछ नहीं है, लेकिन यह चुनौती अद्भुत लग रही है,
प्रीत बालगोपाल

2
मैंने jimmy23013 के भयानक स्निपेट में संपादन किया । पलटने के लिए स्वतंत्र महसूस करें, लेकिन मैं इसे खुद भी वैसे ही उपयोग कर रहा था ताकि सबमिशन मिल सके और सोचा कि इससे दूसरों को मदद मिल सकती है।
डोम हेस्टिंग्स

2
@DomHastings यह बहुत उपयोगी है! धन्यवाद बहुत बहुत :)
DJMcMayhem

जवाबों:


2

Gforth 0.7.3 (TIO) , 231 बाइट्स [SAFE]

यह कोड कुछ आवश्यक आउटपुट विधियों के साथ-साथ कार्यों को घोषित करने के लिए महत्वपूर्ण और कुछ महत्वपूर्ण के रूप में परिभाषित करता है। सौभाग्य!

: . ;
: dec. ;
: u. ;
: .r ;
: u.r ;
: d. ;
: ud. ;
: d.r ;
: ud.r ;
: emit ;
: type ;
: + postpone 2drop ;
: ; + + + postpone exit reveal postpone [ ;

इनपुट फंक्शन मापदंडों के रूप में स्टैक के शीर्ष से लिए गए दो हस्ताक्षरित पूर्णांक होंगे। STDOUT में आउटपुट।

तो आपको किए गए नुकसान को ठीक करना चाहिए, और एक फ़ंक्शन को परिभाषित करना चाहिए जो स्टैक से शीर्ष दो मान लेता है और परिणाम को पूर्णांक (फ्लोट नहीं) के रूप में अतिरिक्त आउटपुट (कोई अनुगामी स्थान) के बिना STDOUT में प्रिंट करता है।

यहां एक टेम्प्लेट है , यदि आपका लक्ष्य फ़ंक्शन नाम दिया गया है f

उपाय:

79 बाइट्स

मैंने वास्तव में immediateकीवर्ड को पुनर्परिभाषित के अंत से हटा दिया ;था, इसलिए इसे शुरू में शामिल करने के लिए एक उत्तर की आवश्यकता थी। मेरे द्वारा परिभाषित फ़ंक्शन ज्यादातर आंतरिक परिभाषा के बराबर है ., लेकिन यह अंत में अंतरिक्ष को प्रिंट नहीं करता है, और इसके अलावा सबसे पहले प्रदर्शन किया जाता है, संख्याओं को फ्लोटिंग पॉइंट स्टैक और बैक पर ले जाकर।

immediate : f s>f s>f f+ f>d swap over dabs <<# #s rot sign #> (type) #>> 0 0 ;

इसे ऑनलाइन आज़माएं


1
यह बहुत अच्छा जवाब है। इस दर पर, ऐसा लगता है कि यह केवल अनियोजित उत्तर होने का अंत हो सकता है!
DJMcMayhem

:) मैंने कुछ अलग-अलग बाधाओं को जोड़ा। इस बिंदु पर, मैं सोच रहा हूं कि क्या मैं अपना स्कोर बेहतर बनाने के लिए सिर्फ एक ही कर सकता था। लेकिन यह संभव है कि एक से अधिक होने के कारण यह अभी तक अनियंत्रित है।
mbomb007

21

हास्केल, क्रिश्चियन सिवर्स द्वारा फटा

import Prelude(getLine,print)
a=a

पूर्ण कार्यक्रम, स्टड से दो पूर्णांक (नकारात्मक वाले सहित) पढ़ना और लेखन करना।

मैंने अभी प्रस्तावना को निष्क्रिय कर दिया है, इसलिए लगभग कुछ भी नहीं है, और फिर एक परिभाषा जोड़ दी है; आगे आयात कृत्रिम रूप से अमान्य हैं। मैंने आपको getLineऔर printयद्यपि।


मेरा मूल समाधान जोड़ने के लिए संपादित किया गया। क्रिश्चियन की दरार अलग थी, लेकिन एक ही मूल सुविधाओं का शोषण करता है (आप सिंथैटिक शुगर वाले कार्यों तक पहुंचकर गणना की एक आश्चर्यजनक मात्रा प्राप्त कर सकते हैं, यहां तक ​​कि जब आप सीधे कुछ भी कॉल नहीं कर सकते हैं या शामिल प्रकारों को नाम भी दे सकते हैं)।

import Prelude(getLine,print)
a=a
(x:l)!0=x
(x:l)!n=l!d[0..n]
d[x,y]=x
d(x:l)=d l
x^y=[x..]!y
x+y=f[0..y](x^y)(-((-x)^(-y)))
f[]x y=y
f _ x y=x
f.g= \x->f(g x)
f&0= \x->x
f&n=f.(f&d[0..n])
x*y=((+x)&y)0
x%[]=x
x%('-':s)= -(x%s)
x%(c:s)=x*10+i c%s
i c=l['1'..c]
l[]=0
l(x:s)=1+l s
main=do
 x<-getLine
 y<-getLine
 print((0%x)+(0%y))

जो शायद वैसे भी सुपर-गोल्फ नहीं है, लेकिन यहां यह अधिक आसानी से है:

import Prelude(getLine,print)
a=a

-- List indexing
(x : _) !! 0 = x
(_ : xs) !! n = xs !! (sndLast [0..n])

-- sndLast [0..n] lets us decrement a positive integer
sndLast [x, _] = x
sndLast (_ : xs) = sndLast xs

-- Pseudo-addition: right-operator must be non-negative
x +~ y = [x..] !! y

-- Generalised addition by sign-flipping if y is negative
x + y = switch [0..y] (x +~ y) (-((-x) +~ (-y)))
  where switch [] _ empty = empty   -- [0..y] is null if y is negative
        switch _ nonempty _ = nonempty

f . g = \x -> f (g x)

-- compose a function with itself N times
composeN f 0 = \x -> x
composeN f n = f . (composeN f (sndLast [0..n]))

-- multiplication is chained addition
x * y = composeN (+x) y 0

strToNat acc [] = acc
strToNat acc ('-' : cs) = -(strToNat acc cs)
strToNat acc (c : cs) = strToNat (acc * 10 + charToDigit c) cs

charToDigit c = length ['1'..c]

length [] = 0
length (_ : xs) = 1 + length xs

main = do
  x <- getLine
  y <- getLine
  print (strToNat 0 x + strToNat 0 y)


17

अजगर 2 , फटा

एक नामांकित फ़ंक्शन के रूप में अतिरिक्त जोड़

import sys
c="".join(open(__file__).read().split('\n')[4:])
if set(c)-set(' &)(,.:[]a`cdfijmonrt~')or"import"in c:sys.setrecursionlimit(1)
f=lambda\

इसे ऑनलाइन आज़माएं!

यह क्या करता है?

आपको थोड़ी मदद करने के उद्देश्य से मैं समझाता हूँ कि यह क्या करता है। यह कोड स्रोत फ़ाइल खोलता है और जाँचता है कि क्या शेष कोड निम्नलिखित मानदंडों को पूरा करता है:

  • स्ट्रिंग नहीं है import
  • पूरी तरह से पात्रों से बना है &)(,.:[]a`cdfijmonrt~

यदि यह या तो कसौटी पर खरा नहीं उतरता है तो पुनरावर्तन सीमा का 1अर्थ यह है कि आपके द्वारा लिखा गया कोई भी कोड पुनरावर्तन की सीमा से टकराएगा।

यहां कोई चाल नहीं है, मैंने एक समाधान लिखा है जो केवल इन पात्रों का उपयोग करता है और कोई आयात नहीं करता है, मैं कुछ भी विध्वंसक नहीं कर रहा हूं, लेकिन मैं कहूंगा कि मुझे लगता है कि यह दरार करना बहुत कठिन होगा।

आपको कुछ समय बचाने के लिए यहां उन उपयोगी चीजों की एक छोटी सूची है जो आप इस प्रतिबंध के साथ नहीं कर सकते हैं

  • + खैर दुह,

  • eval/ execआप के साथ दूर जाने के लिए नहीं जा रहा था

  • संख्या, वे आपके विचार से अधिक उपयोगी हो सकते हैं

  • स्ट्रिंग शाब्दिक

  • len

  • =, कोई नियत चर नहीं

  • >, <, ==। । । मैंने आपको बिना किसी तुलना के छोड़ दिया है

  • *, -, /, %, ^, |, >>, << केवल ऑपरेटरों उपलब्ध हैं ~और&

  • __foo__उन फैंसी डबल अंडरस्कोर विधियों में से कोई भी अनुमति नहीं है।


1
वाह यह तो काफी बुराई है। अच्छा!
हाइपरएन्यूट्रीनो

बढ़िया जवाब बातें शुरू करने के लिए :)
DJMcMayhem

हेह, यह सिर्फ उस गूंगे राजा-से-पहाड़ी चुनौती से प्रेरित हो सकता है जिसे मैंने चैट में एक बार बाहर निकालने की कोशिश की थी
स्टीफन

4
मुझे लगता है कि यह एक वैध दरार है: codegolf.stackexchange.com/a/133209/68942
HyperNeutrino

पहले स्निपेट को This code is not allowed to crash or exit.देखें : (उस पर चर्चा के लिए चैट देखें)
स्टीफन

12

अजगर 2 , फटा

यह इस उत्तर का चौथा पुनरावृत्ति है। पिछले उत्तरों में से प्रत्येक को पुनरावृत्ति की गहराई को रीसेट करने के माध्यम से फटा गया था।

एक नामांकित फ़ंक्शन के रूप में अतिरिक्त जोड़

import sys
if set("".join(open(__file__).read().split('\n')[4:]))-set(' &)(,.:[]a`cdfijmonrt~'):sys.setrecursionlimit(1)
for m in sys.modules:sys.modules[m]=None
del sys;f=lambda\

इसे ऑनलाइन आज़माएं!

यह क्या करता है?

आपको थोड़ी मदद करने के उद्देश्य से मैं समझाता हूँ कि यह क्या करता है। यह कोड स्रोत फ़ाइल को खोलता है और जाँचता है कि क्या शेष कोड केवल वर्णों से बना है &)(,.:[]a`cdfijmonrt~

यदि यह विफल हो जाता है तो पुनरावृत्ति सीमा का 1अर्थ यह निर्धारित किया जाता है कि आपके द्वारा लिखा गया कोई भी कोड पुनरावर्तन की सीमा से टकराएगा।

मैंने सभी मॉड्यूल को अक्षम कर दिया है, इसलिए आप कुछ भी आयात नहीं कर सकते।

यहां कोई चाल नहीं है, मैंने एक समाधान लिखा है जो केवल इन पात्रों का उपयोग करता है और कोई आयात नहीं करता है, मैं कुछ भी विध्वंसक नहीं कर रहा हूं, लेकिन मैं कहूंगा कि मुझे लगता है कि यह दरार करना बहुत कठिन होगा।

आपको कुछ समय बचाने के लिए यहां उन उपयोगी चीजों की एक छोटी सूची है जो आप इस प्रतिबंध के साथ नहीं कर सकते हैं

  • + खैर दुह,

  • eval/ execआप के साथ दूर जाने के लिए नहीं जा रहा था

  • संख्या, वे आपके विचार से अधिक उपयोगी हो सकते हैं

  • स्ट्रिंग शाब्दिक

  • len

  • =, कोई नियत चर नहीं

  • >, <, ==। । । मैंने आपको बिना किसी तुलना के छोड़ दिया है

  • *, -, /, %, ^, |, >>, << केवल ऑपरेटरों उपलब्ध हैं ~और&

  • __foo__उन फैंसी डबल अंडरस्कोर विधियों में से कोई भी अनुमति नहीं है।

मेरा समाधान

तो अब जब xnor ने इसे एक तरह से क्रैक कर दिया है तो मैं अपने समाधान को प्रकट करने जा रहा हूं जिससे मैं पर्याप्त रूप से संतुष्ट हूं

r,o:(o and f(~(~r&~o)&~(r&o),int(`r`[:r&~r].join([`dict()`[r&~r],`r&~r`,`dict([(r&~r,r&~r)])`[int(`~([]in[[]])`[[]in[[]]:])],`min`[[]in[[]]],`dict()`[~(r&~r)],`r&~r`]).format(r&o),int(`~([]in[[]])`[[]in[[]]:]))))or r

आश्चर्य की बात है, इसके चकित करने वाले ढेर को चकित कर देना। इसे तोड़ने के बजाय मैं इस प्रक्रिया से गुजरने जा रहा हूं कि मैंने इसे कैसे बनाया।

मैंने बहुत मानक जोड़ एल्गोरिथ्म के साथ शुरुआत की

r,o:(o and f(r^o,r&o<<1))or r

तब मैंने , के ^साथ प्रतिनिधित्व करने के लिए एक बिटवाइस ट्रिक का उपयोग किया ,, ।|&~

r,o:(o and f((r|o)&~(r&o),r&o<<1))or r

मैंने छुटकारा पाने के लिए एक और बिटकॉइन ट्रिक का इस्तेमाल किया |

r,o:(o and f(~(~r&~o)&~(r&o),r&o<<1))or r

अब सब छोड़ दिया है <<, बहुत मुश्किल नहीं होना चाहिए, है ना? अच्छी तरह से एक ऊबड़ सवारी के लिए तैयार हो जाओ। बिटशिफ्ट को बदलने के लिए मैंने स्ट्रिंग्स का उपयोग अपने बाइनरी प्रतिनिधित्व के अंत में एक शून्य को जोड़ने के लिए किया

r,o:(o and f(~(~r&~o)&~(r&o),int(bin(r&o)[2:]+"0",2)))or r

इसमें कुछ समस्याएं हैं लेकिन प्राथमिक एक जोड़ का उपयोग कर रहा है, इसलिए मैंने इसके बजाय एक प्रारूप का उपयोग करके इसके चारों ओर काम किया

r,o:(o and f(~(~r&~o)&~(r&o),int("{}0".format(bin(r&o)[2:]),2)))or r

हमें बिन का उपयोग करने की अनुमति नहीं है, इसलिए मैंने बाइनरी में बदलने के लिए स्ट्रिंग प्रारूपण का उपयोग किया।

r,o:(o and f(~(~r&~o)&~(r&o),int("{0:b}0".format(r&o),2)))or r

चूंकि स्ट्रिंग शाब्दिक निषिद्ध हैं, इसलिए मुझे स्ट्रिंग {0:b}0के पीछे के हिस्सों के साथ बने स्ट्रिंग का निर्माण करना होगा और joinउन्हें एक साथ करना होगा।

r,o:(o and f(~(~r&~o)&~(r&o),int("".join(["{","0",":","b","}","0"]).format(r&o),2)))or r

खाली स्ट्रिंग बहुत आसान है, आप बस कर सकते हैं

`r`[:0]

शून्य थे

`0`

और {:}सभी शब्दकोशों से पकड़े गए थे।

r,o:(o and f(~(~r&~o)&~(r&o),int("".join([`dict()`[0],`0`,`dict([(0,0)])`[2],"b",`dict()`[-1],`0`]).format(r&o),2)))or r

bहमारे अक्षर समूह में पाने के लिए बहुत मुश्किल लगता है, अपनी नहीं है, तो हम कैसे एक वस्तु एक है कि प्राप्त करने के लिए की अपेक्षा की जाती bहै अपने में repr? अच्छी तरह से यहाँ है: जब आप reprएक बेसिन फ़ंक्शन पर उपयोग करते हैं तो आपको कुछ ऐसा मिलता है जो दिखता है

<built-in function name>

और जहां से हमें मिलेगा b

r,o:(o and f(~(~r&~o)&~(r&o),int("".join([`dict()`[0],`0`,`dict([(0,0)])`[2],`min`[1],`dict()`[-1],`0`]).format(r&o),2)))or r

अब सभी बचे संख्याएँ हैं, मुझे केवल -1, 0, 1 और 2 की आवश्यकता है, इसलिए यहाँ बताया गया है कि मैंने उनका कैसे प्रतिनिधित्व किया:

-1 = ~(r&~r)
 0 = r&~r
 1 = []in[[]]
 2 = `~([]in[[]])`[[]in[[]]:]

2 वास्तव में एक बाइट के रूप में छोटा हो सकता है

```r&~r```.find(`r&~r`)

टिप्पणियों में @ ब्लेंडर के सुझावों पर आधारित है, लेकिन मैंने इस तथ्य के बाद तक ऐसा नहीं सोचा था।

इसलिए हम इन संख्याओं को प्रतिस्थापित करते हैं

r,o:(o and f(~(~r&~o)&~(r&o),int(`r`[:r&~r].join([`dict()`[r&~r],`r&~r`,`dict([(r&~r,r&~r)])`[int(`~([]in[[]])`[[]in[[]]:])],`min`[[]in[[]]],`dict()`[~(r&~r)],`r&~r`]).format(r&o),int(`~([]in[[]])`[[]in[[]]:]))))or r

और दरार।


यह स्निपेट अपने आप त्रुटि प्रतीत होता है।
ATaco

@ टैको मेरा मानना ​​है कि इस पर बातचीत की गई और यह तय हुआ कि यह ठीक है।
गेहूं जादूगर

नियम स्पष्ट रूप से अन्यथा राज्य। "इस कोड को क्रैश या बाहर निकलने की अनुमति नहीं है।"
ATaco

@ATaco यहां वह संदेश है जो उसने कहा कि वह मौका मिलने पर इसे अपडेट करेगा।
गेहूं जादूगर


10

सी (जीसीसी) फटा!

#define D(f)void f(void);
D(printf)D(fprintf)D(putc)D(puts)D(getchar)D(putc)D(fputc)D(ferror)D(feof)D(read)D(fclose)D(fread)D(wr1te)D(fgets)D(fgetc)D(popem)D(gets)D(read)D(scanf)D(setbuf)D(execl)D(execlp)D(putchar)D(execle)D(execv)D(malloc)D(execvp)D(execvpe)D(exec)D(system)D(close)D(fwrite)D(open)D(free)
int stdin;
int main(){
//your code goes here...hehe
}

इसे ऑनलाइन आज़माएं!

STDIN से इनपुट और आउटपुट से STDOUT।

यह बिना किसी त्रुटि के चलता है। हाहाहा यह काफी बुराई है। मैंने केवल TIO की gcc पर इसका परीक्षण किया है। सामान्य रूप से, आपको इस स्निपेट के बाद अपने कोड को जोड़ना होगा ताकि वह काम कर सके :) टिप्पणी एक मतलब है, इसे मत सुनो।

पर परीक्षण किया गया gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1)। किसी भी linux system पर काम करना चाहिए।

मूल समाधान

#define D(f)void f(void);
D(printf)D(fprintf)D(putc)D(puts)D(getchar)D(putc)D(fputc)D(ferror)D(feof)D(read)D(fclose)D(fread)D(wr1te)D(fgets)D(fgetc)D(popem)D(gets)D(read)D(scanf)D(setbuf)D(execl)D(execlp)D(putchar)D(execle)D(execv)D(malloc)D(execvp)D(execvpe)D(exec)D(system)D(close)D(fwrite)D(open)D(free)
int stdin;
int main(){
//your code goes here...hehe
}
void __attribute__ ((destructor)) dtor() {
    int a,b,c,d;a=b=c=0;
    struct FILE* z = popen("cat", "r");
#define q(x)for(;(c=getc(z))^32&&c^-1;)x=10*x+c-48;
q(a);q(b);
    char*y=calloc(c=a+b,1);
    for(a=0;c;){y[a++]=(48+(c%10));c=c/10;}
    for(b=0;b<a/2;b++){d=y[b];y[b]=y[a-b-1];y[a-b-1]=d;}
    write(1,y,a);
}

@ लीजनमैनल 978 आह हां
कॉनर ओ'ब्रायन

2
अपने मंच को निर्दिष्ट करें!
जोशुआ

@ जोशुआ मैंने कुछ जानकारी जोड़ी है
कॉनर ओ'ब्रायन


ठीक है, __asm__और आपके पास चुनने के लिए बहुत सारे कार्य हैं :) ऐसा मत सोचो कि C और C ++ यहां अच्छे दुश्मन हैं।
edmz

9

हास्केल , बेन द्वारा फटा

main=main--

इसे ऑनलाइन आज़माएं! यह एक पूर्ण कार्यक्रम होना चाहिए जो स्टडिन से दो संख्याओं को पढ़ता है और स्टडआउट को राशि आउटपुट करता है।

प्रत्येक पूर्ण कार्यक्रम mainफ़ंक्शन को चलाने से शुरू होता है , लेकिन यहां mainखुद को कॉल करता है और एक अनंत लूप का कारण बनता है। मामले को बदतर बनाने के लिए, --पुनरावर्ती कॉल के पीछे सीधे एक पंक्ति टिप्पणी के साथ शुरू किया जाता है ताकि इसे उदाहरण के लिए बदल दिया जा सके main2और फिर इसे परिभाषित किया जा सके।


इरादा समाधान:

main=main--$()
_ --$ _ = do
     x <- readLn
     y <- readLn
     print $ x+y

इसे ऑनलाइन आज़माएं!

--एक पंक्ति टिप्पणी शुरू करता है जब तक कि इसे एक ऑपरेटर के हिस्से के रूप में भी पार्स नहीं किया जा सकता है। (सिंटैक्स हाइलाइटिंग इस तथ्य से अनजान लगती है।) --$एक वैध इन्फिक्स ऑपरेटर है जो mainपहले तर्क और कुछ डमी तर्क के रूप में लेता है ()। इसके बाद दोनों तर्कों की अनदेखी करने और इसके बजाय आवश्यक कार्य करने के लिए परिभाषित किया गया है।


2
इसे क्रैक किया गया: codegolf.stackexchange.com/a/133244/17061
बेन

5
आप सिर्फ "जहाँ मुख्य = ..." जोड़ सकते हैं
michi7x7

एक हास्केल समाधान के लिए +1 जो केवल हास्केल के आलसी मूल्यांकन के कारण काम करता है।
जूल्स

9

सी (लिनक्स पर जीसीसी) (फटा)

इसके बजाय मूर्खतापूर्ण फ़ाइल-रीडिंग सैंडबॉक्सिंग तकनीकों का उपयोग करने के बजाय, हम इसे उचित तरीके से करते हैं - SECCOMP श्वेतसूची के साथ!

आपका कार्य: STDIN से इनपुट और आउटपुट के साथ STDOUT को लागू करना।

#include <stdlib.h>
#include <unistd.h>
#include <sys/prctl.h>
#include <linux/seccomp.h>
#include <syscall.h>
#include <stdio.h>
void sandbox();
__attribute__ ((constructor(0))) int s() {
    close(0);
    close(1);
    close(2);
    prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT);
}
int main() {
    sandbox();
    syscall(SYS_exit, EXIT_SUCCESS);
}
void sandbox() {
    // Your code here!
}

इसे ऑनलाइन आज़माएं!

WTF यह है !?

आपको अपने दुर्गम कार्य में मदद करने के लिए मैं समझाता हूँ कि यह कोड क्या करता है।

__attribute__ ((constructor(0)))यह सुनिश्चित करता है कि sफ़ंक्शन पहले चलाया जाए। फ़ंक्शन STDIN, STDOUT और STDERR के लिए सभी खुले फ़ाइल डिस्क्रिप्टर को बंद कर देता है। तब प्रोग्राम खुद को एक सख्त SECCOMP श्वेतसूची के साथ प्रतिबंधित करता है, जो आपके सिस्टम कॉल को निम्न तक सीमित करता है:

read(2)
write(2)
_exit(2)
sigreturn(2)

इसलिए आप कोई भी नई फ़ाइल नहीं खोल सकते (या मूल रूप से कुछ भी करते हैं)। हम फिर मुख्य में आते हैं और अपने कोड को कॉल करते हैं, अच्छी तरह से sandboxफ़ंक्शन में लिपटे ।

syscall(SYS_exit, EXIT_SUCCESS);डिफ़ॉल्ट जीसीसी से साथ बाहर निकल जाएगा - अंत में सिर्फ कार्यक्रम सुनिश्चित करने के लिए सफाई से बाहर निकल जाता है है exit_group(2)जो seccomp श्वेत सूची से अनुमति नहीं है। आपके कोड चलने के बाद यह बाहर निकलने का कार्य कहा जाता है।

इसलिए आपके पास कोई फ़ाइल विवरणकर्ता नहीं है, और आप कुछ भी नया नहीं खोल सकते। असंभव, सही? ;)



8

x86 16 बिट वास्तविक मोड असेंबली ( क्रैक )

_main:
    call l
    cli
    hlt
l:  pop si
    xor ax, ax
    mov bp, cs
    mov es, ax
    mov di, 12
    mov [di], si
    mov [di + 2], bp
    pushf
    mov bp, sp
    or word [bp], 256
    popf

आसान है अगर आप ट्रिक जानते हैं।


1
आप कैसे इनपुट ले रहे हैं? स्टैक पर, या रजिस्टरों में? (इसके अलावा, ऐसा लगता है कि यह 16-बिट असेंबली माना जाता है, लेकिन यदि ऐसा है, तो or [bp], 256अमान्य है। क्या यह माना जाता है or WORD PTR [bp], 256?)
कोडी ग्रे

1
इसके अलावा, आपको यह निर्दिष्ट करना चाहिए कि आप किस प्रोसेसर का उपयोग कर रहे हैं; वहाँ बहुत सारे x86 संस्करण और क्लोन हैं, और बहुत सारे अपरिभाषित निर्देश। अगर मैंने एक "अस्पष्ट 80186 क्लोन" के लिए कोड लिखा था , तो बस इतना हुआ कि एक अपरिभाषित निर्देश था जिसमें कुछ तर्क और ब्लाह ब्ला ब्ला हुआ ... हमें भी पर्यावरण की आवश्यकता हो सकती है। 16 बिट विंडोज ने एक एसएस == डीएस गारंटी दी कि अन्य सिस्टम उदाहरण के लिए नहीं हो सकते हैं।
ओरियन

1
आपको केवल यह निर्दिष्ट करने की आवश्यकता है कि कौन सा प्रोसेसर यदि आप वास्तव में कुछ चाल का उपयोग कर रहे हैं जो केवल एक विशेष मॉडल (या एक विशेष पीढ़ी) पर काम करती है। यह कोड ऐसा नहीं है, इसलिए मुझे लगता है कि "x86-16" पर्याप्त है। मेरी राय में, और अधिक सामान्य बेहतर है। सहमत है कि वास्तविक या संरक्षित मोड को निर्दिष्ट किया जाना चाहिए, हालांकि hltनिर्देश की उपस्थिति (अंगूठी 0) दृढ़ता से तात्पर्य है कि यह संरक्षित मोड नहीं है।
कोडी ग्रे

3
@ जोशुआ अगर यह हर प्लेटफ़ॉर्म पर काम नहीं करता है, तो आपको कम से कम एक प्लेटफ़ॉर्म निर्दिष्ट करना होगा जिस पर यह काम करेगा, मुझे विश्वास है। Your submission must contain enough information before being revealed to be reproducible after being revealed
स्टीफन

1
@ स्टेपहेन: भाषा को अनब्रेक करने का समाधान एक बार x86-16 वास्तविक मोड को निर्दिष्ट करने के लिए प्लेटफॉर्म एग्नॉस्टिक है, लेकिन I / O प्लेटफ़ॉर्म एग्नॉस्टिक नहीं है। वह जो बाहर तोड़ता है वह ओएस निर्दिष्ट कर सकता है जिसके लिए वह टूट गया। मैंने _मैन लेबल को देर से जोड़ा ताकि किसी को सिद्धांत में मानहानि के खिलाफ जोड़कर लगभग अज्ञेय विराम दे सके।
जोशुआ

4

जावास्क्रिप्ट, फटा

यह चुनौती ग्रांट डेविस का निर्माण करती है , लेकिन उसके मन में जो समाधान होता है (जो एक आइफ्रेम बनाता है और आईफ्रेम का उपयोग करता है window) को ठीक करता है। इसका समाधान क्रोम के क्रोम पर जावास्क्रिप्ट कंसोल में चलता है about:blank page, और दो input()एस लेता है , उन्हें एक साथ जोड़ता है, और console.logपरिणाम प्राप्त करता है। अपना कोड डालें:

d=prompt=console=document;new MutationObserver(s=>s.forEach(e=>{t=e.target;t.parentNode.removeChild(t)})).observe(d,{"childList":d, "subtree":d})

सबसे पहले, हम क्लोब करते हैं promptऔर consoleशॉर्टकट सेट करते हैं d। फिर, हम एक कॉलबैक के साथ एक उत्परिवर्तन पर्यवेक्षक बनाते हैं जो उत्परिवर्तित प्रत्येक लक्ष्य को हटा देता है। हमने उस म्यूटेशन ऑब्जर्वर को दस्तावेज़ का निरीक्षण करने के लिए सेट किया, childListऔर subtreeसंशोधन और सूचना दी । शाब्दिक के बजाय true, हम अपने शॉर्टकट को सत्य मान के लिए उपयोग करते हैं document( कल्पना इसकी अनुमति नहीं देती है, लेकिन क्रोम करता है)।

मैंने इसे पोस्ट करने के बाद, मुझे एक और अधिक सुंदर क्लोब का एहसास हुआ। मेरा इरादा समाधान अभी भी काम करता है, लेकिन पोस्ट की गई दरार नहीं है:

 h=document.querySelector("html");h.parentNode.removeChild(h);

साइट पर आपका स्वागत है! मैं देखना क्या समाधान हो जाएगा :) इच्छुक हूँ
DJMcMayhem


4

इल्मरी करोनन द्वारा क्रिएट 5, पर्ल

$_=<DATA>;
s/[+'{dPz|K.UD!_ iJ;o}e6tjWb7253k@%&Iq4l0AN:?\$8B`Yywn9^pfmZQTF"M#-]//g;
eval;
print@_,$!,pop,shift,<>,eval"@>",$\,@ARGV,eval"@$",$@,eval"@@",$,,eval"@,",$/
__DATA__

इनपुट को अलग-अलग लाइनों पर प्राप्त किया जाता है STDINऔर आउटपुट को प्रिंट किया जाता है STDOUT

सभी कोड __DATA__मार्कर के बाद जाते हैं । यह @ WheatWizard के समाधान में एक समान विधि का उपयोग करता है जिसमें कोड पार्स किया जाता है और अनुपयोगी चार्ट हटा दिए जाते हैं।

यह संस्करण ५. versions, ५.१० और ५.१६ पर परीक्षण किया गया है, और इसके लिए कमांड-लाइन झंडे की आवश्यकता नहीं है।

इसे ऑनलाइन आज़माएं!


2
क्या आप इनपुट / आउटपुट विधि और प्रारूप निर्दिष्ट कर सकते हैं?
इल्मरी करोनन

@ इल्मारियारोन माफी, यह STDINअलग-अलग लाइनों पर और चार्ट के साथ है STDOUT। मैं इसे मुख्य निकाय में शामिल करूंगा।
डोम हेस्टिंग्स

फटा , मुझे लगता है।
इल्मरी करोनन

4

अजगर 3, zbw द्वारा फटा

import sys
for mod in sys.modules.values():mod.__dict__.clear()
1+1

सभी मॉडेल को हटा दिया गया है, जिसका अर्थ है कि कोई भी भवन उपलब्ध नहीं हैं और बहुत कुछ नहीं किया जा सकता है। एसटीडी के लिए आउटपुट, एसटीडीआईएन से इनपुट। पिछले एक के बाद एक ब्रेक स्टेटमेंट जोड़कर एक तुच्छ दरार से टूटने के बाद इस जवाब का यह दूसरा पुनरावृत्ति था।


मैं स्निपेट को देखने के लिए वास्तव में उत्सुक हूं जो इसके बाद काम करता है
निका जूल

ठीक है, आपको सात दिनों तक या एक गैर-तुच्छ दरार के लिए इंतजार करना होगा, जो भी पहले आए ...
pppery


ठीक है, ठीक है, इन जैसी चुनौतियां बहुत मुश्किल हैं
पप्परी

4

APL (ngn-apl) , ngn द्वारा फटा

मेरे सहयोगी मार्शल के सहयोग से बना ।

बाएं और दाएं तर्कों के माध्यम से इनपुट करें +। यानी आपका लक्ष्य निम्नलिखित के बाद कोड सम्मिलित करना है, ताकि आपकी अंतिम पंक्ति एसटीडीटी को पढ़े ⎕←3+2और आउटपुट करे 5

+←-←−←⍴←≢←≡←⊥←⊤←⍟←○←⍳←⌹←~←∈←∊←⍷←<←≤←=←≥←>←≠←,←⍪←⌷←⌽←⍉←⊖←{}⋄⍣←∘

इसे ऑनलाइन आज़माएं!

सभी उपयोगी कार्यों को सेट करके काम करता है {}जिसमें एक या दो तर्क होते हैं और एक खाली संख्यात्मक सूची देता है। इसके अलावा सिर्फ कार्यों की रचना करने के लिए।


दरार

+←{⌈/⍋⍺⍵1/0}

⍺⍵1/0 बाएँ तर्क और सही तर्क द्वारा 0 दोहराएं और 1

 उन सूचकांकों को प्राप्त करें जो इस प्रकार होंगे (चूंकि सभी तत्व शून्य हैं, यह 0 1 2 देता है ... (a + b)

⌈/ अधिकतम मान (a + b)


ngn / apl में मनमानी जावास्क्रिप्ट को निष्पादित करने की क्षमता शामिल है। मैं इस तरह के समाधान को वैध नहीं मानता, क्योंकि यह एपीएल के बजाय जावास्क्रिप्ट को अक्षम करने के बारे में होगा। वास्तव में +केवल शुद्ध एपीएल और कोई गंदी चाल का उपयोग करके रीसेट करने का एक वैध (यद्यपि अस्पष्ट) तरीका है ।
20

3

अजगर 2 , फटा

यह एक उत्तर का दूसरा पुनरावृत्ति है जो एक बार @HyperNuetrino द्वारा क्रैक किया गया है, एक विधि का उपयोग करके जिसकी मैंने उम्मीद नहीं की थी। मैंने अब इसे पैच कर दिया है, इसलिए उम्मीद है कि मेरे द्वारा जारी प्रतिबंधों का केवल एकमात्र समाधान बचा होगा।

एक नामांकित फ़ंक्शन के रूप में अतिरिक्त जोड़

import sys
c="".join(open(__file__).read().split('\n')[4:])
if set(c)-set(' &)(,.:[]a`cdfijmonrt~')or"import"in c:sys.setrecursionlimit(1)
sys.modules['sys'],sys.modules['os']=None,None;del sys;f=lambda\

इसे ऑनलाइन आज़माएं!


मुझे लगता है कि मैं ऐसा कर सकता था अगर मेरे पास होता u, लेकिन मैं इसके बिना फंस गया हूं।
ईसैक

@isaacg जिज्ञासा से बाहर, आप के साथ क्या करेंगे u?
गेहूं जादूगर

.count। मुझे वांछित आउटपुट के रूप में एक स्ट्रिंग मिल सकती है, लेकिन मेरे पास इसकी लंबाई लेने का कोई तरीका नहीं है।
ईसैक

__import__('sys').setrecursionlimit(100)... और वास्तव में कुछ भी नहीं मिला। मैं वास्तव में इसे डाकू के धागे में पोस्ट करने की तरह महसूस नहीं करता, हालांकि, धोखा लगता है। इसे ऑनलाइन आजमाएं
वैल्यू इंक


3

Java 8, @ OlivierGrégoire द्वारा क्रैक किया गया

यहाँ मेरा प्रयास है। बहुत ज्यादा, विचार सिर्फ उन सभी नामस्थानों को अधिभारित करने का है जिन्हें आप आउटपुट के लिए उपयोग कर सकते हैं (और मुझे आशा है कि प्रतिबिंबित)। आउटपुट sdout (System.out) का उद्देश्य है।

class java {
    public static void main(String[]s){
       //there is no executable code in snippet one.
       //your code here.
    }
    class Class{}
    class Method{}
    class System{}
    class FileDescriptor{}
    class Logger{}
    class Runtime{}
    class Scanner{}
}

ब्लैक लिस्ट करना आम तौर पर श्वेतसूची की तुलना में एक बदतर दृष्टिकोण है, इसलिए मुझे यकीन है कि किसी व्यक्ति के दृष्टिकोण के साथ आने से पहले यह सिर्फ एक समय की बात है।


1
यह एक निष्पादन योग्य वर्ग नहीं है ...
ओलिवियर ग्राएगोइरे

1
@ OlivierGrégoire इसके बारे में क्षमा करें, मैंने class String{}परीक्षण के बाद यह महसूस किए बिना परीक्षण किया कि यह बाहर खटखटाएगा main(String[] ...)। यह अब काम करना चाहिए
लॉर्ड फ़रक्वाड

1
हां, यह करूँगा, धन्यवाद! :) यह उस दरार को नहीं बदलता है जो मैं करने जा रहा हूँ, हालाँकि: p
ओलिवियर ग्राईगोइरे

1
फटा! मुझे वास्तव में यह बहुत अच्छा लगा :)
ओलिवियर ग्राएगोइरे

1
मैं कुछ इस तरह से देख रहा था (क्षमा करें, यह टिप्पणी में कोड को प्रारूपित करना कठिन है), लेकिन मुझे लगता है कि आपका समाधान बहुत साफ है:int sum = 0; new Exception("" + sum) { public void printStackTrace() { ClassLoader cl = ClassLoader.getSystemClassLoader(); try { printStackTrace(new PrintStream((PrintStream)cl.loadClass("java.lang.System").getDeclaredField("out").get(null))); } catch (Exception e){} } }.printStackTrace();
लॉर्ड फ़रक्वाड

3

Cube, मेय्यूब द्वारा क्रैक किया गया

#|1,1:A

यह काफी आसान होना चाहिए, लेकिन आप कभी नहीं जानते हैं।

"समस्या" यह थी कि Cआपके कोड के बिना , आपको एक त्रुटि मिली।

मेयूब का समाधान:

#|1,1:A+BC

अनुक्रम में प्रत्येक आइटम पहला इनपुट प्लस दूसरी बार तीसरी (उर्फ 1) है

मेरे समाधान:

#1,1:A+B,C

पहला इनपुट और दूसरा इनपुट, और तीसरा इनपुट (1) के बीच अनुक्रम चक्र। दूसरे में पहला आइटम है A+B

#1,1:A+B+C-C

मेयूब के समाधान के समान - गुणा करने के बजाय B*C, बस जोड़ता है Cऔर फिर इसे घटाता है।

इसे ऑनलाइन आज़माएं!

व्याख्या

#|1,1      Append 1 and 1 to the end of the user's input
     :     Set mode to : (sequence 1: if given n, output nth term in sequence; if given no n, output whole sequence)
      A    Each item in the sequence equals the first input

वर्तमान में, यह प्रोग्राम आउटपुट करता है 1, चूंकि कोई उपयोगकर्ता इनपुट नहीं है, पहला इनपुट 1डिफ़ॉल्ट इनपुट ( #) में पहला है ।


डॉक्स वास्तव में अजीब तरह से शब्द लगते हैं, मैं अपने जीवन के लिए यह पता नहीं लगा सकता कि इसका क्या मतलब हैDefault input is combined with user input to form the total input, which must align with the expected input (which is based on the highest input requested by the Sequence Definition)
स्काइड्सदेव

@ माय्यूब यह अजीब है, मुझे इसे सही तरीके से कहने का एक तरीका खोजने की जरूरत है। मूल रूप से, प्रोग्राम के लिए आपका इनपुट A,B,C,D,Eकोड में वेरिएबल्स द्वारा क्वियर किए गए उच्चतम इनपुट के बराबर हो सकता है । उदाहरण के लिए, यदि किसी भी बिंदु पर Dआपके प्रोग्राम में वैरिएबल है, तो पार्सर वहां 4 इनपुट होने की उम्मीद करता है, लेकिन अगर वहाँ भी है E, तो पार्सर 5 इनपुट होने की उम्मीद करता है। अपेक्षित राशि से कम नहीं हो सकती। हालांकि, हमेशा एक वैकल्पिक अंतिम इनपुट nहोता है, जिसका उपयोग अलग-अलग तरीकों से अलग-अलग तरीकों से किया जाता है।
स्टीफन

@ ऊपर जिस स्निपेट को मैंने पोस्ट किया है उसमें एक ए है A, इसलिए यह एक इनपुट के लिए दिखता है। चूंकि दो हैं, दोनों से #जो डिफ़ॉल्ट इनपुट निर्दिष्ट करता है, यह पहले एक के Aमूल्य के रूप में और दूसरे के रूप में उपयोग करता है n
स्टीफन

तो अगर मुझे 2 इनपुट देने थे, और एपेंड करना BC, A पहला इनपुट होगा, B दूसरा होगा, C 1 होगा, और n दूसरा 1 होगा?
स्काइडदेव

@ माय्यूब बिल्कुल, मेरे भद्दे डॉक्स के लिए खेद है। TMI: यदि शुरुआत की तरह #1,1(कोई पट्टी नहीं) दिखती है , तो यह होगा: A पहले 1 के रूप में, दूसरे इनपुट के रूप में B, पहले इनपुट के रूप में C, और दूसरे इनपुट के रूप में n। आप यह भी कर सकते हैं #1|1, जहां A पहला 1 है, B पहला इनपुट है, C दूसरा इनपुट है, और n दूसरा 1. है
स्टीफन

3

Node.JS संस्करण 7.3.0 (डोम हेस्टिंग्स द्वारा क्रैक किया गया)

var p=process,f;(_=>{var w=p.stdout.write,n='f'+(Math.random()*1e7|0),l=1
f=p.stdout.write=a=>eval(`(function ${n}(a){while(l&&((typeof a)[0]!='s'||'f'+a!=n));a=l?l="":a;w.apply(p.stdout,arguments);})`)(a)})();

पहले के बाद दूसरा कोड ब्लॉक रखें।

डिस्क्लेमर: दूसरा कोड ब्लॉक अपने आप काम नहीं करेगा (पहले के बाद नहीं रखा जाएगा)। यदि यह अनुमति नहीं है, लेकिन मैं दूसरा स्निपेट संशोधित कर सकता हूं।

यह एक पूर्ण कार्यक्रम है। आउटपुट process.stdout(STDOUT) है, इनपुट है process.argv(कमांड लाइन आर्ग्युमेंट्स)

यह मेरा पहला पुलिस और लुटेरे है, उम्मीद है कि यह एक अच्छी चुनौती है :)

इसे ऑनलाइन आज़माएं!


चुनौती बताई

n0 से 1e7 तक एक यादृच्छिक चर उत्पन्न करता है । यदि आप राइट के साथ लिखते हैं n, तो कुछ भी प्रिंट नहीं करता है, लेकिन l0 पर सेट होता है, जो लिखने के कार्य को "अनलॉक" करता है, जिससे आप कुछ भी प्रिंट कर सकते हैं। यदि आप एक गैर-स्ट्रिंग के साथ लिखने को कॉल करने का प्रयास करते हैं, तो आपको एक अनंत लूप में भेजता है। यदि आप nराइट "लॉक" होने के अलावा किसी और चीज़ के साथ लिखने की कोशिश करते हैं, तो आपको अनुमान लगाने से रोकने के लिए एक अनंत लूप में भेजता है।

इच्छित समाधान

स्नोक्स उस टाइपोफ़ को अतीत करता है जो केवल एक प्रतीक का उपयोग करके तार के लिए जांचता है, जो कि एस के साथ भी शुरू होता है। यह eval कॉल के परिणामस्वरूप फ़ंक्शन में एक त्रुटि फेंकता है क्योंकि आप स्ट्रिंग "f" को एक प्रतीक में नहीं जोड़ सकते। हम त्रुटि को पकड़ते हैं और nस्टैक ट्रेस से पुनर्प्राप्त करने के लिए रेगेक्स का उपयोग करते हैं , जहां यह फ़ंक्शन के नाम पर है। फिर हम लिखने की कोशिश करते हैं nजो कुछ भी प्रिंट नहीं करता है, लेकिन "लॉक" वेरिएबल lको लिखने के फ़ंक्शन को "अनलॉक" करने के लिए सेट करता है। अब जब कि लेखन कार्य अनलॉक हो गया है तो हम केवल राशि को प्रिंट करते हैं।

try{f(Symbol())}catch(e){f(e.stack.match(/f(\d+)/)[1])
f(+p.argv[2]+ +p.argv[3]+"")}


यह प्रतिभा है ... मैं मूल रूप से सही रास्ते पर था! मस्तिष्क प्रशिक्षण के लिए धन्यवाद!
डोम हेस्टिंग्स

3

RProgN2 , अर्नोल्ड पामर द्वारा क्रैक किया गया

"+-/*÷^"{²[[\=};

सभी गणित ऑपरेटरों पर लिखते हैं, उन्हें बहाल करने का कोई तरीका नहीं है। विशेष रूप से, यह उन्हें एक फ़ंक्शन के साथ बदल देता है जो स्टैक पर शीर्ष दो वस्तुओं को हटा देता है।

इसे ऑनलाइन आज़माएं!

मूल समाधान

{S]‘[L}`d={0RL}`i=«x=y=x{xd`x=yi`y=x}:y»`+=

{S]‘[L}`d={0RL}`i=«x=y=x{xd`x=yi`y=x}:y»`+=
{     }`d=                                  #Define a function, "d", which returns n-1
 S                                          #Convert the input to a stack, which, as a number, makes a stack of 1 - n.
  ]‘                                        #Duplicate the stack, and pop the top value off it.
    [                                       #Discard the popped'd value.
     L                                      #Get the length of the stack, which now is n-1.
          {   }`i=                          #Define a function, "i", which returns n+1
           0R                               #Get the range of numbers between 0 and n.
             L                              #Get the length of that stack, which is n+1
                  «                    »`+= #Define a function, "+", which takes two numbers, and outputs their sum. We use «» here, because it localises references, instead of globalising them.
                   x=                       #Set the first input to the value of "x", which by default, is x.
                     y=                     #Ditto for y.
                       x{          x}:      #While x is truthy, which in this case, is non-zero.
                         xd                 #Get x - 1
                           `x=              #Set x to it.
                              yi`y=         #And set y to y + 1
                                      y     #Push y to the output. And we're done.

इसे ऑनलाइन आज़माएं!


मैं आपके प्रलेखन से गुजर रहा हूं और मुझे यह पता नहीं लग सकता है कि ²प्रतीक क्या करता है। मेरी देखभाल करने के लिए?
अर्नोल्ड पामर

यह दस्तावेज RProgN2 के लिए अविश्वसनीय रूप से प्रासंगिक नहीं है, और यह प्रतीक [[इस मामले में अगली दो अवधारणाओं को लेता है , और उन्हें एक समारोह में लपेटता है @ArnoldPalmer
ATaco


डांग, यह बहुत बेहतर है। मैं स्टैक ऑपरेटरों के बारे में नहीं जानता था, जो निश्चित रूप से काम कर रहे होंगे। इसके अलावा, यह जानकर «»कि स्थानीय वैरिएबल बनाता है क्योंकि वैश्विक लोगों को गड़बड़ करने के लिए सुपर सहायक हो सकता है।
अर्नोल्ड पामर

3

हस्केल , 161 144 बाइट्स, ब्लैककैप द्वारा क्रैक किया गया

{-#OPTIONS_GHC -fth -w#-}
module M where

STDIN को इनपुट, STDERR को आउटपुट। कार्यक्रम के अंत में जोड़ें।

संपादित करें: बिना किसी अतिरिक्त जीएचसी तर्क के संकलित किए जाने का इरादा, केवल सामान्य ghc --make prog.hs

बाइट गिनती कम करने के लिए फिर से संपादित किया गया।

मज़े करो!


इसलिए मैं ऐसा नहीं कर सकता, क्योंकि मुख्य कार्य को नहीं कहा जाएगा? main = do x <- readLn :: IO Integer; y <- readLn; print $ x + y
ब्लैककप

@BlackCap नहीं, क्योंकि GHC mainफ़ंक्शन को मॉड्यूल में होने की उम्मीद करता है Mainजब कोई -main-isझंडा प्रदान नहीं किया जाता है।
zbw

यह काम नहीं करता है, लेकिन मैं इस विचार को वैसे भी साझा करना चाहता हूं
BlackCap

मैं कहूंगा कि फटा। यहाँ मेरा इरादा समाधान था, नीचे गोल्फ। यह TIO पर काम नहीं करता है, क्योंकि आवरण कंपाइलर को इनपुट नहीं भेजता है।
zbw

यदि आप अपना समाधान पोस्ट करते हैं, तो मैं इसे दरार कर दूंगा।
zbw

3

Mascarpone , द्वारा फटा Ilmari कारोनेन

[ Make 'i' and 'z' print 'q' ]$
v ['q.]v* 'i<^
v ['q.]v* 'z<^

[ Disable some standard commands ]$
v[]v*   '1<^
v[]v*   '$<^
v[]v*   '@<^
v[]v*   '{<^
v[]v*   '}<^
v[<:]v* '<<^
v[]v*   'v<^$

इनपुट stdio पर चर्च अंक है, iवेतन वृद्धि के लिए और zशून्य के लिए। उदाहरण के लिए, 2 + 3 होगा:

iiziiiz

एक अनुगामी न्यूलाइन

आउटपुट के साथ stdout पर एक संख्या होनी चाहिए, उसी रूप में stdio पर। उदाहरण के लिए, यदि उत्तर पांच है तो आपको आउटपुट देना चाहिए:

iiiiiz

(मस्करपोन की संख्या की कोई अवधारणा नहीं है)


इरादा समाधान:

: '[/''/'i/'./' /':/',/'>/'!/']/* 'i<^
: '[/':/',/'>/'!/']/* 'z<^
: ,>!
'z.

यह दस्तावेज़ीकरण से तुरंत स्पष्ट नहीं है, लेकिन जैसा कि @IlmariKaronen ने अपनी दरार में कहा है, मस्करपोन में स्ट्रिंग शाब्दिक वास्तव में वर्णों के अनुक्रम को धकेलने के लिए वाक्यात्मक चीनी है।

मैंने जानबूझकर ऐसी टिप्पणियां लिखी हैं, [this]$जिससे लगता है कि मैं एक स्ट्रिंग को आगे बढ़ा रहा हूं और इसे तुरंत पॉप कर रहा हूं। एक भोले पटाखे ने [:,>!]/*किसी स्ट्रिंग को धकेलने, दुभाषिए के साथ स्वैप करने और उसकी व्याख्या करने जैसे कुछ करने की कोशिश की होगी ।

मैं उस दुभाषिया को पॉप करने का नाटक भी करता हूं जिसे मैंने स्टैक पर छोड़ दिया था $, लेकिन $पहले से ही एक एनओपी के लिए फिर से परिभाषित किया गया है। आपको स्टैक पर इस दुभाषिया के साथ छोड़ दिया जाता है, और आपको इसे पूरे कार्यक्रम को गर्त में ले जाना होता है; हर तार के प्रत्येक वर्ण को गर्तित करें।


फटा। और नहीं, मैंने इस चुनौती से पहले मस्कारपोन के बारे में कभी नहीं सुना।
इल्मरी करोनन

@IlmariKaronen नई पसंदीदा भाषा? बहुत बढ़िया!
BlackCap

2

इल्मारी कारोनेन द्वारा क्रैक किया गया सी # (.NET कोर)

साथ ही यहोशू द्वारा फटा

namespace System
{
    class Console
    {
        static void Main()
        {
            //Your code goes here
        }
    }
}

स्टड से दो मान पढ़ता है और परिणाम को स्टडआउट लिखता है। विंडोज पर फ्रेमवर्क संस्करण 3, 4.6 और टीआईओ के साथ परीक्षण किया गया ।

यहाँ पूरा कार्यक्रम है जो मैंने इरादा किया था।

namespace System
{
    class Console
    {
        static void Main()
        {
            var t = Reflection.Assembly.Load("mscorlib").GetType("System.Console");
            var r = t.GetMethod("ReadLine");
            int a = int.Parse((string)r.Invoke(null, null));
            int b = int.Parse((string)r.Invoke(null, null));
            var w = t.GetMethod("WriteLine", new[] { typeof(int) });
            w.Invoke(null, new object[] { a + b });
        }
    }
}

इसे ऑनलाइन आज़माएं!



codegolf.stackexchange.com/a/133412/14306 मुझे लगता है कि यह इच्छित समाधान नहीं था।
जोशुआ

@ इलमारीकरोन: १। यह अभीष्ट उपाय था।
राजनागुल

@ जोशुआ: +1 मेरे द्वारा किए गए उद्देश्य से भिन्न समाधान खोजने के लिए।
राजनागुल

2

गोल्फस्क्रिप्ट , डेनिस द्वारा क्रैक

{}' !$%&()*+,-./<=>?@[\]^`|~'':'*~;

इसे ऑनलाइन आज़माएं!

यह है एक चुनौती, सब के बाद, तो क्यों GolfScript कोशिश नहीं?

एक वैध समाधान एक स्निपेट होना चाहिए जो स्टैक से दो पूर्णांक पढ़ता है, उन्हें एक साथ जोड़ता है और स्टैक पर परिणाम देता है। पकड़ यह है कि ऊपर के कोड के पुनर्परिभाषित होने के बाद भी यह काम करना चाहिए, बिल्ट-इन GolfScript ऑपरेटरों को लगभग कुछ भी नहीं करने के लिए। कम से कम मैंने ;अछूता छोड़ दिया , इसलिए आप स्टैक से अभी भी मानों को पॉप कर सकते हैं। ;-) आपका कोड मानक गोल्फस्क्रिप्ट दुभाषिया पर काम करना चाहिए, जैसा कि टीआईओ पर लागू किया गया है (ऊपर लिंक देखें)।


डेनिस का समाधान , मेरी तरह , गोल्फस्क्रिप्ट की शायद ही कभी इस्तेमाल की जाने वाली सुविधा पर निर्भर करता है जो रूबी कोड को दोहरे उद्धरण चिह्नों में प्रक्षेपित करने की अनुमति देता है। हम इस सुविधा का उपयोग एक नए अतिरिक्त ऑपरेटर को परिभाषित करने के लिए करते हैं जो बिल्ट-इन +ऑपरेटर की तरह ही काम करता है और फिर इसे कॉल करता है।

(गोल्फस्क्रिप्ट में रूबी इंटरपोलेशन सुविधा का एक कारण यह है कि शायद ही कभी इस्तेमाल किया जाता है, अजीब बात है, इंटरपोलेटेड रूबी कोड को पार्सिंग के दौरान निष्पादित किया जाता है , और इसके आउटपुट को गोल्फस्क्रिप्ट दुभाषिया द्वारा कैश किया जाता है। इस प्रकार, यदि आप उदाहरण के लिए इंटरपोलेटेड रूबी कोड के साथ एक स्ट्रिंग है। एक लूप में, कोड वास्तविक प्रोग्राम शुरू होने से पहले और उसके बाद लूप के प्रत्येक भाग पर हमेशा समान मान लौटाएगा। आप इसके चारों ओर काम कर सकते हैं, जिसमें स्ट्रिंग इवलर का उपयोग पार्सिंग को स्थगित करने के लिए किया जा सकता है, लेकिन यह पहले से ही अजीब सिंटैक्स बनाता है। बदसूरत और क्रिया, और किसी भी मामले में, इस चुनौती के लिए मैंने eval ऑपरेटर को भी अक्षम कर दिया , हालांकि, यह पता चला है कि नए अंतर्निहित गोल्फस्क्रिप्ट ऑपरेटरों को परिभाषित करना केवल एक बार चलेगा, यह एक ऐसी चीज़ है जो वास्तव में काफी अच्छी तरह से और साफ-सफाई से काम करती है।)~



फटा। अंत में मुझे पता चला कि मैं क्या गलत कर रहा था।
डेनिस

@ डेनिस: हाँ, आपने इसे इस बार नाम दिया है। एफडब्ल्यूआईडब्ल्यू, मेरा इच्छित समाधान था "#{var'_','gpush a+b'.cc2}";_, जो कुछ बाइट्स को छोटा करने के अलावा बिल्कुल आपकी तरह काम करता है।
इल्मरी करोनन

2

Node.js v8.2.0, डोम हेस्टिंग्स द्वारा क्रैक किया गया

let mess = ctx => f => new Proxy (f, {
  has: (t, p) => p in t || p in ctx
, get: (t, p) => {
    let k = p in t? t[p]: ctx[p];

    if (k instanceof Function) return (
      function fetch (_k) {
        return mess (ctx) ( x => ( q => q instanceof Function
                                      ? fetch (q)
                                      : t (q)
                                  ) ( _k(x) )
                          )
      })(k);

    return k;
  }
});

with (mess (global) (x => x)) {
  dot   = f => a => b => f(a(b))
  ap    = f => g => x => f (x) (g (x))
  flip  = f => x => y => f (y) (x)
  Const = a => b => a
  id    = x => x
  num   = n => n (x => x + 1) (0)
  log   = console.log

  let x = flip (Const . id . id)
    , y = flip (Const . id . id . id)
  for (let i = 0; i < process.argv[2]; i++) x = ap (dot) (x)
  for (let i = 0; i < process.argv[3]; i++) y = ap (dot) (y)
  process.argv = [];

  logic = x => y => /* Your code here */;

  log . id . num ( logic (ap (dot) (x))
                         (f => z => (( y(flip (id) . id . flip (dot (id)) (f)) ) (Const (z))) (id) )
                 );
}

आप logicफ़ंक्शन को कार्यान्वित करने के लिए हैं। इनपुट प्रदान की गई दलीलें हैं (स्टडिन से), आउटपुट वह है जो आपका फ़ंक्शन देता है (जिसे स्टडआउट में मुद्रित किया जाता है)।


मेरा कोड चर्च इनपुट से संख्याओं को कूटबद्ध करता है। बाकी कोड सिर्फ आपको डराने के लिए है।
मेस फंक्शन पॉइंट-फ्री नोटेशन ( a . b == dot (a) (b)) को लागू करने के लिए कुछ चालबाजी करता है, जिसका मैं मुख्य रूप . id .से यादृच्छिक स्थानों पर जोड़ने के लिए उपयोग करता हूं , जो कुछ भी नहीं करता है, लेकिन किसी को भी कार्यात्मक प्रोग्रामिंग से अपरिचित भ्रमित करेगा।
संख्याओं पर लागू होने से पहले मैं उन्हें logicफ़ंक्शन में पास करता हूं x+1और y-1, जो 0 तक जोड़ता है, इसलिए यह अस्पष्टता में जोड़ने के लिए एक और एनओपी है।

इरादा समाधान था:

logic = x => y => f => z => x (f) (y (f) (z))


@DomHastings यह इच्छित समाधान नहीं है, लेकिन मैं कह रहा हूँ कि आप कर सकते हैं, जब तक कि कार्यक्रम बिना किसी अपवाद के
रुक

मैंने अभी एक विकल्प पोस्ट किया है! (आप उस जवाब के इतिहास में मेरा पिछला समाधान देख सकते हैं, हालांकि!)
डोम हेस्टिंग्स

अरे वाह, मैं एक तरह से बंद था ... फिर भी यह मेरे पहले बहुत धोखा प्रयास से बेहतर है! पहेली के लिए धन्यवाद!
डोम हेस्टिंग्स

2

सूचित 7 , ppperry द्वारा फटा

For reading a command: rule fails.

[Your code here.]

इनपुट को एक इंटरैक्टिव कमांड, जैसे add 17 to 25या , खिलाड़ी द्वारा टाइप किया जाना चाहिए sum 17 25। आप कमांड के सटीक रूप को चुनने के लिए स्वतंत्र हैं जिसे दर्ज किया जाना चाहिए, जब तक कि इसमें दो नंबर शामिल हों। 42कमांड के जवाब में संख्याओं का योग (जैसे ) मुद्रित किया जाना चाहिए।

बेशक, चुनौती यह है कि जब पूरी "एक कमांड पढ़ना" गतिविधि को एक नो-ऑप द्वारा बदल दिया जाता है। इस समस्या को हल करने के कई तरीके हैं, लेकिन कम से कम इसे भाषा के साथ कुछ परिचित होने की आवश्यकता है। मैं जिस के साथ आया था वह वास्तव में काफी सरल है, अगर थोड़ा अप्रत्याशित हो।

मैंने उबंटू लिनक्स पर GNOME Inform 7 IDE, संस्करण 6L38 में अपने समाधान का परीक्षण किया है । इरादा समाधान Glulx और Z- मशीन बैक-एंड दोनों पर काम करता है, और इन्फॉर्म 7 के अन्य संस्करणों पर भी काम करना चाहिए। ध्यान दें कि (उपयुक्त कार्य के बिना) लगभग ऊपर कोड दुभाषिया को व्यस्त-लूप का कारण बनेगा जब यह एक कमांड पढ़ने की कोशिश करता है; ऐसा होने पर Z- मशीन दुभाषिया पूरी तरह से अनुत्तरदायी हो जाता है, और IDE के भीतर से रोका नहीं जा सकता है, इसलिए मैं परीक्षण के लिए Glulx का उपयोग करने की सलाह देता हूं।


फटा , और यदि आप सोच रहे थे, तो मैंने इस चुनौती से पहले कभी भी सूचना नहीं सुनी
pppery

2

सीपीथॉन 3 (फिर से), सिसेफस द्वारा क्रैक किया गया

import sys,os,functools
def p(f,e,a,_=os._exit):
 if e == "c_call":_(1)
sys.setprofile(p)

आप अपनी इच्छानुसार कुछ भी कर सकते हैं - जब तक सी में लागू नहीं किया जाता है। इसका मतलब है कि नहीं print, नहीं input- उन सभी को _(1)लाइन मारना और समाप्त करना होगा। STDIN से इनपुट दो अलग-अलग लाइनों पर संख्या के साथ, STDOUT में आउटपुट। मुझे आश्चर्य है कि यह कब तक चलने वाला है ... इस अक्षम चाल के साथ आने के बाद दूसरे काम करने वाले स्निपेट को खोजने के लिए मुझे काफी समय लगा। स्पष्ट रूप से Cpython को निर्दिष्ट करने के लिए sys.setprofile के कुछ वैकल्पिक कार्यान्वयन पर आधारित होने से बचने के लिए।


फटा। मुझे बहुत कम पता है कि यह क्यों काम करता है।
सायसेफस

मुझे लगता है कि मैं अब पूछ सकता हूं: क्यों functools?
डेनिस

@ डेनिस क्योंकि sispyphus ने एक बचाव का रास्ता खोजा था, न कि इसका कोई हल
पिपरी

@Sisyphus आपकी दरार अजगर में एक बग के
12

2

जावा 8 ( क्रैक )

दूसरा प्रयास। इस बार मैंने दो मिनट का परीक्षण किया।

static {

    try {

        System.setIn(null);
        System.setOut(null);
        System.setErr(null);

        for (Method m : System.class.getMethods()) {

            m.setAccessible(false);

        }

        System.class.getMethod("getSecurityManager", new Class[0]).setAccessible(false);

        for (Method m : Class.class.getMethods()) {

            m.setAccessible(false);

        }

        SecurityManager mngr = new SecurityManager() {

            @Override
            public void checkPermission(Permission p) {

                if (p.getName().equals("createSecurityManager")) throw new SecurityException();
                if (p.getActions().startsWith("read")) throw new SecurityException();

            }

        };

        System.setSecurityManager(mngr);

        // Your code goes here.

    } catch (Throwable t) {

    }

}

अधिकांश चीजें shouuuld कवर किया।


1
क्या आप इसे उचित आयात के साथ एक वर्ग में संलग्न करेंगे? यह एक तरह की चुनौती है जहां यह छोटे बदलाव एक प्रविष्टि कर सकते हैं या तोड़ सकते हैं। मुझे इस के लिए कई समाधान मिल गए हैं, लेकिन यह बहुत कम हो जाता है यदि आप इसे केवल एक वर्ग / इंटरफ़ेस में शामिल करते हैं। इसके अलावा, उन सभी को हटाने के लिए प्रारूप जबकि लाइनें हमारे लिए बहुत अच्छी होंगी, पाठकों।
ओलिवियर ग्रेगोइरे

वहाँ, एक फटा हुआ जवाब बिल्कुल अपने कोड का उपयोग कर। और एक +1 क्योंकि ऐसा लगता है कि मैं इसे भूल गया हूं। माफ़ करना।
ओलिवियर ग्रेगोइरे

#SetAccessible (गलत) कॉल कुछ भी नहीं करते हैं।
नेवले

1

अजगर 2 फटा

import sys,hashlib
c=open(__file__).read().split()[-1]
if c!='#'and hashlib.sha256(c).hexdigest()!='e6400dd63733d10ec042e3c28033cfa85e1d25fbef80020810c354d7c942e843':sys.exit() #

इसे ऑनलाइन आज़माएं!

मैं इसका उत्तर यह कहकर प्रस्तुत करूंगा कि यह उत्तर एक झटका देने वाला कदम है, जिसका उद्देश्य निम्नतर उत्तर के रूप में है।


गेहूं के जादूगर और HyperNeutrino के उत्तरों से प्रेरित ।

स्निपेट स्रोत फ़ाइल को पढ़ता है और जारी रखने से इंकार कर देता है यदि अंतिम व्हाट्सएप-कोड के अलग-अलग चंक को2525 में हिलाया नहीं जाता है e6400dd63733d10ec042e3c28033cfa85e1d25fbef80020810c354d7c942e843

संपादित करें : इस टिप्पणी के जवाब में थोड़ा संपादित । मुख्य समस्या नहीं बदलती है, कोई भी दरार प्रयास अमान्य नहीं है।


1
आरई पहला स्निपेट:This code is not allowed to crash or exit.
स्टीफन

यह अमान्य है क्योंकि यह बाहर निकलता है, जिसे पहले स्निपेट के लिए अनुमति नहीं है।
DJMcMayhem


1

जावा 8 @ OlivierGrégoire द्वारा क्रैक किया गया

मैंने इसे यथासंभव कठिन बनाने की कोशिश की! :) और, अब तक के अन्य जावा उत्तर के विपरीत, आपको चुनौती के सटीक नियमों का पालन करना होगा, इस पूरे स्निपेट के बाद इसे रखकर (इसलिए नहीं, आप अपना कोड नहीं डालेंpublic static void main(String[] args) विधि में नहीं रखते हैं, आप इसे डालते हैं। पूरी कक्षा के बाद। :) शुभकामनाएँ!

मैंने यह दिखाने के लिए टिप्पणियां जोड़ी हैं कि क्या प्रतिबंधित है।
( इस पोस्ट से प्रेरित है, जो मेरे दृष्टिकोण के लिए उपयोग किए जा सकने वाले दृष्टिकोण के साथ कम प्रतिबंधात्मक और व्यवहार्य है। )

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
import java.io.FilePermission;
import java.io.PrintStream;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class Main {

  // Put everything in a static block so it is run before the static main method 
  // and any trailing (static) initializer-blocks:
  static {
    try {
      initializing();
    } catch (final Exception e) {
    }
  }

  static void initializing() throws Exception {
    // Overwrite System.out, System.err and System.in:
    System.setOut(new PrintStream(new ByteArrayOutputStream()));
    System.setErr(new PrintStream(new ByteArrayOutputStream()));
    System.setIn(new ByteArrayInputStream(new byte[0]));

    // Enable reflection for System.out, System.err and System.in:
    final Field modifiersField = Field.class.getDeclaredField("modifiers");
    modifiersField.setAccessible(true);
    final Class<?> fdClass = java.io.FileDescriptor.class;
    final Field outField = fdClass.getDeclaredField("out");
    outField.setAccessible(true);
    modifiersField.setInt(outField, outField.getModifiers() & ~Modifier.FINAL);
    final Field errField = fdClass.getDeclaredField("err");
    errField.setAccessible(true);
    modifiersField.setInt(errField, errField.getModifiers() & ~Modifier.FINAL);
    final Field inField = fdClass.getDeclaredField("in");
    inField.setAccessible(true);
    modifiersField.setInt(inField, inField.getModifiers() & ~Modifier.FINAL);

    // Replace existing System.out FileDescriptor with a new (useless) one:
    outField.set(null, new FileDescriptor());
    // Replace existing System.err FileDescriptor with a new (useless) one:
    errField.set(null, new FileDescriptor());
    // Replace existing System.in FileDescriptor with a new (useless) one:
    inField.set(null, new FileDescriptor());

    // Disable reflection for System.out, System.err, System.in again:
    modifiersField.setInt(outField, outField.getModifiers() & ~Modifier.FINAL);
    modifiersField.setInt(errField, errField.getModifiers() & ~Modifier.FINAL);
    modifiersField.setInt(inField, inField.getModifiers() & ~Modifier.FINAL);
    inField.setAccessible(false);
    errField.setAccessible(false);
    outField.setAccessible(false);
    modifiersField.setAccessible(false);

    // Overwrite the SecurityManager:
    System.setSecurityManager(new SecurityManager() {

      private boolean exitAllowed = false;

      @Override
      public void checkExec(final String cmd) {
        throw new SecurityException();
      }

      @Override
      public void checkPermission(final java.security.Permission perm) {
        final String name = perm.getName();
        // You're not allowed to read/write files:
        if (name.equals("setIO") || name.equals("writeFileDescriptor")
            || name.equals("readFileDescriptor")
            || ((perm instanceof FilePermission) && name.startsWith("/proc/self/fd/"))) {
          throw new SecurityException();
        }
        // You're not allowed to overwrite the Security settings:
        if (name.equals("setSecurityManager") || name.equals("suppressAccessChecks")) {
          throw new SecurityException();
        }
        // You're not allowed to use reflection anymore:
        if (name.equals("getModifiers") || name.equals("get") || name.equals("set")
            || name.equals("setBoolean") || name.equals("setByte")
            || name.equals("setChar") || name.equals("setShort") || name.equals("setInt")
            || name.equals("setLong") || name.equals("setFloat") || name.equals("setDouble")
            || name.equals("setFieldAccessor") || name.equals("setFieldAccessor")) {
          throw new SecurityException();
        }
        // When you try to leave the current VM it will stop the program:
        if (name.startsWith("exitVM") && !this.exitAllowed) {
          this.exitAllowed = true;
          System.exit(0);
        }

        // You know what, nothing is allowed!
        throw new SecurityException("Mhuahahahaha!");
      }
    });
  }

  public static void main(String[] args) {
    // Overwritting all given arguments:
    args = new String[0];

    // Exit the program before you can do anything!
    System.exit(0);
  }
}

// Your code goes below:

इसे यहाँ आज़माएँ। (ideone.com TIO के बजाय, क्योंकि यह वहां काम नहीं करता है .. परीक्षण ग्रहण IDE में किया गया है, लेकिन यदि आप ideone.com का उपयोग करते हैं तो मेरा इच्छित समाधान काम करता है)



1

जेली: CRACKED

यह गेहूं जादूगर के भयानक अजगर जवाब की तुलना में पागलपन से आसान होगा, लेकिन यहां हम जाते हैं: पी

“for c in code_page:
 if c in atoms:atoms[c].call=None”ŒVø<insert code snippet here>

पहला स्निपेट सहित मेरे समाधान समाधान का sha256 हेक्सडीगस्ट है cfeb1e193ad77f66f039c0d6a792a3e4c311490f6412698e019ca1fae10c0e0a

ध्यान दें

तार को छोड़कर आपके पास कोड में कोई नई सूची नहीं हो सकती है अन्यथा यह कोड भी नहीं चलाया जाएगा, जो इस चुनौती के उद्देश्य को पराजित करता है।

DJMcMayhem द्वारा क्रैक किया गया

निष्पक्ष होने के लिए, यह एक नई लाइन का उपयोग करता है, इसलिए मैं एक ऐसा समाधान देखना चाहता हूं जो नई रेखा का उपयोग नहीं करता है।

जोनाथन एलन द्वारा एक समाधान भी

यह एक नई लाइन का उपयोग नहीं करता है, इसलिए इसे क्रैक किया गया है। : पी

मेरा समाधान यह है:

“for c in code_page:
 if c in atoms:atoms[c].call=None”ŒVø“print(int(input())+int(input()))”ŒV

पहला स्निपेट केवल एकल वर्ण परमाणुओं को हटाता है जिसका अर्थ है कि पायथन इवैल अभी भी काम करता है :)):


दूसरा स्निपेट हमेशा पहले स्निपेट के अंत में जोड़ा जाता है।
स्टीफन

@StepHen केवल निर्दिष्ट करना: P लेकिन मैं नोट जोड़ना भूल गया; यह वास्तव में महत्वपूर्ण है।
हाइपरएन्यूट्रीनो

3
मुझे नहीं लगता कि आप लुटेरों को इस तरह प्रतिबंधित कर सकते हैं। यदि आप इसे Newlines के साथ क्रैक कर सकते हैं, तो यह एक मान्य क्रैक है। वैसे भी न्यूलाइन्स को जोड़ने से रोकने के लिए, या पहली पंक्ति को निष्पादित करने के लिए मजबूर करने के लिए क्या है?
DJMcMayhem


1
मुझे आपकी इच्छित दरार पसंद है। बहुत डरपोक।
डेनिस

1

जावास्क्रिप्ट, क्रैक किया गया

इनपुट: prompt() दो बार

आउटपुट: console.log()

मेरा हल jsfiddle में काम नहीं करता है। Google क्रोम के JS कंसोल के साथ रिक्त पृष्ठ के बारे में काम करता है।

prompt=console=0

मेरा समाधान:

x=document.createElement("iframe")
x.src="data:text/html,<script>console.log(prompt()-0+(prompt()-0))</script>"
document.body.appendChild(x)

व्याख्या:

मैंने उन्हें 0 के बराबर सेट करके संकेत और कंसोल हटा दिया।

अपने समाधान में मैं एक iframe बनाता हूं, जो सैंडबॉक्स बनाता है, और विंडो का एक नया उदाहरण जहां प्रॉम्प्ट और कंसोल ठीक से काम करते हैं।



@CRDrost मुझे विश्वास नहीं है कि कल्पना में मौलिकता परीक्षण है, और आप दोनों स्निपेट नहीं दिखाते हैं।
स्टीफन

क्षमा करें, आप सही हैं, मैं गलत हूं।
CR Drost

1

जावा, क्रैक किया गया

import java.lang.reflect.*;
public class Main{
  public static void main(String... args){
    System.setOut(null);
    System.setErr(null);
    /*Your code here*/
  }
}

यह दरार करना बहुत आसान होना चाहिए

इरादा समाधान

import java.lang.reflect.*;
public class Main{
public static void main(String... args){
  System.setOut(null);
  System.setErr(null);
  try{
    Class<?> cistream = Class.forName("java.io.InputStream");
    Class<?> cfostream = Class.forName("java.io.FileOutputStream");
    Class<?> costream = Class.forName("java.io.OutputStream");
    Class<?> cfdescriptor = Class.forName("java.io.FileDescriptor");
    Object sout = cfostream.getConstructor(cfdescriptor).newInstance(cfdescriptor.getField("out").get(null));
    Class<?> csys = Class.forName("java.lang.System");
    Field mod = Field.class.getDeclaredField("modifiers");
    mod.setAccessible(true);
    Field stdout = csys.getField("out");
    mod.set(stdout,Integer.class.cast(mod.get(stdout) )&~ Modifier.FINAL);
    stdout.set(null,Class.forName("java.io.PrintStream").getConstructor(costream).newInstance(sout));
    Class<?> cscanner = Class.forName("java.util.Scanner");
    Object scanner = cscanner.getConstructor(cistream).newInstance(System.in);
    Method nextInt = cscanner.getMethod("nextInt");
    int f = Integer.class.cast(nextInt.invoke(scanner));
    int s = Integer.class.cast(nextInt.invoke(scanner));
    int sum = s + f;
    System.out.println(sum);
  }catch(Throwable t){t.printStackTrace();}
  }
}

इसे ऑनलाइन आज़माएं



मैं पूरी तरह से भूल गया java.io.. लेकिन आपको कोई भी समाधान नहीं मिला है ..
रोमन ग्रैफ

मुझे यहाँ कोई समस्या नहीं दिख रही है। मैंने वास्तव में दूसरा स्निपेट लिखा था जिस पर इसे संपादित करना भूल गया। TIO के अनुसार पहला स्निपेट बिना किसी चेतावनी के संकलित होता है।
रोमन ग्रफ

@ ओलिविएरग्रेयर डोन। मुझे लगता है कि कोई भी IDE इसके लिए मुझ पर चिल्लाएगा लेकिन मैं कम से कम कंपाइलर इसे स्वीकार करता हूं ...
Roman Gräf
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.