Xắp xếp lại Mã nguồn [luồng cướp cho các nỗ lực bẻ khóa]


44

Đây là chuỗi đồng hành với thử thách Giải mã mã nguồn chính . Nếu bạn nghĩ rằng bạn đã quản lý để xắp xếp lại một trong những câu trả lời của cảnh sát, bạn nên đăng giải pháp của mình làm câu trả lời cho chủ đề này.

Xin nhắc lại, bạn có một nỗ lực bẻ khóa mỗi lần gửi. Nỗ lực bẻ khóa của bạn sẽ là một phiên bản mã hóa của mã nguồn. Nếu dự đoán của bạn khớp với mô tả (cùng ký tự, đầu ra và ngôn ngữ tất nhiên) và bạn là người đoán đúng đầu tiên, thì bạn sẽ giành được một điểm. Điều quan trọng cần lưu ý là chương trình của bạn không nhất thiết phải khớp chính xác với bản gốc, chỉ cần sử dụng cùng các ký tự và có cùng chức năng. Điều này có nghĩa là có thể có nhiều hơn một câu trả lời đúng.

Tên cướp có nhiều điểm nhất (vết nứt thành công) sẽ thắng.

Bảng xếp hạng

Quá nhiều giải

20 giải

15 giải

10 giải

7 giải

5 giải

4 giải

3 giải

2 giải

1 giải


1
Perl 5, kích thước 27, bởi Morot - print'pin '= ~ tr (a-za) (za-z) r

@ WumpusQ.Wumbley Tất cả chúng ta đã ở đó ...;)
Martin Ender

3
Tôi từ chối lãng phí thời gian của tôi để cố gắng xoa dịu nó.

Với hai cơ quan câu hỏi, có vẻ như các câu trả lời được xáo trộn / không bị xáo trộn bị đảo ngược
Vịt Mooing

Ruby, 23 bởi MegaTom = p% ++. Phương thức [80] [1 ..- 1]
lịch sử

Câu trả lời:


32

CJam, cỡ 20, bởi Martin Büttner

Hi "petStorm!", mame

Hãy thử trực tuyến.

Làm thế nào nó hoạt động

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

Bẻ khóa

Đầu ra mong muốn 2.956177636986737, là Double hoặc Double theo sau là Long.

Chỉ sử dụng các ký tự trong "Stop, Hammer time!", có bốn toán tử dựng sẵn trả về Nhân đôi không nguyên:

  • mS, đó là asin
  • ma, đó là atan2
  • me, đó là exp
  • mt, đó là tan

Tất cả chúng đều chứa một m, vì vậy chúng ta có thể sử dụng tối đa ba trong số chúng. Chỉ có một Svà một a.

Tất cả các toán tử này đều cần đầu vào và malà cái duy nhất tiêu thụ hai đầu vào. Chúng tôi chỉ có ba cách để đẩy Longs:

  • "...",, đẩy chiều dài của chuỗi (hoàn toàn dưới 18).
  • H, mà đẩy 17.
  • ...!, mà đẩy logic KHÔNG của ....

Chúng tôi không có cách nào để đẩy một cái gì đó giả mạo ..., vì vậy tùy chọn cuối cùng sẽ luôn luôn đẩy 0.

Đầu ra không bắt đầu hoặc kết thúc bằng 17hoặc 0. Vì 15 chữ số thập phân là số chữ số thông thường cho một Double, có vẻ như đầu ra là một Double đơn giản.

Giả sử điều này, mã phải thuộc một trong các loại sau:

  • <Long> <mS|me|mt>{1,3}
  • <Long> <mS|me|mt>{x} <Long> <mS|me|mt>{y} ma <mS|me|mt>{z}.
  • Bất kỳ điều nào ở trên, với một số lần chuyển thành Long ( i) hoặc làm tròn ( mo) được áp dụng cho Double.

Trong trường hợp thứ hai, x + y + zlà 1 hoặc 2 và một trong các Long là 0 hoặc 17.

