소스 코드를 해독하십시오 [크래킹 시도를위한 강도 스레드]


44

이것은 주요 소스 코드 해독 문제에 대한 동반자 입니다. 경찰 답변 중 하나를 해독 할 수 있다고 생각되면 솔루션을이 스레드에 대한 답변으로 게시해야합니다.

다시 말해, 각 제출물을 크래킹하려고 한 번 시도합니다. 크래킹 시도는 소스 코드의 해독되지 않은 버전입니다. 추측이 설명 (동일한 문자, 출력 및 언어)과 일치하고 첫 번째 올바른 추측 인 경우 점수를 얻습니다. 프로그램이 원본과 정확히 일치 할 필요는 없으며 동일한 문자를 사용하고 동일한 기능을 수행해야합니다. 이것은 하나 이상의 정답이있을 수 있음을 의미합니다.

가장 많은 점수 (성공한 균열)를 가진 강도가 승리합니다.

리더 보드

너무 많은 해결

20 개 해결

15는 해결

10 개 해결

7 개 해결

5 해결

4 해결

3 해결

2는 해결

1 해결


1
Morot하여 펄 5, 크기 27 - print'pin '= TR ~ (a-ZA) (ZA-z) (R)

WumpusQ.Wumbley @ 우리는 ... 거기 있었어)
마틴 청산을

3
나는 그것을 진정 시키려고 노력하는 시간을 낭비하지 않습니다.

두 개의 질문기구가 주어지면, 스크램블 / 스크램블되지 않은 답변이 반전 된 것으로
보입니다

Ruby, 23 by MegaTom = p % ++. methods [80] [1 ..- 1]
histocrat

답변:


32

Martin Büttner의 CJam, 크기 20

Hi "petStorm!", mame

온라인으로 사용해보십시오.

작동 원리

Hi                      "           int(17)                     ";
   "petStorm!",         "                    len('petStorm!')   ";
                ma      "     atan2(       ,                 )  ";
                  me    " exp(                                ) ";
                        " exp(atan2(int(17), len('petStorm!'))) ";

코드 크래킹

원하는 출력 2.956177636986737은 Double 또는 Double이고 Long이옵니다.

의 문자 만 사용하면 "Stop, Hammer time!"정수가 아닌 Double을 반환하는 4 개의 내장 연산자가 있습니다.

  • mS입니다. asin
  • ma입니다. atan2
  • me입니다. exp
  • mt입니다. tan

그들 모두는를 포함 m하므로 최대 3 개까지 사용할 수 있습니다. 하나가 S하나 a.

이러한 모든 연산자는 입력이 필요하며 ma두 개의 입력을 소비하는 유일한 연산자 입니다. Longs를 푸시하는 방법은 세 가지뿐입니다.

  • "...",문자열 길이를 엄격하게 밀어냅니다 (엄격하게 18 미만).
  • H17을 밀어냅니다.
  • ...!의 논리 NOT을 푸시합니다 ....

우리는으로 잘못된 것을 밀어 넣을 방법이 없으므로 ...마지막 옵션은 항상 0을 밀어 넣습니다.

출력은 시작하거나 끝나지 않습니다 170. 십진수 15 자리가 Double의 일반적인 자릿수이므로 출력이 단순한 Double 인 것 같습니다.

이를 가정하면 코드는 다음 범주 중 하나에 속해야합니다.

  • <Long> <mS|me|mt>{1,3}
  • <Long> <mS|me|mt>{x} <Long> <mS|me|mt>{y} ma <mS|me|mt>{z}.
  • 위의 중 일부는 Long ( i) 또는 반올림 ( mo)으로 캐스트되어 Double에 적용됩니다.

두 번째 경우 x + y + z는 1 또는 2이고 Long 중 하나는 0 또는 17입니다.

나머지는 기본적으로 무차별적인 힘이었습니다. 몇 번의 시도 후에

18 , {H \ ma me 2.956177636986737 =} =

반환 9, 즉

H 9 ma me

원하는 출력을 생성합니다.

남은 것은 문자열에서 9자를 제외한 모든 문자를 제거하는 것입니다. Spaces는 noops이며 iLongs의 noop이므로 "petStorm!"가능한 선택 중 하나입니다.


1
그게 미친 짓이야-그 숫자가 무엇인지 어떻게 알았 니?
Sp3000

1
해당 숫자의 로그 (및 기타)를 검색했지만 결과가 없습니다. 이제 나는 너무 높은 정밀도를 사용하고 있음을 발견했습니다.
jimmy23013

