Dies ist eine QWERTZ-Tastatur.
Q W E R T Y U I O P
A S D F G H J K L
Z X C V B N M
Wir können auf dieser Tastatur ausgehend von G "herausspiralen". Die Spirale beginnt bei G, geht zu H, dann zu Y, dann zu T, dann zu F, dann zu V, dann zu B, dann zu N, dann zu J, dann zu U , dann R, dann D, dann C, ... usw. Ihre Herausforderung besteht darin, bei einer Zahl von 1 ≤ N ≤ 26 die ersten N Zeichen in dieser Spirale auszugeben . (Wenn Sie verwirrt sind, lesen Sie die Bilder am Ende des Beitrags.)
Der Fang? Die Punktzahl Ihres Programms ist proportional zu den Indizes der Zeichen in der Spirale!
Wertung
- Fügen Sie für jeden Buchstaben (ohne Berücksichtigung der Groß- / Kleinschreibung) in Ihrem Code den Index dieses Zeichens in der Spirale zu Ihrer Punktzahl hinzu (beginnend mit 1).
- Für jeden Charakter, der nicht in der Spirale ist, addiere 10 zu deiner Punktzahl.
- Die niedrigste Punktzahl gewinnt.
Zum Beispiel hat das Programm print("Hello, World!")
eine Punktzahl von 300.
Für Ihre Bequemlichkeit habe ich einen automatischen Programm-Grader geschrieben.
Andere Regeln
- Ihre Einreichung kann ein Programm oder eine Funktion sein.
- Sie können N mit 0 oder 1 beginnen und mit 25 oder 26 enden, aber die Ausgaben sollten immer noch mit "G" beginnen und mit "GHYTFVBNJURDCMKIESXLOWAZPQ" enden.
- Sie müssen die Zeichen in der Spirale der Reihe nach ausgeben .
- Bei einer Funktion können Sie anstelle einer Zeichenfolge eine Liste von Zeichen zurückgeben.
- Möglicherweise folgt eine nachgestellte Zeile auf die Ausgabe.
- Sie können Kleinbuchstaben anstelle von Großbuchstaben oder eine Kombination aus beiden verwenden.
Testfälle
number -> output
1 -> G
2 -> GH
5 -> GHYTF
12 -> GHYTFVBNJURD
15 -> GHYTFVBNJURDCMK
24 -> GHYTFVBNJURDCMKIESXLOWAZ
26 -> GHYTFVBNJURDCMKIESXLOWAZPQ
Bilder
Die Spirale überlagert:
ascii-art
code-challenge
keyboard
Conor O'Brien
quelle
quelle
Antworten:
Japt ,
304264162 Punkte40 Punkte gespart dank @ ConorO'Brien
Testen Sie es online!
Um so viele Punkte wie möglich zu speichern, wird die gesamte Zeichenfolge in 9 Unicode-Zeichen zusammengefasst, indem jeder Lauf mit 3 Buchstaben als Zahl zur Basis 36 interpretiert und dann in einen Codepunkt konvertiert wird. Das Programm selbst nimmt diesen komprimierten String (der 110 Punkte kostet, einschließlich der Anführungszeichen) und ordnet jeden
c
Harcode zu, indem es ihn in einens
Tring in Base-36 (G
nach dem;
am Anfang) umwandelt .î
Nimmt die ersten {input} Zeichen davon, die implizit gedruckt werden.quelle
C, Punktzahl: 544
Probieren Sie es online!
quelle
g
ist der billigste Buchstabe pro Wertung in der Herausforderung.Spirale , Kerbe:
619215127471546554191Einen Dolmetscher finden Sie hier .
Erläuterung:
Das Programm beginnt mit dem
0
Zeichen in der vierten Zeile. Der erste Code, der ausgeführt wird, ist0;vg
.;
Nimmt eine Zahl als Eingabe und legt sie im Stapel ab.v
legt das, was sich im Register befindet (eine Null), in den Stapel. Es wird als Zähler verwendet.g
Ist eine Beschriftung erreicht, springt das Steuerelement zum jeweils anderen Vorkommen des Buchstabensg
im Code.Hier befindet sich nun die Steuerung:
Da es in allen anderen Richtungen Leerzeichen gibt, bewegt sich der Befehlszeiger nach oben.
v
legt eine Null in den Stapel und entferntX
sie sofort aus dem Stapel. Da der POP-Wert Null ist, bewegt sich der Befehlszeiger aufX
(andernfalls wird er als Leerzeichen behandelt).Standardmäßig befindet sich der Steuerfluss im Rechtskurvenmodus. Wenn er die Kreuzung erreicht, dreht sich der Anweisungszeiger nach rechts.
v
Schiebt erneut eine Null in den Stapel,*
inkrementiert das Register um eins.Das nächste Mal,
v
wenn das, was sich im Register (Nummer 1) befindet, in den Stapel gelegt wird, versucht der Befehlszeiger, sich nach rechts zu drehen und trifft das nächste MalX
. Der soeben zum Stapel hinzugefügte Wert wird abgelegt und in das Register eingetragen. Da es nicht Null ist,X
wird es nicht eingegeben, und die IP-Adresse wechselt*
stattdessen zur nächsten auf der rechten Seite, wobei der Wert im Register erneut erhöht wird.Dies geschieht immer wieder, bis wir das Ende dieses Teils erreichen und die Linie von
*
s beginnt. Inzwischen ist der Wert im Register 6, also der ASCII-Buchstabeg
minus der ASCII-Buchstabea
. Mit einer Zeile von 97*
s erhöhen wir den Wert im Register auf 103, was dem zu druckenden Buchstaben entsprichtg
.v
schiebt es in den Stapel undP
ist ein weiteres Etikett, bei dem wir inP
der ersten Codezeile zum anderen springen .Hier wird
.
der Wert vom Stapel abgerufen und als Zeichen gedruckt. Anschließend wirdX
die externe Null aus dem Stapel entfernt und~
die beiden verbleibenden Werte im Stapel verglichen (die Werte sind der Zähler und der Eingabewert). Sind die Werte gleich, setzt der Operator Null in den Stapel (ansonsten -1 oder 1). Die Steuerung versucht erneut, nach rechts zu drehen.X
Lädt den Wert des Vergleichs vom Stapel, wenn er Null istX
, und!
beendet das Programm , nachdem er eingegeben wurde.Ansonsten fährt die IP mit der fort
Z
, was eine Beschriftung ist, die in diesem Fall nur einen Schritt nach rechts springt. Der Grund dafür ist, dass beim Springen der Wert im Register auf Null zurückgesetzt wird.*
erhöht das Register undv
legt die resultierende 1 in den Stapel.+
Fügt die beiden obersten Elemente des Stapels (die 1 und den Zähler) hinzu und platziert das Ergebnis im Stapel.^
kopiert das Ergebnis vom Stapel in das Register, ohne es vom Stapel zu entfernen.#
Verringert den Wert im Register um eins,v
schiebt den verringerten Wert in den Stapel, die IP versucht, sich nach rechts zu drehen, undX
der Wert wird aus dem Stapel entfernt. Wenn der Wert nicht Null ist, bewegt sich die IP weiter nach Osten und verringert den Wert im Register, bis sie Null erreicht und die IP in eineX
Verzweigung eintritt .Die Verzweigung führt zu einer Beschriftung, die dem Wert des Zählers entspricht. Beim Auftreffen auf das Etikett springt das Steuerelement zu dem anderen Vorkommen des Etiketts in dem Abschnitt, in dem wir mit dem Etikett begonnen haben
g
, und startet eine weitere Iteration. Wie beimg
wird der Wert im Register auf den ASCII-Wert des zu druckenden Buchstabens erhöht. Dann wird das Zeichen gedruckt und der Zähler erhöht, ein anderes Etikett wird ausgewählt. Dies geschieht so lange, bis der Zähler nach der letzten Iteration mit der Eingabe übereinstimmt und das Programm beendet wird.Bearbeiten:
Erreicht das Gleiche wie
aber mit weniger Leerzeichen.
Bearbeiten 2:
Kann verwendet werden anstelle von:
quelle
Haskell , 471
Probieren Sie es online!
Dies ist ein bisschen wie ein Maßstab, ich glaube, es muss einen besseren Weg geben, aber es ist das Beste, was ich bisher gefunden habe.
Erläuterung
Ich nehme an, ich sollte dies denjenigen erklären, die Haskell nicht so gut kennen. Die Funktion
take
übernimmt die ersten n Elemente der Liste. Es heißt so:Wir wollen die ersten n Elemente des Stichs nehmen
"GHYTFVBNJURDCMKIESXLOWAZPQ"
, also wollen wir so etwas wieWir können es aber besser machen, wir können es
take
mit Backticks befestigenUnd jetzt kann dies sinnlos gemacht werden
quelle
partial
in Clojure verwendet werden müssen. Dies ist, was ich wollte, aber espartial
war zu teuer.Jelly , 211 Punkte
19 Bytes
Probieren Sie es online!
Dank des Vorschlags von Emigna,
œ?
Dquelle
Vim ,
461418Danke @pacholik für -43 Punkte!
Probieren Sie es online!
quelle
CGHYTFVBNJURDCMKIESXLOWAZPQg©G@" D
(© ist Flucht)Befunge, Score: 531
Ich bin der Meinung, dass diese Herausforderung interessanter gewesen wäre, wenn der Output ebenfalls spiralförmig verlaufen müsste.
quelle
TI-Basic (TI-84 Plus CE),
454432 Punkte-22 Punkte von Conor O'Brien
Laufen Sie mit
5:prgmNAME
.Liefert / druckt den
sub
String von1
bisAns
(die Zahleneingabe).TI-Basic ist eine tokenisierte Sprache , daher bewerte ich dies anhand der Bytewerte der Token.
sub(
ist 0xbb 0x0c, also 20"
ist 0x2a,*
also 10 * 2 = 20Großbuchstaben ändern sich nicht, daher lautet die Zeichenfolge 351
,
ist 0x2b,+
also 10 * 2 = 201
ist 0x31, also1
, also 10Ans
ist 0x72r
, also 1120 + 20 + 351 + 20 + 10 + 11 = 432
quelle
Python 3, Score =
7627531-basierte Eingabe. Dies ist schlimmer als der triviale Ansatz, da 37 Nichtbuchstaben verwendet werden. Es ist jedoch etwas interessant.
-9 danke an Leo .
Probieren Sie es online!
quelle
[:g*3][-3:]
kann[g*3-3:g*3]
die Gesamtpunktzahl um 9 Punkte senken05AB1E , Score: 204
Probieren Sie es online!
quelle
Brainf ** k, Score = 2690
Geben Sie ein einzelnes Byte von
0x1
bis ein0x1a
.Probieren Sie es online!
quelle
APL (Dyalog) , Punktzahl: 391
Probieren Sie es online!
Die einzige Verwendung für lateinische Buchstaben in Dyalog sind Variablennamen und einige Systemfunktionen. Ansonsten werden nur Glyphen und einige griechische Buchstaben verwendet.
quelle
Python 3, 522
Probieren Sie es online!
Ein anonymer Lambda, der Pythons Aufteilen von Zeichenfolgen verwendet (
"asdf"[:i]
erhält die ersteni
Zeichen von"asdf"
)quelle
Clojure,
484474 Punkte-10 Punkte, weil anscheinend
%
nach einer Zahl eine Dose existieren kann, ohne dass ein Leerzeichen dazwischen steht !? Möglicherweise muss ich noch einmal vorbeischauen und einige Einsendungen verbessern.Eine anonyme Funktion. Grundsätzlich ein Clojure-Port von dem, was bereits gepostet wurde. Scores schön! Ich denke, dies ist das erste Clojure-Programm, das ich jemals geschrieben habe und das kein Leerzeichen enthält.
quelle
Ly , 521 Punkte
Probieren Sie es online!
Ich habe nicht das Gefühl, dass dies optimierbar ist.
quelle
Bash , Punktzahl: 465
Probieren Sie es online!
quelle
Schale , 293 Bytes
Dies ist die kürzeste, die ich finden konnte, als nächstes näher
¨gHYtfvB⌋ȷÜdCmkÏex←ẆAzpq¨
für eine Punktzahl von 293 ..Probieren Sie es online!
Erläuterung
Brute-Force-Suche, stellte sich heraus, dass alle Kleinbuchstaben die beste Punktzahl gaben. Es ist im Grunde dasselbe wie die @ Wheat Wizard-Lösung
take
(↑
) für einen komprimierten String (¨
).quelle
Common Lisp, Kerbe: 580
Probieren Sie es online!
quelle
Excel, 490 Punkte
Konvention für Excel-Antworten ist die Eingabe von
A1
. Wenn Sie diesG1
ändern, werden 22 Punkte gekürzt (468).quelle
C # , Score 546
quelle
Rust, 443 Punkte
Es ist nicht oft so, dass Rust gut im Codegolf ist, aber hier schlägt er viele Sprachen
quelle
Golang, Score 861
Spiele es online!
quelle
Javascript ES6, 527 Punkte
Versuch es !
quelle
PHP, 590 Punkte
Probieren Sie es online!
quelle
PHP, Score 584
ein bisschen mit dem Wörterbuch herumgespielt; Die Tatsache, dass das Xoring des Strings ihn abschneidet, ist
substr
veraltet.Probieren Sie es online aus .
quelle
Mathematica, 528
Probieren Sie es online!
quelle
Pyth , Kerbe: 371
Probieren Sie es hier aus.
Wie?
quelle
Rubin , 453 Punkte
Probieren Sie es online!
quelle
> <> , 558 + 16 = 574 Punkte
Verwendet das
-v
Flag, um die Eingabe auf den Stapel zu schieben.Schiebt die Spirale in umgekehrter Reihenfolge auf den Stapel und dreht die Eingabe dann nach oben. Während die Oberseite des Stapels nicht Null ist, wird der nächste Buchstabe gedruckt und die Oberseite des Stapels verkleinert.
Probieren Sie es online!
quelle
Pyth , 261 Punkte
Probieren Sie es hier aus!
Dies gibt Großbuchstaben aus. Für Kleinbuchstaben können Sie die Alternative 261 byter ausprobieren .
quelle