Pisahkan Kode Sumber [robber thread untuk upaya cracking]

44

Ini adalah utas utas tantangan utama Unscramble the Source Code . Jika Anda merasa telah berhasil menguraikan salah satu jawaban polisi, Anda harus memposting solusi Anda sebagai jawaban untuk utas ini.

Sebagai pengingat, Anda memiliki satu upaya untuk memecahkan setiap pengiriman. Upaya cracking Anda akan menjadi versi kode sumber yang tidak diacak. Jika tebakan Anda cocok dengan deskripsi (karakter yang sama, output, dan tentu saja bahasa), dan Anda adalah tebakan yang benar pertama, maka Anda memenangkan poin. Penting untuk dicatat bahwa program Anda tidak harus sama persis dengan aslinya, cukup gunakan karakter yang sama dan memiliki fungsi yang sama. Ini berarti ada lebih dari satu jawaban yang benar.

Perampok dengan poin terbanyak (crack sukses) menang.

Papan peringkat

Terlalu banyak solusinya

20 sol

15 pemecahan

10 pemecahan

7 pemecahan

5 solves

4 pemecahan

3 pemecahan

2 pemecahan

1 memecahkan

PhiNotPi
sumber
1
Perl 5, ukuran 27, oleh Morot - print'pin '= ~ tr (a-za) (za-z) r
@ WumpusQ.Wumbley Kita semua pernah ke sana ...;)
Martin Ender
3
Saya menolak untuk membuang waktu saya mencoba untuk menenangkannya.
Dengan adanya dua badan pertanyaan, tampaknya jawaban yang diacak / tidak diacak terbalik
Mooing Duck
Ruby, 23 oleh MegaTom = p% ++. Methods [80] [1 ..- 1]
histocrat

Jawaban:

32

CJam, ukuran 20, oleh Martin Büttner

Hi "petStorm!", mame

Cobalah online.

Bagaimana itu bekerja

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

Memecahkan kode

Output yang diinginkan 2.956177636986737,, adalah Double atau Double diikuti oleh Long.

Hanya menggunakan karakter dalam "Stop, Hammer time!", ada empat operator builtin yang mengembalikan Doubler non-integer:

  • mS, yang mana asin
  • ma, yang mana atan2
  • me, yang mana exp
  • mt, yang mana tan

Semuanya mengandung m, jadi kita bisa menggunakan paling banyak tiga. Hanya ada satu Sdan satu a.

Semua operator itu membutuhkan input, dan masatu-satunya yang menggunakan dua input. Kami hanya memiliki tiga cara untuk mendorong Long:

  • "...",, yang mendorong panjang string (kurang dari 18).
  • H, yang mendorong 17.
  • ...!, yang mendorong BUKAN logis ....

Kami tidak memiliki cara untuk mendorong sesuatu yang palsu ..., sehingga opsi terakhir akan selalu menekan 0.

Output tidak dimulai atau diakhiri dengan 17atau 0. Karena 15 digit desimal adalah jumlah digit yang biasa untuk suatu Double, sepertinya outputnya adalah Double sederhana.

Dengan asumsi ini, kode harus jatuh dalam salah satu kategori berikut:

  • <Long> <mS|me|mt>{1,3}
  • <Long> <mS|me|mt>{x} <Long> <mS|me|mt>{y} ma <mS|me|mt>{z}.
  • Salah satu di atas, dengan beberapa pemeran untuk Long ( i) atau pembulatan ( mo) diterapkan ke Double.

Dalam kasus kedua, x + y + zadalah 1 atau 2 dan salah satu dari Long adalah 0 atau 17.

Sisanya pada dasarnya adalah kekuatan kasar. Setelah beberapa kali mencoba,

18 , {H \ ma me 2.956177636986737 =} =

kembali 9, artinya

H 9 ma me

menghasilkan output yang diinginkan.

Yang tersisa adalah menghilangkan semua kecuali 9 karakter dari string. Spasi adalah noops dan inoop di Longs, jadi "petStorm!"adalah salah satu pilihan yang mungkin.