Phần còn lại về cơ bản là vũ phu. Sau một vài lần thử,

18 , {H \ ma me 2.956177636986737 =} =

trả lại 9, có nghĩa là

H 9 ma me

tạo ra sản lượng mong muốn.

Tất cả chỉ còn lại là loại bỏ tất cả trừ 9 ký tự khỏi chuỗi. Spaces là noops và ilà noop trên Longs, vì vậy đây "petStorm!"là một trong những lựa chọn khả thi.


1
Điều đó thật điên rồ - làm thế nào bạn tìm ra con số đó là gì?
Sp3000

1
Tôi đã tìm kiếm logarit (và những người khác) của số đó nhưng không nhận được kết quả nào. Bây giờ tôi thấy tôi đang sử dụng độ chính xác quá cao.
jimmy23013

2
@ Sp3000: Tôi đã chỉnh sửa câu trả lời của mình.
Dennis

1
Rất đẹp! Tôi nên đã lấy ra thêm hai ký tự từ chuỗi tôi đoán. Trong bản gốc của tôi, tôi thực sự có các khoảng trắng bên trong chuỗi, nhưng mrtrước khi lấy độ dài. Không phải là bạn sẽ không phát hiện ra điều đó vào một lúc nào đó. ;)
Martin Ender

25

Python 3, cỡ 12, bởi xnor

()and bciprt

Không có gì (biểu thức tạo ra một bộ dữ liệu trống, không được in). Điều này hoạt động do đánh giá ngắn mạch.


1
Trong Python 3 IDLE, kết quả này xuất ra ().
Hosch250

@ hosch250 Vì trong chương trình (tệp python), không có gì được xuất ra, vì không có print.
matjoyce

Tôi hiểu rồi. Tôi đã chạy từ điều dòng lệnh.
Hosch250

47
.... "điều" ....
TheDoctor

4
@Imray Do bị đoản mạch - Python tải bộ dữ liệu và kiểm tra xem giá trị của bộ dữ liệu có đúng không, vì nó trống, nó là sai. Mã để tải biến bciprtkhông bao giờ được thực thi, vì vậy nó không bao giờ tạo ra NameError.
Mateon1

20

Python, cỡ 74, bởi xnor

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

Vâng, đó là niềm vui. Cảm ơn FryAmTheEggman, hosch250 và isaacg đã góp ý / giúp đỡ.


1
Công việc tốt! Giải pháp của tôi khá giống nhau : list(\nprint(range is range)for aacdeeeeehmppprrrrssvwy in\noct(int is int)).
xnor

@xnor LOL tên biến. Là nó xấu mà tôi sẽ không bao giờ nghĩ về điều đó? : P
FryAmTheEggman

2
@FryAmTheEggman Tôi nghĩ mọi người đang mong đợi tôi sử dụng mánh khóe từ người cảnh sát đầu tiên của tôi .
xnor

@FryAmTheEggman Đừng lo lắng, bạn không phải là người duy nhất: P
Sp3000

13

Python 2, cỡ 50, bởi Geobits

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

Đầu ra 42.


1
Có một điểm :) Để tham khảo, nguyên bản là vậy print 2**2**2**2/2**2**2/2**2**2/2-2**2**2*2**2-22, nhưng không có gì đáng ngạc nhiên khi có nhiều hơn một lựa chọn là chính xác.
Geobits

13

GolfScript, cỡ 13, bởi Peter Taylor

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

Kiểm tra nó ở đây.

Một số khác, mà tôi chỉ bẻ khóa với sự trợ giúp lớn từ Sp3000. Cảm ơn!

Vì vậy, đây là cách chúng tôi đã đến đó. Sp3000 nhận thấy một loạt các số liên tiếp ở đầu ra:

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

Dựa vào đó chúng tôi đã đưa ra giả định, rằng đây là một chuỗi tăng, chỉ cho phép một số có thể tách các số còn lại:

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

