Bei dieser Herausforderung geht es darum, eine Reihe von wachsenden ASCII-Kunstpfeilen zu drucken. Ich werde das Muster in Worten beschreiben, aber es könnte einfacher sein zu sehen, wie der Anfang dieser Serie aussieht:
>
<
->
<-
-->
<--
--->
<---
---->
<----
----->
<-----
------>
<------
...
Ein Pfeil mit der Länge n enthält eine Pfeilspitze ( <
oder >
) und n-1
Striche ( -
). Ein nach rechts zeigender Pfeil hat zuerst die Striche und dann a >
. Ein nach links zeigender Pfeil beginnt mit <
und wird von den Bindestrichen gefolgt. Die Serie besteht aus einem nach n
rechts gerichteten Pfeil, gefolgt von einem nach links gerichteten Pfeil mit einer Länge von n von 1 bis unendlich.
Um die Herausforderung abzuschließen, schreiben Sie ein Programm oder eine Funktion, die eine Eingabe, eine Ganzzahl i >= 1
und die ersten i
Pfeile ausgibt . Die Pfeile sind einzeln, nicht in Rechts-Links-Paaren. i=3
Deshalb sollten Sie Folgendes ausgeben:
>
<
->
Sie können eine Liste von Zeichenfolgen zurückgeben oder nacheinander drucken. Beim Drucken müssen die Pfeile durch ein konsistentes Trennzeichen begrenzt werden, das nicht wie im Beispiel ein Zeilenumbruch sein muss.
Das ist Code-Golf , also gewinnen die wenigsten Bytes.
Antworten:
Canvas , 10 Bytes
Probieren Sie es hier aus!
quelle
↔
irgendwie sieht es so aus!↔
ist das "horizontal umkehren" eingebaut (auch tauschen>
&<
), leider keineR , 69 Bytes
Probieren Sie es online!
quelle
strrep
erzwingt sein zweites Argument,integer
damit Sie/
anstelle von%/%
a
ganz loswerden, indem Sie0...(n-1)
stattdessen die Indexierung durchführen : Probieren Sie es online aus!Java (JDK) , 81 Byte
Probieren Sie es online!
Erklärungen
quelle
import java.util.function.*;
?Haskell,
41-40BytesProbieren Sie es online!
Einfache alte Rekursion: Beginnen Sie mit string
p
=">"
, collectp
, a<
vor allen Zeichen vonp
und einem rekursiven Aufruf mit einem-
Zeichen vorp
. Nimm die erstenn
Gegenstände dieser Liste.Bearbeiten: -1 Byte dank @xnor.
quelle
Commodore BASIC V2 (C64), 94 Byte
Die Anzahl der Bytes ist nicht ganz sicher. Sie basiert auf der Textdarstellung für die Eingabe des gültigen Programms. Auf der Festplatte ist es etwas kürzer (91 Byte), da BASIC V2 eine "tokenisierte" Darstellung von Programmen verwendet.
Online Demo
Leicht "ungolfed":
quelle
Selbstmodifizierender Brainfuck , 55 Bytes
Eingabe als Zeichencode übernehmen.
Unterstützt nur Eingaben bis zu 255.
Verwenden Sie das Nullzeichen, um Zeilen zu trennen.
Zufällig werden alle pfeilzeichnenden Zeichen als BF-Befehle verwendet. Leider werden (derzeit) keine Bytes gespeichert.
Probieren Sie es online!
Erläuterung
quelle
Python 2 , 54 Bytes
Vielen Dank an Jo King für die Fehlerbehebung.
Probieren Sie es online!
quelle
Pyth, 17 Bytes
Die Ausgabe ist eine Liste von Zeichenfolgen. Probieren Sie es hier online aus .
quelle
PowerShell ,
625650 ByteProbieren Sie es online!
Schleifen von
0
bis zu Eingabe$n
, wobei jede Iteration zwei Pfeilzeichenfolgen erzeugt. Diese werden dann mit indexiert0..--$n
, um die richtige Anzahl von Elementen herauszuziehen.6 Bytes gespart dank KGlasier.
quelle
param($n)(0..$n|%{($j='-'*$_++)+'>';"<$j"})[0..--$n]
. Jetzt müssen Sie also nicht$x
zweimal schreiben .++
in($j='-'*$_++)
wie Sie nicht verwenden$_
anderswo.Python 3, 53 Bytes
Meine erste Codegolf-Antwort.
-10 Bytes dank Jo King
quelle
Haskell ,
5144 Bytes-7 Bytes dank xnor (
iterate
über Listenverständnis)!Probieren Sie es online!
Erklärung / Ungolfed
Die Verwendung von
do
-notation erspart uns eineconcat
, und die Verwendung der Infix-Notation ermöglicht eine punktfreie Funktion mittake
:quelle
Japt
-m
,16151312 Bytes1 Byte dank Shaggy gespeichert
Testen Sie es online
Erläuterung:
quelle
Gelee , 15 Bytes
Probieren Sie es online!
quelle
MathGolf ,
1715 BytesDank Jo King und Kevin Cruijssen 2 Bytes gespart
Probieren Sie es online!
Erläuterung
Der 15-Byte-Ansatz unterscheidet sich von meiner ursprünglichen Lösung. Ich kann keine Anerkennung für die Implementierung geben.
quelle
if/else
in MathGolf? Ich weiß, wie die if-without-else- und else-without-if-Anweisungen funktionieren, aber wie man ein if {...} else {...} in MathGolf mit erstellt¿
. (Vielleicht sollte ich das im Chat posten, anstatt hier. Aber ich könnte vielleicht 1 Byte sparen, wenn ich das Wenn-Sonst-¿12
wird 1 drücken, wenn wahr, sonst 2,¿Å3*Å1+
wird eins hinzufügen, wenn wahr, sonst das nächste Element verdreifachen¿{"foo"}{"bar"}
oder tun¿1{2}
.Japt
-m
, 14 BytesProbieren Sie es online!
Aktualisiert mit einer völlig neuen Methode.
Erläuterung:
quelle
ç
wandelt den ersten Parameter automatisch in eine Zeichenfolge um, sodass Sie die Zeichenfolge ablegen können'
.u
Methode nicht, da der Index umbrochen wird. Das können also 14 Bytes sein.C (gcc) ,
8077767471 BytesProbieren Sie es online!
-3 Bytes mit der Idee von nur ASCII .
-1 mit
\0
statt\n
-5 Teile neu anordnen
Die Ausgabe enthält ein Trailing
\0
.quelle
!n--
im ersten CodeblockJavaScript (ES6), 58 Byte
Gibt eine durch Leerzeichen getrennte Zeichenfolge zurück.
Probieren Sie es online!
quelle
SNOBOL4 (CSNOBOL4) ,
123122118 BytesProbieren Sie es online!
quelle
V , 22 Bytes
Probieren Sie es online!
quelle
Kohle , 16 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Ich hatte drei 17-Byte-Lösungen, bevor ich schließlich über diese gestolpert bin. Erläuterung:
Eingabe
n
.Wiederholungszeiten
n
, 0-indiziert.Zeichnen Sie eine Linie mit
-
der halben Länge des Index (abgeschnitten).Zeichne die Pfeilspitze und gehe zur nächsten Zeile.
Reflektiere alles und drehe die Pfeilspitzen um.
Die obige Schleife hat
n
Reflexionen, aber wir brauchen eine gerade Anzahl von Reflexionen, führen Sie also weiteren
Reflexionen durch.quelle
Sauber ,
7673 BytesProbieren Sie es online!
Verwendet die nette Tatsache,
['-','-'..]
die gleichbedeutend ist['--'..]
, um ein bisschen zu sparen.quelle
JavaScript, 49 Bytes
Probieren Sie es online!
quelle
10000
, während meine ES6-Lösung noch funktioniert: D Wie auch immer, deine Lösung ist sehr cool)Powershell, 51 Bytes
quelle
6502 Maschinencode (C64), 49 Bytes
Immer noch ziemlich viel kürzer als BASIC ;) Dieser hat einen Zahlenbereich nur bis zu,
255
weil die natürliche Ganzzahlgröße der Maschine nur 8 Bit hat.Online-Demo
Verwendung:
SYS49152,[n]
(zBSYS49152,3
für das Beispiel aus der Challenge)Kommentierte Demontage :
quelle
Perl 6 , 39 Bytes
Probieren Sie es online!
Anonymer Codeblock, der eine Liste von Zeilen zurückgibt.
quelle
K (ngn / k) ,
3129 BytesProbieren Sie es online!
Zuerst generieren wir Listen mit 0 anstelle von
"<"
, 1 anstelle von"-"
und 2 anstelle von">"
:{
}
Funktion mit Argumentx
x{
...}\0
wende die inneren Funktionszeitenx
an, beginnend mit einem Anfangswert von0
und die Zwischenergebnisse erhalten bleiben|x
umkehren2-
Ersetzen Sie 0 durch 2 und umgekehrt, und behalten Sie die Einsen bei1,
1 voranstellen(1=*x)_
ist der erste vonx
gleich 1? Wenn ja, lösche ein Element, andernfalls lösche 0 Elemente (mache nichts)2,
stellen Sie der Initiale eine 2 voran">"
Pfeilx#
Wir haben ein bisschen zu viele Listen, nehmen Sie also nur die erstex
von ihnen"<->"
Verwenden Sie die Elemente der Listen (0/1/2) als Indizes in dieser Zeichenfolgequelle
05AB1E ,
2320 BytesProbieren Sie es online!
Zum ersten Mal mit 05AB1E oder einer anderen Golfsprache. Irgendwelche Ideen willkommen.
-3 von Kevin Cruijssen
quelle
"><"
kann sein„><
, ein Byte zu speichern. Es gibt builtins für 1, 2 und 3 char Strings, wobei'
,„
, und…
sind. Hier ist eine 18-Byte-Alternative, die ich mir ausgedacht habe, aber vielleicht könnte man ein bisschen mehr Golf spielen. Wenn Sie es noch nicht gesehen haben, haben wir Tipps zum Golfen auf der 05AB1E- Seite und können auch im Chat Fragen stellen .C # (.NET Core) , 90 Byte
Probieren Sie es online!
Verwendet einen Aktionsdelegaten , um die Eingabe abzurufen, und erfordert keine Rückgabe.
Ungolfed:
quelle
ES6,
96827970 BytesProbieren Sie es online! (Danke an @Oliver)
quelle
i=>
Häkchen vor Ihren Code!) oder aus einem Befehlszeilenargument oder STDIN oder so.Rot ,
109108 Bytes-1 Byte dank NK1406
Probieren Sie es online!
quelle