Die Herausforderung
Zeigen Sie das Alphabet eines bestimmten Buchstabens an, der von der Konsoleneingabe gelesen wurde. Wenn der Buchstabe in Großbuchstaben geschrieben ist, müssen Sie das Alphabet in Großbuchstaben anzeigen. Das gedruckte Alphabet muss mit dem vorangestellten Buchstaben des eingefügten Buchstabens enden. Wenn der Eingabe ein zusätzlicher Parameter (ein einfacher Punkt .
) hinzugefügt wird, sollte das Alphabet mit einem Buchstaben in jeder Zeile gedruckt werden. Andernfalls sollte das Alphabet in derselben Zeile gedruckt und durch ein einfaches Leerzeichen getrennt werden. Wenn eine falsche Eingabe an das Programm gesendet wird, wird nichts gedruckt.
Eingabebeispiele:
Eingang:
c
Programmausgabe:
d e f g h i j k l m n o p q r s t u v w x y z a b
Eingang
H.
Programmausgabe:
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
Antworten:
GolfScript
48 75 73 70 67 66 63 5753Online-Demos:
Testfall 1 ('c')
Testfall 2 ('H.')
Testfall 3 (ungültige Eingabe)
Aktualisieren:
Nun ist auch die letzte Regel implementiert. Vielen Dank an Ventero für den Hinweis.
Aktualisieren:
Ich habe den Code von Grund auf neu geschrieben und neue Wege gefunden, ihn noch weiter zu verkürzen.
Änderungsverlauf:
quelle
If wrong input is send to the program it will not print anything.
C
135 129128 ZeichenVerdammt, so viele verschiedene magische Zahlen, aber keine Möglichkeit, sie loszuwerden.
Muss mit der Eingabe als Programmparameter ausgeführt werden. Nun folgt die Anforderung "Falscheingabe".
Erläuterung:
Der
**b+6&31
Teil verwendet die Tatsache, dass die ASCII-Codes für Klein- / Großbuchstaben gleich sind, wenn nur die letzten 5 Bits betrachtet werden und die verbleibenden 5 Bits im Bereich 1..26 liegen.Version ohne "Falscheingabe" -Anforderung (82 Zeichen):
quelle
test
test c
test X.
main(a,b)char**b;{
. Auchb++
würde man Sie ersetzen lassen*b[1]
->**b
undb[1][1]
->1[*b]
.Ruby,
727161 ZeichenDiese Ruby-Version verwendet einen regulären Ausdruck, um die Eingabe zu überprüfen. Glücklicherweise
succ
erledigt die Ruby-String-Methode den größten Teil der Arbeit für uns (einschließlich des Wraparounds).Edit: 61 Zeichen mit Hilfe von Chron und Ventero .
quelle
c=gets[0];25.times{$><<c.next![-1]+($1?$/:' ')}if~/^[a-z](\.)?$/i
gets;25.times{$><<$_=$_.next[0]+($1?$/:' ')}if~/^[a-z](\.)?$/i
- im Grunde das gleiche wie bei Ihnen nur zu missbrauchen$_
und$/
+=
anstelle von+
können Sie die Klammern herumwerfen$1?$/:' '
.Rubin:
12711392 (?) Zeichen(Ich kann die Regel zur Strafpunktzahl bei der Verwendung nicht finden
-p
. Momentan wurde 1 hinzugefügt. Falls falsch, korrigieren Sie mich bitte.)Probelauf:
quelle
Rubin,
10195Probieren Sie es online aus
quelle
('a'..'z').to_a
=>[*?a..?z]
GolfScript,
80 bis72 ZeichenEin Großteil des Codes prüft auf gültige Eingaben und die Option "Nichts drucken". Die tatsächliche Logik ist nur 37 Zeichen.
Testfälle online
quelle
q / k4
66 64 63 60 5856 + 2 StrafeStrafe für die globale Variable init, Algorithmus ist 56 wie folgt:
56
58
60
63
64
BEARBEITEN:
Für die globale Initialisierung (x :) wurde eine Strafe von 2 hinzugefügt. Dasselbe gilt, wenn die Umbruchfunktion in eckige Klammern gesetzt wird (wie von Slackware empfohlen) und
nicht sicher ist, ob das Ändern des Namespace ebenfalls bestraft werden soll. Dann sind es noch 3
Beispiel:
quelle
Perl,
1311271171121061041029896929190937166656458 ZeichenVerwendung:
Ein Zeichen wurde zur Zählung für die hinzugefügt
n
Option .Der größte Einschnitt war nur möglich, weil Jon Purdys Antwort das Verhalten von
++
Charakteren enthielt .quelle
s/a.$1/az/
um 2 weitere zu sparen.chop().($2?$/:$")
->chop,$2?$/:$"
für 4 weiterePerl,
149, 167Aktualisieren
quelle
$s=($d)?"\n":" ";
mit$s=$d?$/:$";
und vielleicht auch nur loswerden$s
insgesamtPython, 83
quelle
PHP,
120119113quelle
$v[1]=='.'?"\n":" "
das Ergebnis in der Variablen $ s zu speichern , berechnet PHP es jedes Mal in derecho
Anweisung. Auf diese Weise können Sie 6 Zeichen sparen.Mathematica
158 159 204 199 183 167 165162Code
Verwendung
quelle
J 43
Beispiele:
tuvwxyzabcdefghijklmn opqr
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
Diese Lösung wurde im J-Programmierforum entwickelt: http://jsoftware.com/pipermail/programming/2012-August/029072.html
Autoren: AlvordBossCerovskiCyrEllerHuiLambertMcCormickMillerQuintanaSchottSherlockTaylorTherriault
Erläuterung
J-Phrasen werden von rechts beginnend ausgeführt und geben das laufende Ergebnis bei der Auswertung nach links weiter. Da es interaktiv ist, können wir Teile der Lösung isoliert betrachten, um sie besser zu verstehen.
Der mittlere Teil generiert das Groß- und Kleinbuchstaben in Unicode:
Das Verb "u:" konvertiert sein numerisches Argument nach rechts in Unicode-Zeichen. Das numerische Argument wird aus den ASCII-Werten für die Groß- und Kleinbuchstaben generiert, indem die Zahlen für "A" und "a" zu den von "i.26" generierten Werten von 0 bis 25 addiert werden:
Der rechte Teil,
Nachschlagen (i.) der Position des rechten Arguments (]) im linken ([) - das ist der Vektor der darüber liegenden Buchstaben - und Ablegen (}.) eines weiteren (>:) als diese Zahl. Die "0" wendet diesen Ausdruck auf 0-dimensionale (skalare) Argumente an.
Die Phrase "25 {." Nimmt die ersten 25 Elemente des Vektors auf der rechten Seite.
Der vorletzte Ausdruck "1j1 #" auf der linken Seite wiederholt sein rechtes Argument entsprechend der Zahl auf der linken Seite. Eine einfache Zahl führt eine einfache Replikation durch:
Eine komplexe Zahl - angegeben durch das "j" zwischen Real- und Imaginärteil - fügt jedoch ein Füllelement entsprechend dem Imaginärteil ein. Hier geben wir ein Füllelement nach dem anderen rechts vom "j" an.
Wie bei den meisten J-Primitiven funktioniert das Replikatverb (#) bei numerischen Arrays auf analoge Weise wie bei Zeichenarrays. Wie hier gezeigt,
Wir sehen, dass das standardmäßige numerische Füllelement Null ist, während es bei Zeichen das Leerzeichen ist.
Schließlich transponiert das am weitesten links stehende Token "|:" das Ergebnis der vorhergehenden Verben nach rechts.
Erklärung von Devon McCormick. Vielen Dank, Devon.
quelle
Gehirnfick, 303
Momentan unterstützt es das
If wrong input is send to the program it will not print anything
Teil nicht und es kann wahrscheinlich kürzer sein. Ich plane es später zu reparieren. Im Moment ist mein Gehirn zu beschäftigt, um fortzufahren.quelle
C 110
Manchmal werden "Leerzeichen" zwischen Buchstaben gedruckt, manchmal nicht.
Etwas besser lesbar:
Läuft:
quelle
JavaScript, 137
Leider etwas wortreich (
String.fromCharCode
undcharCodeAt
).quelle
Perl,
77767068Bearbeitungen:
Speichert einen Charakter mit Regex anstelle von
substr
.Gespeichert 6 Zeichen mit
map
anstelle vonfor
.2 Zeichen durch Weglassen der letzten Zeile gespeichert.
quelle
\n
in Ihrem Finaleprint
erforderlich ist, was ein paar Zeichen\n
, danke.R 219
Hässlich, lange ... funktioniert immer noch.
Verwendung:
quelle
C, 146 Zeichen (schrecklich)
Ich bin nicht sehr erfahren in C, was wahrscheinlich zeigt ...>. <Ich hatte das Gefühl, dass Zeichen als ganze Zahlen hilfreich wären, aber es schien nicht so wirkungsvoll zu sein, wie ich es mir erhofft hatte ... Ich werde meinen Versuch jedoch hier lassen, zögern Sie nicht, Verbesserungen vorzuschlagen.
Unbegrenzte Version:
quelle
VBA 225
Formatiert für die Ausführung über das unmittelbare Fenster:
Zerlegt in einzelne Zeilen (muss von
Sub
Block umgeben sein und braucht eine andereprint
Methode, um in einem Modul zu arbeiten, wodurch der Code länger wird):quelle
Java 8, 127 Bytes
Erläuterung:
Probieren Sie es online aus.
quelle
Mumps,
91,86,82,79, 76Keine so moderne Sprache;) Ich bin mir sicher, dass noch ein bisschen Optimierungsraum übrig ist.
Erläuterung:
Eingabe lesen
Überprüfen Sie, ob t mit der erforderlichen Eingabe übereinstimmt
basic for blättert durch das alphabet. Beachten Sie, dass Mumps strikt von links nach rechts bewertet. True = 1, Sie erhalten also 65 oder 97 als Ergebnis für p, # ist der Modulo-Operator
Tests:
(Sie benötigen eine Mumps-Laufzeitumgebung, dh Caché, um dies auszuführen.)
Bearbeiten: Fettgedruckte Überschrift
edit: hatte eine falsche lösung, jetzt behoben. Vielen Dank an rtfs und Averroees für den Hinweis
quelle
JavaScript: 141
Kommentierte Version:
jsFiddle DEMO
quelle
Hier ist mein erster Versuch mit APL.
Wenn ich eine einzelne globale Variable verwenden
A←2 26⍴6↓26⌽⎕UCS 65+⍳58
kann, kann ich das Obige auf Folgendes kürzen:quelle
C ++ 11
quelle
C (111)
Präparation
Funktioniert] $ ./test 5
Works] $ ./test W XYZABCDEFGHIJKLMNOPQRSTUV
Works] $ ./test M NOPQRSTUVWXYZABCDEFGHIJKL
Works] $ ./test g hijklmnopqrstuvwxyzabcdef
Works] $ ./test [
Works] $ ./test a bcdefghijklmnopqrstuvwxyz
Funktioniert] $ ./test Z ABCDEFGHIJKLMNOPQRSTUVWXY
Vielen Dank für ein paar Denkanstöße.
quelle
[A-Za-z]\.?
stimmt, wenn ich die Frage richtig verstanden habe.Perl, 226 Zeichen
quelle
die
Aussage reduziert werden kann und ein Haufen gespart wird ...C # 170
Unkomprimiert
quelle
1
: Wenn der Buchstabe in Großbuchstaben geschrieben ist, muss das Alphabet in Großbuchstaben angezeigt werden.2
: Das gedruckte Alphabet muss mit dem vorangestellten Buchstaben des eingefügten Buchstabens enden.3
: Wenn der Eingabe ein zusätzlicher Parameter (ein einfacher Punkt) hinzugefügt wird, sollte das Alphabet in jeder Zeile einen Buchstaben enthalten. Andernfalls sollte das Alphabet in der gleichen Zeile gedruckt und durch ein einfaches Leerzeichen getrennt werden.4
: Wenn eine falsche Eingabe an das Programm gesendet wird, wird nichts gedruckt. Dies ist ein 4-von-4-Fehler.char
mitvar
und rasieren 1 Punkt die Punktzahl, verlieren die.ToCharArray()
(astring
ist ein char-Array können Sie bereits über Iterierte!), Verlieren diestring[] a
da Sie nicht mit Kommandozeilenargumente, verlieren den Namespace, Ihre Konstante ‚c‘ zu tun sollte von der Konsoleneingabe gelesen werden, die alphabetische Zeichenfolge verlieren und stattdessen ASCII verwenden usw. Es ist toll, dass Sie spielen, aber versuchen Sie bitte, sich anständig anzustrengen; Die meisten Einsendungen scheinen nur Trolling zu sein.C 117
Dank an schnaader für den Trick d + 6 & 31.
http://ideone.com/ts1Gs9
quelle
Bash: 110 Bytes
In Bezug auf die Erklärung ist es ziemlich einfach, keine Zaubertricks - dies ist nur etwas, wofür bash an sich gut geeignet ist. In Bezug auf die nicht offensichtlichen Teile:
{a..z}
ist ein sehr wenig benutzter Trick in der Bash - es erweitert sich zua b c d...
. Sie können das Gleiche tun, um numerische Sequenzen zu generieren.[[ $1 =~ [a-z] ]]
führt eine Regex-Übereinstimmung mit dem ersten Programmargument für Zeichen von a bis z aus. Ebenso für AZ. Sie benötigen doppelte eckige Klammern,[
können es aber nicht.${1:1:1}
Ruft einen Teilstring von $ 1 (das erste Argument) ab, ein Zeichen in, ein Zeichen lang - das heißt, es wird das zweite Zeichen des Strings zurückgegeben, wie wir es erwarten.
.sed 's/ /\n/g'
einfacher regulärer Ausdruck: Sucht und ersetzt Leerzeichen durch Zeilenumbrüche. Wenn.
es sich um das zweite Zeichen der Zeichenfolge handelt, leiten wir Eingaben an diese weiter oder auf andere Weise ...cat
ist der letzte Trick hier - wenn wir Leerzeichen nicht durch Zeilenumbrüche ersetzen wollen, geben wir stattdessen stdin an cat, was es einfach wieder ausgibt.quelle