Dennis
sumber
1
Itu gila - bagaimana Anda mengetahui nomor itu?
Sp3000
1
Saya mencari logaritma (dan lain-lain) dari nomor itu tetapi tidak mendapatkan hasil apa pun. Sekarang saya menemukan saya menggunakan presisi terlalu tinggi.
jimmy23013
2
@ Sp3000: Saya sudah mengedit jawaban saya.
Dennis
1
Sangat bagus! Saya seharusnya mengeluarkan dua karakter lagi dari string saya kira. Dalam asli saya, saya benar-benar memiliki ruang di dalam string, tetapi mrsebelum mengambil panjang Bukannya Anda tidak akan menemukan itu juga di beberapa titik. ;)
Martin Ender
25

Python 3, ukuran 12, oleh xnor

()and bciprt

Tidak melakukan apa pun (ekspresi menghasilkan tupel kosong, yang tidak dicetak). Ini berfungsi karena evaluasi hubungan pendek.

matsjoyce
sumber
1
Dalam Python 3 IDLE, ini menghasilkan ().
Hosch250
@ hosch250 Karena ada dalam program (file python), tidak ada yang dihasilkan, karena tidak ada print.
matsjoyce
Saya melihat. Saya berlari dari hal baris perintah.
Hosch250
47
.... "thing" ....
TheDoctor
4
@Imray Karena hubungan arus pendek - Python memuat tuple dan memeriksa apakah nilai tuple benar, karena kosong, itu salah. Kode untuk memuat variabel bciprttidak pernah dieksekusi, sehingga tidak pernah menghasilkan NameError.
Mateon1
20

Python, ukuran 74, oleh xnor

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

Ya itu menyenangkan. Terima kasih kepada FryAmTheEggman, hosch250 dan isaacg untuk saran / bantuan.

Sp3000
sumber
1
Pekerjaan yang baik! Solusi saya adalah sangat mirip: list(\nprint(range is range)for aacdeeeeehmppprrrrssvwy in\noct(int is int)).
xnor
@xnatau LOL nama variabel itu. Apakah buruk bahwa saya tidak akan pernah memikirkan hal itu? : P
FryAmTheEggman
2
@FryAmTheEggman Saya pikir semua orang mengharapkan saya untuk menggunakan trik dari polisi pertama saya .
xnor
@FryAmTheEggman Jangan khawatir, Anda bukan satu-satunya: P
Sp3000
13

Python 2, ukuran 50, oleh Geobits

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

Output 42.

Ypnypn
sumber
1
Ada benarnya :) Untuk referensi, asli adalah print 2**2**2**2/2**2**2/2**2**2/2-2**2**2*2**2-22, tetapi tidak mengherankan sama sekali bahwa lebih dari satu opsi sudah benar.
Geobits
13

GolfScript, ukuran 13, oleh Peter Taylor

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

Uji di sini.

Satu lagi, bahwa saya hanya retak dengan bantuan besar dari Sp3000. Terima kasih!

Jadi, inilah cara kami sampai di sana. Sp3000 melihat banyak proses angka berurutan dalam output:

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

Berdasarkan itu kami membuat asumsi, bahwa ini adalah urutan yang meningkat, yang hanya memungkinkan untuk satu kemungkinan pemisahan dari jumlah yang tersisa:

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

Itu 23 angka, yang merupakan indikator kuat untuk mengulang blok 22 kali, serta mengakhiri blok dengan .(duplikat elemen tumpukan atas), sehingga hasil sebelumnya tertinggal di tumpukan dan sedemikian rupa sehingga iterasi akhir akan muncul pada tumpukan dua kali. Itu 22,{____.}/.

Sekarang melihat celahnya, itu ternyata kekuatan keempat (yang bagus, karena kita punya 4dan ?). Lebih tepatnya, mereka adalah kekuatan keempat dari indeks angka saat ini. Jadi selanjutnya kita melihat indeks mana yang menciptakan celah:

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

Dalam biner itu

