Napisz możliwie najkrótszy program, tak aby po połączeniu pierwszego znaku i każdego N-tego znaku po nim w nowy program, wynikiem było N. To musi działać dla N = 1, 2, ..., 16.
Innym sposobem na powiedzenie tego jest, że jeśli usuniesz wszystkie znaki ze swojego programu, z wyjątkiem pierwszego, a następnie co N-tego, wynik pozostałych kodów powinien wynosić N.
Przykład
Jeśli twój kod był
ABCDEFGHIJKLMNOP
N = 1 powoduje ABCDEFGHIJKLMNOP
. Uruchomienie tego powinno dać wynik 1.
N = 2 powoduje ACEGIKMO
. Uruchomienie tego powinno dać wynik 2.
N = 3 powoduje ADGJMP
. Uruchomienie tego powinno dać wynik 3.
N = 4 powoduje AEIM
. Uruchomienie tego powinno dać wynik 4.
N = 5 powoduje AFKP
. Uruchomienie tego powinno dać wynik 5.
N = 6 powoduje AGM
. Uruchomienie tego powinno dać wynik 6.
N = 7 powoduje AHO
. Uruchomienie tego powinno dać wynik 7.
N = 8 powoduje AI
. Uruchomienie tego powinno dać wynik 8.
N = 9 powoduje AJ
. Uruchomienie tego powinno dać wynik 9.
N = 10 powoduje AK
. Uruchomienie tego powinno dać wynik 10.
N = 11 powoduje AL
. Uruchomienie tego powinno dać wynik 11.
N = 12 powodujeAM
. Uruchomienie tego powinno dać wynik 12.
N = 13 powoduje AN
. Uruchomienie tego powinno dać wynik 13.
N = 14 powoduje AO
. Uruchomienie tego powinno dać wynik 14.
N = 15 powoduje AP
. Uruchomienie tego powinno dać wynik 15.
N = 16 powoduje A
. Uruchomienie tego powinno dać wynik 16.
Detale
- Wszystkie znaki są dozwolone, ASCII i inne niż ASCII. (Dozwolone są również znaki nowej linii i niedrukowalne ASCII. Zwróć uwagę, że znak powrotu karetki i znak wiersza liczą się jako odrębne znaki).
- Twój wynik to długość znaków w niezmienionym programie (na przykład 15). Najniższy wynik wygrywa.
- Wynik poniżej 16 jest oczywiście niemożliwy, ponieważ co najmniej dwa ze zmienionych programów byłyby identyczne.
- Dane wyjściowe mogą być wysyłane do pliku lub standardowego pliku lub do dowolnego innego rozsądnego rozwiązania. Jednak wyjście 16 różnych programów musi przejść do tego samego miejsca (np. Nie jest ok, jeśli
AO
idzie na standardowe wyjście, aleA
do pliku). Brak danych wejściowych. - Dane wyjściowe muszą być dziesiętne, a nie szesnastkowe. Rzeczywiste wyjście powinno zawierać tylko 1 lub 2 znaki, które składają się na liczbę od 1 do 16, nic więcej. (Rzeczy takie jak Matlab
ans =
są w porządku.) - Twój program nie musi działać dla N = 17 lub wyższej.
źródło
ABCDEFGHIJKLMNO
aN = 15
kod wynikowy jest po prostuA
.Odpowiedzi:
APL, 49
Zmienione programy
Wyjaśnienie
Zacznę od dołu, ponieważ ułatwi to wyjaśnienie
Należy pamiętać o dwóch cechach językowych APL. Po pierwsze, APL nie ma pierwszeństwa operatora, instrukcje są zawsze oceniane od prawej do lewej. Po drugie, wiele funkcji APL zachowuje się zupełnie inaczej, w zależności od tego, czy podano jeden argument po jego prawej stronie (monadyczny), czy dwa argumenty po jego lewej i prawej stronie (dyadyczny).
Monadic
⌊
jest zaokrąglony w dół (funkcja podłogi), Dyadic×
jest oczywiście mnożeniem,⍝
komentuje resztę liniiTo powinno uczynić to oczywistym:
9:
⌊/9×1
/
jest Zmniejsz. Zasadniczo bierze funkcję lewej i tablicy po prawej, wstaw funkcję między każdą parą elementów tablicy i oceń. (W niektórych językach nazywa się to „fold”). Właściwym argumentem jest skalar, więc
/
nic nie robi.8:
⌊|8×× 2
Monadyczny
×
jest funkcją signum, a monadyczny|
jest funkcją wartości bezwzględnej. Więc× 2
ocenia1
i|8×1
jest oczywiście8
7:
⌊11-4 ⍝
powinno być oczywiste6:
⌊⍟19×51⍝2
Monadyczny
⍟
jest logarytmiczny,więc
⍟19×51
ocenia goln(19×51) = 6.87626...
i⌊
zaokrągla w dół do6
5:
⌊⍟21×○5
Monadic
○
mnoży swój argument przez π⍟21×○5
jestln(21×5π) = 5.79869...
4:
⌊7|18××4×1 ⍝2
Dyadic
|
to funkcja mod, która×4×1
ocenia1
i7|18×1
jest18 mod 7 = 4
3:
⌊○⍟/119-××5 1 ⍝ 2
Wartości rozdzielone spacją to tablica. Zauważ, że w APL, gdy większość funkcji skalarnych podaje argumenty tablicowe, jest to mapa niejawna.
Dyadic
⍟
to logTak więc
××5 1
jest to signum z signum na 5 i 1, co daje1 1
,119-1 1
jest¯118 ¯118
(¯
to tylko znak minus. APL musi rozróżniać liczby ujemne od odejmowania) i⍟/¯118 ¯118
jest log -118 (-118) = 12:
⌊⍟7⍟|21189×1×345× 1 ⍝⍝_2
Możesz sam to wypracować
1:
⌊⊃⍟○7⍟⍟1|/2111118 9⍝×-1 ×○3×4_5_× 1_ _⍝_⍝ __2
Ten polega na bardziej skomplikowanym użyciu
/
. Jeślin
jest liczbą,F
jest funkcją iA
jest tablicą, tonF/A
pobiera każdą grupęn
kolejnych wpisówA
i stosuje sięF/
. Na przykład,2×/1 2 3
bierze każdą parę kolejnych wpisów (które są1 2
i2 3
) i stosuje się×/
do każdej grupy, aby dać2 6
So,
1|/2111118 9
po prostu zwraca2111118 9
(jak to ma zastosowanie|/
w skalarach). Następnie⍟○7⍟⍟
stosuje ln, następnie loguje 7 do tych liczb, a następnie mnoży je przez π i ln ponownie. Liczby, które wychodzą po drugiej stronie, są1.46424... 0.23972...
tutaj,
⊃
służą tylko do wybrania pierwszego elementu tablicy.źródło
Python -
12011137 (generator:241218) - Niech żyją skróty!Strategia:
Próbowałem rozpocząć każdą linię od tylu skrótów, ile było pożądanych wyników
n
. Wtedy wszystkie inne wersje całkowicie pominą ten wiersz.Główną trudnością było jednak dodanie poprawnej liczby skrótów, tak aby kolejny przebieg dokładnie trafił na początek następnego wiersza. Ponadto mogą wystąpić zakłócenia z innymi wersjami, np. Wersja 16 wskakująca bezpośrednio do
print
wiersza 5 i tak dalej. Było to więc wiele prób i błędów w połączeniu ze skryptem pomocniczym do szybkiego testowania.Statystyka:
1201113710661002 (88,1%)Kod:
Skrypt testowy:
Wynik:
Aktualizacja: skrypt generujący!
Pomyślałem o moim rozwiązaniu i że musi istnieć wzorzec, aby wygenerować go algorytmicznie. Więc zaczynamy:
Buduje program linia po linii:
i
zprint i
poleceniem ii - 1
mieszaj między dwoma sąsiednimi znakami.print i
(z powodu niewspółosiowości) ani żadnej wersjin
z wyrzuceniemn in range(1, 17)
wyjątku, dodaj kolejny skrót do poprzedniej linii.W rzeczywistości zwrócił krótszy program niż znalazłem dziś rano. (Więc zaktualizowałem moje rozwiązanie powyżej.) Ponadto jestem prawie pewien, że nie ma krótszej implementacji zgodnej z tym wzorcem. Ale nigdy nie wiesz!
Wersja golfowa -
241218:Zauważ, że może istnieć krótszy generator, np. Poprzez zakodowanie na stałe wymaganej liczby kolejnych skrótów dla każdej linii. Ale ten sam je oblicza i może być użyty dla dowolnego N> 16.
źródło
p 1
zamiastprint 1
.Befunge 93 - Pięć milionów siedemset sześćdziesiąt pięć tysięcy siedemset siedemdziesiąt sześć znaków
Domagam się poważnego traktowania ...
3 powody dlaczego. Pierwszy powód: skrypt befunge ma zawsze rozmiar 80x25, więc bez względu na wszystko musiało być coś , co zostało zmniejszone w wierszach z kodem. Drugi powód: dlaczego coś ma około 5,5 miliona spacji, ponieważ 720 720 to najmniejsza wspólna wielokrotność od 1 do 16 ... Oznacza to, że nie będzie zawijającego się bałaganu, gdy pomijamy postacie. Trzeci powód: wow, to jest dość absurdalne.
źródło
209 znaków (różne języki)
Po prostu starałem się uprościć sprawę i unikać umieszczania czegokolwiek na pozycjach z dużą liczbą czynników pierwotnych. Zaletą jest możliwość uruchamiania w wielu językach skryptowych. Powinien działać w każdym języku, który nie jest celowo przewrotny i ma następujące funkcje:
Na przykład,
Interpretator wiersza polecenia Python 2 (choć nie z pliku):
MATLAB (po prostu zamień „#” na „%”):
Uwaga: Pierwsza „1” powinna zawierać 17 spacji. Znacie wiele języków, więc pomóżcie mi wymienić więcej, w których mógłby działać (:
EDYCJA: Dodano unary + w pozycji 0 dla Pythona, aby uniknąć wcięcia linii.
źródło
IndentationError
bieg w linii poleceń. Ale być może nie użyłeś poprawnej składni znaczników podczas publikowania kodu tutaj.unexpected indent
w konsolę Python 2.7. Ale działa w Matlabie, więc nie martw się. Wierzę, że działa również w Ruby.CJam, 89 bajtów
W tym podejściu nie stosuje się żadnych komentarzy.
i
rzutuje na liczbę całkowitą, więc tutaj jest noop. Można go zastąpić białymi spacjami, ale litery wydają mi się bardziej czytelne ...Wypróbuj online , wykonując następujący kod :
Przykładowy przebieg
źródło
GolfScript, 61 bajtów
Wykorzystuje to komentarze (
#
) i nieudokumentowane „super-komentarze” (wszystko po niedopasowaniu}
jest dyskretnie ignorowane)._
jest noop. Można go zastąpić białymi spacjami, ale podkreślenia wydają mi się bardziej czytelne ...Wypróbuj online.
Przykładowy przebieg
źródło