Đó là 23 số, là chỉ số mạnh để lặp lại khối 22 lần, cũng như kết thúc khối bằng .(phần tử ngăn xếp trên cùng trùng lặp), sao cho kết quả trước đó bị bỏ lại trên ngăn xếp và do đó lần lặp cuối cùng sẽ xuất hiện ngăn xếp hai lần. Đó là 22,{____.}/.

Bây giờ nhìn vào những khoảng trống, những thứ đó hóa ra là sức mạnh thứ 4 (thật tuyệt, vì chúng ta có 4?). Chính xác hơn, chúng là sức mạnh thứ tư của chỉ số của số hiện tại. Vì vậy, tiếp theo chúng tôi đã xem xét các chỉ số tạo ra một khoảng cách:

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

Trong nhị phân đó là

00100
00101
00110
00111
01100
01101
01110
01111
10100
10101

Tất cả chúng đều có tập bit thứ ba, điều đó có nghĩa là chỉ mục có thể chỉ là bitwise-and'ed với 4(điều này rất tốt trở lại, bởi vì chúng ta có thể tạo một cái khác 4với .và có a &). Điều này đặc biệt hiệu quả, bởi vì hoạt động này dẫn đến một trong hai 0hoặc 4, và nếu chúng ta sử dụng nó như là số mũ, chúng ta có được một 1hoặc một sức mạnh thứ tư, đó chính xác là những gì chúng ta cần. Vì vậy, hãy đặt nó cùng nhau:

22,{.4&?+.}/

Đây là những gì khối làm:

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

Bây giờ có hai vấn đề còn lại: chúng tôi đã đi lạc ,mà chúng tôi chưa sử dụng và lần lặp đầu tiên là trường hợp đặc biệt, trong đó không có giá trị từ lần lặp trước mà chúng tôi có thể thêm vào khi gặp phải +. Chúng tôi thấy rằng nhờ một bình luận không liên quan của người dùng23013, người đã tình cờ đề cập rằng GolfScript bắt đầu với một chuỗi trống trên ngăn xếp (nếu không có gì trên STDIN). Vì vậy, chúng ta có thể sử dụng ,quyền khác ngay từ đầu để biến chuỗi đó thành một 0, đó chính là thứ chúng ta cần khi bắt đầu lặp lại.


Tại chỗ trên. Điều này được lấy cảm hứng từ một chuỗi trong OEIS mà bây giờ tôi không thể tìm thấy.
Peter Taylor

3
Và đây là lý do tại sao có một chủ đề riêng cho kẻ cướp là một ý tưởng tốt. Công việc tốt!
Dennis


11

Ruby, cỡ 17, bởi Doorknob

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

Đó là niềm vui lớn. Cảm ơn Sp3000 đã giúp tôi với điều này! Và tôi đã học được rằng văn học %r?...?có thể có bất kỳ dấu phân cách. :)


10
Đạo cụ cho Doorknob vì đã bị đánh lừa một cách điên rồ print, chỉ để tách nó ra pđể in, %rcho các biểu thức chính quy và icho phù hợp với biểu thức không phân biệt chữ hoa chữ thường.
Sp3000

11

PHP, cỡ 49, bởi bwoebi

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

Đó là hoàn toàn tinh thần .

Nó phải

print@substr(new exception,);

khá nhanh chóng, tại thời điểm đó tôi cần một cái gì đó đưa ra -6sau dấu phẩy, đã $++$++$++$+=$~main$2rời đi.

Cái bắt chính là $a, $m$ilà tất cả NULL, vì vậy sử dụng chúng gián tiếp trong các biến số , có nghĩa là tất cả chúng đều trỏ đến cùng một biến. Tuy nhiên, PHP dường như đang làm một số điều kỳ lạ về việc giải quyết các biến biến. Với các biến thông thường, bạn có thể làm những việc như

echo $a+$a=2;

mà in 4( 2được gán cho $avà sau đó thêm vào chính nó). Nhưng nếu tôi làm tương tự với các biến số:

echo $$a+$$a=2;