00100
00101
00110
00111
01100
01101
01110
01111
10100
10101

Mereka semua memiliki set bit ketiga, yang berarti bahwa indeks mungkin hanya bitwise-and'ed with 4(yang bagus lagi, karena kita dapat membuat yang lain 4dengan .dan memiliki a &). Ini bekerja dengan sangat baik, karena operasi ini menghasilkan salah satu 0atau 4, dan jika kita menggunakannya sebagai eksponen, kita mendapatkan salah satu 1atau keempat kekuatan, yang persis apa yang kita butuhkan. Jadi mari kita menggabungkannya:

22,{.4&?+.}/

Inilah yang dilakukan oleh blok:

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

Sekarang ada dua masalah yang tersisa: kami memiliki nyasar yang belum ,kami gunakan, dan iterasi pertama adalah kasus khusus, di mana tidak ada nilai dari iterasi sebelumnya yang kami dapat menambahkan hal-hal ketika bertemu +. Kami menemukan itu berkat komentar yang tidak terkait oleh user23013 yang dengan santai menyebutkan bahwa GolfScript dimulai dengan string kosong di stack (jika tidak ada yang ada di STDIN). Jadi kita bisa menggunakan ,hak lain itu di awal untuk mengubah string itu menjadi 0, yang tepat seperti yang kita butuhkan sebagai permulaan iterasi.

Martin Ender
sumber
Spot on. Ini terinspirasi oleh urutan dalam OEIS yang tidak dapat saya temukan sekarang.
Peter Taylor,
3
Dan inilah mengapa memiliki utas terpisah untuk perampok adalah ide yang bagus. Pekerjaan yang baik!
Dennis
11

Python 3, ukuran 16, oleh matsjoyce

import __hello__
Martin Ender
sumber
1
Bah, dikalahkan 20 detik> <
Geobits
Benar, satu poin untuk Anda (haruskah kita memiliki daftar dengan info ini juga?)
matsjoyce
11

Ruby, ukuran 17, oleh Doorknob

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

Itu sangat menyenangkan. Terima kasih kepada Sp3000 karena telah membantu saya! Dan saya belajar bahwa %r?...?literal dapat memiliki pembatas. :)

Martin Ender
sumber
10
Alat peraga untuk Doorknob karena telah menyesatkan dengan gila print, hanya untuk membaginya menjadi puntuk pencetakan, %runtuk iregex dan untuk pencocokan regex case-sensitive.
Sp3000
11

PHP, ukuran 49, oleh bwoebi

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

Itu benar-benar mental .

Itu harus

print@substr(new exception,);

cukup cepat, pada titik mana saya membutuhkan sesuatu yang memberi -6setelah koma, setelah $++$++$++$+=$~main$2pergi.

Tangkapan utama adalah itu $a, $mdan $isemuanya NULL, jadi menggunakannya secara tidak langsung dalam variabel variabel , berarti mereka semua menunjuk ke variabel yang sama. Namun, PHP tampaknya melakukan beberapa hal aneh tentang menyelesaikan variabel variabel. Dengan variabel normal, Anda dapat melakukan hal-hal seperti

echo $a+$a=2;

yang mencetak 4( 2ditugaskan ke $adan kemudian ditambahkan ke dirinya sendiri). Tetapi jika saya melakukan hal yang sama dengan variabel variabel:

echo $$a+$$a=2;

Saya mengerti 2, karena sekarang yang pertama $$aadalah evaluasi sebelum penugasan.

Pada akhirnya saya berhasil memaksakan ketertiban dengan menempatkan beberapa kenaikan pada RHS +=yang harus dievaluasi sebelum penugasan tambahan itu. Dengan begitu saya sampai pada 5yang saya bisa sedikit komplemen. Tetap saja ... ada beberapa hal misterius yang terjadi, dan saya tidak tahu mengapa setengah dari hal yang saya coba berhasil dan tidak berhasil.

