Wprowadzenie
Pewnego dnia natknąłem się na ten (bezużyteczny) wzór podczas oglądania telewizji. Nazwałem go „wzorem 9”, ponieważ pierwszą cyfrą, która go użyła, było 9. Istotą tego jest to, że wpisujesz liczbę (powiedzmy x ), a następnie wracasz:
- x
- x + ( x / 3) [nazwijmy to y ]
- dwie trzecie y [nazwijmy to z ]
- z + 1
Tak więc, jeśli wstawię do tego wzoru cyfrę 9 jako x , oto co wyjdzie:
- 9 ( 9 )
- 12 ( 9 + 9/3 ) [9 powyżej 3 to 3, a 9 + 3 to 12]
- 8 ( 12 razy dwie trzecie) [jedna trzecia z 12 to 4, a 4 * 2 to 8]
- 9 ( 8 + 1 to 9)
Wyzwanie
Napisz mi funkcję (w dowolnym języku programowania), która przyjmuje liczbę i generuje tablicę liczb całkowitych za pomocą wzorca.
Trochę jak ten kod psuedo:
function ninePattern(int myInt) returns IntegerArray {
int iterationA = myInt + (myInt / 3);
int iterationB = iterationA * (2 / 3);
int iterationC = iterationB + 1;
IntegerArray x = [myInt, iterationA, iterationB, iterationC];
return x;
}
Wyjaśnienia
W komentarzach dotyczących specyfikacji pytania pojawiły się dyskusje. Ta sekcja ma na celu wyjaśnienie niektórych z nich.
„lepiej liczyć w bajtach niż w znakach”
Wybrałem postacie, ponieważ (przynajmniej dla mnie) łatwiej byłoby ocenić. Oczywiście nie mogę tego teraz zmienić. (wiele odpowiedzi jest już opublikowanych)
„zaokrąglenie”
Zaokrąglanie następuje według tego wiersza:
Jeśli jest to 5 lub więcej, podnieś wynik
Jeśli jest to 4 lub mniej, pozwól mu odpocząć
Mówiąc prosto, jeśli jest to coś takiego jak 4.7 lub 3.85, zaokrąglij je odpowiednio do 5 i 4.
Przykłady
Input => Result
9 => [9, 12, 8, 9]
8 => [8, 11, 7, 8]
6 => [6, 8, 5, 6]
23 => [23, 31, 21, 22]
159 => [159, 212, 141, 142]
Jeśli jednak liczby są podobne do 2,3 lub 10,435446, zaokrąglij je odpowiednio do 2 i 10.
„obsługa języków”
Możesz swobodnie korzystać z funkcji i / lub tablic JEŻELI I TYLKO JEŻELI wybrany język ich nie obsługuje. Jeśli tak (nawet jeśli zwiększy liczbę twoich postaci), musisz ich użyć .
źródło
Odpowiedzi:
MarioLANG,
659621591582556543516458418401352308369 bajtówzaokrąglanie jest dość drogie: /
Wypróbuj online
Cóż, było więcej zabawy niż się spodziewano, prawdopodobnie nie jest to optymalne, ale chyba się tam dostaję.
Czas wyjaśnienia:
(dla wersji 352 bajtów)
najpierw otrzymujemy argument i wypisujemy go:
wystarczająco proste
następnie przechodzimy do głównej części programu: podział wejścia / 3
co jest nieco zmodyfikowaną konwersją podziału na pieprzenie mózgu
które wymagają wkładu
i oddam ci
po uzyskaniu podziału używamy go, aby uzyskać sumę n i n / d i wydrukować ją
następnie musimy wykonać inny podział: (2 * (n + n / d)) / 3
więc otrzymujemy (2 * (n + n / d)
i wróć z 3 do dywizji
w tym momencie wszystko się ujawnia, Mario utknął w nieskończonej pętli i na zawsze dzielił coraz większą liczbę.
i aby ustalić, że potrzebujemy sposobu, aby odróżnić pierwszą i drugą dywizję, to w końcu, och, radości, mamy sposób
w zasadzie sprawdzamy, czy x w
wynosi 0, jeśli to znaczy, że jesteśmy w pierwszej lidze
w przeciwnym razie jesteśmy w drugim dziale i po prostu drukujemy wynik podziału, dodajemy 1, a następnie drukujemy go ponownie
i voila łatwe jak ciasto.
źródło
Emotinomicon 99 bajtów, 33 znaków
Wyjaśnienie:
źródło
MATL, 14 bajtów
Wypróbuj online
Całkiem proste,
v
łączy stos w macierz.Xo
konwertuje na typ danych liczb całkowitych, a wszystkie późniejsze operacje są operacjami liczb całkowitych.źródło
Cheddar , 27 bajtów
$0
jest zmienna z wejściem. Cheddar po prostu nie jest golfowym językiem ¯ \ _ (ツ) _ / ¯, również nie jest konkurencyjny, ponieważ funkcjonalność wprowadzania Cheddara została stworzona po tym wyzwaniu.Nie golfowany:
źródło
Java,
86828485 znakówLitera
d
umieszczona zaraz po liczbie całkowitej powoduje, że liczba całkowita adouble
.Nie golfowany:
Bez klasy (
class c{}
ma 8 znaków) zmniejsza rozmiar do 76 znaków:Dokładniejsza wersja w 110 znakach (118 z enumem) - używa
float
s, ponieważ nikt nie ma miejsca na rzucanieMath#round(double)
:źródło
I + (I / 3)
używa podziału na liczby całkowite, co oznacza, że ułamki są odrzucane, a zatem wynik nie jest poprawnie zaokrąglany.Java,
5680 bajtówJak zauważyli niektórzy użytkownicy, to rozwiązanie (jak inni w Javie) nie zaokrągla danych poprawnie. Więc teraz przedstawiam nieco dłuższe rozwiązanie, które powinno zwrócić poprawny wynik
lub 60 bajtów wersja Lamda
Wersja golfowai nie golfił
lub 36 bajtów zdefiniowanych jako lambda
źródło
Java, 64 bajty
Notatki
Nie golfił
Wyjście z i = 9
źródło
Scratch, 33 bajty
Pyta o dane wejściowe, zestawy
a
do wprowadzania zaokrąglone, zbioryb
ic
ich odpowiednie zmiany, a następnie podaje wszystkie cztery liczby, oddzielone przecinkami.źródło
Java 8 lambda,
109817975 znakówPonieważ ... no wiesz ... nawet Java może być golfa ...
Lambda nie zakwalifikował się do klasy:
Zakładam, że wolno mi używać długich, ponieważ są one również liczbami całkowitymi. Niestety trzeba poprawnie zaokrąglić liczby całkowite i dlatego rzutowanie „krótkie” nie działa. Używając longów, nie musimy rzutować wyników zaokrąglania z powrotem na ints.Aktualizacja
Używając ładnego małego + 0,5, a następnie sztuczki rzucania, zachowujemy prawidłowe zaokrąglenie i oszczędzamy 2 znaki!
Również ta sztuczka nie wymaga już dłuższego używania, dzięki czemu możemy wrócić do golenia ints 4 kolejnych znaków.
źródło
a->{
końcowy kod}
za -5 bajtów.Mathematica - 21 bajtów
Właśnie dostałem Mathematica od moich braci RPi, więc wypróbowałem to dla zabawy i na lepszy sposób niż wyzwanie PPCG.
Definiuje anonimową funkcję. Wypróbuj jak:
źródło
Python 3, 45 bajtów
Zobacz ten kod działający na ideone.com
źródło
Lua, 52 bajty
Ten program pobiera liczbę według argumentu wiersza poleceń i zwraca odpowiednią tablicę. Programy w lua są technicznie funkcjami, ponieważ interpreter zawsze będzie je zawierał w funkcję. Jest to również ta mechanika używana podczas „wywoływania” kodów w innych plikach (w zasadzie używa
loadfile
/dofile
).źródło
Właściwie 21 bajtów
Ten program deklaruje funkcję, która wykonuje wymagane operacje na wartości najwyższego stosu.
Wypróbuj online! (dodatkowy
.
na końcu ocenia funkcję i drukuje wynik)Wyjaśnienie:
źródło
Mathcad, [tbd] bajty
Ekwiwalent bajtów Mathcad codegolf nie został jeszcze ustalony. Biorąc pod uwagę klawiaturę jako przybliżony odpowiednik, rozwiązanie ma około 40 bajtów.
źródło
05AB1E , 15 bajtów
Kod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
Pyke, 11 bajtów
Wypróbuj tutaj!
źródło
JavaScript, 50 bajtów
Konwertuję moje rozwiązanie Java na JavaScript i trochę go odrzuciłem.
źródło
C ++ 0x -
95102185189109129 znakówDegolfed
źródło
p+(p/3)*(2/3)
który jestp+(2*p/9)
zamiast(p+(p/3))*(2/3)
Erlang, 80 bajtów
Aby uruchomić, zapisz jako f.erl , skompiluj i wywołaj funkcję. Zwróci listę ints:
Zauważ, że Erlang automatycznie konwertuje int na znaki ASCII, jeśli jesteś w zakresie wartości ASCII, ponieważ Erlang nie ma typu char . Wywołanie funkcji za pomocą 100 daje lepszą czytelność [100,133,88,89] .
Nie golfowany:
źródło
Erlang, 46 bajtów
Odpowiedź inspirowana przez @ fxk8y (nie mogłem dodać komentarza do jego odpowiedzi)
Możesz również zobaczyć wyniki za pomocą:
źródło
Pyth, 20 bajtów
Wyjaśnienie:
Przetestuj tutaj
źródło
Jolf, 17 bajtów
Definiuje funkcję
Ώ
. Przyjmuje dane niejawnie, więc podwaja się również jako pełny program. Wypróbuj tutaj!źródło
Mathematica, 51 bajtów
Anonimowa funkcja, która jest zgodna z bieżącą (w momencie publikacji) wersją postu, co oznacza zaokrąglanie na każdym kroku.
FoldList
jest typową operacją w programowaniu. Jest wywoływany jakoFoldList[f, list]
i stosuje funkcję dwóch argumentówf
wielokrotnie do wyniku (lub pierwszego elementu listy w pierwszej iteracji), przyjmując następny element listy za swój drugi argument.Ungolfed:
#2 @ # &
to anonimowe funkcje, które stosują swój drugi argument do pierwszego. Dlatego argument listyFoldList
składa się z kolejnych funkcji, które należy zastosować do danych wejściowych.Ponieważ dane wejściowe są liczbami całkowitymi, a podziałki są równe 3, wynik nigdy nie będzie taki jak 4,5, dlatego nie trzeba się martwić o zasady zaokrąglania, gdy ostatnia cyfra to
5
: zawsze będzie wyraźnie bliżej jednej lub drugiej liczby całkowitej.źródło
Dyalog APL , 33 bajty
źródło
Desmos, 37 bajtów
Wypróbuj online
Yay dla niekonwencjonalnych języków!
źródło
CJam, 21 bajtów
Informacje zwrotne są mile widziane
Wyjaśnienie
qi__
- Przeczytaj dane wejściowe jako liczbę całkowitą i zduplikuj je dwukrotnie3D/+mo
- Podziel jedno wystąpienie danych wejściowych przez 3, a następnie dodaj je do drugiego wystąpienia, aby uzyskać y_2d3/*i
- Zduplikuj y, a następnie pomnóż go przez .6Edycja: Zapomniałem zrobić pierwsze trzy podwójne, więc program został zepsuty. Naprawiony.
źródło
Aksjomat, 59 bajtów
test
źródło
PHP, 60 bajtów
Wypróbuj online!
źródło
PHP, 67 bajtów
źródło