Tôi nhận được 2, bởi vì bây giờ đầu tiên $$alà đánh giá trước khi chuyển nhượng.

Cuối cùng, tôi đã xoay sở để buộc một số thứ tự bằng cách đặt một số gia số vào RHS của số +=phải được đánh giá trước khi gán bổ sung đó. Bằng cách đó tôi đã nhận được 5mà sau đó tôi có thể chỉ cần bổ sung bit. Tuy nhiên ... vẫn có một số điều bí ẩn đang diễn ra, và tôi không biết tại sao một nửa những điều tôi đã thử làm việc và không hoạt động.


Để tham khảo, bản gốc của tôi:print@substr(new exception,~$$mn+=2+$$a+++$$i++);
bwoebi

Btw. Tôi hy vọng tất cả các ký hiệu đô la và thực tế là tất cả các chữ cái maintrong chuỗi đã đánh lừa bạn rất nhiều. Ngoài ra, {main}tôi nghĩ rằng một phương pháp khá bất thường để trích xuất ;-)
bwoebi

@bwoebi Việc mainkhông thực sự đánh lừa tôi, sau khi phát hiện ra exception, newsubstr. Tôi nghĩ rằng họ sẽ chỉ là tên biến. Tôi đã mất một chút để sử dụng các biến số và tôi đã dành phần lớn thời gian để tìm ra một số thứ tự hoạt động thực sự mang lại một 5cái mà tôi có thể bổ sung mà không cần sử dụng một dấu ngoặc đơn khác.
Martin Ender

Chà, lần sau, nếu có nhiều đô la hơn ký tự, nó thường là các biến số. (Trong trường hợp này tôi cũng lạm dụng varvars để buộc đánh giá từ trái sang phải.) Bạn mất bao lâu để phát hiện ra ngoại lệ mới? Đồng thời, tôi có kiến ​​thức sâu hơn về công cụ Zend, vì vậy tôi có thể tự giải thích một cách hoàn hảo tại sao mọi thứ được đánh giá theo thứ tự và điều đó tốt cho những thách thức này ;-) Nếu có một điều cụ thể bạn không nhận được, tôi ' sẽ vui vẻ giải thích cho bạn.
bwoebi

@bwoebi Hãy trò chuyện vào ngày mai và chúng ta có thể nói về nó, nhưng tôi đã dành đủ thời gian cho việc này ngày hôm nay. ;) Đối với câu hỏi đầu tiên của bạn, exceptionlà điều hiển nhiên, khiến các nhân vật đi lạc substrnewnằm xung quanh. Đó thực sự là điều đầu tiên tôi thấy khi bắt đầu làm việc với nó.
Martin Ender

9

Ruby, cỡ 38, bởi Doorknob

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

Tôi khá chắc chắn rằng đây không phải là nơi gần với nguồn ban đầu. Đó là quyết định mặc dù sử dụng rand.

Đây là cách cái này hoạt động. $><<chỉ là đầu ra. $pece60$winlà các biến toàn cục không xác định, do đó chỉ là nil(và chúng cho phép tôi thoát khỏi một số ký tự không liên quan). !$pece60làm cho một trueto_scho chuỗi "true".

Trong nhiều năm, tôi đã cố gắng để có được 2hoặc -2truy cập uvào đó, nhưng sau đó tôi nhận ra rằng tôi chỉ có thể lấy tvà gọi .succ(tiểu luận) trên đó để thực hiện u.

randvới một niltham số trả về một số float ngẫu nhiên trong khoảng [0,1). Khi sử dụng float để lập chỉ mục thành chuỗi, chúng bị cắt cụt thành số nguyên, do đó, điều này sẽ luôn trả về ký tự đầu tiên.

Cuối cùng, tôi đã có một cặp dự phòng []nên tôi chỉ gói gọn mọi thứ trong đó, vì rất may mọi thứ đều là biểu hiện trong Ruby.

Cảm ơn Sp3000 vì đã đưa ra một số ý tưởng xung quanh trong trò chuyện.