2
@ Sp3000 : 내 답변을 편집했습니다.
Dennis

1
아주 좋아요! 내가 생각하는 문자열에서 두 문자를 더 꺼내야했을 것입니다. 내 원본에는 실제로 문자열 안에 공백이 있었지만 mr길이를 가져 오기 전에는 공백이있었습니다 . 당신이 언젠가는 그것을 알아 내지 못했을 것입니다. ;)
Martin Ender

25

xnor의 Python 3, 크기 12

()and bciprt

아무것도하지 않습니다 (표현식은 비어있는 튜플을 생성하여 인쇄되지 않습니다). 이것은 단락 평가로 인해 작동합니다.


1
Python 3 IDLE에서는을 출력 ()합니다.
Hosch250

@ hosch250 프로그램 (파이썬 파일)에이 없기 때문에 아무것도 출력되지 않습니다 print.
matsjoyce

내가 참조. 커맨드 라인에서 실행 중이었습니다.
Hosch250

47
.... "thing"....
TheDoctor

4
@Imray 단락 때문에-파이썬은 튜플을로드하고 튜플의 값이 참인지 확인합니다. 비어 있기 때문에 거짓입니다. 변수를로드하는 코드 bciprt는 실행되지 않으므로 NameError가 발생하지 않습니다.
Mateon1

20

xnor의 Python, 크기 74

any(print(set is
set)for i in oct(chr is
map))and aeeeeeggiilnnpprrrrrstvw

그거 재미 있었어 FryAmTheEggman, hosch250 및 isaacg에게 제안 / 도움을 주셔서 감사합니다.


1
좋은 작업! 내 솔루션은 매우 비슷했습니다 list(\nprint(range is range)for aacdeeeeehmppprrrrssvwy in\noct(int is int)).
xnor

@xnor LOL 해당 변수 이름. 내가 그런 생각을하지 않은 게 나쁜가요? : P
FryAmTheEggman

2
@FryAmTheEggman 나는 모두가 내 첫 번째 경찰 의 트릭을 사용하기를 기대하고 있다고 생각합니다 .
xnor

@FryAmTheEggman 걱정하지 마십시오, 당신은 유일한 사람이 아닙니다 : P
Sp3000

13

Geobits의 Python 2, 크기 50

print 2**2**2*2**2-22-2**2**2**2/2**2**2**2**2/2/2

출력 42.


1
참고로 :) 참고로 original은 print 2**2**2**2/2**2**2/2**2**2/2-2**2**2*2**2-22이지만 둘 이상의 옵션이 정확하다는 것은 놀라운 일이 아닙니다.
Geobits

13

Peter Taylor의 GolfScript, 크기 13

,22,{.4&?+.}/

여기에서 테스트하십시오.

다른 하나는 Sp3000의 큰 도움으로 만 깨졌습니다. 감사!

여기에 우리가 도착한 방법이 있습니다. Sp3000은 출력에서 ​​일련의 연속 된 숫자 실행을 발견했습니다.

1,2,3,4,[2608852181],4582,4583,4584,4585,4586,[253225388392299],
142924,142925,142926,142927,142928,[302928],497409,497409

우리가 가정 한 것에 기초하여, 이것은 증가하는 순서였으며, 나머지 숫자의 가능한 분할은 하나만 허용했습니다.

1,2,3,4,260,885,2181,4582,4583,4584,4585,4586,25322,53883,92299,
142924,142925,142926,142927,142928,302928,497409,497409

그것은 23 개의 숫자로, 블록을 22 번 반복하고 .(중복 스택 요소)로 블록을 끝내는 강력한 지표였습니다 . 이전 결과가 스택에 남겨지고 최종 반복이 나타납니다 두 번 스택. 그렇습니다 22,{____.}/.

(우리가 가지고 있기 때문에, 좋은 인 지금은 간격을보고, 사람들은 4 힘으로 판명 4하고 ?). 더 정확하게 말하면, 그들은 현재 숫자 인덱스의 네 번째 거듭 제곱입니다. 다음으로 우리는 어느 지수가 차이를 만들 었는지 살펴 보았습니다.

4,5,6,7, 12,13,14,15, 20,21,..?

이진에서 그것들은

00100
00101
00110
00111
01100
01101
01110
01111
10100
10101