Martin Ender
sumber
Untuk referensi, asli saya:print@substr(new exception,~$$mn+=2+$$a+++$$i++);
bwoebi
Btw. Saya berharap semua tanda dolar dan fakta bahwa semua surat-surat mainitu berada di tali menyesatkan Anda banyak. Juga, metode yang agak tidak biasa untuk mengekstraksi {main}, saya pikir ;-)
bwoebi
@ Bwoebi The maintidak benar-benar menyesatkan saya, setelah melihat exception, newdan substr. Saya pikir mereka hanya akan menjadi nama variabel. Butuh sedikit untuk menghasilkan variabel variabel dan daripada saya menghabiskan sebagian besar waktu untuk mencari tahu beberapa urutan operasi yang benar-benar akan menghasilkan 5yang saya dapat melengkapi tanpa menggunakan set kurung lain.
Martin Ender
Nah, untuk waktu berikutnya, jika ada lebih banyak dolar daripada karakter, biasanya variabel variabel. (Dalam hal ini saya juga menyalahgunakan varvars untuk memaksa evaluasi kiri-ke-kanan.) Berapa lama waktu yang Anda butuhkan untuk menemukan pengecualian baru substrat? Ngomong-ngomong, saya memiliki pengetahuan yang lebih dalam tentang mesin Zend, jadi saya dapat dengan sempurna menjelaskan kepada diri sendiri mengapa hal-hal dievaluasi dalam urutan mana dan itu bagus untuk tantangan ini ;-) Jika ada hal tertentu yang tidak Anda dapatkan, saya Saya akan dengan senang hati menjelaskannya kepada Anda.
bwoebi
@ bwoebi Ayo ngobrol besok, dan kita bisa membicarakannya, tapi saya sudah menghabiskan cukup lama untuk hal ini hari ini. ;) Adapun pertanyaan pertama Anda, exceptionsudah jelas, yang meninggalkan karakter tersesat substrdan newberbaring. Itu benar-benar hal pertama yang saya lihat ketika mulai mengerjakannya.
Martin Ender
9

Ruby, ukuran 38, oleh Doorknob

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

Saya cukup yakin ini tidak ada di dekat sumber aslinya. Ini deterministik meskipun digunakan rand.

Beginilah cara kerjanya. $><<hanya keluaran. $pece60dan $winmerupakan variabel global yang tidak terdefinisi, yang karenanya adil nil(dan mereka memungkinkan saya untuk menyingkirkan beberapa karakter asing). !$pece60membuat truedan to_smemberikan string "true".

Selama berabad-abad, saya mencoba mendapatkan 2atau -2mengaksesnya udi sana, tetapi kemudian saya menyadari bahwa saya bisa mengambilnya t, dan memanggil .succ(essor) untuk membuatnya u.

randdengan nilparameter mengembalikan float acak dalam interval [0,1). Saat menggunakan floats untuk mengindeks ke string, mereka terpotong menjadi bilangan bulat, jadi ini akan selalu mengembalikan karakter pertama.

Akhirnya, saya punya sepasang cadangan []jadi saya hanya membungkus semuanya di dalamnya, karena untungnya semuanya adalah ekspresi di Ruby.

Terima kasih kepada Sp3000 karena telah melempar beberapa ide dalam obrolan.

Martin Ender
sumber
8
Ruby adalah bahasa yang tampak menakutkan.
feersum
8

C, 51 oleh es1024

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

Setelah 20 tahun pemrograman C hari ini saya belajar tentang konstanta floating point heksadesimal.

Seni
sumber
8

Ruby, 45 (histokrat)

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

Woo hoo! Ini adalah celah pertama saya pada masalah kode golf, dan saya tidak punya cukup perwakilan untuk mengomentari posting asli. Saya segera mengenali trik yang digunakan, karena saya sebenarnya sering menggunakannya dalam kode produksi. Butuh sekitar 5 menit untuk mengetahui sebagian besar struktur dan beberapa jam untuk mendapatkan jawaban yang lengkap.