8
Ruby là một ngôn ngữ trông đáng sợ.
frageum

8

C, 51 bởi es1024

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

Sau 20 năm lập trình C hôm nay tôi đã biết về hằng số dấu phẩy động thập lục phân.


8

Ruby, 45 (lịch sử)

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

Woohoo! Đây là vết nứt đầu tiên của tôi tại một vấn đề về mã golf và tôi không có đủ đại diện để nhận xét về bài đăng gốc. Tôi ngay lập tức nhận ra thủ thuật được sử dụng, vì tôi thực sự đã tìm thấy việc sử dụng nó trong mã sản xuất thường xuyên. Mất khoảng 5 phút để tìm ra hầu hết cấu trúc và một vài giờ để đưa ra câu trả lời hoàn chỉnh.

Giải trình:

  • %q[]là một phương pháp thay thế để tạo chuỗi. Dấu ngoặc và dấu ngoặc nhọn cũng có thể được sử dụng.
  • String#to_i trong Ruby chấp nhận các số trong bất kỳ cơ sở nào từ 2 đến 36. Nó sẽ bỏ qua ký tự đầu tiên trong chuỗi không phải là một phần của số, do đó, bất kỳ ký tự phụ nào cũng có thể bị "vứt bỏ" sau khoảng trắng.

Và đây là đoạn mã tôi đã sử dụng để bẻ khóa nó:

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

Cách để nhúng một vấn đề NP bên trong một câu đố. Tôi đã được triệt để mọt sách. Làm tốt lắm!


Tôi đã thêm một bình luận cho câu trả lời ban đầu cho bạn.
FireFly

Điều này thật tuyệt vời (và gần với câu trả lời dự định), nhưng về mặt kỹ thuật không hợp lệ vì nó không có đầu ra.
lịch sử

* facepalm Vâng tôi vẫn vui vẻ.
charredUtensil

2
@charredUtensil nếu bạn không ngại chạy tập lệnh của mình thêm một chút nữa, tôi nghĩ việc in ấn chỉ là chuyển psang trước biểu thức. Có lẽ các ký tự còn lại có thể được sử dụng để tạo thành các hằng số như bạn đã làm.
FireFly

Tôi thực sự không cần phải chạy lại nó. Một vài ký tự cuối cùng của chuỗi có thể được sắp xếp lại mà không thay đổi kết quả - p %q[zyfnhvjkwudebgmaclrsx].to_i(36)/51074892Tôi biết rằng tôi đã phá vỡ nỗ lực bẻ khóa thực tế của mình :)
charredUtensil



7

CJam, cỡ 13, bởi người dùng23013

G,Cf#If/sE*K%

Kiểm tra nó ở đây.

Giải quyết bằng tay, như vậy:

Đầu tiên, một số nền tảng cho những người không phải là CJammers:

  • CEGIK là tất cả các biến, được khởi tạo trước 12 , 14, 16, 18, 20, tương ứng.
  • s chuyển đổi phần tử ngăn xếp trên cùng thành một chuỗi.
  • Chuỗi về mặt kỹ thuật chỉ là mảng các ký tự.
  • flà khá kỳ diệu. Với mục đích của câu trả lời này, phiên bản đơn giản hóa là, đối với một mảng a, một số giá trị khác bvà toán tử g, chuỗi abfgánh xạ g(_,b)vào a(nơi mỗi phần tử ađi vào _vị trí).
  • / là phân chia và chia mảng (trong số những thứ khác).
  • * là phép nhân và lặp lại mảng (trong số những thứ khác).
  • %là modulo và một số thao tác kỳ lạ, ở dạng ad%cho mảng avà số nguyên dlấy mọi dphần tử của a(như phần cắt của Python với độ rộng bước d).
  • # là lũy thừa (trong số những thứ khác).
  • ,biến số thành phạm vi (từ 0đến n-1) và trả về độ dài của một mảng.

Được rồi, tránh ra ...

