... Würdest du nicht? Die Aufgabe ist einfach, geben Sie den folgenden Text aus:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
||TAB |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
_________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||CAPS |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
||SHIFT |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|
Dies ist die Tastatur der Zukunft, denn in Zukunft sind Leerzeichen und Leertasten irrelevant.
Um es Ihnen ein bisschen leichter zu machen:
0123456789ABC...XYZ-=[]\;',./
- Diese Zeichen stehen auf Tasten der Länge 6 (einschließlich Polsterung).TAB / BS / ENTER
- Diese Schlüssel haben eine Länge von 10 (einschließlich Polsterung).CAPS
- Dieser Schlüssel hat die Länge 11 (einschließlich Polsterung).SHIFT
- Dieser Schlüssel hat die Länge 13 (einschließlich Polsterung auf beiden Seiten).
Jeder einzelne Schlüssel sieht ungefähr so aus:
____
||* ||
||__||
|/__\|
Sie sollten jedoch beachten, dass zwei aufeinander folgende Schlüssel nicht sind:
____ ____
||* ||||* ||
||__||||__||
|/__\||/__\|
Aber sie sind "verbunden":
____ ____
||* |||* ||
||__|||__||
|/__\|/__\|
Diese Herausforderung sollte nicht so schlimm sein, viel Glück für Sie; Verpassen Sie nicht, die Wiederholung zu missbrauchen! Aber unterschätze auch nicht die "speziellen" Tasten;).
Gewinnen?
Kürzester Code gewinnt, weil Sie wissen, dass es sich um Code-Golf handelt .
code-golf
ascii-art
kolmogorov-complexity
Magische Kraken-Urne
quelle
quelle
Antworten:
V ,
189, 179, 175, 164, 161, 157, 155, 149, 145, 141, 135 BytesProbieren Sie es online!
Diese Antwort ist jetzt tweetbar!
Schau es dir an! Dies ist eine leicht modifizierte Version, die während der Ausführung aktualisiert wird, damit Sie sortieren können, wie es funktioniert. Dies ist eine veraltete Version, da ich noch nicht dazu gekommen bin, sie neu aufzunehmen, aber der allgemeine Ansatz ist identisch.
Dies ist wahrscheinlich die längste V-Antwort, die jemals geschrieben wurde. Es hat sicherlich nicht geholfen, dass Vs Interpreter extrem langsam ist. Ich habe ungefähr eine Stunde gebraucht, um die erste Revision zu schreiben, aber ich bin immer wieder darauf zurückgekommen, um jedes Mal ein paar Bytes weniger zu schreiben. Da die vollständige Tastatur 1215 Byte umfasst, ist diese Antwort derzeit um 91% kürzer als die Ausgabe, sodass ich mit den Ergebnissen ziemlich zufrieden bin.
Da dies einige nicht druckbare Zeichen und eine Menge grober Nicht-ASCII-Zeichen enthält, ist hier ein Hexdump:
Wie zum Teufel funktioniert das?
Okay, diese Erklärung wird ein Trottel sein. Bereit? Zuerst müssen wir die Buchstaben eingeben, damit wir die Schlüssel um sie herum aufbauen können. Das ist
Welche Beilagen:
Das geht ganz einfach, aber es gibt ein paar Tricks, mit denen wir Charaktere speichern.
¬19
Geben Sie beispielsweise "123456789" ein, geben Sie³
drei Leerzeichen ein, und wir duplizieren die Schicht, damit wir sie nicht mehrmals eingeben müssen.Beachten Sie, wie die Buchstaben hier klein geschrieben sind. Dies ist so, dass wir leicht zwischen den Großbuchstaben wie "ENTER" und den einzelnen Buchstaben unterscheiden können. Wenn Sie sie auf diese Weise schreiben, können Sie leichter erkennen, vor welche Zeichen ein Balken gesetzt werden soll, und es wird nur ein Byte hinzugefügt, um sie später in Kleinbuchstaben umzuwandeln. Also führen wir einen Ersatzbefehl aus, um diese in Großbuchstaben umzuwandeln, und fügen nach jedem ein Leerzeichen hinzu:
Jetzt nehmen wir jede Tastenfolge (jede Folge von Nicht-Leerzeichen) und setzen drei Takte vor und nach ihnen:
Zu diesem Zeitpunkt sieht der Puffer folgendermaßen aus:
Drei Balken in der ersten und letzten Spalte zu haben, ist sehr praktisch und spart auf lange Sicht viele Bytes.
Und hier laufen wir eine riesige Schleife. Dies wird so etwas konvertieren:
in so etwas:
Alles zwischen zwei Instanzen von
ò
wird ausgeführt, bis ein Fehler auftritt, der auftritt, wenn wir versuchen, in eine Zeile aufzusteigen, die noch vorhanden ist. Da wir gerade einen global ersetzenden Befehl ausgeführt haben, befindet sich unser Cursor in der letzten Zeile und wir werden diese nach oben transformieren.Dies ist das
Linie.
Dies ist das
Linie.
Dies ist das:
Linie.
Jetzt haben wir die vollständige Tastatur, aber jede Zeile enthält entweder einen zusätzlichen Strich, einen zusätzlichen Schrägstrich (vorwärts oder rückwärts) oder einen zusätzlichen Unterstrich. Super einfache Lösung
Nach all dem Wahnsinn wird der Puffer implizit gedruckt.
quelle
Lua 5.3,
416394 Bytes.Ungolfed und mit Kommentaren.
Ausgabe
Ich werde von anderen Sprachen zerstört, aber ich dachte, ich würde es versuchen. Sehr viel Komplexität und zumindest kürzer als die Tastatur!
quelle
Bubblegum , 191 Bytes
Probieren Sie es online!
quelle
Haskell, 263 Zeichen (353 Byte UTF-8)
Da es in Anbetracht dieser Unicode-Zeichen viele Diskussionen über die Punktzahl gegeben hat ... ist hier dasselbe Programm, das auf alle ASCII-Zeichen reduziert ist:
Haskell, 263 Zeichen (263 Byte UTF-8)
quelle
ENTER
länger sind als Zeichen wie↩︎
.ENTER
und↩︎
, das Leerzeichen macht es gleich lang.PHP, 303 Bytes
Faul aber effektiv. :)
quelle
<?=gzinflate(base64_decode('rdO5DoJAEIDhnqegs/G+jbHA+0QEvDHrg8zDy79EMbTDFF+3m8yfXdek42phHJG3KyItaEMHutCDPgxgCCNoQg0mMI3cdETSu4wRLQx3NYxJtDCJOL9t1cnSFWNvareVE1xhASHEcIczbOAIATzhBck3V7atupuTb6vulucq43XNvCDKenkQwRyWsII1bGEHexhDxcb140X4n6us16XuVXxdulZZrmi9WcbZd5IH3GAGF/vXwIcDVKEODVs3P53nUrUq5FK1sqc/'));
. Compressor: sandbox.onlinephpfunctions.com/code/… Decompressor: sandbox.onlinephpfunctions.com/code/…Python 3.5+, 239 Bytes
quelle
"".join(...) + f[0]
in der inneren Schleife verwenden. Durch Vertauschen derformat
Argumentreihenfolge und der entsprechenden Platzhalter in der Zeichenfolge werden außerdem zwei weitere Bytes gespart.['{1}__ ','|{} ||','|{1}||','/{1}\\|']
ist kürzer als die Verwendung vonsplit
.Batch,
465452 BytesDie
:c
Unterroutine behandelt eine Reihe von Tasten. Schlüssel enthält zusätzliche Leerzeichen müssen zitiert werden, wie auch die=
,;
,,
Tasten, möglicherweise aufgrund eines Fehlers in demshift
Befehl. Der erste und der letzte Parameter sind Zeichenfolgen mit_
der gleichen Länge wie der erste und der letzte Schlüssel, um die Verkettung zu erleichtern.t
Das Ergebnis ist dann das_
gemeinsame s für die erste, dritte und vierte Zeile, wobei#
s den Join kennzeichnet. Diese werden vor dem Hinzufügen der führenden und nachfolgenden Zeichen entsprechend ersetzt, währends
es sich um die zweite Zeile handelt, wobei|
s bei der!
Reduzierung in s geändert wird die Anzahl der"
s, die ich brauche. Bearbeiten: 1 Byte durch Drucken aller vier Zeilen in einer einzigen Anweisung und 12 Byte durch Optimieren der Art und Weise, wie ich dies
Variable zugewiesen habe, gespeichert.quelle
Ruby, 226 Bytes
Verbesserungen wie folgt:
1.Keine leeren Zeichenkettenelemente am Anfang und Ende des Arrays. Stattdessen wird das Array verdreifacht und es werden 3 Tastaturen nebeneinander erstellt. Nach der Umwandlung in einen String fehlen 3 Keyboards mit Außenkanten. Dies wird abgeschnitten, um nur die mittlere mit Kanten anzuzeigen.
2.Changed Version von Ruby. Ich habe Ideone anstelle von 1.9.3 auf meinem Computer installiert. Das heißt, es
.chars.to_a
kann auf gerade gekürzt werden.chars
.Ruby, 239 Bytes
Es gibt noch ein paar Bytes, die man aus dieser Situation herausholen kann. Werde morgen schauen.
ungolfed
quelle
C #, 357 Bytes (in einer Zeile und mit den meisten Vorschlägen)
Oder 353 mit String-Interpolation und allen anderen Vorschlägen
Ungolfed (ohne Stringinterpolation):
quelle
foreach(var r in q){for(int i=0;i<4;i++){foreach...
==
durch<
s+=i<1?$" {u}__":i<2?$"||{k.PadRight(l)}|":i<3?$"||{u}|":$"|/{u}\\";
PowerShell v2 +, 465 Byte
Es ist mir halbwegs peinlich, diese Antwort zu veröffentlichen, da die PHP- und Python-Antworten zwar kurz sind, die C # -Antwort jedoch nicht berücksichtigt wird, aber ich kann diese Methode nicht kürzer machen. Andere Ansätze können zu besseren Ergebnissen führen.
Es handelt sich im Grunde genommen nur um eine riesige mehrzeilige Zeichenfolge, bei der Variablen (
$a
und dergleichen) verschiedene Teilzeichenfolgen ersetzen, und-replace
am Ende ein paar s, um sie fertigzustellen. Bei$(...)
Bedarf werden Skriptblöcke eingefügt, um neue Variablen einzufügen.Probieren Sie es online!
quelle
Python,
493458 Bytes.Funktional gleichwertig, aber etwas besser lesbar:
Leider ist es schon länger als die Antwort in Lua.
quelle
p
Funktion in eine durch Semikolon getrennte Zeile setzen. Ich dachte auch, dass du nicht die erste Zeilek=[['|']*75]*16
machen kannst, weißt du warum?'_'
und' '
für eine Variable definieren, um einige Bytes zu speichern.range(16)
zu[0]*16
.for l in k:print ' '.join(l)
zufor l in k:print''.join(l)
.PHP,
316312 BytesIch bin mir ziemlich sicher, dass dieser Ansatz nicht weiter verfolgt werden kann. Aber wenn jemand 10 weitere Bytes findet ...: D
Run with
-r
.Nervenzusammenbruch
quelle
Bash (unter OSX),
128 + 221 + 1 =234230 BytesJa, ich weiß, Kompression. Aber es funktioniert, nein?
Benötigt eine Datei mit dem Namen "f" im aktuellen Verzeichnis mit folgendem Inhalt (aus Gründen der PPCG-Freundlichkeit in base64 - Sie können diese zuerst in die Datei "f" entschlüsseln.):
quelle
gunzip<f
.zcat f
und 2 Bytes sparen , indem Sie die beiden nachfolgenden Null-Bytes entfernen (gzip beschwert sich, erzeugt aber die gewünschte Ausgabe).zcat<f
. Unter Linux führt zcat ohne die nachgestellten Nullen dazu, dass sich gzip beschwert ("gzip: stdin: unerwartetes Dateiende"), jedoch erst nach dem Drucken der gewünschten Ausgabe.JavaScript (ES6), 286
Eine anonyme Funktion ohne Parameter
Weniger golfen
quelle
Schnell, 777 Bytes
Swift ist im Allgemeinen keine gute Sprache für das Golfen, daher
ist es hier eine gute Herausforderung,weniger als das Doppelte der derzeit kleinsten Antwort(die schnell war) zuhaben!Ungolfed:
quelle
SOGL V0.12 ,
131128127 Bytes (im Wettbewerb? )SOGL hat die
2*2/
und2/2*
Macken, aber diese fühlen sich zu sehr wie ein Eingebauter für diese Herausforderung.Probieren Sie es hier aus!
quelle
Python 2,
394388380 BytesErstellt einfach eine große Zeichenfolge, die die gesamte Tastatur darstellt, ersetzt * durch% s für die Sondertasten und aktualisiert die Sondertasten mithilfe der Zeichenfolgenformatierung.
Bearbeiten
Am Ende der Ausgabe befindet sich jetzt eine nachgestellte Zeile, aber ich sehe nirgendwo etwas, das nicht zulässig ist.
Probieren Sie es online!
quelle
C #, 376 Bytes (wenn in einer Zeile)
Dies basiert vollständig auf Klingers C # -Antwort. Ich habe nicht genug Repräsentanten, um seine Antwort zu kommentieren, sonst würde ich.
Ich konnte Klingers Code um 5 Byte verkleinern, indem ich die anfängliche foreach-Schleife modifizierte und überflüssige Klammern entfernte.
quelle
m4, 456
Ungolfed:
(Dies ist eigentlich das erste Mal, dass ich Code-Golf spiele und m4 ausprobiere.)
quelle
gestapelt , 228 Bytes
Probieren Sie es hier aus!
Oder etwas besser lesbar:
Dies funktioniert, indem eine Funktion definiert wird
p
, die eine Taste erstellt, und dannhcat
mehrere Tasten.quelle
Haskell, 255
Im Nachhinein ähnelt das Konzept dieser Haskell-Antwort , produziert aber die ASCII-Tastatur und mit etwas anderem Golf.
Formatiert und umbenannt:
quelle
tcl, 368
Wie von http://textmechanic.com/text-tools/basic-text-tools/count-characters-words-lines/ mit der Angabe "Zeilenumbrüche als Leerzeichen zählen" gezählt. auf on gesetzt, belegt es
505496452451439403401396391388385384382379378377369368Demo: http://rextester.com/live/NTVAV88033
Der Ungolf:
Live-Zusammenarbeit unter http://rextester.com/live/UDO43692
Es steht jedem frei, meine Version auf Websites für Live-Zusammenarbeit zu verbessern. Bitte: Meine ursprüngliche Antwort hier nicht bearbeiten. Sagen Sie einfach, Sie haben in den Kommentaren bearbeitet und die Leute werden die Links besuchen.
UPDATE 1: Ersetzt
for
durchforeach
, da letzterer kürzeren Code erzeugtUPDATE 2: Ersetzt
foreach
durchlmap
, da letzterer kürzeren Code erzeugtUPDATE 3: Rasierte ein Zeichen, weil ich durch ersetzt
" "
wurde\
UPDATE 4: In Bezug auf den ersten Kommentar habe ich alle Unicode-Platzhalterzeichen der 1. Zeile (2 Byte) in ASCII-Zeichen (1 Byte) geändert
UPDATE 5: Mehrere
puts
Zeilen werden zu einer einzigen ZeileUPDATE 6: Verwenden Sie direkt
split
Befehle, um Werte beimlmap
Aufruf zurückzugeben, anstatt Zwischenlistenvariablen zu verwendenUPDATE 7: Anführungszeichen
ENTER
wurden nicht benötigtUPDATE 8:
string map
ist lang genug und wird so oft wiederholt, dass es sich lohnt, es in ein einzuschließenproc
UPDATE 9:
split $x \n
ist lang genug und wird so oft wiederholt, dass es sich lohnt, es in ein einzuschließenproc
UPDATE 10: On "replacement" kann
&
anstelle von string verwendet werden\1
, da in diesem Fall beide übereinstimmen; Eine weitere Folge davon ist, dass()
die "passende" Zeichenfolge entfernt werden kann.UPDATE 11: Verwenden Sie
@
anstelle von\n
als Zeilentrennzeichen, umsplit
Anweisungen weiterzuverwenden. Obwohl sich die "Übereinstimmungszeichenfolge" von\S
zu verlängert ,[^@]
zahlt sich dies aufgrund der Anzahl der Wiederholungen ausUPDATE 12: Ersetzte den ersten
regsub
"Match" String{[^@|]}
durch\[^@|]
, um ein Zeichen zu entfernen. Konnte leider nicht gleich zur Sekunde machenregsub
, da die Anweisung in einem Paar von[]
:(UPDATE 13: Rasiert zwei Enter-Zeichen, indem der
lmap
Körper mit einer eigenen Überschrift konzentriert wird.UPDATE 14: Verwendet einen Aufruf der
split
basierten ProzedurN
anstelle eines direkten Aufrufs derstring map
basierten Prozedur,N
der eine Kürzung um 3 Zeichen ermöglichtUPDATE 15: Es gab ein nicht benötigtes
Leerzeichen. Entfernte es, um ein Zeichen weg zu rasieren.
UPDATE 16:
set h
Kann eingebettet werden, um$h
einen Charakter loszuwerden und zu rasieren.UPDATE 17:
set h
Aussage kann wirklich abgeschabt werden.UPDATE 18:
puts
Argument geändert vom...\n...\n...\n...
Format zumFormat.
Vielen Dank an Leute, die mir geholfen haben, es zu verkürzen, besonders an Evilotto und Aspekt des tcl-IRC-Kanals!
quelle
tcl, 369
Ursprünglich basiert es auf der Sergiol-Version von tcl.
(Beachten Sie, dass viele linke Leerzeichen Teil der "Natur" von tcl sind.)
quelle
foreach
Vorkommen direkt durch ersetzenlmap
!interp alias
Ansatz zu verwenden, um meine Version zu verkürzen, aber das kürzeste, das ich bekommen konnte, wenn ich es tat, war 398 :( rextester.com/live/NTVAV88033lmap z {S R M N} w {set "regsub -all" "string map" split} {interp alias {} $z {} {*}$w};lmap y [N [S b [M [N {||||@|||@$@BS @%@TAB @&@CAPS @? @ENTER @*@SHIFT } @] [R {[^@]} "`1234567890-=$@%QWERTYUIOP\[\]\\@&ASDFGHJKL;'?@*ZXCVBNM,./*" {||& ||}]]] @] z [N [S f [R {[^@|]} $b _]] @] w [N [S g [M {||_ |/_ _|| _\\|} [M {||| \\|/} $f]]] @] x [N [M {\\ _ / _ | \ } $g] @] {puts $x\n$y\n$z\n$w}
C (gcc) ,
378342330 Bytes-10 bytes dank ceilingcat.
Ein erster Versuch. Das wiederholte g () deutet auf Verbesserungspotential hin.
Edit: Los geht's.
Probieren Sie es online!
quelle
Python 2, 672 Bytes
Verwenden einer komprimierten zlib-Zeichenfolge:
quelle
len("print 'x\x9c...'")
dem die\x
s nicht mehr lesbar sind , was zu einer falschen Byteanzahl führt . Sie könnten eine korrekte Zählung erhalten, indem Sie mit zählen,len(r"print 'x\x9c...'")
aber die einfachste Lösung besteht wie immer darin, zu sehen, was Ihr Texteditor oder Dateisystem sagt.Powershell,
249242 BytesUngolfed & Erklärt
Das Middot
·
verwendet stattdessen Leerzeichen, um die Quellzeichenfolge zu verdeutlichen.Extra: Tastatur mit Leertaste und rechtsbündigen Beschriftungen, 278 Byte
Ich habe dem regulären Ausdruck ein paar Bytes hinzugefügt, um die Leertaste zu behandeln (alter regulärer Ausdruck
(.[a-z ]*)
, neuer~|(.[a-z ]*)
). Das ist ein kleiner Schritt für die reguläre Ausdrucksweise, ein großer Schritt für die Lösung: Sie können jetzt rechtsbündig angeordnete Leertaste und Tastenbeschriftungen anzeigen (siehe UMSCHALTTASTE, STRG und BS auf der rechten Seite der Tastatur).Ausgabe:
quelle
/// 360 Bytes
Probieren Sie es online!
quelle
Mathematica 323 Bytes
Langweilig und unkreativ. Die Zeichenfolge ist nur die Ausgabe des integrierten
Compress
Befehls, der auf die gewünschte Ausgabe angewendet wird.quelle
Wolfram Language (Mathematica) , 293 Byte
Probieren Sie es online!
Relativ einfach: Codiert Schlüsselzeilen als Listen von
(key name)|(key width)
quelle
Perl 5
-MList::Util=pairmap
, 313 BytesProbieren Sie es online!
quelle