Bu, Kod Bulmacaları için tamamlayıcı sorudur . Soyguncu cevapları buraya.
Bkz biz soyguncuların koymalıyız Nerede? meta-bilgi için.
Bu, Kod Bulmacaları için tamamlayıcı sorudur . Soyguncu cevapları buraya.
Bkz biz soyguncuların koymalıyız Nerede? meta-bilgi için.
Yanıtlar:

7-Down'da tanımsız davranışları çağırarak biraz geçiştirmek zorunda kaldım. es1024, bu UB kullanımının amaçlanan çözüm olduğunu göstermiştir. Yine de çoğu insanın bilgisayarlarında çalışacaktır. Ben gibi istenilen sonucu elde çeşitli ifadelerle geldi -1 << 30, 3 << 30, 6 << 29ve ~(~0U/4)ancak bunların tümünün imkansız bana 5-karşısında almak için yapılmış. Bu nedenle, sola kaydırmanın boyutunu belirlemek için yalnızca en az önemli 5 bitin kullanıldığı Intel mimarisine özgü özelliği kullandım. Kayması gereken miktarın bir derleme zamanı sabiti ~_olmaması için olması gerektiğini unutmayın ~1. Aşağıdaki kodla ifadeleri test ettim:
#define T(X) _ = c; _ = X; printf("%d\n", _);
z[4] = {9};
int main(c)
{
int _;
T("01"[0])
T(-8)
T(-2)
T(11<-328111)
T(+2+71)
T(9+0)
T(0**z)
T(5;)
T(0<-000)
T(2+~3)
T(!91)
T(!_)
T(2**z)
T('_T;')
T("11"?5*9:2)
T(15<<9)
T(0+22)
T(-211*0-97;)
T(-17*0)
T(3+0<<~_)
T(8+000)
T(+0)
T(42)
T(+!z)
T(~_)
}
#define TÇözümünüz için gerekli bir bileşen olarak yanlış anladım . Ancak soru, M-genelinde neden işe yarıyor? Çok karakterli bir sabit tanımlamak bayt değerlerini birleştirir mi? Eğer öyleyse, bugün yeni bir şey öğrendim. :)
int, bu nedenle bilgi kaybı olmadan en fazla dört bayt koyabilirsiniz.
(Bu çözüm aslında birkaç alan gerektirir, bu yüzden profesörlerin aradığı tek şey bu değildir.)
#K###I#'32
#HDJ*s\ ##
2##2#`#`#-
4Zm*`##L#3
m##6##]`'
f####e#`#'
`#0#'d1+eu
## #!####9
## '{;'"'m
C5(#}####q
Çok eğlenceliydi. #Altında 6aslında karanlık bir hücre değil kodu olduğunu unutmayın . Bunu inceleyelim:
2 İpucu: [[4 3]]. Bu daha hileli olanlardan biriydi, çünkü denemeye 4Z]]`ya da benzerine gerçekten takıldım . m*Bir dizi olmayan şeylerde Kartezyen ürünü kullanabileceğiniz ortaya çıkıyor ve sizin için bir dizi oluşturacak. İşte burada:
4Zm*`
4 İpucu: 24717. Zamanla Ben, bu lazım H, J, sve sondaki boşluk yer zaten vardı. HMuhtemelen sadece yeniden verebilecek birilerine 17ve yapılacak \sonunda. A Jiter 19ve 247 == 13 * 19böylece:
HDJ*s\
7 İpucu: 32. Bunu yapmanın yollarından bir grup vardır: Y5#, 3 2, ZY, YZ\, 4(2, 2)2, '32. Sonuncusu ile gittim, çünkü bir karakterle başlamak 7-down için umut verici görünüyordu ve bu doğru çıktı.
8 İpucu: E. Zaten vardı 'dben orada var seçerken arasında nedenle, 'd1+eu, 'deu1+ya da ben kullanılan bir varyant )ve yerine bir boşluk 1+(non-CJam insanlar için, bu alan dkarakter ve artım ve ya sırayla, bunu üst Kılıf) . Ancak, uson sütundaki A-down için yararlı görünüyordu. Ben de bunlardan ilkini seçtim. Sonunda da 'd) euçalışırdı.
9 İpucu: "". Eh, bu "boş dize, dize temsili almak, bir boşluk itmek" olmalıydı. Ama aynı zamanda `` 7-down'da dize temsili için gerekliydi ve A-down'da bir boşluk da yararlı görünüyordu, bu yüzden seçtim
]`'
Not ]ayrıca birini olabilirdi LMOQR.
B İpucu: "m. Gerçekten bunu diğerlerine uydurmak zorunda kaldım, ama önemli olan birkaç karakter vardı. Zaten vardı {ve m. Bu yüzden bir blok kullanmak yerine, {bir karaktere dönüştüm, onu attım ve sonra gerekli iki karakteri ittim:
'{;'"'m
D ipucu: 124. Bunu, sonunda bir azalma ile en kolay olan C-down ile birlikte çözdüm. Bu yüzden 12, 5'i itiyorum ve ikincisini azaltıyorum:
C5(
1 İpucu: [2 2 2 3]. Bu, kuşkusuz, biri olmamak için asal çarpanlara ayırma gibi görünüyordu. :)
24mf`
3 İpucu: 3010936384. Bu faktoring, aslında 38 6 olduğunu gösterdi . Tek soru, 382-genelinde nasıl uyum sağlanacağıydı. Sonunda *üçüncü sırada bir gerekli , bu yüzden iki katına 19çıktı:
J2*6#
5 İpucu: 2017. Böyle büyük bir sayı için iki karakter? Yerleşik iki basamaklı değişkenleri kullanın:
KH
6 İpucu: "18". Bunu 3 karakterle yapmanın tek bir yolu olduğunu düşünüyorum. Yerleşik 18'i kullanın, bir dizeye ve sonra dize temsiline dönüştürün.
Is`
7 İpucu: ' "\"\"". Muhtemelen bulmacanın en zor kısmı. Özellikle, "\"\""sadece üç karakter almak gerekiyordu . Hile, boş dizenin dize temsilini iki kez almaktı. Bu aşağıdakilere yol açtı:
' `L``+
+Gerekli değildir, fakat 8-genelinde tarafından ihtiyaç vardı.
8 İpucu: !{}. Bloğun kodda girmesi gerekiyordu, böylece sadece iki karakter bıraktı !, bu da başka bir değişmez anlamına geliyordu:
'!{}
A İpucu: -3u3. İle u, ben koymak başladı 8-karşısından yerinde -3ve 3başka hiçbir ipucu onlarla ilgileniyordum köşelerde. Ama sonra maltta bir ihtiyacım vardı . Ben almak için birden yollar olduğunu düşünüyorum 3ile _m_ancak en basit 9 karekökünü alıyordu:
-3 'u9mq
C İpucu: -1. Zaten orada azalma vardı, bu yüzden sadece 0kimsenin umursamadığı bir yer koymak :
0 (
E İpucu: Stack: "". En basit olan buydu. Sadece hata ayıklayıcıyı arayın:
ed
COTO, Javascript ES4, 37 Karanlık
__________
|{}=51###6#|
|a##.#I-9<4|
|:##-##"#<#|
|5+Math.PI#|
|}##+##.#+#|
|["9"+0][0]|
|'##p##"###|
|a+-a#a=-10|
|'##c##=###|
|]##"\x48I"|
¯¯¯¯¯¯¯¯¯¯
5+Math.PIya da Math.PI+5; ancak ikincisi 'M' ve 'h' yi diğer ifadelere geçmeye bırakacaktı, pek olası görünmüyordu."\x48I".xxxasıfıra göre değerlendiriyor, yani -a + a? a + -a? 3 + -a? a+-abana 1dn bir dize bir char gibi görünüyordu verdi çünkü en iyi görünüyordu.{x:5}xxa'x. Döndürülen değer 5 olduğundan, nesneyi dışarı çekmesi gerekir, yani {x:5}['a']son eksik karakter de bir:{a:5}['a']t={}=51ve işe yaradı. Bunu bilmiyordum!5xxax"pac"= = "2pac" var. Bu bir 5-a+"pac"şekilde olmalı , bu yüzden ikinci karakter '.' kayan nokta değişmezi için.[xx"xxxx]"90" döndürüyor. Yani bu değer çıkarılmış bir dizi değişmez değeri olmalıdır; biz sadece bir değer için yer var [xx"xx][0]. Orada iki tel için yer yok, ya da "9"+0ya 9+"0"uygun.6<<Icevap olduğu ortaya çıktı, sonuna eklemek için +0 kaldı.I-I<4, I-6<4, vs)-x..]xxx4. ".." beni attı - yasal sözdizimi olabilecek sadece birkaç yol var ve bu yüzden ES4'ün amaçlanan olup olmadığını sordum - bu terk edilmiş spesifikasyonun garip bir özelliği miydi? Ama sonra bunun kırmızı bir ringa balığı olduğunu gördüm; -""NaN, yani -"..]"xx4orada olması gereken - NaN ile karşılaştırma, yanlış döndürme; '==' yapacak, ancak onay için son cevaba bakmanız gerekiyor ...=-10. Dürüst olmak gerekirse, 9dn'nin önceki sürümüne de baktım ve bunun bir şey olması gerektiğini fark ettim =top(bir pencereyi geri almak için). Atanan değişken a veya I olabilir, önemli değil.Zor bulmaca!

