Kaynak Kodunu Çözme [çatlama girişimleri için soygun konu]


44

Bu, Kaynak Kod mücadelesini çözen ana bölümün tamamlayıcısıdır . Polisin cevaplarından birini çözmeyi başardığını düşünüyorsanız, çözümünüzü bu konuya cevap olarak göndermelisiniz.

Bir hatırlatma olarak, her gönderimi kırma girişiminde bulunabilirsiniz. Çatlama girişiminiz kaynak kodun şifrelenmemiş bir versiyonudur. Tahmininiz tanımla eşleşiyorsa (aynı karakterler, çıktı ve tabii dil) ve ilk doğru tahminde bulunuyorsanız, bir puan kazanırsınız. Programınızın orijinaliyle tam olarak eşleşmesi gerekmediğini, sadece aynı karakterleri kullandığını ve aynı işlevselliğe sahip olduğunu unutmayın. Bu, birden fazla doğru cevabın olabileceği anlamına gelir.

En yüksek puana sahip soyguncu (başarılı çatlaklar) kazanır.

Liderler Sıralaması

Çok fazla sorun var

20 çözer

15 çözer

10 çözer

7 çözer

5 çözer

4 çözer

3 çözer

2 çözücüler

1 çöz


1
Perl 5, büyüklük 27, Morot tarafından - print'pin '= ~ tr (a-za) (za-z) r

@ WumpusQ.Wumbley Hepimiz oradaydık ...;)
Martin Ender

3
Onu yatıştırmaya çalışırken zamanımı boşa harcamayı reddediyorum.

İki soru organı göz önüne alındığında, şifreli / şifreli cevapların tersine döndüğü
anlaşılıyor

Ruby, 23, MegaTom = p% ++. Yöntemler [80] [1 ..- 1]
histokrat

Yanıtlar:


32

CJam, beden 20, Martin Büttner tarafından

Hi "petStorm!", mame

Çevrimiçi deneyin.

Nasıl çalışır

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

Kodu kırmak

İstenilen çıktı, 2.956177636986737bir çift veya bir çift ve ardından bir uzun.

Yalnızca içindeki karakterleri kullanarak "Stop, Hammer time!", tamsayı olmayan Çiftler döndüren dört yerleşik işleç vardır:

  • mS, hangisi asin
  • ma, hangisi atan2
  • me, hangisi exp
  • mt, hangisi tan

Hepsi bir içerir m, bu yüzden en fazla üçünü kullanabiliriz. Sadece bir Stane var a.

Bu operatörlerin hepsinin girişe ihtiyacı var ve maiki girişi tüketen tek kişi. Uzunları zorlamak için sadece üç yolumuz var:

  • "...",, dize uzunluğunu iter (kesinlikle 18'den az).
  • H, 17 iter.
  • ...!, mantıklı DEĞİL iter ....

Sahte bir şeyi zorlamak gibi bir yolumuz yok ..., bu yüzden son seçenek her zaman 0'a basacak .

Çıkış başlayabilir ya bitmez 17ya 0. 15 ondalık basamak bir Double için normal basamak sayısı olduğundan, çıkışın basit bir Double olması muhtemel görünüyordu.

Bunu varsayarak, kod aşağıdaki kategorilerden birine girmelidir:

  • <Long> <mS|me|mt>{1,3}
  • <Long> <mS|me|mt>{x} <Long> <mS|me|mt>{y} ma <mS|me|mt>{z}.
  • Yukarıdakilerden herhangi biri, bir kısmı Long ( i) ya da moDouble (yuvarlama) ( ) ile çift olarak uygulanır.

İkinci durumda, x + y + z1 veya 2'dir ve Uzunlar'dan biri 0 veya 17'dir.

Gerisi temelde kaba kuvvetti. Birkaç denemeden sonra,

18 , {H \ ma me 2.956177636986737 =} =

döndü 9, demek ki

H 9 ma me

İstenilen çıktıyı üretir.

Geriye kalan tek şey dizgeden 9 karakter hariç tümünü çıkarmak. Boşluklar nooptur ve uzunlar boyunca ibir noop'tur , bu yüzden "petStorm!"olası seçeneklerden biridir.


1
Bu delilik - numaranın ne olduğunu nasıl öğrendin?
Sp3000

1
Bu sayının logaritmasını (ve diğerlerini) aradım ancak sonuç alamadım. Şimdi çok yüksek hassasiyet kullandığımı öğrendim.
jimmy23013

2
@ Sp3000: Cevabımı düzenledim.
Dennis

1
Çok hoş! Sanırım dizeden iki karakter daha çıkarmalıydım. Orijinalimde gerçekte hala telin içinde boşluklar vardı, ancak bir tane mrdaha uzunluyordu. Bunu bir noktada anlayamayacaksın değil. ;)
Martin Ender

