In dieser Herausforderung ist gefälschter Laufschrifttext ein Text, der Teil für Teil scrollend angezeigt wird.
Einige Beispiele:
testing 4
t
te
tes
test
esti
stin
ting
ing
ng
g
hello 2
h
he
el
ll
lo
o
foobarz 3
f
fo
foo
oob
oba
bar
arz
rz
z
Something a bit longer 10
S
So
Som
Some
Somet
Someth
Somethi
Somethin
Something
Something
omething a
mething a
ething a b
thing a bi
hing a bit
ing a bit
ng a bit l
g a bit lo
a bit lon
a bit long
bit longe
bit longer
it longer
t longer
longer
longer
onger
nger
ger
er
r
small 15
s
sm
sma
smal
small
small
small
small
small
small
small
small
small
small
small
mall
all
ll
l
aaa 3
a
aa
aaa
aa
a
brace yourself 6
b
br
bra
brac
brace
brace
race y
ace yo
ce you
e your
yours
yourse
oursel
urself
rself
self
elf
lf
f
Sie müssen ein Programm oder eine Funktion schreiben, die zwei Eingaben aufnimmt und die Ausgabe wie oben beschrieben druckt. Sie können nachfolgende Leerzeichen in Ihrer Ausgabe ausgeben oder nicht. Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes.
Wenn Ihr Programm eigenständig ist (dh, wenn es ausgeführt wird, werden die Zeilen gedruckt) (die Eingabe kann fest codiert, aber leicht geändert werden) und zwischen den einzelnen Ausgabezeilen eine Pause einlegt, erhalten Sie einen Bonus von -10.
Antworten:
CJam,
1211 Bytes1 Byte von Dennis gespeichert.
Ich verwende "Eingaben können fest codiert, aber einfach geändert werden": Dies setzt voraus, dass die Eingaben bereits im Stapel vorhanden sind, sodass Sie
"testing" 4
zum Beispiel den obigen voranstellen können .Teste es hier.
Erläuterung
Beachten Sie, dass die Transponierung der gewünschten Ausgabe viel einfacher ist:
Wir müssen also nur
n
Linien erstellen undi
Leerzeichen voranstellen füri
vonn-1
unten nach0
. Das macht der Code:19 - 10 = 9 & le;
Ich finde den Bonus "Schlaf ein bisschen zwischen jeder Zeile" etwas vage und zwielichtig, aber hier ist eine 19-Byte-Version, die einfach nach jeder Zeile anhält, indem sie alle Permutationen des Arrays berechnet
[0 1 .. 7]
. Im Online-Interpreter führt dies einfach dazu, dass das endgültige Ergebnis etwas später angezeigt wird. Wenn Sie jedoch den Java-Interpreter verwenden, wird jede Zeile nach "ein bisschen schlafen" gedruckt:quelle
z
. Die Eingabe Unter der Annahme druckbaren ASCII, können Sie ersetzenW%
mit$
.z
ganze Zeit für Ascii-Grid-basierte Herausforderungen.)C 69 Bytes
printf Magie!
Erweiterte Version mit einigen Erklärungen:
Und hier ist ein Beispiel:
quelle
Pyth, 13 Bytes
Probieren Sie es online aus: Pyth Compiler / Executor
Erläuterung
quelle
Python
6563Dies wurde tatsächlich verwendet, um die Beispiele zu schreiben. Basislösung.
quelle
join
Javascript ( ES7-Entwurf ), 61 Byte
Javascript ( ES6 ) Hardcoded Inputs, 47 Bytes
Angenommen, fest codierte Eingaben in Variablen
s
(Zeichenfolge) undl
(Länge) können auf 47 Byte reduziert werden, wobei für jede Zeile eine Warnung ausgegeben wird:quelle
K, 19 Bytes
Setzen Sie
x
Leerzeichen (x#" "
) an den Anfang der Zeichenfolgey
. Verwenden Sie dann das Formular "Festpunktscan" des Operators\
, um den Satz gedrehter Zeichenfolgen zu erstellen. Ein fester Punkt in K stoppt die Iteration, wenn das Ergebnis der Anwendung der Funktion ein wiederholtes Ergebnis zurückgibt oder wenn die ursprüngliche Eingabe erneut aufgerufen wird. Da![1]
eine Saite schrittweise gedreht wird,![1]\
ist dies eine schöne Redewendung für zyklische Permutationen. Dann schneiden wir die Ergebnisse einfach mitx#'
.Ein Probelauf:
quelle
J (22)
Dies endete länger als ich erwartet hatte, aber ich denke es ist nicht so schlimm.
Witzige Tatsache: keine der
[
und]
sind tatsächlich aufeinander abgestimmt oder haben irgendetwas miteinander zu tun.quelle
[{."1]]\.@,~' '#~[
(18 Bytes).Julia, 75 Bytes
Dadurch wird eine unbenannte Funktion erstellt, die eine Zeichenfolge und eine Ganzzahl als Eingabe akzeptiert und die Ausgabe druckt. Um es zu nennen, geben Sie ihm einen Namen, z
f=(s,n)->(...)
.Ungolfed + Erklärung:
Beispiele:
Beachten Sie, dass diese Lösung 66 Byte umfasst, wenn das Programm bereits vorhanden ist
s
und diesn
angenommen wird.quelle
QBasic, 56 - 10 = 46
Dies wird QBasic golfed - die autoformatter erweitern
?
inPRINT
und einige Räume hinzufügen. Getestet mit QB64 , obwohl es hier nichts geben sollte, das mit DOS QBasic nicht funktioniert.QBasic ist in der Regel nicht mit String - Operationen gut, aber es sehr bequem ist eine Funktion , dass die Rendite eine bestimmte Anzahl von Räumen!
Unter einige Freiheiten mit diesem Code „Eingabe kann hart codiert sein“ erwartet die Variable
s
zu seinDIM
‚dAS STRING
, um das zu vermeiden$
Typsuffix, sowie die Zeichenfolge zugeordnet wirds
und die Anzahl ann
.Beispiel Präambel:
Ausgabe:
Die oberste leere Zeile kann durch Starten der
FOR
Schleife bei 2 anstelle von 1 entfernt werden.Bonus: Hinzufügen
CLS
Recht vorNEXT
für ein dürftigen vier Bytes verwandelt sich diese in ... ein echtes Festzelt !Ich
PRINT CHR$(3)
QBasic. : ^ Dquelle
Ruby,
68, 55 BytesNach einem Update von @blutorange:
Ausgabe:
ruby marquee.rb "Something a bit longer" 10
Erste Einreichung so um Kritik bitten.
quelle
a=" "*(z=$*[1].to_i)+$*[0];a.size.times{|b|puts a[b,z]}
Haskell,
615954 BytesAnwendungsbeispiel:
Bearbeiten: Eine Leerzeile am Anfang / Ende ist erlaubt
quelle
Bash, 109 - 10 = 99 Bytes
Ich sehe, dass ich in der Zeit, die ich zum Schreiben meiner Lösung benötigte, geschlagen worden bin. Trotzdem habe ich es zu lange geschrieben, um es nicht zu posten ...
Außerdem verfügt es über einige einzigartige Funktionen, wie die Zeit zwischen dem Drucken von Zeilen, die vom Benutzer angepasst werden kann, je nachdem, wie viel sich im aktuellen Verzeichnis befindet! (Auch etwas inkonsistent, abhängig davon, wie sich Ihre Festplatte anfühlt.)
Beispiel:
Ungolfed und kommentiert:
Ich habe das noch nie wirklich versucht. Vorschläge und Kommentare sind willkommen!
quelle
Pure Bash, 61 Bytes
Ausgabe:
quelle
Perl, 50
57
Zeichen+3
für-i
,-n
und-l
.-10
Zeichen für den Schlaf.-i
wird für die numerische Eingabe verwendet, die in gespeichert ist$^I
. Grundsätzlich fügen wiri
Leerzeichen am Anfang und Ende der Eingabe ein, suchen dann nach alleni
Zeichen und durchlaufen sie mitwhile
.say
Bequeme Rückgabe, in1
die wir etwas eingeben könnensleep
.quelle
s/^|$/$"x$^I/eg;sleep say$1 while s/.(.{$^I})/$1/
. Sie können auch die verlieren-l
Flagge, aber ich glaube , Sie brauchen 5 zu rechnen-i -n
(da-i
keine Standard - Flag) , wenn Sie über laufen:echo -n "testing" | perl -i4 -nE'...'
. Sollte aber immer noch 44 sein!POSIX-Shell, 94
Ich weiß, es sieht näher an Perl aus, aber das ist wirklich Shell!
Die erste Zeile fügt die erforderlichen führenden Leerzeichen nur beim ersten Durchlauf der Schleife hinzu. Es setzt $ 3, um anzuzeigen, dass dies geschehen ist.
Die zweite Zeile (NB embedded newline) wird so lange wiederholt, bis die Eingabe erschöpft ist. Dabei werden die ersten n Zeichen der Zeichenfolge gedruckt und das erste Zeichen aus $ 1 entfernt.
Getestet mit Debian
/bin/dash
- Beispielausgaben folgen:./Zelt "testen" 4
./Zelt "Etwas länger" 10
./Zelt "klein" 15
quelle
Python 2, 51 Bytes / 37 Bytes
Ohne fest codierte Eingabe (51 Bytes):
Rufen Sie gerne an
f("testing", 4)
.Mit fest codierter Eingabe (37 Bytes):
Beide Versionen geben eine erste Zeile mit Leerzeichen aus.
quelle
Python 2 (54 Byte - 10 = 44)
64626046(Ich nahm an, dass die Zeile für die hartcodierte Eingabe nicht zur Byteanzahl beiträgt.)
Ich habe noch kein Programm gesehen, das tatsächlich zwischen Druckzeilen schläft, also habe ich ein Programm erstellt, das dies tut, da es auf diese Weise eher wie ein Festzelt aussieht. Dieses Programm ist 2 weitere Bytes in Python 3.
EDIT: Das Programm führt nun eine Berechnung durch, anstatt zu schlafen. Ich habe
i
in der Berechnung verwendet, damit das Programm es nicht als Konstante speichert, sondern jedes Mal berechnen muss.Probieren Sie hier Python 3 aus (die Python 2-Repl ist fehlerhaft)
quelle
time.sleep
einige lange Berechnungen verwenden? Es ist auch etwas kürzer, einewhile
Schleife zu verwenden:i=0\nwhile s[i-n:]:print(' '*n+s)[i:n+i];i+=1
q=
. Vielen Dank.i**(7**7)
Pyth, 12 Bytes
Demonstration.
Pyth, 17 - 10 = 7 Bytes
Diese Version verwendet eine Verzögerung zwischen Zeilendrucken. Dies ist auf dem Kommandozeilen-Compiler zu sehen, den Sie hier erhalten .
Führen Sie Folgendes aus:
Dies hat eine Verzögerung von ca. 0,3 Sekunden vor jedem Druck. Wenn Sie eine längere Verzögerung bevorzugen, können Sie Folgendes verwenden:
Dies hat eine Verzögerung von ca. 4 Sekunden.
quelle
Java,
133,119,115Lange Version:
Das Auffüllen wird auf die Zeichenfolge angewendet, und dann werden Teilzeichenfolgen der aufgefüllten Zeichenfolge auf die Konsole gedruckt.
-4 Bytes dank @KevinCruijssen.
quelle
for(;i<= s.length();System.out.println(s.substring(i-n,i++)));
( -3 Bytes )Matlab, 95
Wie immer handelt es sich um eine Manipulation von Matrizen. Der Kern hier ist der Befehl, mit
spdiags
dem Sie ganz einfach Diagonalmatrizen erstellen können.Mit 71 Bytes Hardcoding (erwarteter String gespeichert in
t
und die Nummer ink
)quelle
APL, 50 - 10 = 40 Zeichen
Ich bin sicher, es könnte kürzer sein. 50 ist die Länge des Programms ohne die beiden Konstanten.
Erläuterung:
Entwickelt für ngn APL am Terminal.
quelle
Powershell -
8583 BytesEs ist spät, es wird nicht gewinnen :-) Aber ich dachte, ich würde der Vollständigkeit halber eine Powershell einwerfen:
function m($s,$n){1..$($n+$s.length)|%{-join(" "*$n+$s+" "*$n)[$_-1..$($n+$_-1)]}}
quelle
Cobra - 60
quelle
Groovy - 82
quelle
Lua, 79 Bytes
quelle
C #, 112 Bytes
Volles Programm mit ungolfed Methode und Testfällen:
quelle
Jelly , 15 Bytes - 10 = 5 ( nicht konkurrierend ?)
Probieren Sie es online!
Schlaf für eine Sekunde zwischen jeder Zeile. Gibt eine nachgestellte Zeile aus, falls dies akzeptabel ist.
yay Gelee schlägt Holzkohle
quelle
PHP4.1, 85-10 = 75 Bytes
Ja, dies ist eine sehr alte Version, aber sie hat eine Funktionalität, die ich brauche.
Sie können es immer noch in neueren Versionen von PHP ausführen, aber Sie müssen die Variablen selbst festlegen, bevor Sie den folgenden Code ausführen.
Das hilft mir, die Größe meines Codes erheblich zu reduzieren!
Es ist wirklich grundlegend:
Ich lief für den Bonus aus diesem Grund und zitierte OP:
Wie Sie offensichtlich sehen können, hat es einen Schlaf.
Dies setzt voraus, dass Sie
register_globals
standardmäßig aktiviert haben. Dies waren die Standardeinstellungen für diese Version.Mit können Sie ganz einfach in Ihrem Browser testen
minimaleinige Veränderungen:Der obige Code ist mehrsprachig und Sie können ihn in Ihrem Browser oder in einem PHP-Interpreter ausführen. Sollte ich dafür keinen Preis bekommen? Ein Keks vielleicht?
Liste der Änderungen:
sleep(1)
in diesem Testconcat
Das Ziel ist es, PHP und JS Unterschiede bei der Verkettung von Strings zu überwinden.
-
verwendet, um das Leerzeichen zu füllenecho
,printf
Anwendungen sind statt (PHP Begrenzung)<br>
wird stattdessen verwendetquelle
J ,
1514 BytesProbieren Sie es online!
quelle
APL (Dyalog) , 17 Bytes
Probieren Sie es online!
(Das Programm geht
⎕IO←0
davon aus, dass es auf vielen Rechnern Standard ist.)Erläuterung
quelle