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 << 29
ve ~(~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 6
aslı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
, s
ve sondaki boşluk yer zaten vardı. H
Muhtemelen sadece yeniden verebilecek birilerine 17
ve yapılacak \
sonunda. A J
iter 19
ve 247 == 13 * 19
bö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ı 'd
ben 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 d
karakter ve artım ve ya sırayla, bunu üst Kılıf) . Ancak, u
son 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, 38
2-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 -3
ve 3
başka hiçbir ipucu onlarla ilgileniyordum köşelerde. Ama sonra m
altta bir ihtiyacım vardı . Ben almak için birden yollar olduğunu düşünüyorum 3
ile _m_
ancak en basit 9 karekökünü alıyordu:
-3 'u9mq
C İpucu: -1
. Zaten orada azalma vardı, bu yüzden sadece 0
kimsenin 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.PI
ya da Math.PI+5
; ancak ikincisi 'M' ve 'h' yi diğer ifadelere geçmeye bırakacaktı, pek olası görünmüyordu."\x48I"
.xxxa
sıfıra göre değerlendiriyor, yani -a + a? a + -a? 3 + -a? a+-a
bana 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={}=51
ve 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"+0
ya 9+"0"
uygun.6<<I
cevap 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 -"..]"xx4
orada 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%b
Karma 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