To jest pytanie towarzyszące do Code Crosswords . Odpowiedzi rabusia przejdź tutaj.
Zobacz, gdzie powinniśmy umieścić złodziei? dla meta-informacji.
To jest pytanie towarzyszące do Code Crosswords . Odpowiedzi rabusia przejdź tutaj.
Zobacz, gdzie powinniśmy umieścić złodziei? dla meta-informacji.
Odpowiedzi:
Musiałem trochę podkręcić 7-Down, powołując się na niezdefiniowane zachowanie. es1024 wskazał, że takie zastosowanie UB było zamierzonym rozwiązaniem. Działa to jednak na komputerach większości ludzi. Wpadłem różnych wyrażeń osiągnięcia pożądanego rezultatu, takie jak -1 << 30
, 3 << 30
, 6 << 29
, i ~(~0U/4)
, ale wszystkie z nich uniemożliwiało mi dostać 5-Across. Użyłem więc właściwości specyficznej dla architektury Intel, że do określenia wielkości lewego przesunięcia używa się tylko najmniej znaczących 5 bitów. Zauważ, że tak musi być, ~_
a nie, ~1
aby wielkość przesunięcia nie była stałą czasową kompilacji. Przetestowałem wyrażenia za pomocą następującego kodu:
#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
jako niezbędny element twojego rozwiązania. Pozostaje jednak pytanie, dlaczego M -ross działa? Czy zdefiniowanie stałej składającej się z wielu znaków po prostu łączy wartości bajtów? Jeśli tak, nauczyłem się dziś czegoś nowego. :)
int
, więc możesz wstawić do czterech bajtów bez utraty informacji.
(To rozwiązanie wymaga kilku spacji, więc nie był to ten, którego szukał profesororfish.)
#K###I#'32
#HDJ*s\ ##
2##2#`#`#-
4Zm*`##L#3
m##6##]`'
f####e#`#'
`#0#'d1+eu
## #!####9
## '{;'"'m
C5(#}####q
To była świetna zabawa. Zauważ, że #
pod tym 6
kodem znajduje się kod, a nie ciemna komórka. Przejdźmy przez to:
Wskazówka 2: [[4 3]]
. To był jeden z trudniejszych, ponieważ naprawdę utknąłem przy próbach 4Z]]`
lub podobnych. Okazuje się, że możesz używać produktu kartezjańskiego m*
do rzeczy, które nie są tablicą, i stworzy tablicę dla ciebie. Oto on:
4Zm*`
Wskazówka 4: 24717
. Do czasu, mam do tego, H
, J
, s
i końcowe miejsca były już na miejscu. H
Rozdawał że mogę chyba tylko ponownie wykorzystać 17
i zrobić \
na końcu. J
Popycha 19
i 247 == 13 * 19
tak:
HDJ*s\
Wskazówka 7: 32
. Istnieje kilka sposobów, aby to zrobić: Y5#
, 3 2
, ZY
, YZ\
, 4(2
, 2)2
, '32
. Poszedłem z ostatnim, ponieważ rozpoczęcie od postaci wydawało się obiecujące dla 7-down, a to okazało się słuszne.
Wskazówka 8: E
. Już miał 'd
kiedy tam, więc to było między wybór 'd1+eu
, 'deu1+
albo wariant, w którym użyłem )
i przestrzeni zamiast 1+
(dla osób spoza CJam, to przyjmując d
postać i przyrostu i górnej obudowy je w dowolnej kolejności) . Jednak u
ostatnia kolumna wyglądała na przydatną dla A-down. Więc wybrałem pierwszy z nich. W końcu też 'd) eu
by zadziałało.
Wskazówka 9: ""
. Musiał to być „pusty ciąg, uzyskaj reprezentację ciągu, wciśnij spację”. Ale potrzebowałem również `dla reprezentacji łańcucha w 7-dół, a spacja w A-down również wydawała się przydatna, więc wybrałem
]`'
Zauważ, że ]
mógł to być także jeden z nich LMOQR
.
Wskazówka B: "m
. Po prostu naprawdę musiałem dopasować ten do reszty, ale kilka znaków miało znaczenie. Miałem już {
i m
. Zamiast używać bloku, zmieniłem {
się w postać, odrzuciłem ją, a następnie wypchnąłem dwie wymagane postacie:
'{;'"'m
Podpowiedź: D: 124
. Rozwiązałem to razem z C-down, co było najłatwiejsze ze spadkiem na końcu. Więc wypycham 12, 5 i zmniejszam to drugie:
C5(
Wskazówka 1: [2 2 2 3]
. To wyglądało zbyt podejrzanie jak na czynniki pierwsze, żeby nie było nim jedno. :)
24mf`
Wskazówka 3: 3010936384
. Faktoring pokazał, że tak naprawdę jest to 38 6 . Jedynym pytaniem było, jak uzyskać 38
zgodność z 2 -ross. W końcu potrzebowałem *
trzeciego, więc podwojenie 19
było:
J2*6#
Wskazówka 5: 2017
. Dwie postacie na tak dużą liczbę? Wystarczy użyć wbudowanych zmiennych dwucyfrowych:
KH
Wskazówka 6: "18"
. Myślę, że jest tylko jeden sposób na zrobienie tego w 3 postaciach. Użyj wbudowanego 18, przekonwertuj go na ciąg, a następnie na jego reprezentację ciągu.
Is`
Wskazówka 7: ' "\"\""
. Prawdopodobnie najtrudniejsza część układanki. W szczególności potrzebowałem "\"\""
tylko trzech znaków. Sztuczka polegała na dwukrotnym uzyskaniu reprezentacji ciągu pustego ciągu. Doprowadziło to do:
' `L``+
THe +
nie jest konieczne, ale potrzebne było przez 8-poprzek.
Wskazówka 8: !{}
. Blok musiał zostać wpisany w kodzie, aby pozostały tylko dwa znaki !
, co oznaczało użycie innego literału:
'!{}
Podpowiedź A: -3u3
. Dzięki u
swoim miejscu od 8 przekrojowego zaczęłam stawiać -3
i 3
na rogach, gdzie żadna inna wskazówka troszczyli się o nich. Ale potem potrzebowałem m
na dole. Myślę, że istnieje wiele sposobów, aby dostać 3
się _m_
, ale najprostszym brał pierwiastek kwadratowy z 9:
-3 'u9mq
Podpowiedź C: -1
. Miałem już tam dekrement, więc po prostu postawiłem tam, 0
gdzie nikt inny się nie przejmował:
0 (
Podpowiedź E: Stack: ""
. To był najprostszy. Po prostu zadzwoń do debuggera:
ed
COTO, Javascript ES4, 37 Darks
__________
|{}=51###6#|
|a##.#I-9<4|
|:##-##"#<#|
|5+Math.PI#|
|}##+##.#+#|
|["9"+0][0]|
|'##p##"###|
|a+-a#a=-10|
|'##c##=###|
|]##"\x48I"|
¯¯¯¯¯¯¯¯¯¯
5+Math.PI
lub Math.PI+5
; ale to ostatnie pozostawiłoby „M” i „h” przejście do innych wyrażeń, wydawało się mało prawdopodobne."\x48I"
.xxxa
, czyli do zera, więc -a + a? + -a? 3 + -a? a+-a
wyglądał najlepiej, ponieważ dał mi coś, co wyglądało jak char w ciągu 1dn.{x:5}xxa'x
. Ponieważ zwracana wartość wynosi 5, musi ona wyciągać ją z obiektu {x:5}['a']
, co oznacza, że brakujący znak końcowy to również:{a:5}['a']
t={}=51
i zadziałało. Nie wiedział tego!5xxax"pac"
=> "2pac". To musi być 5-a+"pac"
jakoś, więc drugim znakiem musi być „.” dla literału zmiennoprzecinkowego.[xx"xxxx]
, zwracając „90”. Musi to być literał tablicowy z wyciągniętą wartością; mamy miejsce tylko na jedną wartość, więc mamy [xx"xx][0]
. Nie ma tu miejsca na dwie struny, ale albo pasują, "9"+0
albo 9+"0"
pasują.6<<I
okazała się odpowiedzią, pozostawiając +0, aby dodać na końcu.I-I<4
, I-6<4
itp)-x..]xxx4
. „..” rzuciło mnie - istnieje tylko kilka sposobów, które mogą być legalną składnią i dlatego zapytałem, czy ES4 jest tym, co było zamierzone - czy to była jakaś dziwna cecha tej porzuconej specyfikacji? Ale potem zobaczyłem, że to był czerwony śledź; -""
jest NaN, więc -"..]"xx4
musi być to, co tam jest - porównanie do NaN, zwracające wartość false; „==” zrobi, ale trzeba spojrzeć na ostatnią odpowiedź w celu potwierdzenia ...=-10
. Szczerze mówiąc, przyjrzałem się również wcześniejszej wersji 9dn i zdałem sobie sprawę, że to musi być coś =top
(aby odzyskać okno). Zmienna przypisana do może być a lub I, to nie ma znaczenia.Podstępna łamigłówka!
Dla wszystkich długich wyrażeń zmiennoprzecinkowych stworzyłem program C ++ do generowania wyrażeń matematycznych w języku Python siłą i ich oceny. Zakłada, że wszystkie liczby są zmiennoprzecinkowe i obsługuje tylko operatory +, -, *, /, //, ** i ~. Użyłem go, aby uzyskać każdą wskazówkę dłuższą niż 5 znaków oprócz a**9*27%b
i hash. Przy 6 lub mniej pustych miejscach kończy się w ciągu kilku sekund, podczas gdy trzeba trochę poczekać na 7.
Myślę, że dość dobrze grałem w tę grę, ponieważ jest tam 14 pól.
Ten skrypt testowy:
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);
produkuje następujące dane wyjściowe:
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