25

Python 3, beden 12, xnor

()and bciprt

Hiçbir şey yapmaz (ifade basılmayan boş bir demet üretir). Bu kısa devre değerlendirmesi nedeniyle çalışır.


1
Python 3 IDLE'de bu çıktı ().
Hosch250

@ hosch250 Bir programda (python dosyası) olduğundan, hiçbir şey olmadığından, hiçbir şey çıkmadı print.
matsjoyce

Anlıyorum. Komut satırı olayından kaçıyordum.
Hosch250

47
.... "şey" ....
TheDoctor

4
@Imray Kısa devre olması nedeniyle - Python, tuple yükler ve tuple değerinin doğru olup olmadığını kontrol eder, boş olduğundan, yanlışdır. Değişkeni yüklemek için kod bciprthiçbir zaman çalıştırılmaz, bu nedenle asla bir NameError üretmez.
Mateon 1

20

Python, boyut 74, xnor

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

Bu eğlenceliydi. FryAmTheEggman, öneri / yardım için hosch250 ve isaacg sayesinde.


1
İyi iş! Benim Çözüm oldukça benzerdi: list(\nprint(range is range)for aacdeeeeehmppprrrrssvwy in\noct(int is int)).
xnor

@xnor LOL değişken ismi. Bunu hiç düşünmemiş olmam kötü mü? : P
FryAmTheEggman

2
Herkesin bana gelen hile kullanmak bekliyordum düşünüyorum @FryAmTheEggman ilk polis .
xnor

@FryAmTheEggman Endişelenme, sadece sen değilsin: P
Sp3000

13

Python 2, beden 50, Geobits tarafından

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

42 çıkışı.


1
Bir nokta var :) Referans için, orijinal print 2**2**2**2/2**2**2/2**2**2/2-2**2**2*2**2-22, ama birden fazla seçeneğin doğru olması hiç de şaşırtıcı değil.
Geobits

13

GolfScript, 13 numara, Peter Taylor

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

Burada test et.

Bir diğeri, Sp3000'den sadece büyük bir yardımla kırıldım. Teşekkürler!

İşte oraya nasıl geldik. Sp3000, çıktıda art arda sayıların çalıştığını fark etti:

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

Buna dayanarak, bunun artan sayıların, yalnızca kalan sayıların olası bir şekilde bölünmesine izin veren bir dizi olduğunu varsaydığına dayanarak:

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

Bu, 23 sayının, bloğun 22 kez tekrarlanmasının yanı sıra, bloğun .(yinelenen üst yığın öğesi) ile sonlandırılmasının yanı sıra , önceki sonucun yığında geride kalması ve son yinelemenin görüneceği şekilde sonlandırılması için güçlü bir göstergedir . yığını iki kere. Bu 22,{____.}/.

Şimdi boşluklara bakıldığında, bunlar 4. güç olarak karşımıza çıkıyor (ki bu güzel, çünkü biz 4ve ?). Daha doğrusu, bunlar geçerli sayının endeksinin dördüncü gücüdür. Sonra, hangi endekslerin boşluk yarattığına baktık:

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

İkili olarak bunlar

00100
00101
00110
00111
01100
01101
01110
01111
10100
10101