Penjelasan:

  • %q[]adalah metode alternatif untuk membuat string. Parenthesis dan kurung kurawal juga dapat digunakan.
  • String#to_i di Ruby menerima angka dalam basis apa pun dari 2 hingga 36. Ini akan mengabaikan karakter pertama dalam string yang bukan bagian dari angka, sehingga karakter tambahan apa pun dapat "dibuang" setelah spasi.

Dan inilah kode yang saya gunakan untuk memecahkannya:

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

Cara untuk menanamkan masalah NP di dalam teka-teki. Saya benar-benar kutu buku. Kerja bagus!

charredUtensil
sumber
Saya menambahkan komentar ke jawaban asli untuk Anda.
FireFly
Ini luar biasa (dan dekat dengan jawaban yang dimaksudkan), tetapi secara teknis tidak valid karena tidak memiliki output.
histokrat
* facepalm Yah aku masih bersenang-senang.
charredUtensil
2
@charredUtensil jika Anda tidak keberatan menjalankan skrip Anda untuk beberapa hal lagi, saya pikir pencetakan hanya memindahkan pke sebelum ekspresi. Agaknya karakter yang tersisa dapat digunakan untuk membentuk konstanta seperti yang telah Anda lakukan.
FireFly
Saya sebenarnya tidak perlu menjalankannya lagi. Beberapa karakter terakhir dari string dapat disusun ulang tanpa mengubah hasilnya - p %q[zyfnhvjkwudebgmaclrsx].to_i(36)/51074892Saya tahu saya telah memecahkan usaha cracking saya yang sebenarnya :)
charredUtensil
7

Kulit piton Python ukuran 44, oleh Caridorc

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

Saya yakin seharusnya ada lebih dari itu, tetapi karena __name__sama dengan __main__, karakter ke-4 'a' dipilih dan sisa garis tidak pernah dievaluasi.

osifrque melengking
sumber
Hanya untuk referensi, program aslinya adalah[__name__ for ___name__ in range(1,4)][2][3]
Caridorc
7

Perl, ukuran 36, oleh ossifrage melengking

$_=rof;for$i(1..2129<<7){$_++}print;

Satu lagi yang sulit.

grc
sumber
1
Bagus sekali :-) Tepat seperti itu.
lubang air keras
@squeamishossifrage Terima kasih. Anda memiliki beberapa 'fitur Perl' yang tersembunyi di dalam program itu.
grc
7

CJam, ukuran 13, oleh user23013

G,Cf#If/sE*K%

Uji di sini.

Dipecahkan dengan tangan, seperti:

Pertama, beberapa latar belakang untuk non-CJammers:

  • CEGIKsemua variabel, yang pra-dijalankan untuk 12, 14, 16, 18, 20, masing-masing.
  • s mengkonversi elemen tumpukan atas ke string.
  • Secara teknis string hanya array karakter.
  • fcukup ajaib. Untuk tujuan jawaban ini, versi yang disederhanakan adalah bahwa, untuk array a, beberapa nilai lain bdan operator g, urutan abfgpeta g(_,b)ke a(di mana setiap elemen amasuk ke _slot yang).
  • / adalah pembagian dan array pemisah (antara lain).
  • * adalah pengulangan multiplikasi dan array (antara lain).
  • %adalah modulo dan beberapa operasi aneh, yang dalam bentuk ad%array adan integer dmengambil setiap delemen th a(seperti Python mengiris dengan lebar langkah d).
  • # adalah eksponensial (antara lain).
  • ,mengubah angka menjadi rentang (dari 0ke n-1) dan mengembalikan panjang array.

Oke, itu tidak mungkin ...

Sudah cukup jelas bahwa kami perlu ,mengubah angka menjadi rentang, karena satu-satunya cara lain untuk mendapatkan array adalah membangun nomor yang lebih besar dan mengubahnya menjadi array karakter dengan s- tetapi kemudian kami tidak bisa melakukan apa pun. aritmatika lebih lanjut tentang itu. Dan kita perlu sebuah array untuk melakukan sesuatu dengan fs.