그들은 모두 인덱스가 아마와 비트 단위의 논리적을 요구해 있음을 의미합니다 세 번째 비트 세트가 4(우리가 서로를 만들 수 있기 때문에 좋은가 다시 인 4으로 .하고있는이 &). 이 작품 특히, 때문에이 작업 결과 중 하나 0이나 4, 우리가 사용하는 경우 우리가 하나 얻을 지수로 1정확하게 우리가 필요로하는 무엇인가 또는 4 승. 이를 정리해 보자.

22,{.4&?+.}/

블록의 기능은 다음과 같습니다.

.      # Duplicate current index
 4     # Push a 4
  &    # Bitwise and
   ?   # Raise index to resulting power
    +  # Add to previous result
     . # Duplicate for use in next iteration

이제 두 가지 문제가 남았습니다. ,아직 사용하지 않은 길을 잃었고 첫 번째 반복은 특별한 경우 +입니다. 우리는 GolfScript가 스택에 빈 문자열로 시작한다고 STDIN에 아무것도없는 경우 우연히 언급 한 user23013의 관련없는 의견 덕분에 발견했습니다. 그래서 우리 ,는 처음에 다른 문자열을 사용하여 문자열을로 변환 할 0수있었습니다. 이것은 반복의 시작으로 필요한 것입니다.


에 딱 맞다. 이것은 지금 찾을 수없는 OEIS의 시퀀스에서 영감을 받았습니다.
피터 테일러

3
그리고 이것이 강도를 위해 별도의 스레드를 갖는 것이 좋은 생각 인 이유입니다. 좋은 작업!
Dennis


11

문 손잡이로 루비, 크기 17

p 2,%r~n~i=~'*tN'

정말 재미있었습니다. 이 문제를 해결해 준 Sp3000에 감사합니다! 그리고 %r?...?리터럴에는 모든 구분 기호가있을 수 있다는 것을 배웠습니다 . :)


10
문 손잡이로 잘못 오도 된 것으로 print, p인쇄, 정규 표현식 %ri대소 문자를 구분하지 않는 정규 표현식 일치 로 나눕니다 .
Sp3000

11

bwoebi의 PHP, 크기 49

print@substr(new exception,+~$$a+=++$$m+$$i+2+n);

그것은 절대적으로 정신적 이었습니다.

그것은 도착했다

print@substr(new exception,);

상당히 빨리, 그 시점에서 나는 -6쉼표 뒤에 $++$++$++$+=$~main$2남은 것을 줄 무언가가 필요했습니다 .

주요 캐치는이다 $a, $m그리고 $i모든되어 NULL있으므로 간접적를 사용하여, 변수 변수 , 수단 그들은 같은 변수에 대한 모든 점. 그러나 PHP는 변수 변수를 해결하는 데 이상한 일을하는 것 같습니다. 정규 변수를 사용하면 다음과 같은 작업을 수행 할 수 있습니다

echo $a+$a=2;

인쇄합니다 4( 자신 2에게 할당 된 $a다음 추가됨). 그러나 변수 변수로 똑같이하면 :

echo $$a+$$a=2;

2이제 첫 번째 $$a가 과제 전에 평가되므로을 얻습니다 .

결국 나는 +=그 추가 할당 전에 평가되어야하는 RHS에 약간의 증분을함으로써 주문을 강제 할 수 있었다. 그런 식으로 5비트 보완을 할 수있게되었습니다. 아직도 ... 신비한 일이 벌어지고 있는데 왜 내가 시도한 일의 절반이 효과가 없었는지 전혀 모르겠습니다.


참고로, 나의 원본 :print@substr(new exception,~$$mn+=2+$$a+++$$i++);
bwoebi 1

Btw. 나는 모든 달러 기호와 main문자열에 대한 모든 문자 가 당신을 많이 오도하기를 바랍니다. 또한 추출을위한 다소 특이한 방법 {main}이라고 생각합니다. ;-)
bwoebi

@bwoebi은 main정말 안보 후, 저를 오해하지 않았다 exception, new그리고 substr. 나는 그들이 변수 이름 일 것이라고 생각했습니다. 변수 변수를 사용하는 데 약간의 시간이 걸렸으며 대부분의 시간을 5다른 괄호를 사용하지 않고 보완 할 수 있는 작업 순서를 알아내는 데 소비했습니다 .
Martin Ender