Một điều khá rõ ràng là chúng ta cần ,biến một số thành một phạm vi, bởi vì cách duy nhất khác để có được một mảng là xây dựng một số lớn hơn và biến nó thành một mảng ký tự s- nhưng sau đó chúng ta không thể thực hiện bất kỳ số học hơn về nó. Và chúng ta cần một mảng để làm một cái gì đó với fs.

Trước tiên tôi cho rằng fs được sử dụng cùng #%, nhưng điều đó có nghĩa là chúng tôi sẽ cần một số khoảng 90 để có được số lượng chữ số cuối cùng. Ngoài ra, điều này cũng không giải thích được phải làm gì svà vì câu trả lời trông rất khó chơi, tôi nghi ngờ người dùng23013 chỉ thêm vào đó slà một no-op hiệu quả ở đâu đó để ném mọi người đi.

Vì vậy, tôi nghĩ rằng, có thể anh ta thậm chí không giữ các số nhỏ %, nhưng thay vào đó anh ta xây dựng một loạt các số khổng lồ, ghép nối biểu diễn chuỗi của họ với s, nhưng sau đó chỉ chọn một số phần lẻ trong số đó %. Vì vậy, tôi đã chơi xung quanh một chút với khung sau:

__*,_f#_f/s_%

(Bạn không thể làm _f/trước, vì điều đó sẽ mang lại số không cho ít nhất 12 yếu tố đầu tiên.)

Trong đó _một số hoán vị của các biến. Tôi đã không thử tất cả chúng trước khi tôi chán, và vấn đề chính với điều này là chuỗi các chữ số luôn luôn quá dài.

Tại một số thời điểm, điều đó xảy ra với tôi, rằng chúng ta sẽ không cần một phạm vi lớn như vậy (tức là tích của hai số), nếu thay vào đó chúng ta sử dụng *chuỗi lặp lại kết quả. Do sự không phù hợp của các tham số *%điều này sẽ không mang lại sự lặp lại trong kết quả:

_,_f#_f/s_*_%

Điều này mang lại kết quả về độ dài rất gần với những gì tôi đang tìm kiếm. Tôi đã thực sự đã thử tất cả 240 trong số chúng, nhưng khá nhanh chóng (lần thứ ba hoặc thứ tư), tôi tình cờ thấy

E,Cf#If/sG*K%

mang lại

03081942753650251594592190492275006661328850322159030034930530649722385533653290754678977

Và tôi đã tìm ra một trận đấu gồm sáu chữ số đầu tiên sẽ không phải là một sự trùng hợp ngẫu nhiên. Vì vậy, câu hỏi là làm thế nào để sắp xếp lại nó mà không làm đảo lộn tính toán thực tế:

  • Tôi không thể thay đổi Kbởi vì điều đó sẽ chọn ra các chữ số khác nhau hoàn toàn.
  • Tôi không thể thay đổi Choặc Ivì điều đó sẽ thay đổi số kết quả từ hai hoạt động bản đồ.
  • Nếu tôi thay đổi Gsẽ chỉ thay đổi số lần lặp lại, điều đó sẽ không làm gì ngoài việc thay đổi độ dài của kết quả. (Cái nào tốt.)
  • Nếu tôi thay đổi Esẽ thay đổi phạm vi của mảng, nhưng phạm vi vẫn sẽ bắt đầu [0 1 2 3 ...], vì vậy nó sẽ không ảnh hưởng đến tính toán. Nó sẽ ảnh hưởng đến độ dài của chuỗi cơ sở được trả về s, điều đó cũng có nghĩa là K%sẽ chọn ra các chữ số khác nhau khi lặp lại bổ sung.

Trao đổi Vì vậy, tôi chỉ cố gắng EGvà thì đấy:

030819828850379075460427536222159187897761502517030034671154875945928930530907551421904962649729

Tóm lại, đây là những gì mã làm:

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

Pyth, cỡ 11, bởi isaacg

:\\w$ ",d,N