Saya pertama kali berasumsi bahwa fs digunakan dengan #dan %, tetapi itu berarti kita akan membutuhkan angka sekitar 90 untuk mendapatkan jumlah digit yang tepat pada akhirnya. Dan juga, ini tidak menjelaskan apa yang harus dilakukan dengan s, dan karena jawabannya tampak sangat golf, saya meragukan user23013 hanya menambahkan ssebagai no-op efektif tempat untuk mengusir orang.

Jadi saya pikir, mungkin dia bahkan tidak menyimpan angka-angka kecil %, tetapi sebaliknya dia membangun sebuah array angka besar, menggabungkan representasi string mereka dengan s, tetapi kemudian hanya mengambil beberapa irisan aneh dengan itu %. Jadi saya bermain-main sedikit dengan kerangka kerja berikut:

__*,_f#_f/s_%

(Anda tidak dapat melakukan _f/pertama, karena itu akan menghasilkan nol untuk setidaknya 12 elemen pertama.)

Di mana _ada beberapa permutasi variabel. Saya tidak mencoba semuanya sebelum bosan, dan masalah utama dengan ini adalah urutan angka yang dihasilkan terlalu lama.

Pada titik tertentu terlintas dalam benak saya, bahwa kami tidak akan membutuhkan jangkauan yang begitu besar (yaitu produk dari dua angka), jika sebaliknya kami menggunakan *untuk mengulang string yang dihasilkan. Karena ketidakcocokan parameter *dan %ini tidak akan menghasilkan pengulangan dalam hasil:

_,_f#_f/s_*_%

Ini menghasilkan hasil yang sangat dekat dengan apa yang saya cari. Saya akan benar-benar mencoba 240 dari mereka, tetapi cukup cepat (upaya ketiga atau keempat), saya menemukan

E,Cf#If/sG*K%

yang menghasilkan

03081942753650251594592190492275006661328850322159030034930530649722385533653290754678977

Dan saya pikir kecocokan dari enam digit pertama tidak akan menjadi kebetulan. Jadi pertanyaannya adalah bagaimana mengatur ulang tanpa mengganggu perhitungan yang sebenarnya:

  • Saya tidak bisa berubah Kkarena itu akan memilih angka yang berbeda sama sekali.
  • Saya tidak bisa mengubah Catau Ikarena itu akan mengubah angka yang dihasilkan dari dua operasi peta.
  • Jika saya mengubah Gitu hanya akan mengubah jumlah pengulangan, yang tidak akan melakukan apa pun selain mengubah panjang hasilnya. (Yang mana yang bagus.)
  • Jika saya mengubah Eitu akan mengubah rentang array, tetapi rentang masih akan mulai dengan [0 1 2 3 ...], sehingga tidak akan mempengaruhi perhitungan. Ini akan mempengaruhi panjang string dasar yang dikembalikan oleh s, yang juga berarti K%akan memilih angka yang berbeda pada pengulangan tambahan.

Jadi saya hanya mencoba menukar Edan Gdan voila:

030819828850379075460427536222159187897761502517030034671154875945928930530907551421904962649729

Singkatnya, inilah yang dilakukan kode:

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.";
Martin Ender
sumber
6

Pyth, ukuran 11, oleh isaacg

:\\w$ ",d,N

Itu beberapa penyalahgunaan bug berarti di sana. Ini mengkompilasi ke:

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

Bug yang relevan adalah yang \\dikompilasi "\"alih-alih "\\", yang memungkinkan Anda mengkompilasi Pyth menjadi sebuah string.

Martin Ender
sumber
Haruskah Pprintmenjadi print, atau setidaknya pprint?
FireFly
@ FireFly Itulah yang dinyatakan oleh output debug. Mungkin interpreter Pyth mendefinisikan Print sendiri?
Martin Ender
Oh, oke, sudahlah.
FireFly
6

Python, ukuran 69, oleh Sp3000

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

Itu sulit ...