Hepsinde üçüncü bir bit kümesi bulunur, bu da endeksin muhtemelen sadece bitsel ve -ed ile olduğu anlamına gelir 4(ki yine güzeldir, çünkü başka bir 4tane yapabiliriz .ve a &). Bu özellikle işe yarar , çünkü bu işlem ya sonuçlandı ya 0da 4ve üs olarak bunu kullanırsak ya 1da dördüncü bir güç elde edersek, tam olarak ihtiyacımız olan şey bu. Öyleyse bunu bir araya getirelim:

22,{.4&?+.}/

İşte bloğun yaptığı:

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

Şimdi iki sorun kalmıştı: ,henüz kullanmadığımız bir yolsuzluk vardı ve ilk yineleme özel bir durumdu, çünkü karşılaştığımız zaman şeyleri ekleyebileceğimiz önceki bir yinelemenin değeri yoktu +. GolfScript'in yığında boş bir dizeyle başladığını (STDIN'de bir şey yoksa) rasgele bahseden user23013 tarafından ilgisiz bir yorum sayesinde bulduk. Böylece bu diğer ,hakkı başlangıçta o dizgiyi a'ya çevirmek için kullanabilirdik 0, bu sadece yinelemenin başlangıcı olarak ihtiyacımız olan şeydi.


Noktaya bak. Bu, OEIS'te şu an bulamadığım bir diziden ilham aldı.
Peter Taylor

3
Bu yüzden soyguncular için ayrı bir konuya sahip olmak iyi bir fikirdir. İyi iş!
Dennis


11

Yakut, boyut 17, Doorknob tarafından

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

Çok eğlenceliydi. Bana bu konuda yardımcı olduğu için Sp3000'e teşekkürler! Ve ben de %r?...?harflerin sınırlayıcılara sahip olabileceğini öğrendim . :)


10
Doorknob'a, delicesine yanıltıcı olduğu için destek print, sadece pbaskı %riçin, regex'lerde ve büyük / iküçük harf duyarlı regex eşleşmesi için ayırmak için .
Sp3000

11

PHP, boyut 49, bwoebi tarafından

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

Bu kesinlikle zihinseldi .

Var

print@substr(new exception,);

oldukça hızlı bir şekilde, hangi noktada virgülten -6sonra $++$++$++$+=$~main$2bırakmış olan bir şeye ihtiyacım vardı .

Ana yakalamak olduğunu $a, $mve $itüm edilir NULLböylece dolaylı olarak bunları kullanarak, değişken değişkenler , araçlar aynı değişkene işaret ediyor. Ancak, PHP değişken değişkenlerini çözme konusunda garip şeyler yapıyor gibi görünüyor. Normal değişkenler ile gibi şeyler yapabilirsiniz

echo $a+$a=2;

hangi baskılar 4( 2kendisine atanır $ave daha sonra kendisine eklenir). Fakat değişkenleri ile aynı şeyi yaparsam:

echo $$a+$$a=2;

Anladım 2, çünkü şimdi ilk $$aödevden önce bir değerlendirme yap.

Sonunda, +=söz konusu ekleme görevlendirmesinden önce değerlendirilmesi gereken RHS'ye bazı artışlar koyarak bir emir zorlamayı başardım . Bu şekilde 5daha sonra biraz tamamlayıcı olabileceğimi anladım . Yine de ... bazı gizemli şeyler oluyor ve denediğim şeylerin yarısının neden çalıştığını ve çalışmadığını bilmiyordum.


Referans için, orjinal:print@substr(new exception,~$$mn+=2+$$a+++$$i++);
bwoebi

Btw. Umarım tüm dolar işaretleri ve tüm harflerin ipte olduğu gerçeği mainsizi çok yanlış yönlendirir. Ayrıca, ayıklamak için oldukça sıradışı bir yöntem {main}, bence ;-)
bwoebi

@bwoebi maingerçekten lekelenme sonra, beni yanıltmak etmedi exception, newve substr. Değişken isimleri olacağını düşündüm. Değişken değişkenleri kullanmak biraz zaman aldı ve zamanımın çoğunu, 5başka bir parantez seti kullanmadan tamamlayabileceğim bir işlem sırası bulmak için harcadım .
Martin Ender

