Nehmen Sie eine einfache Tastatur mit diesem Layout an:
1 2 3 4 5 6 7 8 9 0
A B C D E F G H I J
K L M N O P Q R S T
U V W X Y Z . , ? !
Das Tastaturmuster von Peter kann generiert werden, indem oben links auf der Tastatur begonnen wird. Die ersten drei Zeichen und eine neue Zeile werden angezeigt. Es verschiebt sich um ein Zeichen und zeigt die zweite, dritte und vierte Taste an. Sobald es das Ende einer Reihe erreicht hat, fährt es am Ende der nächsten Reihe fort und geht rückwärts, bis es den Anfang dieser Reihe erreicht und dann in der nächsten Reihe vorwärts geht, und so weiter, bis es den Anfang der letzten Reihe erreicht .
Dies ist Peters Tastaturmuster:
123
234
345
456
567
678
789
890
90J
0JI
JIH
IHG
HGF
GFE
FED
EDC
DCB
CBA
BAK
AKL
KLM
LMN
MNO
NOP
OPQ
PQR
QRS
RST
ST!
T!?
!?,
?,.
,.Z
.ZY
ZYX
YXW
XWV
WVU
Schreiben Sie ein Programm, das keine Eingaben akzeptiert und Peters Tastaturmuster anzeigt. Das Programm muss kleiner als 152 Byte sein , dh die Größe der ausgegebenen Zeichenfolge.
Dies ist Code Golf, also gewinnt die kürzeste Lösung.
quelle
[1..9 0 J..A K..T ! ? , . Z..U]
.echo {1..9} "0" {J..A} {K..T} '!?,.' {Z..U}|sed 's/ //g'
in bash verwenden, benötigen jedoch bereits 13 Zeichen, um einen sed-Befehl anzuhängen und Leerzeichen zu entfernen. Dies ergibt 57 Zeichen, und es wurde bisher kein Triple gebaut. Mit dem Hold-Befehl von sed sollte es möglich sein, aber in 6 Zeichen die Perl-Lösung zu schlagen?Antworten:
Perl, 63 Zeichen
Diese Lösung verwendet die
say
Funktion (verfügbar seit Perl 5.10.0 mit dem-E
Schalter oder mituse 5.010
). Ohne sie kann ich am besten 67 Zeichen (und einen zusätzlichen Zeilenumbruch am Ende der Ausgabe) tun:Frühere 65-Zeichen-Lösung:
Durch Ersetzen
say$1
durch kannprint$1.$/
der Code auf älteren Perls ausgeführt werden, was 5 zusätzliche Zeichen kostet.quelle
APL, 43 Zeichen
Dies funktioniert mit Dyalog APL . Ich habe es geschafft, ein paar Zeichen zu speichern, indem ich die Ausgabezeichenfolge generiert habe (alles danach
⊃
). Ich werde eine Erklärung schreiben, wenn ich etwas Zeit habe!So sieht die Ausgabe aus:
Erklärung von rechts nach links:
6↑⌽⎕A
:⎕A
gibt uns eine Zeichenfolge des Großbuchstabens von A bis Z. Wir kehren es dann um (⌽
) und nehmen (↑
) die ersten 6 Zeichen davon und geben uns'ZYXWVU'
. (Rückblickend speichert dieser Ansatz keine Zeichen, aber ich lasse ihn, weil er besser passt.)'!?,.',
: Wir verketten (,
) den String'!?,.'
mit dem vorherigen Ergebnis.(10↑10⌽⎕A),
: Wir nehmen die ersten 10 Zeichen (10↑
) des Alphabets, das zuerst zehnmal gedreht wird (10⌽
), und verketten dies mit dem vorherigen Ergebnis. Als Beispiel für die Drehung5⌽'abcdef'
(die Saite wurde'abcdef'
fünfmal gedreht) erhalten wir'cdefab'
.(⌽10↑⎕A),
: Nehmen Sie die ersten 10 Zeichen des Alphabets, kehren Sie sie um und verketten Sie diese mit der vorherigen Zeichenfolge.(1⌽⎕D),
:⎕D
gibt uns die Ziffern als Zeichenfolge von 0 bis einschließlich 9. Wir drehen dann ('⌽') diese Zeichenfolge um 1 und ergeben'1234567890'
. Nach wie vor verketten wir dies mit dem vorherigen Ergebnis.3,/
: Wir nehmen die Zeichenfolge in Gruppen von drei Zeichen und verketten sie.⍪
unseren String-Vektor (eigentlich einen Vektor von Zeichenvektoren) entlang der ersten Dimension. Dies hat den Effekt, dass die Form von38
auf38 1
(eine 38x1-Matrix) geändert wird.quelle
J,
666245 ZeichenEs stellte sich heraus, dass ich um die Hälfte zu schlau war.
ist alles was ich die ganze Zeit brauchte.
Vorher:
und:
quelle
R (75 Zeichen)
Was macht das?
strsplit
teilt eine Zeichenfolge in Teilzeichenfolgen auf, in diesem Fall in einzelne Zeichenembed
ist eine wirklich nützliche Funktion, die einen Vektor in ein Array überlappender Elemente verwandeltDies erzeugt und druckt eine Reihe von Zeichen:
quelle
embed
ist in der Tat eine sehr nützliche Funktion!Scala 70 Zeichen:
quelle
Mathematica, 73
Ich bin unabhängig voneinander zu der gleichen Methode gekommen wie alle anderen:
quelle
Groovy, 73
All das kluge Zeug, das ich versuchte, erwies sich als länger als dumm.
quelle
C, 98
104ZeichenDa dies bisher noch niemand getan hat, dachte ich, ich würde versuchen, den String tatsächlich im laufenden Betrieb zu generieren, indem ich eine Art Lauflängencodierung für aufsteigende und absteigende Läufe verwende.
EDIT: Nach einer Reihe von Iterationen ist hier endlich eine "clevere" Lösung, die mit 98 Zeichen mit der kürzesten "dummen" Lösung in C verknüpft ist:
Der Code erfordert eine 8-Bit-Latin-1-Codierung (ISO-8859-1 oder Windows-1252), die auf allen gängigen Plattformen problemlos funktionieren sollte, die Quelle jedoch mit einer weniger beliebten 8-Bit-Codepage oder UTF- 8 wird nicht funktionieren.
Die Datenzeichenfolge wurde mit dem folgenden Emacs-Lisp erstellt:
Das "Twiddle" -Bit wird verwendet, um nicht druckbare ASCII-Steuerzeichen in der codierten Datenzeichenfolge zu vermeiden und dies
i==0
nur am Ende der Ausgabe sicherzustellen .C, 98 Zeichen
Selbst in C können Sie ein kurzes Programm erhalten, indem Sie einfach aufeinanderfolgende Drillinge aus der Originalzeichenfolge drucken:
quelle
Ruby
696562Basierend auf einem Groovy-Beispiel
quelle
Haskell, 80
quelle
Javascript, 103
quelle
for(a='1234567890JIHGFEDCBAKLMNOPQRST!?,.ZYXWVU';a[3];a=a.slice(1))console.log(a.slice(0,3))
Haskell, 94
quelle
Perl, 73 Zeichen:
Perl, 66 Zeichen:
wenn angerufen von:
quelle
D 124 Zeichen
quelle
JavaScript, 83 Zeichen
Beschlossen zu sehen, ob ich die Lösung von stephencarmody schlagen könnte . Das habe ich mir ausgedacht.
quelle
Python, 73
quelle
Smalltalk
10299Ich kenne Smalltalk nicht sehr gut, deshalb ist es ein bisschen seltsam für mich. Es wird kompiliert mit
gst
anderen nicht getestet.quelle
Q (
6663 Zeichen)quelle
Prolog, 131
Dies ist wahrscheinlich der Grund, warum Sie niemals Prolog-Einträge sehen. Der Zeilenumbruch ist erforderlich (tatsächlich reicht jedes Leerzeichen aus, es muss jedoch ein Leerzeichen vorhanden sein).
quelle
Q, 63
quelle
/// , 151 Bytes
Probieren Sie es online aus!
Kannst du nicht mehr Golf spielen? Dies sind gewissermaßen <152 Bytes.
quelle
i.e.
überschreibe aber nicht die Bedeutung von etwas, es hilft Ihnen nur, es in meinem Sinne besser zu verstehen. Außerdem habe ich keinen nachgestellten Zeilenumbruch eingefügt. Vielleicht sind dies deshalb 151 Bytes. Und ja, ich habe diesen Abschnitt gelesen.Gelee ,
4140 BytesProbieren Sie es online aus!
Könnte (noch) golfbar sein ...
quelle