Dies wird eine Schüssel mit Buchstabensuppe genannt - eine ungefähr kreisförmige ASCII-Art-Form mit den 26 englischen Großbuchstaben (AZ), die im Uhrzeigersinn angeordnet sind, um den Umfang zu bilden:
XYZABC
VW DE
U F
T G
S H
RQ JI
PONMLK
Schreiben Sie ein Programm, das ein einzelnes Buchstabenzeichen (AZ) aufnimmt und dieselbe Schüssel Buchstabensuppe sozusagen "gedreht" ausgibt, sodass der eingegebene Buchstabe dort angezeigt wird, wo der A
dies im obigen Beispiel Fall ist, und der Rest des Alphabets vollständig umläuft im Uhrzeigersinn.
Also die Ausgabe für die Eingabe A
wäre also dieselbe originale Schüssel Alphabetsuppe.
Und die Ausgabe für die Eingabe B
wäre diese:
YZABCD
WX EF
V G
U H
T I
SR KJ
QPONML
Ebenso wäre die Ausgabe für H
:
EFGHIJ
CD KL
B M
A N
Z O
YX QP
WVUTSR
Oder für Z
:
WXYZAB
UV CD
T E
S F
R G
QP IH
ONMLKJ
Dies muss für alle 26 Buchstaben von A bis Z funktionieren.
Einzelheiten:
- Sie können davon ausgehen, dass die einzige Eingabe ein einzelner Buchstabe von A bis Z ist.
- Wenn Sie die Eingabe und / oder Ausgabe in Kleinbuchstaben az vornehmen möchten, können Sie sogar Klein- und Großbuchstaben mischen und abgleichen.
- Die Alphabetreihenfolge muss im Uhrzeigersinn und nicht gegen den Uhrzeigersinn laufen.
- Sie müssen Leerzeichen verwenden, um die Suppenschüssel einzurücken und zu füllen.
- Wenn die Suppenschüssel richtig angeordnet ist, kann es vor- oder nachgestellte Zeilen oder Leerzeichen in der Ausgabe geben.
- Beachten Sie, dass die Schüsselform 12 Zeichen breit und 7 Zeichen hoch ist, damit sie als Text ungefähr kreisförmig erscheint. Ihre Schalen müssen die gleiche Form haben.
Dies ist Codegolf, also gewinnt der kürzeste Code!
Antworten:
05AB1E , 21 Bytes
Definiert ein Programmf:AlphabeticChar→String
Code:
Probieren Sie es online!
Nervenzusammenbruch:
Erläuterung:
Das canvas (
Λ
) arbeitet in diesem speziellen Kontext als eine Funktion mit der folgenden Signatur:Derpattern ist in dieser Situation eine Zahl, die die Richtungen definiert. Im Code wird diese Nummer als dargestellt 2232344565666667670012122 . Anweisungen werden auf folgende Weise angegeben:
•1못*Ć,ãiDΣ•
, was eine komprimierte Version der großen NummerDies bedeutet, dass die große Zahl das folgende Richtungsmuster darstellt:
Im Pseudocode würde dies von der Canvas-Funktion ausgeführt:
Daraus ergibt sich die gewünschte Buchstabensuppe in ASCII-Art Form.
quelle
AA¹k._
kann alternativ seinA¹¡RJ«
, aber es ist die gleiche Anzahl von Bytes.•1못*Ć,ãiDΣ•
kann alternativ sein•õÕ₆qηµñ–†f•·
, aber es ist die gleiche Anzahl von Bytes. Ah, gut. Gute Antwort!Perl 6 , 100 Bytes
Probieren Sie es online!
Ersetzt alle Buchstaben in der Zeichenfolge durch ihre verschobenen Gegenstücke, während die Ziffern durch die Anzahl der von ihnen dargestellten Leerzeichen plus eins ersetzt werden.
Erläuterung
quelle
Ruby , 107 Bytes
Probieren Sie es online!
Verbesserte Syntax
"i".to_c
->1i
(Vorgeschlagen von Jordan)Das Koordinatensystem wurde so geändert, dass 0 Grad rechts statt oben ist. Dies ermöglicht
0.5
->6
Angepasste Multiplikatoren von
j
undk
für Kürzeputs a
Verketten Sie Array-Elemente und geben Sie eine Zeichenfolge zurück, anstatt die Ausgabe zu druckena*$/
Ruby , 119 Bytes
Verwendet eine komplexe Zahl, die auf eine Potenz angehoben wird, um eine Ellipse abzubilden. Eine komplette Runde ist 26, also ist jeder Quadrant 6,5.
Dieser Ansatz beruht darauf, dass die erforderliche Ausgabe einer Ellipse so ähnlich ist, dass eine gültige Abbildung erzielt werden kann.
Probieren Sie es online!
quelle
Holzkohle , 33 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Verfolge einen Pfad.
Umreißen Sie die Schüssel. Jeder
7
erweitert um↙←
.Verschieben Sie jeweils ein Zeichen (diese API überlappt das Ende jeder Zeile mit dem nächsten).
Zeichnen Sie mit dem doppelten Alphabet, wobei Sie an der Position des eingegebenen Zeichens beginnen.
quelle
MATL , 49 Bytes
Was für ein Chaos. Aber es hat Spaß gemacht zu schreiben. Es ist sogar ein Arkustangens beteiligt.
Probieren Sie es online!
Erläuterung
Der Code
Erstellt ein Array von Zahlen und wandelt sie in Binärdaten um. Dies ergibt die Null-Eins-Matrix
Dies ist der obere linke Quadrant einer Matrix, die die Positionen der Buchstaben angibt.
spiegelt diesen Quadranten vertikal wider, ohne die letzte Zeile und horizontal die letzte Spalte zu wiederholen, um die vollständige Matrix zu erzeugen:
Wir haben jetzt eine Maske mit den Positionen. Der Code
konvertiert dies in char, da das Endergebnis eine char-Matrix ist. Zeichen 0 wird als Leerzeichen angezeigt und die Nicht-Null-Einträge werden mit den entsprechenden Buchstaben geschrieben.
drückt den String
'abc···xyz'
, der die 26 Buchstaben enthält. Diese Zeichenfolge muss gemäß der Eingabe zirkular verschoben werden. Das zu tun,Liest den eingegebenen Buchstaben, fügt seinem ASCII-Code 7 hinzu und negiert das Ergebnis. Für die Eingabe
'a'
ergibt dies -104, was ein Vielfaches von 26 ist, sodass eine zirkuläre Verschiebung um diesen Betrag nichts bewirkt. Wenn die Eingabe ist,b
ergibt dies -105, wodurch der String 1 Schritt nach links verschoben wird, um zu produzieren'bcd···yza'
. usw.Der nächste Schritt besteht darin, die Reihenfolge zu definieren, in der die verschobene Zeichenfolge in die Nicht-Null-Einträge der Matrix geschrieben wird. Zu diesem Zweck,
Erstellt eine Kopie der Matrix und verschiebt zwei Vektoren, die die 1-basierten Zeilen- und Spaltenpositionen der Nonzeros enthalten. Dann
subtrahiert 7 von letzterer, bringt die erstere nach oben, subtrahiert 4 von ihr und negiert sie. Die 7 und 4 geben einen Koordinatenursprung an, so dass die Winkel der Positionsvektoren der Nicht-Null-Einträge in Bezug auf diesen Ursprung die gewünschte Reihenfolge definieren.
berechnet den aus zwei Argumenten bestehenden Arkustangens Modulo 2 * pi, um diese Winkel zu erzeugen. Jetzt entspricht der kleinste Winkel, der 0 ist, der Eingabe, in die der erste Buchstabe gehen soll, und der Rest rückt gegen den Uhrzeigersinn vor.
Ordnet die Buchstaben in der Zeichenfolge entsprechend diesen Winkeln neu an, so dass das Ergebnis korrekt ist, wenn die Buchstaben in Spalten-Hauptreihenfolge (abwärts, dann quer) in die Nicht-Null-Einträge der Matrix geschrieben werden. Dies geschieht durch
Wenn es sich bei der Eingabe beispielsweise um
'a'
eine Zeichenfolge handelt, die nicht zirkulär verschoben wurde:Die Umordnung nach den Winkeln transformiert dies in
Damit
'u'
wird der erste Eintrag (in der Reihenfolge der Spalten), der nicht Null ist (3,1), in der Matrixnotation korrekt angegeben.'t'
geht zu (4,1),'s'
zu (5,1);'v'
zu (2,2) etc:quelle
Python 2 , 129 Bytes
Probieren Sie es online!
quelle
R ,
139122 Bytes-17 Bytes dank Giuseppe
Erläuterung:
Erstellt eine leere Kiste mit Leerzeichen
ist eine Reihe von Indizes für Buchstabenpositionen, die entsprechen:
TIO
quelle
intToUtf8
also sind das fremde Bytes, aber wenn Sie*
anstelle von verwendenrep
, können Sie sparen 2 Bytes und erhalten zu 125 Bytes-32
für 122 Byte abschneiden . Sie können sie selbst mit generierencat(intToUtf8(bytes))
.intToUtf8
zu vielen Versionen der Funktion, die auf einmal geöffnet sind, bereits entfernt hatte . Nizza spart rundum, dankeJavaScript (Node.js) ,
121119 Bytes2 Bytes dank @tsh gespeichert
Probieren Sie es online!
Wie?
Buffer
"H"
"B"
quelle
APL + WIN, 72 Bytes
Fordert zur Eingabe des Charakters auf
Probieren Sie es online! Coutesy von Dyalog Classic
quelle
R ,
218197 Bytes-21 Bytes dank Giuseppe
Probieren Sie es online!
Ungolfed:
Erstellt gedrehten Buchstaben Vektor und verwendet
cat
, um Rand der Schüssel mit diesem Vektor auszufüllen.quelle
which
und Verwendenl>=t
als Index, was 12 Bytes wert war.[
mit~
. Dies ist eine großartige Antwort. Ich habe in meinen ersten Versuchen ungefähr 250 Bytes mit einem viel komplexeren Ansatz ausgegeben.Java 11, 134 Bytes
Probieren Sie es online aus.
136-Byte-Version mit Potenzial zum Golfen?
Probieren Sie es online aus.
Erklärung (der ersten Antwort)
quelle
i-47
\n
). Egal, ob ich unprintables und 3x\n
withi
oder Digits-1 with verwendei-47
, beide haben dieselbe 134-Byte-Anzahl. Und leider kann ich kein Unprintable haben0
, sonst hätte ich stattdessen 2,0,5,9 verwenden und damiti+1
insgesamt 1 Byte sparen können.Wolfram Language (Mathematica) , 258 Byte
Probieren Sie es online!
quelle
Haskell, 127 Bytes
Probieren Sie es online!
Jedes Zeichen in der codierten Zeichenfolge wird von der Funktion
?
in eine Zeichenfolge decodiert :quelle
Kotlin ,
148146145 BytesZusätzliche Klammern für -2 entfernt.
Rohe Zeichenfolge für -1 ersetzt
Probieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) ,
126118 Byte8 Bytes dank @someone gespeichert. Ja, das ist eigentlich sein Benutzername.
Probieren Sie es online!
quelle
TSQL-Abfrage, 238 Byte
Der Testlink für diese Antwort hat die Zeilenumbrüche gebrochen und die Leerzeichen ausgeschlossen. Ich habe die Leerzeichen durch Punkt und char (13) durch char (13) + char (10) ersetzt, um ein lesbares Ergebnis zu erhalten.
Probieren Sie es online aus
Ungolfed:
quelle
PHP ,
236229226 BytesProbieren Sie es online!
Pre-Golf:
Erläuterung:
Mit
ord
konvertieren wir in eine Ganzzahl zwischen 0 und 255. A ist 65 und Z ist 90.Mit diesem Wissen nehmen wir die Eingabe und reduzieren sie um 65, so dass wir einen Anpassungswert haben.
Wir iterieren dann über alle Zeichen, rufen
ord
sie auf, reduzieren sie um 65 und erhöhen sie um unseren Anpassungswert. Mit modulo schleifen wir auf 0 zurück, wenn sie 26 überschreiten.Dann erhöhen wir sie wieder um 65 und wandeln sie mit wieder in Buchstaben um
chr
.Leider kann php: // stdin nur einmal abgefragt werden, daher müssen wir die Eingabe an die Funktion in unserer Schleife übergeben, um zu verhindern, dass wir Bytes einsparen
use($a)
und eine Variable außerhalb der Funktion deklarieren müssen. Dies hindert uns daran, die<?=
Echo-Methode sauber zu verwenden. wir müssen alles in einen riesigen Dreiklang wickeln.quelle
C (GCC) 286 Bytes
Nicht gerade das kürzeste Golf, aber es funktioniert
Probieren Sie es online aus
quelle
rot , 139 Bytes
Probieren Sie es online!
Eine wirklich naive Lösung.
quelle
Perl 5
-p
, 110 BytesProbieren Sie es online!
quelle
Javascript (V8), 316 Byte
Probieren Sie es online aus
Zum ersten Mal Code Golf ausprobieren. Schätzen Sie alle Tipps / Feedback.
Originalcode vor dem Verkleinern:
quelle
APL (Dyalog Classic) , 50 Byte
Probieren Sie es online!
quelle
C (GCC) ,
200198197 Bytes-3 Bytes dank ceilingcat.
Probieren Sie es online!
quelle
PHP , 131 Bytes
Probieren Sie es online!
quelle