Widzimy tutaj wiele wyzwań wymagających funkcji do utworzenia sekwencji z OEIS . Chociaż wyzwania te są zabawne, jako programista widzę szansę na automatyzację.
Wyzwanie polega na stworzeniu programu, który pobiera indeks sekwencji (np. A172141 ) i pewną liczbę całkowitą n (np. 7) i pobiera odpowiednią wartość z odpowiedniej strony internetowej.
I / O
Jak wspomniano, twój program powinien przyjmować indeks sekwencji i pewną wartość n jako dane wejściowe i wyjściowe n-tego terminu w tej sekwencji. Akceptujesz dowolny indeks w plikach B sekwencji . Jeśli indeks jest większy niż największy indeks wymieniony w plikach B, możesz zgłosić wyjątek lub wydrukować cokolwiek wybierzesz (nie ma ich w przypadkach testowych). Standardowe metody wejścia i wyjścia są dozwolone.
Ograniczenia w korzystaniu z Internetu
Nie należy uzyskiwać dostępu do witryn innych niż https://oeis.org i http://oeis.org . Obejmuje to skracacze adresów URL, twoją własną stronę internetową i to pytanie. Jeśli chcesz uzyskać dostęp do innej witryny i uważasz, że nie jest to niesprawiedliwe, możesz zostawić komentarz, a ja rozstrzygnę.
Punktacja
Jest to wyzwanie związane z golfem, więc wygrywa program z najmniejszą liczbą bajtów w kodzie źródłowym. Standardowe luki są niedozwolone.
Przypadki testowe
Zakładając, że twoje urządzenie ma właściwe połączenie z Internetem, a serwery OEIS są uruchomione i działają następujące dane wejściowe i wyjściowe powinny odpowiadać.
A172141, 7 -> 980
A173429, 4 -> 276
A190394, 6 -> 16
A002911, 11 -> 960
A052170, 3 -> 24
A060296, 8 -> 3
A178732, 5 -> 27
A000001, 1 -> 1
A000796, 314 -> 3
A001622, 162 -> 8
A002206, -1 -> 1
Wskazówka
- Podczas uzyskiwania dostępu do plików B
http://oeis.org/b<A-number>.txt
nastąpi przekierowanie do odpowiedniego pliku B.
oeis.org/A000796/b000796.txt
Zamiastoeis.org/A000796/list
. Czy fomer ma na myśli pliki B ? W takim przypadku wzmianka o przesunięciu jest raczej zbędna.Odpowiedzi:
Bash + coreutils + w3m,
514542 bajtówDzięki @EamonOlive za grę w golfa z 3 bajtów!
Przykładowy przebieg
Jak to działa
w3m to oparta na tekście przeglądarka internetowa, która wyświetla zarówno HTML, jak i zwykły tekst w czytelnym formacie. W przeciwieństwie do curl , domyślnie podąża za przekierowaniami (jest to wymagane, ponieważ
oeis.org/bxxxxxx.txt
przekierowuje dooeis.org/Axxxxxx/bxxxxxx.txt
), nie generuje żadnych zbłąkanych danych wyjściowych do STDERR i ma trzy bajtową nazwę.Komenda
żądany adres URL, gdzie
${1:1}
jest pierwszym argumentem wiersza polecenia bez pierwszego znaku.Dane wyjściowe są przesyłane potokowo do polecenia
który wyodrębnia pożądane wyjście.
s/^$2 //p
próbuje zastąpić^$2
(początek wiersza, następnie drugi argument wiersza polecenia, a następnie spację) pustym ciągiem. Jeśli podstawienie zakończy się powodzeniem,p
drukuje swój wynik. Następnied
bezwarunkowo usuwa wzór, aby uniemożliwić sedowi wydrukowanie całego wejścia.źródło
oeis.org/b${1:1}.txt
zamiastoeis.org/$1/b${1:1}.txt
sed -n ...
, ale to byłaby jeszcze jedna postać.-n
, podwójne cudzysłowy można zastąpić spacją, dla tej samej liczby bajtów.Perl, 59 bajtów
Potrzebuje
-M5.010
lub-E
uruchomić. Na przykład :Zaoszczędzono 8 bajtów dzięki odpowiedzi @Dennis , usuwając
http://
tak jak on.źródło
CJam, 36 bajtów
Przykładowy przebieg
źródło
Python 2,
125118113 bajtów712 bajtów zapisanych dzięki LynnOto mój problem. Prawdopodobnie jest to nieoptymalne, ale myślę, że wykonałem całkiem przyzwoitą robotę. Tworzy anonimową funkcję, która jako argument przyjmuje ciąg i liczbę całkowitą i zwraca ciąg jako wynik lub generuje błąd, jeśli indeks jest poza zakresem.
Można to zrobić w program o pełnej długości 124 bajtów.
To monituje użytkownika o podanie danych wejściowych. Najpierw pytając o indeks, a następnie numer A sekwencji.
źródło
import re,urllib2 as u;lambda x,y:re.search("%d (.*)\n"%y,u.urlopen("http://oeis.org/b%s.txt"%x[1:]).read()).group(1)
lambda x,y:re.split("%d (.*)"%y,u.urlopen("http://oeis.org/b%s.txt"%x[1:]).read())[1]
jest jeszcze krótszy!Python 3,
153146135 bajtów7 bajtów dzięki FryAmTheEggman.
6 bajtów dzięki Eamonowi Olive.
5 bajtów dzięki Rod.
Nazwij to tak:
Uruchom na komputerze, którego domyślnym ustawieniem jest utf-8.
źródło
A%s
na,%s
a potem pierwszya[1:]
naa
?PHP 5.6,
9392 bajtyTen jest całkiem prosty. Pociągnij stronę za
file()
, uzyskaj linię o$line - 1
(indeks 0), eksploduj w przestrzeni i wydrukuj z niej drugi element tablicy.źródło
Nim ,
123115113 bajtówTo jest wyrażenie lambda; aby go użyć, musi zostać przekazany jako argument do procedury testowej. Pełny program, który można wykorzystać do testowania, znajduje się tutaj:
Oczekuje danych wejściowych jako dwóch ciągów. Przykładowe użycie:
Używamy
httpclient
„sgetContent
proc dostać B-plik OEIS, a następnie użyć wyrażenia regularnego dofind
wiersza z indeksu.find
zwraca anOption[RegexMatch]
, więc używamyget
do pobierania wartości zOption
.echo
automatycznie strunizuje, więc wykluczamy strunizację.źródło
Mathematica + OEIS.m , 31
przykładowe użycie:
%[A172141,36]
Mathematica, 85
przykładowe użycie:
%["A002206",-1]
źródło
R,
9489 bajtówUżywanie
sprintf
zamiastpaste0
wyników w tym samym bajcie:Pięć bajtów zaoszczędzonych dzięki plannapusowi .
źródło
url
argumentufile
oread.table
może być URL jako ciąg znaków.Clojure, 103
re-find
znajduje wektor grup wyrażeń regularnych pierwszego Matchera, jest używany jako funkcja i1
pobiera ciąg znaków w pozycji1
.read-string
konwertuje ciąg na int. Nie jestem w 100% pewien, czy wyrażenie regularne zawsze znajdzie poprawny wiersz.źródło
R, 87 bajtów
Zbuduj ciąg adresu URL za pomocą wyrażeń regularnych zamiast
paste
lubsprintf
.źródło
Node.js +
request
, 109 bajtówPobiera identyfikator sekwencji i liczbę.
źródło
Julia, 88 bajtów
Grał w golfa z pomocą @Dennis!
Upewnij się, że
Requests.jl
zainstalowałeś przed uruchomieniem.źródło
ListSharp , 266 bajtów
To smutne, gdy język stworzony do skrobania stron internetowych potrzebuje tak wielu wierszy, ponieważ zagnieżdżanie instrukcji w ListSharp jest tabu
źródło