Eh, bir dahaki sefere, karakterden daha fazla dolar varsa, genellikle değişken değişkenlerdir. (Bu durumda, soldan sağa değerlendirmeyi zorlamak için varvarları da kötüye kullandım.) Substr new istisnasının farkına varmak ne kadar sürdü? Bu arada, Zend motorunun daha derin bir bilgisine sahibim, bu yüzden neden olayların hangi sırayla değerlendirildiğini ve bu zorluklar için neden güzel olduğunu kendime mükemmel bir şekilde açıklayabilirim; mutlulukla size açıklayacağım.
Bwoebi

@bwoebi gel sohbet yarın ve biz bu konuda konuşmak olabilir, ama bu bugün yeterince uzun harcadım. ;) İlk sorunuza gelince, exceptionbaşıboş karakterler sol, hangi belliydi substrve newortalıkta. Kelimenin tam anlamıyla üzerinde çalışmaya başladığımda ilk gördüğüm şeydi.
Martin Ender

9

Yakut, boyut 38, Doorknob tarafından

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

Bunun orijinal kaynağa yakın hiçbir yerde olmadığından eminim. Kullanmasına rağmen deterministic rand.

İşte bu nasıl çalışıyor. $><<sadece çıktı. $pece60ve $wintanımsız küresel değişkenler, bu yüzden sadece nil(ve bazı yabancı karakterlerden kurtulmama izin verdiler). !$pece60a yapar trueve to_sdizeye verir "true".

Yıllarca, oraya girmeye 2ya -2da erişmeye çalıştım u, ama sonra anlayabileceğimi farkettim tve .succbunu yapmak için onu çağırmaya başladım u.

randbir nilparametre ile [0,1] aralığında rastgele bir değişkenlik gösterir. Dizeleri dizine almak için float'ları kullanırken, tamsayılara kesiliyorlar, bu yüzden bu her zaman ilk karakteri döndürür.

Sonunda yedek bir çiftim vardı, []bu yüzden içindeki her şeyi sildim çünkü neyse ki her şey Ruby'de bir ifadedir.

Sohbette bazı fikirleri attığı için Sp3000'e teşekkürler.


8
Ruby, korkutucu görünen bir dildir.
feersum

8

C, 51 tarafından es1024

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

Bugün 20 yıllık C programlamasından sonra onaltılık kayan nokta sabitlerini öğrendim.


8

Ruby, 45 (histokrat)

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

Bravo! Bu bir kod golf sorununda ilk çatlağım ve orijinal yazıya yorum yapmak için yeterli desteğim yok. Kullanılan numarayı hemen tanıdım, çünkü üretim kodunda sıkça kullandığımı fark ettim. Yapının çoğunu bulmak yaklaşık 5 dakika, tam cevabı bulmak için birkaç saat sürdü.

Açıklama:

  • %q[]dizeleri oluşturmak için alternatif bir yöntemdir. Parantez ve kaşlı ayraçlar da kullanılabilir.
  • String#to_i Ruby'de 2'den 36'ya kadar olan herhangi bir tabanda sayıları kabul eder. Sayının bir parçası olmayan dizideki ilk karakteri yok sayar, böylece boşluktan sonra fazladan karakterler atılabilir.

Ve işte onu kırmak için kullandığım kod:

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

Bir NP problemini bir bilmecenin içine yerleştirmenin yolu. Tamamen inek burcu oldum. Aferin!


Orijinal cevaba sizin için bir yorum ekledim.
FireFly

Bu harika (ve amaçlanan cevaba yakın), ancak çıktıları olmadığı için teknik olarak geçerli değil.
histocrat

* facepalm Eh, ben hala eğlendim.
chartUtensil

2
@charredUtensil komut dosyasını bir süre daha çalıştırmamanın sakıncası yoksa, basımın sadece pifadeden önceki noktaya hareket ettiğini düşünüyorum . Muhtemelen kalan karakterler, yaptığınız gibi sabitleri oluşturmak için kullanılabilir.
FireFly