grc
sumber
1
Bagus! Sebagai referensi, yang asli adalah print(sum(map(ord,str((dict(list(((str(),str(dict())),))),list()))))), tetapi jelas banyak permutasi kata kunci yang berbeda akan berfungsi.
Sp3000
2
Itu level LISP dari parens di sana!
xnor
6

Python 3, 37 byte, oleh Sp3000

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

Yang memalukan sejauh ini adalah bagian tersulitnya untuk mengubah string menjadi byte. Saya harus tidur di atasnya, dan di malam hari menyadari 'ya, itu byte byte!'

Blake Walsh
sumber
Ahaha bagus sekali, saya pikir Ellipsis mungkin membuat orang tersandung tapi saya kira tidak
Sp3000
Saya melihat ellipsis dan zfill, tetapi tidak tahu tentang objek byte. Itu bisa berguna dalam array bilangan bulat golf!
feersum
Kerja bagus! Saya hanya melihat cetakan dan .zfill, dan saya tahu jumlah mungkin menjadi bagian darinya, tetapi saya tidak bisa menyelesaikannya. Punya +1.
Hosch250
6

PHP, 53, oleh PleaseStand

Akhirnya memecahkannya:

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

Solusinya datang cukup cepat ketika saya perhatikan bahwa urutannya terdiri dari bilangan desimal dan oktal bergantian:

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

Juga, interval antara setiap set angka tumbuh pada tingkat yang sama dengan nilai yang dikembalikan oleh printf()(yaitu, jumlah karakter yang ditulis).

osifrque melengking
sumber
3
Wow, pekerjaan detektif yang bagus!
Sp3000
6

Python 2, ukuran 132, oleh Vi.

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

Terima kasih untuk semua garis miring terbalik dan tanda kutip :)


Sunting: Versi 96-char yang diperbarui:

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

Ini sepenuhnya diambil dari solusi Alex di https://codegolf.stackexchange.com/a/41451/32353

kennytm
sumber
Heh, bagus. Ingin tahu apa solusinya ...
FireFly
Ini bukan solusi yang dimaksudkan. Solusi asli tidak memiliki "membuang" hal-hal seperti fgiillmmooprrssttatau ,,,\016:::S[]____tuuvyy.
Vi.
exec? Kode saya harus lebih pendek ... Saya meniru dengan compile+ evalkarena saya lupa tentang exec...
Vi.
Menerapkan versi yang lebih pendek. Cobalah mencari tahu trik aslinya.
Vi.
5

CJam, ukuran 15, oleh Ypnypn

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

Dari karakter yang diberikan, saya kira itu harus salah satu dari tiga bentuk berikut:

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

yang membuat rentang dua digit, lalu memetakan operasi penambahan dan modulo (dalam urutan apa pun) ke dalam rentang, sebelum menjumlahkannya. Jadi saya baru mulai dengan yang pertama, dan secara sistematis mencoba permutasi 6789dalam celah.

Martin Ender
sumber
Sial, saya baru saja menyelesaikannya juga: /
Pengoptimal
5

PHP, ukuran 52, oleh PleaseStand

for(mt_srand($i=46);$i--;)echo chr(mt_rand()%95+32);

Ini ternyata cukup mudah pada akhirnya. Output terlihat sangat acak, dan karakter m, t, _, r, a, ndan dsemua muncul dua kali ...

osifrque melengking
sumber
5

Python 2, ukuran 61, oleh FryAmTheEggman

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

Saya akan sangat terkejut jika ini cocok dengan aslinya.

grc
sumber
Tidak, tapi selamat! Kode saya adalah:print''.__doc__[::2][::3].split()[1].split('.')[0][:-~-~True]
FryAmTheEggman
Kalau dipikir-pikir, saya seharusnya tidak memasukkan tanda kutip ...;)
FryAmTheEggman
@FryAmTheEggman Oh wow - program yang bagus! Saya yakin Anda setidaknya terbiasa dir()menemukan 'get'. Dan ya, itu akan sangat sulit tanpa tanda kutip.
grc
5

Python 3, Sp3000, ukuran 44

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

