Alphabet Regen
Die Aufgabe:
Die Grundvoraussetzung besteht darin, die Eingabezeichenfolge auszudrucken und dann jedes Zeichen vertikal zu wiederholen, basierend auf seiner (0-indizierten) Position im Alphabet (ohne Berücksichtigung der Groß- / Kleinschreibung) A-Z
. A
Befindet sich an Position 0, wird also nicht wiederholt. e
Befindet sich an Position 4, wird also 4 Mal wiederholt. Befindet P
sich an Position 15, wird also 15 Mal wiederholt. Befindet !
sich nicht in A-Z
, wird also 0 Mal wiederholt.
Aus Gründen der Übersichtlichkeit wird alles, was außerhalb des Bereichs liegt B-Zb-z
, z. B. Ziffern oder Sonderzeichen, nicht wiederholt und daher nur in der ersten Zeile angezeigt.
Das ist Code-Golf , also ist die kürzeste Lösung in jeder Sprache der Gewinner.
Eingang:
- Die Eingabe erfolgt im standardmäßigen druckbaren ASCII-Zeichensatz von 32
~
. - Die Eingabezeichenfolge ist mindestens 1 Zeichen lang.
- Es wird kein führendes oder nachfolgendes Leerzeichen geben.
- Sie können Eingaben als Zeichenfolge (
"hello"
) oder Liste von Zeichen (["h", "e", "l", "l", "o"]
) übernehmen.
Beispiele:
Eingabe von aaaa
gibt:
aaaa
Eingabe von abcda
gibt:
abcda
bcd
cd
d
Eingabe von Programming Puzzles & Code Golf!
, ergibt:
Programming Puzzles & Code Golf!
Progr mming Puzzles Code Golf
Progr mming Puzzles Code Golf
Progr mming Puzzles ode Golf
Progr mming Puzzles o e Golf
Progr mming Puzzl s o Golf
Progr mming Puzzl s o Gol
Pro r mmin Puzzl s o ol
Pro r mmin Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzz s o o
Pro r n Puzz s o o
Pro r Puzz s o o
Pr r Puzz s
r r uzz s
r r uzz s
uzz s
uzz
uzz
zz
zz
zz
zz
zz
Eingabe von ~|[abc<0>cba]|~
, ergibt:
~|[abc<0>cba]|~
bc cb
c c
Anmerkungen:
- Es gelten Standardlücken
- output kann eine Liste von Strings sein, aber:
- Überflüssige nachgestellte Zeilenumbrüche sind nicht zulässig (einzelne
\n
Zeilen in der letzten Zeile sind akzeptabel). - Die Ausgabe kann eine Liste mit Listen von Zeichen sein, solange es so aussieht, als würde es Zeichen regnen
- keine führende newline
- Für unsere nordischen Benutzer, die ein paar zusätzliche Buchstaben in ihrem "AZ" -Alphabet haben, steht es uns frei, sie zu unterstützen, aber dies ist nicht Teil der Herausforderung
\n
akzeptabel?Antworten:
6502 Maschinencode (C64), 113 Bytes
Online-Demo
Verwendung:
sys49152,"[string]"
zBsys49152,"Programming Puzzles & Code Golf!"
.Wichtig: Wenn das Programm von der Festplatte geladen wurde (wie in der Online-Demo), geben Sie zuerst einen
new
Befehl aus! Dies ist notwendig, weil das Laden eines Maschinenprogramms einige C64 BASIC-Zeiger in den Papierkorb wirft.Hinweis: Der C64 befindet sich standardmäßig in einem Modus ohne Kleinbuchstaben. Um eine gemischte Zeichenfolge eingeben zu können, müssen Sie zuerst in den Kleinbuchstabenmodus wechseln, indem Sie
SHIFT
+ drückenCBM
.Erläuterung
Hier ist eine kommentierte Auflistung der Demontage:
quelle
05AB1E ,
1312 BytesProbieren Sie es online!
Erläuterung
quelle
Ask
dafürPyth,
12109 BytesTestsuite.
Erläuterung:
12 Bytes:
(mit nachfolgender Newline)
Testsuite.
Erläuterung:
quelle
j
Python 3 , 83 Bytes
Probieren Sie es online! Nimmt eine Liste von Zeichen. Gibt eine Liste mit Listen von Zeichen zurück.
Python 2 , 90 Bytes
Probieren Sie es online! Nimmt eine Zeichenfolge. Gibt eine Zeichenfolge zurück.
quelle
Mathematica,
11589 BytesEs dauert als
input
eine Liste von Zeichen[{"a", "b", "c", "d", "a"}]
und gibt eine Liste der Listen von ZeichenProbieren Sie es online!
-26 Bytes von Mischa Lawrow
-5 Bytes von user202729
Wenn Sie die Ausgabe jedoch so sehen möchten, wie sie im Testfall vorliegt, versuchen Sie diesen (128 Byte) Code.
Versuchen Sie es online!
quelle
∞
(3 Byte) ->\[Infinity]
(11 Byte)).\[Infinity]
(11 Bytes) können durchInfinity
(8 Bytes) oder\:221e
(6 Bytes) ersetzt werden. Die letzte ist die Standarddarstellung von Sonderzeichen ohne Namen. (obwohl es nicht der Hauptteil ist)Infinity
ganz vermeiden . Der problematische Teil istIf[(d=Min@Position[Alphabet[],If[UpperCaseQ@#,ToLowerCase@#,#]])==∞,1,d]
und wir können dies ändernMax@Position[Alphabet[]/."a"->#,#|ToLowerCase@#]
. (Wenn{#,b,c,d,...,y,z}
wir in der Liste suchen, werden wir garantiert#
mindestens einmal finden.)Dyalog APL ,
2722 Bytes5 Bytes gespart dank @ Adám
Probieren Sie es online!
Wie?
⍴¨⍨
- Form jedes Saiblings auf Länge von1⌈
- mindestens eine oder⎕A⍳819⌶⍨∘1
- Index des Zeichens in Großbuchstaben27|
- Modulo 27↑
- Auf eine Matrix abflachen⍉
- und transponierenquelle
⍉∘↑⊢⍴¨⍨1⌈27|⎕A⍳819⌶⍨∘1
Kohle , 12 Bytes
Probieren Sie es online!
-3 danke an Neil .
quelle
Python,
105103 Bytes2 Bytes gespart dank @TFeld
Probieren Sie es online!
quelle
Python 2 ,
1111069998978793 BytesProbieren Sie es online!
quelle
while
kann durch ersetzt werdenexec
, um einige Bytes zu sparen,i
kann mit 65 beginnen, um weitere zu speichern , um 87 Bytes zu erreichenz
oder nicht enthältZ
.exec
Änderung zu überprüfen ...C # (.NET Core) , 162 Byte
Probieren Sie es online!
quelle
using System.Linq;
ist leider obligatorisch, um die Byteanzahl zu erhöhen (oder Sie solltenMax
zuSystem.Linq.Max
undSelect
zu wechselnSystem.Linq.Max
, was höher wäre als einfach nurusing System.Linq;
einmal.). Nochmals willkommen, und genießen Sie Ihren Aufenthalt. Oh, und ich sehe @ IanH. Bereits erwähnte Tipps zum Golfen in C #. Tipps zum Golfen in <allen Sprachen> könnten ebenfalls interessant sein.Bash,
78,76,71 BytesAbhängig von der Sortierung (Standardeinstellung LC_ALL) können weitere Bytes eingespart werden
Probieren Sie es online
quelle
Perl 5 , 43 Bytes
41 Byte Code + 2 für
-nl
.Probieren Sie es online!
quelle
s/["-$c]/ /gi
und-l
nicht benötigtJavaScript (ES6),
877876 Bytes-9 Bytes dank @RickHitchcock .
-2 Bytes dank @Neil .
Nimmt Eingaben als Zeichenfolge und gibt sie mit einer nachgestellten Zeile zurück.
Testfälle
Code-Snippet anzeigen
quelle
f=(s,i=10)=>s.trim()&&s+'newline'+f(s.replace(/./g,c=>parseInt(c,36)-i?c:" "),i+1)
s
ist allerdings sehr schön.parseInt(c,36)-i>0
parseInt(c,36)>i
stattdessen 2 Bytes speichern?R
118114 BytesDanke an @ Giuseppe für die 4 Bytes
Probieren Sie es online!
Kurze Erklärung:
quelle
a
alle Leerzeichen vorhanden sind, wird nichts gedruckt ... Sie können jedoch diewhile
Bedingung ändern ,grepl()|!F
die immer noch ein Byte kürzer ist als Ihre ursprüngliche Antwort.R ,
125123 BytesVom Plannapus überfordert
Probieren Sie es online!
Druckt mit einer einzelnen nachgestellten Zeile auf Standardausgabe und liest aus
stdin()
.Lassen Sie es uns zusammenfassen:
Alternative Antwort, 106 Bytes
Probieren Sie es online!
Funktion; druckt auf stdout, aber es ist im Grunde meine obige Antwort, um eine Liste von Zeichen zu akzeptieren, anstatt die Zeichenfolge zu teilen, so dass ich das Gefühl habe, dass es "betrügt". Außerdem ist der Ansatz von Plannapus mit Regex ziemlich ordentlich!
quelle
Octave / MATLAB,
7466 BytesProbieren Sie es online!
quelle
Japt ,
15141110 BytesErste Chance, mit den neuen Saitenpolstermethoden von Japt zu spielen, sodass möglicherweise noch Verbesserungspotenzial besteht.
Versuch es
Erläuterung
Implizite Eingabe eines Strings
U
.Übergeben Sie jede Spalte
U
einer Funktion, wobeiZ
in diesem Fall das aktuelle Element (oder der Buchstabe) ist.Konvertiere
Z
in Großbuchstaben (u
), erhalte den Zeichencode (c
) und subtrahiere (u
) 64 (I
).Füllen Sie den Anfang
Z
mit sich selbst auf, bis er diese Länge erreicht hat.Alternative
Versuch es
quelle
ùZ
,p
um ein B ...p
(es könnte 1 in der Bearbeitungshistorie geben) gemacht, aberù
am Ende gewonnen.Haskell ,
137136127119 BytesProbieren Sie es online!
Ziemlich lang, aber ich kann mir keine Möglichkeit vorstellen, es weiter zu verkürzen.
Ich habe das Gefühl, dass es einen Weg geben muss, der kürzer ist als die If-Then-Syntax, aber ich sehe es nicht.EDIT: Danke @streetster, dass du mir geholfen hast, ein Byte zu entfernen!
toUpper
Anfangs habe ich wegen der Kosten für den Import nicht verwendet ,Data.Char
aber ich habe vergessen, dass es auch bietet,ord
was viel kürzer ist alsfromEnum
EDIT 2: Danke an @Laikoni für das Abschneiden von weiteren 6 Bytes und das Identifizieren eines Fehlers, den ich jetzt behoben habe. Ich habe 26 statt 25 verwendet, weil ich vergessen habe, dass Haskell-Arrays inklusive sind. Dann bemerkte ich, dass ich
last
anstellehead
dessen verwenden konnte, was mir ermöglichen würde,0:
anstatt zu verwenden++[0]
.EDIT 3: Nochmals vielen Dank Laikoni für diese 8 Bytes. Ich hatte diesen Raum tatsächlich vergessen. Aus irgendeinem Grund wird der erhabene Text ohne ihn ausgeblendet und ich habe vergessen, ihn zu entfernen. Mir war nicht bewusst, dass Zeilenlisten erlaubt waren, ich hätte die Regeln genauer lesen sollen.
quelle
if i>p c then ' ' else c
kann auf gekürzt werdenlast$c:[' '|i>p c]
.[k |
und das Zurückgeben einer Liste von Zeilen ist zulässig, sodass Sie das nicht benötigenunlines
. Vielleicht interessiert dich auch unser Chatraum in Haskell .Excel VBA, 110 Bytes
Anonymes VBE-Direktfenster Funktion, die Eingaben wie erwartet
Variant\String
aus dem Bereich entnimmt[A1]
und das Alphabet im VBE-Direktfenster regnet.Beispiel-E / A
quelle
?A1:...
[]
angibt, dass die enthaltene Zeichenfolge für ein Objekt in / on / as Arbeitsmappe ausgewertet werden soll, wird der[A1]
Aufruf möglicherweise nicht auf reduziert,A1
da dies die ersten Eingaben aus dem Bereich nicht annimmt und druckt[A1]
. Stattdessen bleibt nur eine leere Zeile und alle nachfolgenden Zeilen werden gedrucktPHP,
69 78 7785 + 1 Bytebenötigt PHP <7. Laufen Sie als Pipe mit
-nR
oder versuchen Sie es online .quelle
$c=A;!$c[1];$c++
. Schön! Leiderextraneous trailing newlines are not allowed (single \n on final line is acceptable)
. Es schlägt also für alle Zeichenfolgen fehl, die nichts enthaltenz
.Bash + sed, 37
Probieren Sie es online aus .
quelle
C (gcc) 189 Bytes
Probieren Sie es online!
quelle
puts("");
stattputchar(10)
Ruby,
706774 BytesDank @TuukkaX für den Hinweis, dass einige Parens entfernt werden konnten (-3 Bytes)
Leider musste ich dann 7 Bytes hinzufügen, da die Originalversion "z" nicht verarbeiten konnte.
Nennen Sie es:
quelle
Oracle SQL, 186 Bytes
Angenommen, die Zeichenfolge befindet sich in einer Tabelle
t
in der Spaltev
:SQL-Geige
Oracle 11g R2 Schema Setup :
Abfrage 1 :
Ergebnisse :
quelle
Gelee , 15 Bytes
Probieren Sie es online!
quelle
Haskell , 98 Bytes
Probieren Sie es online!
Anwendungsbeispiel:
f "[Abc]"
ergibt eine Liste der Zeilen:["[Abc]"," bc "," c "]
. VerwendenputStr.unlines.f $ "[Abc]"
für ziemlich-gedruckte Ausgabe:Teilweise inspiriert vonNow, direkt basierend auf der Haskell-Antwort von user1472751 .Vorheriger Ansatz (
100 bis99 Byte)Probieren Sie es online!
quelle
PowerShell ,
122127 ByteProbieren Sie es online!
Kurz , weil PowerShell dynamisch zwischen
[char]
und umwandeln kann[int]
, aber lang, weil überflüssige Leerzeichen entfernt und berechnet werden, ob ein Leerzeichen oder ein Zeichen ausgegeben werden soll.Bugfix dank Beatcracker.
quelle
~|[abc<0>cba]|~
Testfall fehl . Versuchen Sieparam($a)$a;(1..25|%{$i=$_;(-join([char[]]$a|%{(' ',$_)[$_-match'[a-z]'-and[math]::Max(0,($_-bor32)-96-$i)]})).TrimEnd()})-ne''
Java 8,
151147144143139 BytesErläuterung:
Probieren Sie es hier aus.
quelle
q ,
4237 Bytes-5 danke an streetster!
alte Lösung + Erklärung:
quelle
{(+)max[m]$(m:1+mod[.Q.a?(_)x]26)#'x}
für 37 kann ich mich nicht erinnern, wie ich es beim Erstellen der Frage gelöst habe, wahrscheinlich aber sehr ähnlich!_
Ich wusste nichts über k , tipptelower
den q-Interpreter ein und bekamk){$[~t&77h>t:abs@@x;.z.s'x;19<t;.z.s@. x;~t in 10 11h;'`type;_x]}
. daher meine antwort in q hahaSOGL V0.12 ,
1211 BytesProbieren Sie es hier aus!
Erläuterung:
quelle