다음에 문자보다 더 많은 달러가 있으면 일반적으로 변수입니다. (이 경우 나는 또한 varvars를 남용하여 왼쪽에서 오른쪽으로 평가하도록 강요했다.) 그러면 새로운 예외를 발견하는 데 얼마나 걸렸습니까? 또한 Zend 엔진에 대한 더 깊은 지식을 가지고 있으므로 사물이 어떤 순서로 평가되며 왜 이러한 과제에 좋은지 나 자신에게 완벽하게 설명 할 수 있습니다. 기꺼이 설명해 드리겠습니다.
bwoebi

@bwoebi 내일 대화를 나눌 수 있고 우리는 그것에 대해 이야기 할 수 있지만 오늘 이것에 대해 충분히 오래 보냈습니다. ;) 첫 번째 질문에 관해서는, exception대한 길잃은 문자를 왼쪽, 이는 분명했다 substrnew주위에 거짓말. 말 그대로 작업을 시작할 때 처음 본 것입니다.
Martin Ender

9

문 손잡이로 루비, 크기 38

[$><<(!$pece60).to_s[rand($win)].succ]

나는 이것이 원본 소스 근처에 있다고 확신합니다. 사용에도 불구하고 결정적 rand입니다.

이 방법은 다음과 같습니다. $><<그냥 출력입니다. $pece60$win그러므로 단지입니다 전역 변수를 정의되지 않은있다 nil(그리고 그들은 나에게 어떤없는 문자를 제거 득점). !$pece60a를 true만들고 to_s문자열을 제공합니다 "true".

나이를 들어, 나는 점점 시도 2또는 -2접근이 u거기에,하지만 난 단지 걸릴 수도 실현 t및 통화 .succ거기에 (에소르)는를 만들기 위해 u.

rand로모그래퍼 nil파라미터 구간 [0,1)의 랜덤 유동을 반환한다. float를 사용하여 문자열을 색인화하면 정수로 잘 리므로 항상 첫 번째 문자를 반환합니다.

마지막으로 여분의 쌍이있어서 []모든 것을 감쌌습니다. 감사하게 모든 것이 Ruby의 표현이기 때문입니다.

채팅에 아이디어를 던지신 Sp3000에게 감사합니다.


8
루비는 무서운 언어입니다.
feersum

8

es1024의 C, 51

c=0xf.cp9,hhtaglfor;main() {;; printf("%d",(++c));}

오늘 20 년 동안 C 프로그래밍을 한 후 16 진 부동 소수점 상수에 대해 배웠습니다.


8

루비, 45 (히스 토크 랫)

%q[zyfnhvjkwudebgmaclprs x].to_i(36)/51074892

우후! 이것은 코드 골프 문제의 첫 번째 균열이며 원래 게시물에 대해 언급 할 충분한 담당자가 없습니다. 실제로 프로덕션 코드에서 자주 사용하기 때문에 사용 된 트릭을 즉시 인식했습니다. 대부분의 구조를 파악하는 데 약 5 분이 소요되었고 완전한 답변을 도출하는 데 몇 시간이 걸렸습니다.

설명:

  • %q[]문자열을 만들기위한 대체 방법입니다. 괄호와 중괄호도 사용될 수 있습니다.
  • String#to_i 루비에서는 2에서 36 사이의 모든 숫자를 받아들입니다. 숫자의 일부가 아닌 문자열의 첫 번째 문자를 무시하므로 공백 뒤에 추가 문자를 "버릴 수"있습니다.

그리고 내가 해독하는 데 사용한 코드는 다음과 같습니다.

require 'set'

# return true if the string is made up of unique characters
def uniq(s)
  a = s.each_char.to_a
  return a == a.uniq
end

def uniq_while_same(a,b)
  s = Set.new
  a.each_char.zip(b.each_char).each do |ai, bi|
    return true if ai != bi
    return false if s.include? ai
    s << ai
  end
  return true
end