Aslında tekrar çalıştırmam gerekmiyor. Dizesinin son birkaç karakter sonucunu değiştirmeden yeniden düzenlenebilir - p %q[zyfnhvjkwudebgmaclrsx].to_i(36)/51074892Ben :) gerçi benim gerçek çatlama girişimi kırdı biliyorum
charredUtensil



7

CJam, boyut 13, kullanıcı23013 tarafından

G,Cf#If/sE*K%

Burada test et.

El ile çözüldü, şöyle:

İlk olarak, CJammers olmayanlar için bazı arka plan:

  • CEGIKönceden başlatılması tüm değişkenler olan 12, 14, 16, 18, 20, sırasıyla.
  • s üst yığın öğesini bir dizeye dönüştürür.
  • Dizeler teknik olarak sadece karakter dizileridir.
  • fgüzel bir sihir. Bu yanıt amacıyla, basitleştirilmiş versiyonu bir dizi için, yani a, başka bir değer bve bir operatör gsekans abfgharita g(_,b)üzerine a(her bir elemanının burada agider _yuvası).
  • / bölünme ve bölme dizileri (diğer şeylerin yanı sıra).
  • * çarpım ve dizi tekrarıdır (diğer şeylerin yanı sıra).
  • %Modülo ve biçimde tuhaf bir işlem, bir ad%dizi için ave tam sayı dher alır dinci elemanı a(adım genişliği ile Python'ın dilimleme gibi d).
  • # üstelleştirme (diğer şeylerin yanı sıra).
  • ,dönüşler (aralıklar içine numaraları 0için n-1) ve döner bir dizi uzunluğu.

Tamam, bu yoldan çekildi ...

,Bir sayıyı bir aralığa çevirmemiz gerektiğine açıktı , çünkü bir diziyi elde etmenin tek yolu daha büyük bir sayı oluşturmak ve onu karakter dizisine çevirmek olurdu s- ama sonra hiçbir şey yapamazdık. üzerinde daha fazla aritmetik. Ve fs ile bir şeyler yapmak için bir diziye ihtiyacımız var .

Öncelikle s'lerin ve file kullanıldıklarını varsaydım , ancak bu, doğru miktarda rakamı elde etmek için 90 civarında bir sayıya ihtiyacımız olacağı anlamına gelirdi. Ve ayrıca, bu ne yapılması gerektiğini açıklamadı ve cevap gerçekten golf gibi göründüğü için, kullanıcıların atmak için bir yere etkili olmayan bir kullanıcı olarak eklenmesinden şüpheliyim .#%ss

Bu yüzden, belki sayıları küçük tutmayacağını bile düşündüm, %ama bunun yerine bir çok büyük sayılar dizisi yarattı, karakter dizilişini birleştirdi s, ancak ondan sadece garip bir dilim seçti %. Bu yüzden aşağıdaki çerçevede biraz oynadım:

__*,_f#_f/s_%

( _f/İlk önce yapamazsınız , çünkü bu en azından ilk 12 element için sıfır verecektir.)

_Değişkenlerin bazı permütasyonları nerede . Sıkılmadan önce hepsini denemedim ve bunun asıl sorunu, her zaman olduğu gibi çok uzun süre hanelerin ortaya çıkmasıydı.

Bir noktada *, ortaya çıkan dizgiyi tekrarlamak için kullanırsak, bu kadar geniş bir aralığa (yani iki sayının çarpımı) ihtiyacımız olmayacaktı . Parametrelerin uyumsuzluğundan *ve %bunun sonucunda sonuç tekrarlanmayacaktır:

_,_f#_f/s_*_%

Bu, aradığım şeye çok yakın bir uzunlukta sonuç verdi. Aslında 240 tanesini de denerdim, ama oldukça hızlı bir şekilde (üçüncü veya dördüncü girişimde) tökezledim

E,Cf#If/sG*K%

hangi verim

03081942753650251594592190492275006661328850322159030034930530649722385533653290754678977

Ve ilk altı rakamın eşleşmesinin bir tesadüf olmayacağını düşündüm. Bu yüzden soru, gerçek hesaplamayı bozmadan nasıl yeniden düzenleyeceğimizdi:

  • Değişemedim Kçünkü bu tamamen farklı basamaklar seçecekti.
  • Değişemedim Cya Ida iki harita işleminden kaynaklanan rakamları değiştireceği için.
  • Eğer değiştirirsem G, bu sadece tekrar sayısını değiştirirdi, bu da sonuçların uzunluğunu değiştirmekten başka bir şey yapmaz. (Hangisi iyi.)
  • Bunu değiştirirsem E, dizinin aralığını değiştirir, ancak aralık yine de başlar [0 1 2 3 ...], bu yüzden hesaplamayı etkilemez. Bu , döndürülen temel dizginin uzunluğunu etkileyecektir; sbu K%, ek tekrarlar üzerine farklı rakamları seçeceği anlamına da gelir .

Bu yüzden sadece takas etmeyi denedim Eve Gve işte:

030819828850379075460427536222159187897761502517030034671154875945928930530907551421904962649729

Özet olarak, kod ne yapar:

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, beden 11, isaacg

:\\w$ ",d,N

Bu orada bazı hata kötüye kullanımı demek. Bu derler:

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

İlgili hata, Pyth'i bir dizgede derlemenize izin \\veren "\"yerine "\\"derlenmesidir.


Meli Pprintolmak printen azından ya pprint?
FireFly,

@FireFly Hata ayıklama çıktısı belirtti. Belki Pyth tercümanı kendi Pprint'ini tanımlar?
Martin Ender

Oh, tamam, boşver o zaman.
FireFly

6

Python, boyut 69, Sp3000 tarafından

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

Bu zordu...


1
Güzel! Başvuru için, orijinal print(sum(map(ord,str((dict(list(((str(),str(dict())),))),list()))))), ancak belli ki anahtar kelimeler çok sayıda farklı permütasyon işe yarayacaktı.
Sp3000

2
Oradaki LISP seviyesi bir parens!
xnor

6

Python 3, 37 bayt, Sp3000 tarafından

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

Utanç verici bir şekilde, en zor kısım ipi baytlara çevirmeyi düşünüyordu. Uyuyakalmak zorunda kaldım ve gece 'ah, bu bir bayt değişmezdi!'


Ahaha güzel bitti, elipslerin insanları gezebileceğini düşündüm ama sanırım öyle değil
Sp3000

Üç nokta ve zfill gördüm, ama bayt nesnelerini bilmiyordum. Bunlar tamsayılı dizilerde golf oynamak için faydalı olabilir!
feersum

İyi iş! Sadece baskıyı ve .zfill'i gördüm ve toplamın bir parçası olabileceğini biliyordum ama çözemedim. + 1'leyin.
Hosch250

6

PHP, 53, PleaseStand tarafından

Sonunda kırdım:

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

Çözüm, sekansın alternatif ondalık ve sekizli sayılardan oluştuğunu fark ettiğimde oldukça hızlı bir şekilde geldi:

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

Ayrıca, her bir sayı kümesi arasındaki aralıklar, döndürülen değere eşit bir oranda printf()(yani, yazılan karakter sayısı) büyüdü .


3
Vay be, güzel dedektiflik!
Sp3000

6

Python 2, boyut 132, Vi.

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

Tüm ters eğik çizgiler ve tırnak işaretleri için teşekkürler :)