Python 3 membantu saya di sini karena saya dapat menyebabkan kesalahan (bergeser ke kiri Noneoleh sesuatu) setelah mencetak jawabannya.

feersum
sumber
Hmm ... sepertinya aku cukup boros dengan orang tuaku. Memiliki print(~(~(()<())<<((()<((),))<<(()<((),)))))awalnya.
Sp3000
5

PHP, ukuran 52, oleh kenorb

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

(Ya Tuhan, berapa lama aku harus memikirkan apa yang harus dilakukan dengan sisa _rsufiks yang tersisa . Sampai aku sadar itu bukan print, tapi print_r...)

bwoebi
sumber
Dan aku tidak tahu bagaimana Anda mencari tahu :) Asli: _:print_r(chr(3*pow(2,5)+@++$i));if(@$i<4<<1)goto _;.
kenorb
3
@kenorb a) Anda perlu mencetak sesuatu, jadi echotidak mungkin; printtetap; b) Anda perlu beberapa loop, tetapi untuk forloop, tidak ada cukup titik koma, dan well, ada titik dua ... jadi mungkin label di sana dikombinasikan dengan goto; c) maka diperlukan jika untuk membatalkan loop-goto. Memiliki sekarang X:print($Y);if($Y)goto X;(X dan Y menjadi placeholder); d) ada ++, tapi tidak =, jadi mungkin beberapa ++$Zdari 1 hingga 8; e) untuk mendapatkan surat dari integer, kita perlu chr()(biasanya) - ada di sana; f) sekarang saya hanya perlu menemukan angka 96 dan 8 untuk chr dan jika. Kemudian isi placeholder dan volià.
bwoebi
5

PHP, ukuran 54, oleh Steve Robbins

echo(21<<($$$$$$${$aaaabbbbbbehi==$l&$w^2}^1==1));;;;

Bukan solusi asli, saya pikir.

jimmy23013
sumber
2
Haha, itu bagus sekali. Saya mulai dengan memancing keluar echodan while, tetapi kemudian tidak bisa diganggu untuk menemukan lingkaran yang menghasilkan 42.
Martin Ender
Ada whiledalam aslinya.
Steve Robbins
5

C, es1024, panjang 70

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

Bagian yang sulit adalah untuk melacak semua karakter yang tidak dibutuhkan ... dengan serius ... Saya harus mengulanginya sekitar 10 kali. Satu-satunya yang membuatku khawatir adalah .tetapi entah bagaimana aku menancapkannya di tengah-tengah printfstring format dan itu menjadi tidak terlihat!

feersum
sumber
5

Haskell, ukuran 34, oleh Petr Pudlák

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

Perhatikan bahwa program ini harus dijalankan pada mesin 32-bit. Jika Anda ingin memeriksa bahwa ini adalah program yang benar dan Anda memiliki mesin 64-bit, Anda dapat menggunakan ini sebagai gantinya:

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

Cukup mudah untuk menebak "bingkai" dari program tersebut main=print(0x<hex digits>^0x<hex digits>::Int). Semua keajaiban itu dalam mencari cara yang tepat untuk mempartisi dan memesan digit. Saya tidak melakukan banyak hal pintar di sini, hanya pencarian kasar ... meskipun saya berhati-hati untuk menyalahgunakan fakta bahwa beberapa digit digandakan, mungkin ada jumlah digit yang sama di pangkalan dan eksponen, dan digit terakhir dari basis hampir pasti bahkan tidak. Kode pencarian lengkap termasuk di bawah ini; menggunakan paket multiset-sisir . Pencarian lengkap membutuhkan sekitar 10:33 di komputer saya (dan hanya menghasilkan satu jawaban yang benar, tentu saja).

{-# 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
Daniel Wagner
sumber
5

Javascript, 82, oleh TrungDQ

b=/v/[0]+' ';b[0]+b[9]+b[6]+b[7]+'v'+b[7]+((0==0)+b)[1]+b[9]+b[4]+b[5]+b[6]+b[2];

Butuh selamanya untuk mendapatkan indeks yang benar.

Sluck49
sumber