def ungolf(answer)
  # For each base that even makes sense
  [            36, 35, 34,     32, 31, 30,
   29, 28, 27, 26, 25, 24, 23,     21, 20,
   19, 18, 17, 16, 15, 14, 13, 12,     10].each do |base|
    # Ignore bases where it is not possible to create a unique-string number greater than answer
    next if answer > base ** base
    # Pick digits for the denominator that are not duplicates of the digits in base
    denominator_digits = ('1234567890'.each_char.to_a - base.to_s.each_char.to_a)
    # For each permutation of those digits for the denominator
    (1..10).each do |denominator_length|
      denominator_digits.permutation(denominator_length) do |denominator_s|
        # Maybe the denominator is in octal
        denominator_base = 10
        if denominator_s[0] == '0'
          next if denominator_s.include?('8') || denominator_s.include?('9')
          denominator_base = 8
        end
        denominator_s = denominator_s.join
        denominator = denominator_s.to_i denominator_base
        print "#{"\b"*64}(%q[#{(answer * denominator).to_s(base).ljust(36)}].to_i #{base})/#{denominator_s.ljust(10)}" if rand < 0.01
        # Ignore denominators that are definitely impossible to have answers for
        next unless uniq_while_same "qtoi#{base}#{denominator_s}#{(answer * denominator).to_s(base)}",
                                    "qtoi#{base}#{denominator_s}#{((answer + 1) * denominator).to_s(base)}"

        # For each numerator that gives answer when divided by the denominator
        (answer * denominator...(answer + 1) * denominator).each do |numerator|
          print "#{"\b"*64}%q[#{numerator.to_s(base).ljust(36)}].to_i(#{base})/#{denominator_s.ljust(10)}" if rand < 0.01
          # Remove any that are still not unique
          s = "#{numerator.to_s(base)}#{base}#{denominator_s}qtoi"
          next unless uniq s
          # Done. Compute which characters need to be thrown away to fill the remaining space
          remains = ('0123456789abcdefghijklmnopqrstuvwxyz'.each_char.to_a - s.each_char.to_a).join
          print "#{"\b"*64}#{" "*64}#{"\b"*64}"
          return "%q[#{numerator.to_s(base)} #{remains}].to_i(#{base})/#{denominator_s}"
        end
      end
    end
  end
  print "#{"\b"*64}"
  puts "\nnone"
  return nil
end


print ungolf 9410663329978946297999932

수수께끼 안에 NP 문제를 포함시키는 방법. 나는 철저하게 괴상했다. 잘 했어!


원래 답변에 의견을 추가했습니다.
FireFly

이것은 훌륭하고 의도 된 답변에 가깝지만 출력이 없기 때문에 기술적으로 유효하지 않습니다.
histocrat

* facepalm 그래도 나는 여전히 재미 있었다.
charredUtensil

2
@charredUtensil 좀 더 스크립트를 실행하는 것이 마음에 들지 않으면 인쇄가 p식 전에로 이동한다고 생각합니다 . 아마도 나머지 문자는 당신이 한 것처럼 상수를 형성하는 데 사용될 수 있습니다.
FireFly

실제로 다시 실행할 필요는 없습니다. 문자열의 마지막 몇 문자는 결과를 변경하지 않고 재 배열 할 수 있습니다. p %q[zyfnhvjkwudebgmaclrsx].to_i(36)/51074892하지만 실제 크래킹 시도를
중단했습니다

7

Caridorc의 Python [any] shell size 44

__name__[3]  or (enfin_____[42], manager[1])

이것보다 더 많은 것이 있어야한다고 확신 __name__하지만와 같으 __main__므로 4 번째 문자 'a'가 선택되고 나머지 줄은 평가되지 않습니다.


원래 프로그램은 다음과 같습니다[__name__ for ___name__ in range(1,4)][2][3]
Caridorc


7

CJam, 크기 13, 사용자 별

G,Cf#If/sE*K%

여기에서 테스트하십시오.

손으로 해결 :

먼저 비 CJammers에 대한 배경 지식 :

  • CEGIK사전에 초기화되는 모든 변수이다 12, 14, 16, 18, 20,는 각각.
  • s 상단 스택 요소를 문자열로 변환합니다.
  • 문자열은 기술적으로 문자 배열입니다.
  • f꽤 마술이다. 이 응답의 목적을 위해, 단순화 된 버전은 배열 점이다 a, 다른 값 b조작자 g시퀀스가 abfg매핑 g(_,b)a(각각의 요소가 어디 a들어가는 _슬롯).
  • / 분할 및 분할 배열입니다 (다른 것들 중에서).
  • * 곱셈과 배열 반복입니다 (다른 것들 중에서).
  • %ad%배열 a과 정수 의 형태 로 d모든 단계의 d요소를 취하는 모듈로와 약간의 이상한 연산 입니다 a(파이썬의 단계 너비로 슬라이스하는 것과 같이 d).
  • # 지수입니다 (다른 것들 중에서).
  • ,권선 (범위에 숫자 0n-1) 복귀 배열의 길이.

좋아, 그 길에서 ...

