Herausforderung
Ihre Aufgabe in dieser Frage ist es, ein Programm oder eine benannte Funktion zu schreiben, die eine positive Ganzzahl n
(größer als 0) als Eingabe über STDIN-, ARGV- oder Funktionsargumente und ein Array über STDOUT- oder Funktionsrückgabewert ausgibt.
Hört sich einfach an? Hier sind die Regeln
- Das Array enthält nur Ganzzahlen von
1
bisn
- Jede Ganzzahl von
1
bisn
sollte wiederholt werdenx
, wobeix
der Wert jeder Ganzzahl ist.
Beispielsweise:
Eingang:
5
Ausgabe:
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
Das Array kann sortiert sein oder nicht.
Dies ist Code-Golf, also ist der Gewinner der kürzeste Code in Bytes.
Bonus
Multiplizieren Sie Ihre Punktzahl mit, 0.5
wenn keine zwei benachbarten Ganzzahlen in Ihrem Ausgabearray gleich sind.
Zum Beispiel n = 5
wäre eine solche Konfiguration
[5, 4, 5, 4, 3, 4, 5, 2, 5, 3, 1, 2, 3, 4, 5]
quelle
/⍨⍳n
Ruby (rekursiv), 41 Bytes * 0,5 = 20,5
Oder mit einem Lambda (wie von Histokrat und Ventero empfohlen): 34 Bytes * 0,5 = 17
(anrufen mit
r[argument]
)quelle
n=->x,i=1{...n[x,i+1]...
) und ein paar weitere mit angeben[*i..n]
.r=->n,i=n{i>0?[*i..n]+r[n,i-1]:[]}
Pyth , 9 Bytes * 0,5 = 4,5
Mit Hilfe von @FryAmTheEggman
Probieren Sie es online aus.
Erläuterung
wo
Q
ist der eingang.quelle
Haskell, 31 Zeichen = 15,5 Punkte
27 Zeichen ohne den Bonus
Geschlagen von Proud Haskeller
quelle
g n = [y|x<-[n,n-1..1],y<-[x..n]]
C, 22 = 44 Bytes * 0,5
Die Funktion
h
akzeptiert zwei Parameter. Das erste ist einint
spezifizierendes n . Der zweiteint*
ist der Ausgabepuffer.Testprogramm
quelle
Pyth -
1510 * .5 = 5Probieren Sie es online aus.
Erwartet die Eingabe von stdin. Unabhängig entdeckter Algorithmus. Danke @ Sp3000, dass du mir geholfen hast, die letzten Fragen zu beantworten: P Auch Ironie? XD
Erläuterung:
quelle
CJam,
1215 Bytes * 0,5 = 7,5Dies ist das vollständige STDIN-zu-STDOUT-Programm. Es verkettet zunehmende Suffixe des
1 ... n
Bereichs, wodurch sichergestellt wird, dass keine zwei benachbarten Zahlen identisch sind.Teste es hier.
quelle
Python 2, 53 Bytes * 0,5 = 26,5
Schamlos entlehnt @ VisualMelons Idee
quelle
Haskell, 34 Bytes * 0,5 = 17
Das ist das erste Mal, dass ich Haskell zum Golfen benutze. Mit anrufen
g <number>
.quelle
Bash + Coreutils, 28/2 = 14
Schamlos die Idee von @ pgy stehlen und Golf spielen:
Pure Bash (keine Coreutils), 30/2 = 15
Eval, Flucht und Expansionshölle:
quelle
GolfScript (14 Bytes * 0,5 = 7 Punkte)
Online-Demo
Ich denke, dies ähnelt wahrscheinlich einigen vorhandenen Antworten, da es das Array aufbaut
concat( [n], [n-1, n], [n-2, n-1, n], ..., [1, 2, ..., n] )
Umso eleganter konnte ich leider nicht mehr golfen:
Das setzt die Eingabe
x
in ein Array und wird dann zweimal angewendet{,{x\-}/}%
. Dabei wird jedes Element in einem Array einem Countdown von so vielen Elementen von zugeordnetx
.quelle
C # - 81 (161 Byte * 0,5)
Einfacher Job in C #, hoffentlich Bonus ohne Neiburger. Liest ein int aus stdin, schreibt ein Array wie im Beispiel nach stdout.
Besser lesbar:
Beispiele Ausgabe:
quelle
System.Console
ist statisch, Sie können es keiner Variablen zuweisen, aber in C # 6 oder was auch immer als nächstes kommt, werden Sie in der Lage seinusing System.Console;
(using System;
zahlt in diesem Fall nicht), nicht sicher, wie ich mit dieser Funktion umgehen soll viele alteusing C=System.Console
spart 3 Bytes und ist wahrscheinlich das, was @MarkKnol meinte (sorry!), Schändliche Nachlässigkeit meinerseits.JavaScript, ES6, 41 Byte
Dadurch wird eine Funktion
f
erstellt, die wief(6)
folgt aufgerufen werden kann und das erforderliche Array zurückgibt.Hierbei wird ein rekursiver Ansatz verwendet, bei dem jede Iteration ein Array von
i
Elementen erstellt, die alle Werte haben,i
und ein Array verkettet, dasf(i-1)
mit der Stoppbedingung von zurückgegeben wirdi==0
.Funktioniert mit dem neuesten Firefox.
quelle
Haskell, 14 = 28 Bytes / 2
Beispielausgabe:
24 Bytes ohne den Bonus:
quelle
=<<
helfen, das Leerzeichen zu vermeiden? Ich fühle mich wie es könnte, aber ich wäre überrascht, wenn Sie nicht bereits darüber nachgedacht hätten.=<<
würde ich Klammern für die Lambda brauchen>>=
?(
,[
,=
,,
, nach irgendwelchen Operatoren und dergleichenlet \x->y = (2+) in (x,y)
scheint irgendwie unmöglich.Haxe , 53 Bytes
Arbeitet mit l (6); wegen des Array-Verständnisses.
Testen Sie online http://try.haxe.org/#741f9
quelle
vba, 76 · 0,5 = 38
quelle
For Z=1 To
aufFor Z=1To
Next:Next
aufNext x,Z
R, 44 · 0,5 = 22
Ein schneller Test
quelle
JavaScript, ES6, 66 Byte * 0,5 = 33
Aufbauend auf dem rekursiven Ansatz von Optimizer können wir absteigende Läufe mit abnehmender Länge wie erstellen
[4,3,2,1, 4,3,2, 4,3, 4]
.Anstatt gleichwertige Subarrays mit zu erstellen
Array(i).fill(i)
, erstellen wir mitundefined
-gefüllte Subarrays mit der entsprechenden LängeArray(n).fill()
und ändern die Werte in einen absteigenden Lauf mit.map((v,x)=>i-x)
. Wir definieren und wiederholen auch eine innere Funktiong
; Die äußere Funktion dientf
nur zum Speichern des Werts voni
while-g
Rekursionen.quelle
T-SQL, 176 * 0,5 = 88
Da Sie den T-SQL @Optimizer scheinbar verpasst haben, ist er hier in seiner ganzen Ausführlichkeit :).
Einige Funktionsoptionen, eine Skalar- und eine Inline-Tabellenwertfunktion. Die Scalar-Funktion verwendet while-Schleifen zur Rekursion und gibt eine Folge von Zahlen zurück, wobei die Inline-Tabellenwert-Funktion einen rekursiven CTE für eine Sequenz verwendet und eine Tabelle zurückgibt. Natürlich werden diese nicht wettbewerbsfähig sein, deshalb habe ich nicht viel Zeit mit Golfen verbracht.
Inline-Tabellenwertfunktion, 176 * .5
Wird wie folgt aufgerufen
SQLFiddle- Beispiel
Skalarfunktion, 220 * .5
Wird wie folgt aufgerufen
SQLFiddle- Beispiel
quelle
Mathematica, 34 · 0,5 = 17
quelle
Perl, 26 Bytes
quelle
$n
.Unable to parse postcircumfix:sym<{ }>, couldn't find final '}' at line 3
. Versuchte es auf ideone.com.JavaScript (lesbar), 131 Byte
Ich bin neu in Code Golf, das ist also nicht das Beste
JavaScript (weniger lesbar), 87 Bytes
Mit jscompress.com minimiert
quelle
TECO, 25 Bytes * 0,5 = 12,5
Das Obige schlägt die Nicht-Bonus-Version mit 13 Bytes kaum:
quelle
C #,
11499 * 0,5 = 49,5 Bytes(Mit ein wenig Hilfe von VisualMelons Antwort) Edit: und James Websters Kommentar
Ungolfed:
Es gibt eine unsichere Version, die ich schamlos aus Feersums C-Antwort entnommen habe, aber ich bin nicht zu 100% sicher, dass sie in die Regeln passt, da Sie den Speicher zuweisen müssen, bevor Sie die Methode aufrufen.C # (unsicher), 82 * 0,5 = 41 Bytes
Wie folgt aufgerufen:
Gemäß dem Vorschlag von VisualMelon (danke!) Kann der unsichere Code mit sicherem Code neu erstellt werden, wodurch die Größe noch weiter verringert wird! Wirft immer noch die Frage auf, ob die Erstellung des endgültigen Ergebnis-Arrays außerhalb der Methode erfolgen darf.
C #, 72 * 0,5 = 36 Bytes
quelle
int[]
direkt weiterzugebenvoid A(int n,int[]p){int z=0,m=n,i;while(m-->0)for(i=m;i++<n;)p[z++]=i;}
- ich würde zustimmen, dass es in Bezug auf die Regeln wahrscheinlich ein bisschen zweifelhaft ist;)System.Runtime.InteropServices.Marshal.Copy(new IntPtr(stuff), stuffArray, 0, length);
?var a=new int[(int)((n/2f)*(n+1))];
ich denke, dass sie auf 109(n*(n+1)/2)
Bash mit seq, expr und xargs = 59/2 = 29.5
Speichern Sie es und führen Sie es mit der Nummer als erstes Argument aus.
quelle
C #,
116115 + 33 = 148 BytesNicht der kürzeste Code, aber ... es funktioniert trotzdem: P
Benötigt dies am Anfang der Datei (33 Bytes):
Ungolf-Version:
quelle
J, 23 · 0,5 = 11,5
J, 11
quelle
23 * 0.5
ist11.5
nicht10.5
.-1
Byte:f=.-[:;<@|.@i."0@>:@i.
Damit die Punkte gleich sind!JavaScript (ES6) 29 (58 * 0,5)
Bearbeiten entfernen; thx @Optimizer
Test in der FireFox / FireBug-Konsole
Ausgabe
Ungolfed
quelle
ECMAScript6, 67 * 0,5 = 33,5 Bytes
Ziemlich glücklich mit diesem ... Es ist ungefähr ein Viertel der Größe meines Originals.
f(4)
kehrt zurück:Alte Antwort:
Dies ist mein erster Versuch mit Codegolf ... Ich möchte immer noch den 0,5-fachen Bonus erhalten. Anregungen sind willkommen!
Wird mit f (n) aufgerufen.
quelle
d
, (2)a=b=c=[]
in für Deklarationsteil, (3)c[a].map(e=>a)
(4)b.push(...c)
C #, 108 Bytes * 0,5 = 54
Vielen Dank an VisualMelon für die harte Arbeit! Ich dachte, ich würde versuchen, es so weit wie möglich zusammenzudrücken.
(114 Byte * 0,5 = 57, wenn Sie darauf bestehen, .ToArray () zu verwenden, um int [] zurückzugeben.)
quelle