Tüm uzun kayan nokta ifadeleri için, Python matematiksel ifadeleri zorla oluşturmak ve değerlendirmek için bir C ++ programı yaptım. Tüm sayıların kayan nokta olduğunu ve yalnızca +, -, *, /, //, ** ve ~ işleçlerini desteklediğini varsayar. a**9*27%bKarma ve karma dışında her ipucunu 5 karakterden daha uzun süre almak için kullandım . 6 veya daha az boşlukla, birkaç saniye içinde biter, 7 için biraz bekler.
14 boşluk olduğundan, ben bu oldukça iyi golf sanırım.

Bu test komut dosyası:
g=4;
o=magic(3);
D=@disp;
D(max([ 2]));
D( i^3);
D(o^0);
D(6 -7+eye );
D((i));
D(.1 ^5* g );
D(~2);
D(diag(~o) );
D(asin (1)*i);
D((93+7) +~g);
D( 10e15);
D(2*ones (2));
D(02 ^ 9 );
D(-i );
D(~o);
aşağıdaki çıktıyı üretir:
2
0 - 1.0000i
1 0 0
0 1 0
0 0 1
0
0 + 1.0000i
4.0000e-05
0
0
0
0
0 + 1.5708i
100
1.0000e+16
2 2
2 2
512
0 - 1.0000i
0 0 0
0 0 0
0 0 0