Düzenleme: Güncellenmiş 96 karakter sürümü:

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

Bu tamamen Alex'in https://codegolf.stackexchange.com/a/41451/32353 adresindeki çözümünden alınmıştır.


Heh, güzel. Amaçlanan çözümün ne olduğunu merak ediyorum ...
FireFly

Bu amaçlanan bir çözüm değil. Orijinal çözüm gibi herhangi bir "Atılabilir" şeyler yok fgiillmmooprrssttya ,,,\016:::S[]____tuuvyy.
Vi.

exec? Kodum daha kısa olmalıydı ... Ben unutmuşum çünkü compile+ ile öykünüyordum ...evalexec
Vi.

Kısa versiyon uygulandı. Orijinal numarayı anlamaya çalışın.
Vi.

5

CJam, boy 15, Ypnypn tarafından

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

Verilen karakterlerden, aşağıdaki üç formdan biri olması gerektiğini tahmin ettim:

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

iki basamaklı bir aralık oluşturur, ardından toplamadan önce bir ekleme ve modulo işlemi (her iki sırayla) eşler. Bu yüzden ilki ile daha yeni başladım ve sistematik 6789olarak boşluklardaki permütasyonları denedim .


Kahretsin, ben de yeni çözdüm: /
Doktor


5

Python 2, beden 61, FryAmTheEggman tarafından

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