Đó là một số lỗi lạm dụng ngay tại đó. Điều này biên dịch thành:

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

Lỗi có liên quan là \\biên dịch "\"thay vì "\\", cho phép bạn biên dịch Pyth thành một chuỗi.


Nên Pprintprint, hoặc ít nhất pprint?
FireFly

@FireFly Đó là những gì đầu ra gỡ lỗi đã nêu. Có lẽ trình thông dịch Pyth định nghĩa Pprint của riêng mình?
Martin Ender

Ồ, được rồi, đừng bận tâm.
FireFly

6

Python, kích thước 69, bằng Sp3000

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

Điều đó thật khó ...


1
Đẹp! Để tham khảo, bản gốc là print(sum(map(ord,str((dict(list(((str(),str(dict())),))),list()))))), nhưng rõ ràng rất nhiều hoán vị khác nhau của từ khóa sẽ hoạt động.
Sp3000

2
Đó là một mức độ LISP của parens ở đó!
xnor

6

Python 3, 37 byte, bằng Sp3000

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

Xấu hổ cho đến nay, phần khó nhất đã tìm ra để chuyển đổi chuỗi thành byte. Tôi đã phải ngủ trên đó và trong đêm nhận ra 'duh, đó là một byte theo nghĩa đen!'


Ahaha thực hiện tốt, tôi nghĩ rằng Ellipsis có thể khiến mọi người
vấp ngã

Tôi đã thấy dấu chấm lửng và zfill, nhưng không biết về các đối tượng byte. Chúng có thể hữu ích trong mảng golf của các số nguyên!
frageum

Bạn đã làm rất tốt! Tôi chỉ thấy bản in và .zfill, và tôi biết tổng có thể là một phần của nó, nhưng tôi không thể giải quyết nó. Có +1.
Hosch250

6

PHP, 53, bởi PleaseStand

Cracked nó cuối cùng:

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

Giải pháp xuất hiện khá nhanh khi tôi nhận thấy chuỗi bao gồm các số thập phân và số bát phân xen kẽ:

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

Ngoài ra, các khoảng giữa mỗi bộ số tăng với tốc độ bằng với giá trị được trả về printf()(nghĩa là số lượng ký tự được viết).


3
Wow, công việc thám tử tốt đẹp!
Sp3000

6

Python 2, kích thước 132, bởi Vi.

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

Cảm ơn tất cả các dấu gạch chéo ngược và dấu ngoặc kép :)


Chỉnh sửa: Phiên bản 96-char được cập nhật:

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

Điều này được lấy hoàn toàn từ giải pháp của Alex trong https://codegolf.stackexchange.com/a/41451/32353


Heh, tốt đẹp. Tự hỏi giải pháp dự kiến ​​là gì ...
FireFly

Đây không phải là một giải pháp dự định. Giải pháp ban đầu không có bất kỳ thứ gì "vứt đi" như fgiillmmooprrsstthay ,,,\016:::S[]____tuuvyy.
Vi.

exec? Mã của tôi đã ngắn hơn ... Tôi đã mô phỏng nó bằng compile+ evalvì tôi quên mất exec...
Vi.

Thực hiện phiên bản ngắn hơn. Hãy cố gắng tìm ra thủ thuật ban đầu.
Vi.

5

CJam, cỡ 15, bởi Ypnypn

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

Từ các ký tự đã cho, tôi đoán nó phải là một trong ba dạng sau:

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

tạo ra một phạm vi hai chữ số, sau đó ánh xạ một phép cộng và phép toán modulo (theo thứ tự) vào phạm vi đó, trước khi tóm tắt nó. Vì vậy, tôi chỉ bắt đầu với cái đầu tiên, và thử một cách có hệ thống các hoán vị 6789trong các khoảng trống.


Khỉ thật, tôi cũng vừa giải quyết nó: /
Trình tối ưu hóa


5

Python 2, cỡ 61, bởi FryAmTheEggman

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

Tôi sẽ rất ngạc nhiên nếu điều này phù hợp với bản gốc.


