Jeśli uważasz, że może to być zabawne, ale za dużo pracy, rozważ wzięcie udziału w tym znacznie mniejszym wyzwaniu.
Trochę zabawy (i być może frustracji!) Na rok 2016 ... „Układanka roku” Dyaloga . Cieszyć się!
Cel
Znajdź wyrażenia APL Dyalog ( pobieranie ) (dozwolone są inne języki, patrz Kwalifikowalność poniżej) zawierające dokładnie cyfry 2 0 1 6 w tej kolejności, aby zrównoważyć liczby od 0 do 100. Na przykład:
20=16
×2016
2⌊016
2+0+1*6
...
Celem jest użycie jak najmniejszej liczby znaków w każdym wyrażeniu (minimalna liczba znaków w wyrażeniu to 5 - cztery cyfry 2 0 1 6 i jedna pierwotna funkcja / operator).
Zasady
- Każde wyrażenie musi zawierać cyfry 2 0 1 6 (w tej kolejności) i nie może zawierać innych cyfr. Wstępnie ustawione stałe i zmienne są również niedozwolone.
- Oprócz czterech cyfr 2 0 1 6 można używać tylko wbudowanych symboli i nazw, nawiasów / nawiasów klamrowych, spacji, wysokich znaków minus i kropek dziesiętnych. Wynikowe wyrażenia muszą być deterministyczne (to znaczy dawać taki sam wynik przy powtarzanych ocenach). W przypadku aplikacji innych niż APL dozwolone są również funkcje / operatory o nazwie; takie same zasady jak tutaj .
- Załóż wszystkie ustawienia domyślne dla swojego języka. W przypadku Dyalog APL oznacza to
⎕ML
i⎕IO
wynosi 1, a⎕PP
wynosi 10. - Każdy wpis zawierający poprawne wyrażenia dla wszystkich liczb od 0 do 100 włącznie będzie oceniany zgodnie z liczbą znaków używanych przez te wyrażenia z wyłączeniem zbędnych spacji (minimum 505 dla wszystkich 101 wyrażeń).
Wybieralność
Każdy może wejść. Możesz odpowiedzieć w dowolnym języku, ale tylko odpowiedzi APL zostaną uwzględnione. Jeśli używasz języka innego niż APL, możesz używać fragmentów, programów, funkcji itp. Jako alternatywy dla wyrażeń, a także drukować, pozostawiać numer w dostępnej pamięci lub w inny sposób zwracać wynik, o ile kod jest bezpośrednio ocenia na pożądaną liczbę jako dowolny standardowy typ danych liczbowych dla twojego języka.
Data zamknięcia
30 listopada 2016 r.
Nagrody
- Poproś o odpowiedź
- Bądź uwieczniony w Galerii Sław Dyalog 2016!
Przesyłanie zgłoszenia
Po 30 listopada 2016 r. Zaakceptuję najkrótszą odpowiedź i prześlę ją w Twoim imieniu do Galerii sław Dyalog 2016.
FAQ
- Czy
J
(np. 37 =⌈⍟!20J16
) jest dozwolone? - Nie: Oprócz czterech cyfr 2 0 1 6 można używać tylko wbudowanych symboli i nazw, nawiasów / nawiasów klamrowych, spacji, wysokich znaków minus i kropek dziesiętnych.
- Czy dane wyjściowe jako ciąg znaków są dopuszczalne?
- Nie: równe liczbom od 0 do 100.
- Cyfry fizyczne czy dane?
- Cyfry danych, zgodnie z OP: takie same zasady jak tutaj , gdzie zawiera jeden z przykładów
LOG10(
. - Czy
a+16+a←20
dozwolone jest przypisywanie zmiennych, a następnie używanie ich jako części wyrażenia (np. 56 = )? - Tak, ale nie możesz używać przypisania z jednego wyrażenia do drugiego.
Mam wyraźną pisemną zgodę na opublikowanie tutaj tego wyzwania od oryginalnego autora tego wyzwania. Możesz to zweryfikować, klikając podany link i kontaktując się z autorem. W ciągu minuty, w której ją opublikowałem, podałem oryginalnemu autorowi konkursu link do tej strony, aby mogli sprawdzić, czy przesyłam czyjąś odpowiedź jako własną.
⎕ML
i⎕IO
(zakładane1
) jest dopuszczalne?Odpowiedzi:
Galaretka, 686 bajtów
Napisałem około 50 z nich, a następnie automatycznie wygenerowałem resztę, dodając
Ḥ
(× 2) i‘’
(± 1) w razie potrzeby. Poprawię je później!źródło
201ÆCo6
. Nie sądzę, można użyćṾ
(który został wdrożony w lutym), ale20|16Ḥ‘Ḥ
i20|16‘ḤḤ’
są równie krótki.Ḥ
ponad‘’
- 46, wraz z czterema innymi liczbami, powinien być o jeden znak krótszy. Zamieniłem go na2016½Ċ‘
tak długi jak twój.Sześciokąt , 888 bajtów
Dobra, najpierw kilka podstawowych zasad dla Hexagony, na wypadek, gdyby ktoś chciał to pokonać:
2|016
Na 22), ale wydaje się to najbardziej w duchu wyzwania.Oto lista. Testowałem większość z nich, ale nie wszystkie (niektóre są trywialnymi modyfikacjami innych), więc mam nadzieję, że nie popełniłem żadnych błędów:
Pod koniec byłem trochę leniwy, więc jestem pewien, że to nie jest optymalne. Może to być interesujące (i możliwe), aby brutalnie je wymusić.
źródło
J,
1041... 838 bajtów981961952860859Do końca byłem trochę leniwy, ale powinno to być bardziej ustalone niż mniej.
Nie sądzę, żebym kiedykolwiek wyprzedził Sześciokąty, ale nigdy nie wiadomo!pokonując sześciokąt! Zaoszczędź 9 bajtów dzięki Zgarb! i wiele więcej dla Lynn!Najważniejsze informacje i uwagi
Kiedyś liczb pierwszych dużo w tej sprawie. W rzeczywistości użyłem funkcji
p:
(N-ta liczba pierwsza) 37 razy w tej rzeczy.90 został wykonany przy użyciu widelca. Tak! Jest to przybliżone do tego:
Przetłumaczone jako
54 używa kształtującego ravela!
Jest równa
źródło
!20-16
54:<.^20-16
55:>.^20-16
97:p:!20-16
+:p:-2-016
(4 bajty krótsze)?2]01+6
, 8 może być2%~016
i 12 może być2*01]6
.JavaScript, 1021 bajtów
Naprawiono i zapisano dwa bajty dzięki Charlie Wynn i ETHProductions .
źródło
2-~01+6
jako 10 i-~!2016
jako 1.JavaScript (ES7), 836 bajtów
Wszystko powinno działać w dowolnej przeglądarce oprócz 81, 88 i 97, które używają nowego
**
operatora.Przeważnie wszystko tutaj zrobiono ręcznie. Pracowałem nad brutalnym siłą, aby poprawić wszystko, co można poprawić. Obecnie zapisał 103 bajty na różnych elementach.
Brute-forcer
To nie jest najładniejszy kod, ale wydaje się, że nie ma to znaczenia w tych częściach.
OSTRZEŻENIE: Nie uruchamiaj, chyba że jesteś przygotowany na zatrzymanie przeglądarki / silnika na kilka minut. Nikt nie lubi obliczać 7 zagnieżdżonych pętli.
źródło
PowerShell v3 +,
15751499 bajtów100% ręcznie golfa - brak programów brutalnej siły lub innych pomocy.
Czuję, że 1500 może być w zasięgu rękiSub-1500 osiągnięty! Zobaczmy, jak dobrze sobie radzę z obniżaniem tego. (Uwaga - Zostało to przetestowane tylko w wersji 4, ale powinno działać w wersji 3 i 5 bez modyfikacji. Nie będzie działać w wersji 2 ani wersji 1, ponieważ te wersje nie miały operatorów zmiany bitowej.)
Kluczowe punkty są oznaczone
##.hashes.##
powyższym kodem.# 11 to pierwsze przypisanie do zmiennej
$a
. W przeciwieństwie do niektórych innych języków, zmienne nie muszą być wstępnie inicjowane do analizy, a zmienne są rozwiązywane tylko podczas wykonywania. Ponieważ($a=01)
jest otoczony przez parens, jest oceniany jako pierwszy, a więc drugi-$a
jest równoważny-1
. Odtąd jest to dość szeroko stosowane i jest to jedna z największych rzeczy ograniczających liczbę bajtów.# 17 pokazuje pierwsze użycie
!
Boolean nie. W PowerShell typy są dość luźno rzutowane, więc jeśli można implikować rzutowanie, zadziała. W tym przypadku wykorzystujemy fakt, że!!20
równa się!$false
, to znaczy$true
, która może być domyślnie rzutowana jako[int]1
, co powoduje17
. Używa się go kilka razy, aby zdobyć inny1
lub przenieść porcję0
.# 22 Prezentuje
0x
szesnastkowy operator rzutowania, który zamienia się0x16
w22
. Ponieważ jednak0x16
jest to jedyna liczba, jaką możemy uzyskać, jej przydatność jest ograniczona.# 23 ma
-bor
operator „binarny lub”. Jednakże, ponieważ zarówno-bor
i-bxor
mają niższy priorytet niż prostych operatorów arytmetycznych, wykorzystując je zazwyczaj wymaga nawiasów, co poważnie ogranicza użyteczność. To jedyny taki, w którym znalazłem krótsze użycie binarnego lub operatora (wyeliminowałem-bxor
operatora z 22).# 30 jest pierwszym wprowadzeniem
-bnot
operatora. Jest to operator „binary not” i działa podobnie jak~
w (np.) JavaScript. Jednak zwykle potrzebuje parens, ponieważ negacja będzie wyświetlana jako--bnot
i spowoduje błąd analizy / składni, a ponieważ jest to pięć znaków w porównaniu do jednego dla~
, używa się go oszczędnie.# 39 to pierwsze zastosowanie naszych operatorów zmiany binarnej,
-shl
oraz-shr
. Są one podobne<<
lub>>
w innych językach, ale są wyraźnie dyadyczne, co oznacza, że potrzebujemy liczby po obu stronach, aby mogły działać, co ogranicza ich przydatność w tym wyzwaniu. Dodatkowo, ich pierwszeństwo nie jest wyraźnie przywołane w dokumentacji, ale testy pokazują, że są niższe niż prosta arytmetyka, co oznacza, że pareny muszą być używane swobodnie, więc nie wyglądają tak dobrze, jak w innych językach.źródło
CJam,
792791 bajtówPod koniec trochę się leniłem, wiele z nich to po prostu przyrosty i spadki (101 to dużo!), Chociaż nie jestem pewien, czy istnieje jakiś inny sposób na kilka liczb. W razie potrzeby jest jeszcze dużo czasu na grę w golfa.
W okolicach # 40 są mrugające miny;)
źródło
Mathematica,
2912250222822180 bajtówZdecydowanie można by dalej grać w golfa. Przeważnie rozwiązuje kilka oddzielnych równań Frobeniusa, które dają rozwiązania o długości O ( n ). Resztę wygenerował mój brutalny forcer.
źródło
c
do16
kiedy liczba jest parzysta i dużych? Jak dla 96 itd. Nie wiesz, jak działa Twój solver równań, ale używaniea=20
powinno być również pomocne dla kilku z nich?Dyalog APL (To żart, nie przesyłaj), 25 957 bajtów.
Tak, to żart, potrzebujemy rozwiązania APL, nawet jeśli jest to całkowicie okropne. Działa poprzez zwiększenie
≢⍬
(0
)n
razy. Nie chcę zdradzać żadnych tajemnic przed faktycznym poddaniem się.Oczywiście można grać w golfa znacznie więcej.
źródło
JavaScript, 5244 znaków
Prawdopodobnie można by grać w golfa znacznie dalej. Przetestuj w konsoli Chrome. Trochę się poddałem o 10.
źródło
Java 7, 1083 bajty
W przypadku liczby bajtów policzyłem tylko wyrażenia między nawiasami. Więc wykluczyłem
System.out.println
s iclass
. Łącznie z tymi będzie to 3 049 bajtów .PS: Nie jestem do końca pewien, czy int-cast dla
72
jest prawidłowy .. Mimo to dodaje 5 bajtów ..Kod niepoznany i testowy:
Wypróbuj tutaj.
źródło