Bu orijinal ile eşleşirse çok şaşırırdım.


Olmaz, ama yine de tebrikler! print''.__doc__[::2][::3].split()[1].split('.')[0][:-~-~True]
Kodum


@FryAmTheEggman Oh vay - güzel program! En azından dir()'almak' için kullandığına ikna olmuştum . Ve evet, tırnak olmadan çok zor olurdu.
grc

5

Python 3, Sp3000, boyut 44

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

Python 3 None, cevap yazdırdıktan sonra bir hataya (bir şey tarafından sola kaydırma ) neden olabileceğim için bana yardımcı oldu .


Hmm ... görünüşe göre ebeveynlerime çok fazla zarar verdim. print(~(~(()<())<<((()<((),))<<(()<((),)))))Aslında vardı .
Sp3000

5

PHP, 52 beden, kenorb tarafından

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

(Tanrım, kalan _rson ekle ne yapacağımı anlamam ne kadar zaman aldı . Fark etmeyinceye kadar print, ama print_r...)


Ve seni dışarı :) Orijinal onu anladın bilmiyorum: _:print_r(chr(3*pow(2,5)+@++$i));if(@$i<4<<1)goto _;.
kenorb

3
@ kenorb a) bir şeyler yazdırmanız gerekir, bu yüzden echomümkün değil; printkalmıştır; b) bir fordöngüye ihtiyacınız var, ancak bir döngü için yeterli noktalı virgül yoktu ve peki, bir kolon var ... bu yüzden muhtemelen orada goto ile birlikte bir etiket var; c) o zaman goto döngüsünü iptal etmek için bir if gerekir. Şimdi sahip olmak X:print($Y);if($Y)goto X;(X ve Y yer tutuculardır); d) var ++, ama hayır =, muhtemelen ++$Z1 ila 8 arasında bir miktar var ; e) bir tamsayıdan harf almak için, ihtiyacımız var chr()(genellikle) - oradaydı; f) şimdi chr ve eğer için 96 ve 8 sayılarını bulmam gerekiyordu. Ardından yer tutucuları ve gönüllüleri doldurun.
Bwoebi


5

C, es1024, uzunluk 70

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

Zor kısım, tüm gereksiz karakterleri takip etmek oldu ... cidden ... Onları yaklaşık 10 kez tekrarlamak zorunda kaldım. Beni endişelendiren tek kişi buydu, .ama bir şekilde onu printfbiçim dizisinin ortasına soktum ve görünmez oldu!



5

Haskell, 34 beden, Petr Pudlák tarafından

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

Bu programın 32 bit bir makinede çalıştırılması gerektiğini unutmayın. Bunun doğru program olup olmadığını kontrol etmek istiyorsanız ve 64 bit makineniz varsa, bunun yerine şunu kullanabilirsiniz:

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

Programın "karesini" tahmin etmek oldukça kolaydı main=print(0x<hex digits>^0x<hex digits>::Int). Tüm sihir rakamları ayırmak ve sıralamak için doğru yolu arıyordu. Burada çok zekice yapmadım, sadece kaba kuvvet araştırması yaptım ... bazı rakamların kopyalanması gerçeğini kötüye kullanmakla ilgilenmeme rağmen, muhtemelen temelde ve üssünde eşit sayıda rakam vardı. tabanın son basamağı neredeyse kesinlikle bile değildi. Tam arama kodu aşağıda yer almaktadır; multiset-comb paketini kullanır . Tam arama makinemde yaklaşık 10:33 sürüyor (ve elbette sadece bir doğru cevap üretiyor).

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.