,배열을 얻는 유일한 다른 방법은 더 큰 숫자를 만들고 문자 배열로 바꾸는 것이기 때문에 숫자를 범위로 전환 해야한다는 것이 분명했습니다. s하지만 우리는 아무것도 할 수 없었습니다 그것에 대한 추가 산술. 그리고 우리는 fs로 무언가를 수행하기 위해 배열이 필요합니다 .

나는 fs가 #and 와 함께 사용 되었다고 가정 %했지만, 결국 올바른 숫자를 얻으려면 약 90이 필요했습니다. 또한 이것으로 무엇을 해야하는지 설명하지 못 s했으며 대답이 실제로 골프처럼 보였기 때문에 user23013이 s사람들을 버릴 수있는 효과적인 no-op로 추가했다고 의심 했습니다.

그래서 그는 아마도 숫자를 작게 유지하지 않을 수도 %있지만 대신 거대한 숫자의 배열을 만들고 문자열 표현을와 연결 s하지만을 사용 하여 이상한 조각을 선택합니다 %. 그래서 나는 다음 프레임 워크로 조금 놀았습니다.

__*,_f#_f/s_%

( _f/최소한 12 개의 요소에 대해서는 0을 산출하기 때문에 먼저 수행 할 수 없습니다 .)

는 어디 _변수의 일부 순열이다. 나는 지루해지기 전에 모든 것을 시도하지 않았으며, 이것의 주된 문제는 결과 숫자의 시퀀스가 ​​항상 너무 길다는 것입니다.

어느 시점에서 우리는 *결과 문자열을 반복하기 위해 대신에 큰 범위 (예 : 두 숫자의 곱)가 필요하지 않다는 것을 알았습니다. 때문에의 파라미터의 불일치 *%이 결과에는 반복을 얻을 수 없을 것입니다 :

_,_f#_f/s_*_%

이것은 내가 찾던 것에 매우 가까운 길이의 결과를 가져 왔습니다. 실제로 240 개를 모두 시도했지만 상당히 빨리 (3 번째 또는 4 번째 시도), 나는 넘어졌다

E,Cf#If/sG*K%

생산량

03081942753650251594592190492275006661328850322159030034930530649722385533653290754678977

그리고 처음 6 자리 숫자가 일치하지 않을 것이라고 생각했습니다. 따라서 실제 계산을 방해하지 않고 재정렬하는 방법이 문제였습니다.

  • K다른 숫자를 모두 선택할 수 있기 때문에 변경할 수 없었습니다 .
  • 나는이 변경되지 수 C또는 I그 두지도 작업으로 인한 번호를 변경하기 때문.
  • 내가 변경 G하면 반복 횟수 만 변경되며 결과 길이는 변경되지 않습니다. (어느 것이 좋니.)
  • 변경 E하면 배열의 범위가 변경되지만 범위는 여전히으로 시작 [0 1 2 3 ...]하므로 계산에 영향을 미치지 않습니다. 그것은 것이다 의해 반환 된 기본 문자열의 길이에 영향을 s또한 그 의미, K%추가 반복에 다른 숫자를 골라 것입니다.

난 그냥 시도 그래서 교환 EG봐라 :

030819828850379075460427536222159187897761502517030034671154875945928930530907551421904962649729

요약하면 다음과 같습니다.

G,            "Push [0 1 2 3 ... 13 14 15].";
  Cf#         "Raise each element to the 12th power.";
     If/      "Divide each element by 18.";
        s     "Concatenate all numbers into a string.";
         E*   "Repeat 14 times.";
           K% "Pick every 20th digit.";


6

isaacg에 의해 크기 11, 피스

:\\w$ ",d,N

그것은 바로 버그 악용입니다. 이것은 다음과 같이 컴파일됩니다.

Pprint("\n",at_slice("\",input(), ",d,N))

관련 버그는 대신에 \\컴파일하여 Pyth를 문자열로 컴파일 할 수 있다는 것입니다."\""\\"


이해야 Pprintprint최소한 나 pprint?
FireFly

@FireFly 이것이 디버그 출력이 말한 것입니다. 아마도 Pyth 통역사가 자체 Pprint를 정의합니까?
Martin Ender 2014

아, 그럼 신경 쓰지 마
FireFly

6

Sp3000의 Python, 크기 69

print(sum(list(map(ord,str((dict(((str(dict()),list()),)),str()))))))

힘들었 어 ...


1
좋은! 참고로 원본은 print(sum(map(ord,str((dict(list(((str(),str(dict())),))),list())))))이지만 분명히 키워드에 대한 많은 다른 순열이 작동합니다.
Sp3000

