Wyzwanie
Twoim zadaniem w tym pytaniu jest napisanie programu lub funkcji o nazwie, która przyjmuje dodatnią liczbę całkowitą n
(większą niż 0) jako dane wejściowe za pośrednictwem argumentów STDIN, ARGV lub funkcji i wysyła tablicę za pośrednictwem STDOUT lub zwracanej wartości funkcji.
Brzmi dość prosto? Oto zasady
- Tablica będzie zawierać tylko liczby całkowite od
1
don
- Każdą liczbę całkowitą od
1
don
należy powtórzyćx
razy, gdziex
jest wartością każdej liczby całkowitej.
Na przykład:
Wejście:
5
Wynik:
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
Tablica może być sortowana lub nie.
To jest code-golf, więc zwycięzca jest najkrótszym kodem w bajtach.
Premia
Pomnóż swój wynik przez, 0.5
jeśli nie ma dwóch sąsiadujących liczb całkowitych w tablicy wyjściowej.
Na przykład dla n = 5
jednej takiej konfiguracji byłaby
[5, 4, 5, 4, 3, 4, 5, 2, 5, 3, 1, 2, 3, 4, 5]
źródło
/⍨⍳n
Rubinowy (rekurencyjny), 41 bajtów * 0,5 = 20,5
Lub używając lambda (jak zalecają histocrat i Ventero): 34 bajty * 0,5 = 17
(zadzwoń za pomocą
r[argument]
)źródło
n=->x,i=1{...n[x,i+1]...
) i kilka innych za pomocą[*i..n]
.r=->n,i=n{i>0?[*i..n]+r[n,i-1]:[]}
Pyth , 9 bajtów * 0,5 = 4,5
Z pomocą @FryAmTheEggman
Wypróbuj online.
Wyjaśnienie
gdzie
Q
jest wejście.źródło
Haskell, 31 znaków = 15,5 wynik
27 znaków bez bonusu
Pobity przez Dumnego Haskellera
źródło
g n = [y|x<-[n,n-1..1],y<-[x..n]]
C, 22 = 44 bajty * 0,5
Funkcja
h
przyjmuje dwa parametry. Pierwszy jestint
określające n . Drugi toint*
bufor wyjściowy.Program testowy
źródło
Pyth -
1510 * .5 = 5Wypróbuj online.
Oczekuje wejścia na standardowe wejście. Niezależnie odkryty algorytm. Dzięki @ Sp3000 za pomoc w naklejeniu tam ostatniego Q: P Co za ironia? XD
Wyjaśnienie:
źródło
CJam,
1215 bajtów * 0,5 = 7,5Jest to pełny program STDIN-to-STDOUT. Łączy w sobie rosnące przyrostki
1 ... n
zakresu, co zapewnia, że żadne dwie sąsiednie liczby nie są identyczne.Sprawdź to tutaj.
źródło
Python 2, 53 bajty * 0,5 = 26,5
Bezwstydnie pożyczył pomysł @ VisualMelon
źródło
Haskell, 34 bajty * 0,5 = 17
Po raz pierwszy użyłem Haskell do gry w golfa. Zadzwoń z
g <number>
.źródło
Bash + coreutils, 28/2 = 14
Bezwstydnie kradnie pomysł @ pgy i gra w golfa:
Pure Bash (bez coreutils), 30/2 = 15
Piekło ewolucji, ucieczki i ekspansji:
źródło
GolfScript (14 bajtów * 0,5 = wynik 7)
Demo online
Myślę, że jest to prawdopodobnie podobne do niektórych istniejących odpowiedzi, ponieważ tworzy tablicę
concat( [n], [n-1, n], [n-2, n-1, n], ..., [1, 2, ..., n] )
Niestety nie byłem już w stanie grać w golfa, prawdopodobnie bardziej elegancki:
który umieszcza dane wejściowe
x
w tablicy, a następnie stosuje się dwukrotnie{,{x\-}/}%
, co mapuje każdy element w tablicy na odliczanie tylu elementówx
.źródło
C # - 81 (161 bajtów * 0,5)
Prosta praca w C #, mam nadzieję, że dostanie premię za brak liczb. Czyta int ze standardowego wejścia, wypisuje tablicę podobną do przykładu na standardowe wyjście.
Bardziej czytelny:
Przykłady wyników:
źródło
System.Console
jest statyczny, nie możesz przypisać go do zmiennej, ale w C # 6 lub cokolwiek będzie dalej, będziesz mógł to zrobićusing System.Console;
(using System;
nie płaci w tym przypadku), nie jestem pewien, co sądzę o tej funkcji, właśnie z tego powodu wpływa na wiele starych pytań golfowych;)using C=System.Console
oszczędza 3 bajty i jest prawdopodobnie tym, co @MarkKnol miał na myśli (przepraszam!), Haniebne zaniedbanie z mojej strony.JavaScript, ES6, 41 bajtów
Tworzy to funkcję,
f
którą można wywołać jakf(6)
i zwraca wymaganą tablicę.Wykorzystuje to podejście rekurencyjne, w którym każda iteracja tworzy tablicę
i
elementów o wszystkich wartościachi
i łączy tablicę zwróconą przezf(i-1)
warunek zatrzymaniai==0
.Działa na najnowszym Firefoksie.
źródło
Haskell, 14 = 28 bajtów / 2
przykładowe dane wyjściowe:
24 bajty bez premii:
źródło
=<<
pomóc uniknąć białych znaków? Wydaje mi się, że tak, ale byłbym zaskoczony, gdybyś jeszcze tego nie rozważył.=<<
, potrzebowałbym nawiasów dla lambda>>=
?(
,[
,=
,,
, po wszelkich operatorów i tym podobnelet \x->y = (2+) in (x,y)
wydaje się trochę niemożliwe.Haxe , 53 bajty
Współpracuje z l (6); z powodu zrozumienia tablicy.
Przetestuj online http://try.haxe.org/#741f9
źródło
vba, 76 * 0,5 = 38
źródło
For Z=1 To
doFor Z=1To
Next:Next
zNext x,Z
R, 44 * .5 = 22
Szybki test
źródło
JavaScript, ES6, 66 bajtów * 0,5 = 33
Opierając się na rekurencyjnym podejściu Optimizer , możemy budować malejące odcinki o malejącej długości
[4,3,2,1, 4,3,2, 4,3, 4]
.Zamiast tworzyć podrzędne tablice o tej samej wartości
Array(i).fill(i)
, wykonujemyundefined
podrzędne tablice o odpowiedniej długości za pomocą,Array(n).fill()
a następnie zmieniamy wartości na przebieg malejący za pomocą.map((v,x)=>i-x)
. Ponadto definiujemy i powtarzamy funkcję wewnętrznąg
; funkcja zewnętrznaf
istnieje tylko do przechowywania wartościi
whileg
recurses.źródło
T-SQL, 176 * 0,5 = 88
Ponieważ wydawało się, że brakuje T-SQL @Optimizer, oto cała jego pełna chwała :).
Kilka opcji funkcji, funkcja Skalarna i Inline Table Valued. Funkcja Scalar używa pętli while do rekurencji i zwraca ciąg liczb, przy czym funkcja Inline Table Valued wykorzystuje rekurencyjną CTE dla sekwencji i zwraca tabelę. Oczywiście nigdy nie będą one konkurencyjne, więc nie spędziłem dużo czasu na grze w golfa.
Funkcja ceniona w tabeli wbudowanej, 176 * .5
Nazywany w następujący sposób
SQLFiddlePrzykład
Funkcja skalarna, 220 * .5
Nazywany w następujący sposób
Przykład SQLFiddle
źródło
Mathematica, 34 * 0,5 = 17
źródło
perl, 26 bajtów
źródło
$n
.Unable to parse postcircumfix:sym<{ }>, couldn't find final '}' at line 3
. Wypróbowałem to na ideone.com.JavaScript (czytelny), 131 bajtów
Jestem nowy w Code Golf, więc to nie jest najlepsze
JavaScript (mniej czytelny), 87 bajtów
Zminimalizowane za pomocą jscompress.com
źródło
TECO, 25 bajtów * 0,5 = 12,5
Powyższe ledwo pokonuje wersję bez premii przy 13 bajtach:
źródło
C #,
11499 * 0,5 = 49,5 bajtów(Z niewielką pomocą odpowiedzi VisualMelon) Edytuj: i komentarz Jamesa Webstera
Nie golfowany:
Istnieje niebezpieczna wersja, którą bezwstydnie wziąłem z odpowiedzi Feersum C, ale nie jestem w 100% pewien, że pasuje ona do reguł, ponieważ musisz przydzielić pamięć przed wywołaniem metody.C # (niebezpieczne), 82 * 0,5 = 41 bajtów
Nazywany w następujący sposób:
Zgodnie z sugestią VisualMelon (dzięki!) Niebezpieczny kod można ponownie utworzyć za pomocą bezpiecznego kodu, który jeszcze bardziej zmniejsza rozmiar! Nadal pojawia się pytanie, czy tworzenie końcowej tablicy wyników może być wykonane poza metodą.
C #, 72 * 0,5 = 36 bajtów
źródło
int[]
void A(int n,int[]p){int z=0,m=n,i;while(m-->0)for(i=m;i++<n;)p[z++]=i;}
System.Runtime.InteropServices.Marshal.Copy(new IntPtr(stuff), stuffArray, 0, length);
?var a=new int[(int)((n/2f)*(n+1))];
, która według mnie sprowadza się do 109(n*(n+1)/2)
Bash z seq, expr i xargs = 59/2 = 29,5
Zapisz go i uruchom z numerem jako pierwszym argumentem.
źródło
C #,
116115 + 33 = 148 bajtówNie najkrótszy kod, ale ... i tak działa: P
Wymaga tego na górze pliku (33 bajty):
Wersja bez gry w golfa:
źródło
J, 23 * 0,5 = 11,5
J, 11
źródło
23 * 0.5
jest11.5
, nie10.5
.-1
Bajt:f=.-[:;<@|.@i."0@>:@i.
wyrównanie wyników!JavaScript (ES6) 29 (58 * 0,5)
Edytuj usuń; dzięki @Optimizer
Przetestuj w konsoli FireFox / FireBug
Wynik
Nie golfił
źródło
ECMAScript6, 67 * 0,5 = 33,5 bajtów
Całkiem zadowolony z tego ... To mniej więcej jedna czwarta wielkości mojego oryginału.
f(4)
zwroty:Stara odpowiedź:
To jest moja pierwsza szansa na kod golfa ... Nadal chcę otrzymać ten bonus 0,5x. Wszelkie sugestie są mile widziane!
Wywoływany za pomocą f (n).
źródło
d
, (2)a=b=c=[]
w części deklaracyjnej, (3)c[a].map(e=>a)
(4)b.push(...c)
C #, 108 bajtów * 0,5 = 54
Dzięki VisualMelon za ciężką pracę! Pomyślałem, że spróbuję to ściśnąć tak mocno, jak to możliwe.
(114 bajtów * 0,5 = 57, jeśli nalegasz na użycie .ToArray () do zwrócenia int [])
źródło