Nó không, nhưng dù sao cũng xin chúc mừng! Mã của tôi là:print''.__doc__[::2][::3].split()[1].split('.')[0][:-~-~True]
FryAmTheEggman

Nhìn nhận lại, tôi không nên bao gồm các trích dẫn ...;)
FryAmTheEggman

@FryAmTheEggman Oh wow - chương trình hay! Tôi đã bị thuyết phục rằng bạn ít nhất đã sử dụng dir()để tìm 'nhận'. Và vâng, nó sẽ rất khó khăn nếu không có dấu ngoặc kép.
grc

5

Python 3, Sp3000, kích thước 44

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

Python 3 đã giúp tôi ở đây vì tôi có thể gây ra lỗi (dịch chuyển sang trái Nonebởi một cái gì đó) sau khi in câu trả lời.


Hmm ... có vẻ như tôi đã khá lãng phí với tài sản của mình. Có print(~(~(()<())<<((()<((),))<<(()<((),)))))ban đầu.
Sp3000

5

PHP, kích thước 52, bởi kenorb

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

(Chúa ơi, mất bao lâu để tôi biết phải làm gì với _rhậu tố còn lại . Cho đến khi tôi nhận thấy nó không phải print, nhưng print_r...)


Và tôi không biết làm thế nào bạn tìm ra nó :) Bản gốc : _:print_r(chr(3*pow(2,5)+@++$i));if(@$i<4<<1)goto _;.
kenorb

3
@kenorb a) bạn cần in một cái gì đó, vì vậy echokhông thể; printvẫn; b) bạn cần một số vòng lặp, nhưng đối với một forvòng lặp, không có đủ dấu chấm phẩy, và, có một dấu hai chấm ... vì vậy có lẽ một nhãn ở đó kết hợp với goto; c) sau đó nó cần một if để hủy bỏ vòng lặp goto. Có ngay bây giờ X:print($Y);if($Y)goto X;(X và Y là giữ chỗ); d) có một ++, nhưng không =, vì vậy có lẽ một số ++$Ztừ 1 đến 8; e) để lấy các chữ cái từ một số nguyên, chúng ta cần chr()(thường) - nó đã ở đó; f) bây giờ tôi chỉ cần tìm số 96 và 8 cho chr và nếu. Sau đó điền vào chỗ dành sẵn và volià.
bwoebi


5

C, es1024, dài 70

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

Phần khó cuối cùng là theo dõi tất cả các nhân vật không cần thiết ... nghiêm túc ... tôi đã phải làm lại chúng khoảng 10 lần. Điều duy nhất làm tôi lo lắng là .nhưng bằng cách nào đó tôi đã mắc kẹt nó ở giữa printfchuỗi định dạng và nó trở nên vô hình!



5

Haskell, cỡ 34, bởi Petr Pudlák

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

Lưu ý rằng chương trình này phải được chạy trên máy 32 bit. Nếu bạn muốn kiểm tra xem đây có phải là chương trình chính xác không và bạn có máy 64 bit, bạn có thể sử dụng chương trình này để thay thế:

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

Thật dễ dàng để đoán "khung" của chương trình main=print(0x<hex digits>^0x<hex digits>::Int). Tất cả các phép thuật là tìm kiếm đúng cách để phân vùng và sắp xếp các chữ số. Tôi đã không làm rất thông minh ở đây, chỉ là một cuộc tìm kiếm vũ phu ... mặc dù tôi đã cẩn thận lạm dụng thực tế là một số chữ số bị trùng lặp, có lẽ có khoảng một số chữ số trong cơ sở và số mũ, và chữ số cuối cùng của căn cứ gần như chắc chắn là không. Mã tìm kiếm hoàn chỉnh được bao gồm bên dưới; nó sử dụng gói multiset-comb . Việc tìm kiếm đầy đủ mất khoảng 10:33 trên máy của tôi (tất nhiên chỉ tạo ra một câu trả lời đúng).

{-# 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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.