2
그것은 그곳의 LISP 수준입니다.
xnor

6

Sp3000의 Python 3, 37 바이트

print(sum(b"a".zfill(len(str(...)))))

당황스럽게도 가장 어려운 부분은 문자열을 바이트로 변환하는 것입니다. 나는 잠을 자야했고, 밤에는 'duh, 그것은 문자 그대로 바이트입니다!'


Ahaha는 훌륭히 해냈습니다. Ellipsis가 사람들을
넘어 뜨릴

줄임표와 zfill을 보았지만 bytes 객체에 대해서는 몰랐습니다. 이것들은 정수의 골프 배열에 유용 할 수 있습니다!
feersum

잘 했어! 나는 인쇄물과 .zfill 만 보았고 합계가 그 일부일 수도 있다는 것을 알았지 만 해결할 수 없었습니다. +1하십시오.
Hosch250

6

PleaseStand의 PHP, 53

마침내 금이 갔다.

for($d=57,$o=35;$o+$d<999;)$o+=printf("$d%o",$d+=$o);

시퀀스가 10 진수와 8 진수로 번갈아 나타나는 것을 알았을 때 해결책이 매우 빨리 나타났습니다.

Dec: 57...92...132...177...228...285...348...417...492....573....661....756....858....
     571349220413226117734422843528553434864141775449210755731225661136475615328581707
Oct: ..134..204...261...344...435...534...641...754...1075...1225...1364...1532...1707
==Dec:  92  132   177   228   285   348   417   492    573    661    756    858    967

또한 각 숫자 집합 사이의 간격은 반환 된 값 printf()(예 : 쓴 문자 수) 과 같은 속도로 증가했습니다 .


3
와우, 좋은 형사 일!
Sp3000

6

Python 2, 132 크기, Vi.

exec('from string import printable as e\nprint "cqance"\x2Ereplace("q",e[len("fgiillmmooprrsstt")])or ",,,\016:::S[]____tuuvyy" ""')

모든 백 슬래시와 따옴표에 감사드립니다 :)


편집 : 업데이트 된 96 문자 버전 :

exec "try:exec'from __future__ import braces\\nt(12)'\nexcept SyntaxError as q:print(q[0][6:])"

이것은 https://codegolf.stackexchange.com/a/41451/32353에있는 Alex의 솔루션에서 온 것입니다.


잘 했어 통합 솔루션이 무엇인지 궁금해 ...
FireFly

이것은 의도 된 해결책이 아닙니다. 원래 솔루션은 원하는 "일회용"일이없는 fgiillmmooprrsstt,,,\016:::S[]____tuuvyy.
Vi.

exec? 내 코드는 짧은왔다 chould ... 나는 그것을 모방했다 compile+ evalI 약 잊었의 때문에 exec...
바이올렛.

더 짧은 버전을 구현했습니다. 원래 속임수를 찾아보십시오.
Vi.

5

CJP, 크기 15, Ypnypn

98,{7%}%{6+}%:+

주어진 문자에서, 나는 그것이 다음 세 가지 형식 중 하나 여야한다고 생각했습니다.

__,{_%}%{_+}%:+
_,{_%}%{__+}%:+
__,{_+}%{_%}%:+

두 자리 범위를 만든 다음 더하기 및 모듈로 연산을 순서에 관계없이 범위에 매핑합니다. 방금 첫 번째 것부터 시작해서 6789그 차이를 체계적으로 바꾸려고했습니다 .


젠장, 방금 해결했다 : /
Optimizer


5

FryAmTheEggman의 Python 2, 크기 61

print(dir('~s]l.c:st_''-p_tp.l]-~.:o:Te[_u[.i_')[10][2:][:3])

이것이 원본과 일치하면 매우 놀랐습니다.


그렇지는 않지만 어쨌든 축하합니다! 내 코드는 다음과 같습니다print''.__doc__[::2][::3].split()[1].split('.')[0][:-~-~True]
FryAmTheEggman

가늠자에, 나는 인용 부호를 포함해서는 안됩니다 ...;)
FryAmTheEggman

@FryAmTheEggman 아 와우-좋은 프로그램! 나는 당신이 적어도 dir()'get'을 찾는 데 익숙했다고 확신했습니다 . 그리고 따옴표 없이는 매우 어려웠을 것입니다.
grc

5

Python 3, Sp3000, 크기 44

print(~(~(()<((),))<<(()<((),))))<<((()<()))

