Mam sto sklepień, każdy w sobie. Każdy skarbiec ma hasło składające się z jednego numeru.
95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97
Zbyt trudno jest zapamiętać wszystkie te hasła i nie jest bezpiecznie przechowywać hasła na kartce papieru. Jedyne rozwiązanie, jakie mogę wymyślić, to użycie programu zawierającego dokładnie sto znaków. Hasło do n
skarbca można znaleźć, traktując pierwsze n
znaki kodu jako program.
Dlatego pierwszy znak programu, jeśli jest uruchamiany sam jako program, musi zostać wypisany 95
. Pierwsze dwa znaki muszą same wyprowadzać 43
. Cały program musi zostać wygenerowany 97
.
Przyznaję, że to naprawdę trudne. Więc po prostu daj z siebie wszystko. Postaraj się, aby Twój program działał na jak największej liczbie skarbców , a resztę zapamiętasz.
Zasady
- W przypadku remisu zwycięzcą jest najwcześniejsze zgłoszenie.
- Standardowe luki zabronione. Obejmuje to czytanie z innych plików lub z Internetu.
- Masz kilka opcji dla kodu:
- Pełny program, który drukuje prawidłową liczbę
- Funkcja, która ją zwraca lub drukuje
- Wyrażenie, które ocenia to (np. W C,
4+3
ocenia to7
)
- Państwo może przyjąć środowiska rEPL
- Państwo może wykorzystywać różne techniki dla każdej wartości
n
. Na przykład, możesz użyć różnych języków dla każdegon
lub czasami użyć pełnego programu, a czasem funkcji.
Uwaga: ten scenariusz jest całkowicie fikcyjny. Jeśli masz podobny problem, nie publikuj swoich haseł online.
The only solution I can think of is to use a program with exactly one hundred characters.
Czy to oznacza, że każdy program musi mieć dokładnie 100 znaków?Odpowiedzi:
> <> (Ryba), 95
Zaczynając po
'
kładzie wszystkie postacie na stosie, a na końcu linii owija się; zamyka ciąg z tym samym'
; wypisuje górę stosu jako liczbę (n
) i kończy wykonanie (;
).Znaki 13 i 10 zmieniono na spacje, aby nie zniszczyć układu kodu (ponieważ ryba jest językiem 2D).
Niektóre niedrukowalne ASCII znika w odpowiedzi. Prawidłowy program tutaj.
Dzięki za Martin Büttner i Sp3000 za ulepszenia 2 i 5 bajtów.
Zrzut szesnastkowy:
źródło
'
do parsowania łańcuchów, a w programie"
jest wiele"
s, które należałoby wymienić./fish.py <(head -c 99 raw.php)
gdzieraw.php
to nazwa, która jakoś skończyło się na pliku źródłowym Pobrałem. Schludny! Nie mogę powiedzieć, że jeszcze to rozumiem ...CJam, 40
Po prostu użyłem chciwego podejścia (przez większość czasu), aby wydrukować następny możliwy numer (znaki zaznaczają prawidłowe zakończenie programu):
Następujące liczby są wydrukowane poprawnie:
Sprawdź to tutaj.
źródło
CJam, 56
Oto nieco bardziej skomplikowane podejście. Prawidłowo drukuje ostatnie 56 liczb:
Szanse są, SE połknęła niektóre postacie, więc tutaj jest pastebin . Możesz wypróbować kod tutaj .
Wykorzystuje fakt, że wyzwanie prosi o programy w postaciach, więc używam znaków Unicode do kodowania ostatnich 56 znaków w funkcji, która następnie pozostawia poprawny element na stosie, zwiększając zmienną przy każdym wywołaniu i wybierając odpowiedni element. Reszta kodu po prostu wywołuje funkcję wielokrotnie.
Pierwszy poprawny program to ten, który kończy się na drugim
F
w kodzie. Przez jakiś czas majstrowałem przy długości znaków do zakodowania, dopóki nie osiągnąłem właściwej równowagi, aby jak najlepiej wykorzystać. Przy takim podejściu może być jeszcze jeden lub dwa.źródło
Pyth,
9293Powyższy kod zostanie oczywiście pomieszany, ponieważ SE usuwa znaki sterujące, więc znajdź właściwy kod tutaj
Logika jest prosta, ciąg jest reprezentacją znaków dla każdej liczby, z wyjątkiem pierwszych 3, które są używane przez logikę konwersji oraz niektóre cytaty i znaki nowej linii, które zastąpiłem znakami zastępczymi.
Spróbuję tutaj zwiększyć wynik.
Wypróbuj online tutaj
źródło
(rocznik) C - 88
Nie ma potrzeby używania tych wszystkich głupich języków golfowych. Lepiej wróć do starych dobrych czasów, zanim zjadacze quiche i ich bzdury „program = algorytm + dane” zepsuły całą zabawę.
Kod jest funkcją C przechowywaną jako ciąg.
Zwraca wartość binarną jako liczbę całkowitą.
Uruchom go w DosBox z Borland Turbo C 2.0.
Ciąg nie zawiera znaków kontrolnych, więc kopiowanie-wklejanie powinno działać.
Kompiluj z
tiny
modelem pamięci lub inaczej ...Jeśli rozłożysz początek łańcucha, zobaczysz coś takiego:
ponieważ
si
jest używany jako adres funkcji, wskazuje bezpośrednio na kod, a następnie hasła.Wszystkie wartości są przesunięte o 35, aby uniknąć znaków kontrolnych i podwójnych cudzysłowów.
Kod ma 11 bajtów, więc będzie działał do 12 znaków.
Niestety, 11. wartość (34) jest zbyt niska, aby wygenerować prawidłowe hasło ze zwiększoną wartością przesunięcia (
ret
opcode to 195, więc potrzebujesz przesunięcia o 161, a maksymalne przesunięcie, aby uniknąć najazdu wynosi 255-99 = 156) .11 znaków wygeneruje niewłaściwą wartość, a Twój wirtualny komputer będzie doświadczał poważnych (i zwykle śmiertelnych) nieokreślonych zachowań z 10 lub mniej znakami.
źródło
Matlab
3739Możesz użyć części (bez średników) tego pomysłu z dowolnym językiem programowania, który Ci się podoba, który wydrukuje wyniki bezpośrednio na konsoli. To da przynajmniej 39-krotność prawidłowych odpowiedzi. (Nie sprawdziłem tych, w których tylko połowa może dać poprawną odpowiedź, ale jak dotąd znalazłem dwie).
źródło
code="43+13+11-33+54;81;78;8+20;74+15-83;01+79-59-12+6-2;;87+0-53+39;72;;11+00+66-56+22;52;3*7+48;78-7+7+0"; key="95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97".split(" "); res=0; for(q=0; q<100; ++q) try{ if(eval(code.substr(0,q+1))==key[q]) console.log(++res,q+1,key[q]) } catch(e) {}
- pokazuje tylko 28 meczów‌​
po00+
012345679+-*;
Poza konkursem: Javascript, 173
Oto „rozwiązanie”, które nie przestrzega reguł w tym sensie, że zawiera program o wiele dłuższy niż wymagany, ale przy podstawowej długości wynoszącej 152 znaki
95
, i dla każdego kolejnego dodanego do niego znaku numerycznego, do 22 , wyświetli dodatkowe hasło:Niestety, działa tylko do 22 znaków (przynajmniej w węźle REPL wszystko powyżej, co wydaje się być pominięte), co moim zdaniem jest ograniczeniem reprezentacji liczb w języku. Gdyby nie to ograniczenie, użycie pełnego ciągu hasła
(zwiększenie całkowitej długości do 329 znaków) pozwoliłoby tej logice wyświetlać każde hasło.
Kod nie jest szczególnie inteligentny, goli tylko kilka znaków w porównaniu z najbardziej trywialnymi rozwiązaniami, używając:
Przede wszystkim chciałem napisać program JavaScript, który jest ważny o różnej długości, ponieważ język nie jest zbyt dobrze przystosowany do gry w golfa.
Jestem nowy w codegolf, przepraszam, jeśli nie zgadza się z publikowaniem tak wyraźnie nieważnych rozwiązań.
źródło
Python 2, 39
Napisałem skrypt, który wypróbowuje wiele kombinacji wyrażeń i testuje je pod kątem bezpiecznych kombinacji. Najlepsze, jakie mogłem poradzić, to 39 meczów. Byłem zaskoczony, ile kombinacji dało wynik 39. W odpowiedzi umieściłem próbkę.
Próbowałem dołączyć
^&|
operatory logiczne , ale zasady pierwszeństwa stały się skomplikowane.źródło
DEBUG.COM, 93
Stosowanie:
a wynik pojawi się w
AL
źródło