Python 3 None은 답변을 인쇄 한 후 오류 (왼쪽으로 이동)를 일으킬 수 있었으므로 여기에 도움이되었습니다 .


흠 .. 내 소고기가 꽤 낭비 된 것 같습니다. 있었다 print(~(~(()<())<<((()<((),))<<(()<((),)))))원래.
Sp3000

5

kenorb의 PHP, 크기 52

_:@print_r(chr(@++$i+pow(3<<5,1)));if($i<2*4)goto _;

(하나님이 나머지와는 어떤 그림을 나에게 걸린 시간 _r접미사. 나는 그것이 아니었다 발견까지 print,하지만 print_r...)


그리고 나는 당신이 그것을 어떻게 알아 냈는지 모르겠습니다 :) 원본 : _:print_r(chr(3*pow(2,5)+@++$i));if(@$i<4<<1)goto _;.
kenorb

3
@kenorb a) 무언가를 인쇄해야하므로 echo불가능합니다. print남아; b) 루프가 필요하지만 for루프에는 세미콜론이 충분하지 않았으며 콜론이 있습니다. 그래서 goto와 함께 레이블이있을 것입니다. c) 그런 다음 goto-loop를 중단하려면 if가 필요합니다. 지금 가지고 있음 X:print($Y);if($Y)goto X;(X와 Y는 자리 표시 자임); d)가 ++있지만 아니요 =, 아마도 ++$Z1 ~ 8이 있습니다. e) 정수에서 문자를 얻으려면 chr()(보통) 필요합니다 . f) 이제 chr과 if의 숫자 96과 8을 찾아야했습니다. 그런 다음 자리 표시 자와 volià를 입력하십시오.
bwoebi


5

C, es1024, 길이 70

e='C',f;main(g){Chorkil:f=printf("40%.d",e+e-  -g);}hAx;*hotpoCkats();

어려운 부분은 불필요한 모든 캐릭터를 추적하는 것이 었습니다 ... 심하게 ... 나는 약 10 번 다시 실행해야했습니다. 나를 걱정 한 유일한 사람은 .어쨌든 printf형식 문자열 의 중간에 붙어서 보이지 않게되었습니다!



5

하스켈, 크기 34, Petr Pudlák

main=print(0xb2f3d5^0x7f1f27::Int)

이 프로그램은 32 비트 시스템에서 실행해야합니다. 이것이 올바른 프로그램인지 확인하고 64 비트 시스템이있는 경우이를 대신 사용할 수 있습니다.

import Data.Int
main=print(0xb2f3d5^0x7f1f27::Int32)

프로그램의 "프레임"을 추측하는 것은 매우 쉽습니다 main=print(0x<hex digits>^0x<hex digits>::Int). 모든 마술은 숫자를 나누고 순서를 정하는 올바른 방법을 찾고있었습니다. 나는 여기서 똑똑하지 않았고, 무차별 검색 만했다. 비록 일부 숫자가 복제되었다는 사실을 남용하기 위해주의를 기울 였지만, 기본과 지수에 대략 같은 수의 숫자가 있었을 것이다. 베이스의 마지막 숫자는 거의 확실하지 않았습니다. 전체 검색 코드는 다음과 같습니다. multiset-comb 패키지를 사용합니다 . 전체 검색은 내 컴퓨터에서 약 10:33 정도 걸립니다 (물론 하나의 정답 만 생성 함).

{-# LANGUAGE NoMonomorphismRestriction #-}
import Control.Monad
import Data.Int
import Data.List (inits, tails, group)
import Numeric
import Math.Combinatorics.Multiset

main = print (searchFor (-1121766947))

searchFor n = do
    nl <- [6,5,7,4,8,3,9,2,10,1,11]
    (l_, r_)  <- chooseSubbag nl digits
    l <- perms l_
    guard (last l /= '2')
    r <- perms r_
    guard ((fromString l :: Int32) ^ (fromString r :: Integer) == n)
    return (l, r)

chooseSubbag n = chooseSubbag' n . group
chooseSubbag' n xss = go (drop (n-1) (concat xss)) n xss where
    go _  n xss | n < 0 = []
    go _  0 xss = [([],concat xss)]
    go [] n xss = []
    go m  n (xs:xss) = do
        (kx, tx) <- zip (tails xs) (inits xs)
        (k , t ) <- go (drop (length tx) m) (n-length kx) xss
        return (kx++k, tx++t)

digits = "1223577bdfff"
fromString = fst . head . readHex
perms = permutations . fromList

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.