Dies ist eine relativ schnelle, aber ich bin sicher, dass es Ihnen gefallen wird.
Codegolf ist ein Programm, das Eingaben in Form eines Satzes vornimmt und dann die Ausgabe mit dem ersten Buchstaben in Großbuchstaben für jedes Wort liefert.
Regeln:
Beiträge dürfen nicht in Form einer Funktion eingereicht werden. Also nein:
function x(y){z=some_kind_of_magic(y);return z;}
als endgültige Antwort ... Ihr Code muss zeigen, dass er Eingaben akzeptiert und Ausgaben liefert.Der Code muss alle anderen Großbuchstaben der Eingabe beibehalten. So
eCommerce and eBusiness are cool, don't you agree, Richard III?
wird gerendert als
ECommerce And EBusiness Are Cool, Don't You Agree, Richard III?
Einige von Ihnen denken vielleicht: "Einfach, ich benutze nur Regex!" Wenn Sie also die native Regex in der von Ihnen gewählten Golfsprache verwenden, wird eine 30-Zeichen-Strafe verhängt, die auf Ihre endgültige Codezählung angewendet wird. Böses Lachen
Ein "Wort" ist in diesem Fall alles, was durch ein Leerzeichen getrennt ist. Daher
palate cleanser
ist zwei Wörter, währendpigeon-toed
ein Wort betrachtet wird.if_you_love_her_then_you_should_put_a_ring_on_it
wird als ein Wort angesehen. Beginnt ein Wort mit einem nicht alphabetischen Zeichen,_this
bleibt das Wort erhalten, sodass es nach dem Rendern unverändert bleibt_this
. (Ein großes Lob an Martin Buttner für den Hinweis auf diesen Testfall).- 4b. Es gibt keine Garantie dafür, dass Wörter in der Eingabephrase durch ein einzelnes Leerzeichen getrennt werden.
Testfall (bitte zum Testen des Codes verwenden):
Eingang:
eCommerce rocks. crazyCamelCase stuff. _those pigeon-toed shennanigans. Fiery trailblazing 345 thirty-two Roger. The quick brown fox jumped over the lazy dogs. Clancy Brown would have been cool as Lex Luthor. good_bye
Ausgabe:
ECommerce Rocks. CrazyCamelCase Stuff. _those Pigeon-toed Shennanigans. Fiery Trailblazing 345 Thirty-two Roger. The Quick Brown Fox Jumped Over The Lazy Dogs. Clancy Brown Would Have Been Cool As Lex Luthor. Good_bye
Das ist Code Golf, der kürzeste Code gewinnt ...
Viel Glück...
quelle
Antworten:
CJam,
1513 BytesProbieren Sie es online im CJam-Interpreter aus .
Pseudocode
Alle geänderten Zeichen C verbleiben auf dem Stapel und werden daher beim Verlassen gedruckt.
quelle
CSS 2.1, 49
Erklärung :
attr
Funktion übernimmt die Eingabe von einemt
(Text-) HTML-Attribut.text-transform
auf großgeschriebencapitalize
.content
Eigenschaft eines Pseudoelements bereitgestellt .::after
Runnable-Snippet :
Hinweis : CSS 2.1 hat das gewünschte Verhalten angegeben:
capitalize
Großbuchstaben für jedes Wort. In CSS3 wird jedoch der erste typografische Buchstabe jedes Wortes in Großbuchstaben geschrieben . Das obige Snippet funktioniert also auch nicht mit dem alten IE, der CSS 2.1 nicht gefolgt ist. noch auf neuen kompatiblen Browsern, die CSS3 folgen.quelle
_those
Schade um das Problem in CSS3-Browsern, aber ich bin immer noch auf dem neuesten Stand wegen der einzigartigen Art und Weise, das Problem zu lösen.)Javascript ( ES6 ), 77 Byte
Kommentiert
quelle
x&&
. Eine leere Zeichenfolge ist falsch, daher schließt sie&&
kurz und gibt den linken Operanden zurück, die leere Zeichenfolge. Leerzeichen bleiben erhalten.Perl, 13 Bytes
9 Bytes plus 4 Bytes für
040p
(vorausgesetzt, ich habe die Regeln für Spezialaufrufe richtig interpretiert ).-040
Setzt das Trennzeichen$/
für Eingabedatensätze auf ein einzelnes Leerzeichen, sodass Leerzeichen erhalten bleiben. Die\u
Escape-Sequenz konvertiert das nächste Zeichen in die Groß- und Kleinschreibung.quelle
CJam,
1715 BytesTeste es hier.
Ziemlich unkomplizierte Umsetzung der Spezifikation. Nutzen Sie das Neue
{}&
, um Fehler bei aufeinanderfolgenden Leerzeichen zu vermeiden.Zwei von Dennis gespeicherte Bytes.
quelle
+
, bricht dies ab, wenn die Eingabe nachgestellte Leerzeichen enthält.C,
6463 BytesFix: Einige Compiler (wie Clang) mögen keine int-Parameter anstelle von argv, deshalb habe ich sie in eine globale Variable verschoben. Die Byteanzahl bleibt gleich. Dank squeamish Ossifrage für das Bemerken. Bis zu 63 Bytes, danke Dennis.
Ungolfed:
Ganz einfach: Wenn a falsch ist, wird das Zeichen in Großbuchstaben umgewandelt. Es wird nach dem Lesen eines Leerzeichens gesetzt: c - '' ist nur dann falsch, wenn c == '' ist. toupper () ignoriert alles, was kein Kleinbuchstabe ist, so dass Symbole und mehrere Leerzeichen in Ordnung sind. In -1 sind alle Bits gesetzt. Wenn also getchar () -1 zurückgibt, macht der NOT-Operator den Wert zu Null und die Schleife stoppt. a wird als globale Variable deklariert und daher mit Null (false) initialisiert. Dies stellt sicher, dass das erste Wort groß geschrieben wird.
quelle
while(~(c=getchar())
- Ich mag es. Clang wird dies nicht kompilieren, aber Sie können die gleiche Anzahl von Zeichen mitc;main(a){...}
a
undc
und die Reihenfolge des ternären Operator können Sie ersetzen==
mit-
einem Byte zu speichern.while(!(c = getchar()))
, oder?~
und das Logische!
sind nicht dasselbe. In C wird alles, was nicht Null ist, als wahr angesehen, so dass Ihre Bedingung wiewhile((c = getchar()) == 0)
die wäre, die natürlich nicht funktioniert. Der bitweise NOT-Operator~
negiert den Wert bitweise. Um die Schleife~c
zu unterbrechen, muss Null sein: Dies bedeutet, dass alle Bits Eins sein müssen, damit sie bei Negation alle Nullen werden. Dieser Wert (für ein 32-Bit-Int)0xFFFFFFFF
ist-1
(EOF) , wenn er signiert ist .Python 3,
5956 BytesDanke an @Reticality für 3 Bytes.
quelle
print(end=f*c.upper()or c)
? Das würde 4 Bytes sparenPerl-Version <5.18,
3027262524
Zeichen+1
für-n
.\u
Legt das nächste Zeichen in Großbuchstaben fest . @ThisSuitIsBlackNot wies darauf hin, um 1 Byte zu sparen. Bevor wir die Funktion verwendetenucfirst
.Von den perldocs ,
Da
$"
ein Leerzeichen ausgewertet wird, bleiben die Leerzeichen erhalten. Da wir beide$,
ein Leerzeichen setzen und ein Leerzeichen in die Teilung eingeben möchten, hat @nutki darauf hingewiesen, dass wir beide als Eingabe für die Teilung ausführen können. Das spart 3 Bytes von dem, was wir vorher hatten, was zuerst eingestellt$,
und dann$"
in die Aufteilung eingegeben wurde .Die Verwendung einer
,
for-Map anstelle von{}
speichert ein zusätzliches Byte, wie @ alexander-brett hervorhob.Laufen mit:
quelle
...map"\u$_",split...
> <> (Fisch) , 39 Bytes
Methode:
a-z
Drucken Sie es dann aus. (Code von links nach rechts für diesen Teil isti::'backquote')$'{'(*' '*+
)quelle
JAVA, 273 Bytes
BEARBEITEN
quelle
public
vor demclass
.. Und wenn du meinst, er kann daspublic
vor dem entfernenstatic void main(...
, dann liegst du falsch, es sei denn er ändert auch dasclass
aufinterface
und benutzt Java 8+.JavaScript (Regex-Lösung) - 104 Byte
Jemand muss die Kugel beißen und die RegEx-Lösung posten! 74 Zeichen plus 30 Zeichen Strafe:
Oder wenn Sie den Code nicht komprimiert lesen und verstehen möchten:
quelle
Python 2, 73 Bytes
Bei diesem Programm wird ein Buchstabe mit einem vorangestellten Leerzeichen großgeschrieben (mit einem Klumpen für das erste Zeichen in der Zeichenfolge). Die
.upper()
korrekte Großschreibung basiert auf der String-Methode.quelle
raw_input
input
print
print()
PHP 64
7677838489BytesZählt
$_GET
als Eingabe in PHP?Wenn ja, hier ist mein erster CG-Versuch
Danke manatwork :)
Man könnte einfach die
ucwords
Funktion verwenden, die 21 Bytes ergeben würde:danke Harry Mustoe-Playfair :)
quelle
fgets(STDIN)
Eingaben zum Lesen.$_GET
Soweit ich weiß, besteht jedoch kein Konsens .$k=>
. Setzen Sie es zurück:foreach(split(' ',$_GET[@s])as$k=>$v)echo$k?' ':'',ucfirst($v);
Haskell, 69
Erläuterung:
scanl
Nimmt eine Funktion(a -> b -> a)
und einen Anfangswerta
und iteriert dann über eine Liste von[b]
s, um eine Liste von[a]
s zu erstellen:Das vorherige Ergebnis wird wiederholt als linkes Argument der übergebenen Funktion und ein Wert aus der Eingabeliste als rechtes Argument verwendet , um das nächste zu erstellen.
Ich habe eine Funktion geschrieben
(!) :: Char -> Char -> Char
, die das richtige Zeichen zurückgibt, das Sie übergeben, aber es großschreibt, wenn das linke Zeichen' '
(Leerzeichen) ist. Fürscanl
bedeutet dies: Den Wert aus der Eingabeliste zurückgeben , ihn aber großschreiben, wenn das vorherige Ergebnis ein Leerzeichen war. Soscanl (!) ' ' "ab cd"
wird:Wir brauchen den Anfangswert
' '
, um den ersten Buchstaben groß zu schreiben, aber dann hacken wir ihn mit abtail
, um unser Endergebnis zu erhalten.quelle
scanl
paar Beispiele: eins , zwei .Pyth, 20 Bytes
Diese mehreren Räume sind wirklich scheiße. Sonst hätte es eine wirklich einfache 12-Byte-Lösung gegeben.
Probieren Sie es online aus: Pyth Compiler / Executor
Erläuterung
edit: 16 Zeichen sind mit dem @ Tennis-Algorithmus möglich.
quelle
CJam, 14 Bytes
Es ist nicht die kürzeste, aber ...
Eine andere Antwort mit ähnlichen Ideen:
.x
Ändert das erste Element nur, wenn einer der Parameter nur ein Element enthält.quelle
f
und.
ist ziemlich genial. Weitere 14-Byte-Variante:qS/Sf.{\eu}S.-
Lua,
646261 BytesLua ist eine schreckliche Sprache zum Golfspielen, deshalb bin ich ziemlich stolz auf mich.
[Versuchen Sie es hier]1 Veraltet, wird morgen aktualisiertquelle
abc_def
geben SieAbc_Def
. Es sollten jedoch nur Buchstaben nach Leerzeichen in Großbuchstaben umgewandelt werden. Die gute Nachricht ist, dass ein Byte eingespart wird, wenn das Problem behoben wird. ;)Java, 204
211226BytesMein erster Eintrag auf CG, ich hoffe es ist in Ordnung:
7 Bytes dank @TNT gespart
quelle
public class U{public static void main(String[]s){int i=-1,j;char[]r=s[0].toCharArray();for(char c:r)if(++i==0||c==' '&&i>0)r[j=i+(i==0?0:1)]=Character.toUpperCase(r[j]);System.out.print(r);}}
public
Modifikator ist nicht erforderlich, Sie können also weitere 7 speichern.PHP:
7674 ZeichenProbelauf:
quelle
ucfirst($c)
Verwenden Sie stattdessen$c^' '
. (Tipp: Wenn Siebitwise-xor
einen Buchstaben mit einem Leerzeichen haben, wird er von Groß- in Kleinbuchstaben konvertiert, und das Gegenteil gilt auch)$l=str_split(fgets(STDIN))
, den Code um 2 Bytes zu reduzieren!C 74 Bytes
Es werden keine Annahmen über den Laufzeitzeichensatz getroffen (ASCII, EBCDIC, Baudot, ... was auch immer). Nimmt an, dass EOF negativ ist (ich denke, C garantiert das).
a ist das Eingabezeichen; b ist wahr, wenn das letzte Zeichen ein Leerzeichen war. Das einzige nicht offensichtliche Problem ist, dass wir die Tatsache verwenden, dass
putchar
das gedruckte Zeichen zurückgegeben wird, wenn kein Fehler vorliegt.quelle
C # Linq - 187
Dies ist bei weitem nicht zu gewinnen, aber ich liebe Linq einfach zu sehr.
quelle
Vim,
11, 10 BytesErläuterung:
Bekomme ich ein goldenes Abzeichen dafür, dass ich Dennis übervorteilt habe?
quelle
Bash, 61
Beachten Sie, dass die Doppelpunkte lediglich dazu dienen, das Programm hier in Ordnung zu bringen. In Wirklichkeit kann es sich dabei um ein nicht druckbares Zeichen handeln, z. B. BEL.
Ausgabe
Bash, 12
Leider behält dieses keine führenden / mehrfachen / nachfolgenden Leerzeichen bei, aber ansonsten funktioniert es:
Ausgabe
quelle
Pip , 15 + 1 für
-s
= 16Erläuterung:
Ein interessantes Merkmal von Pip, auf das dieses Programm zurückgreift, ist der
:
Zuweisungs-Metaoperator. Die meisten C-ähnlichen Sprachen haben eine Reihe von Compute-and-Assign-Operatoren: z. B.x*=5
das Gleiche wiex=x*5
. In Pip, jedoch können Sie tack:
auf jeden Bediener und machen es zu einem Rechen-and-assign - Operator. Dies gilt auch für unäre Operatoren. So-:x
berechnet-x
und weist sie zurück , umx
das gleiche wie,x:-x
tun würde. In diesem Fall,UC:
wird (zusammen mit Pips veränderlichen Zeichenfolgen) das erste Zeichen eines Wortes in Großbuchstaben geschrieben.Das Programm nimmt Eingaben über die Befehlszeile entgegen und erfordert einen Aufruf wie diesen:
quelle
C 125
Nicht die kürzeste Lösung, aber ich spiele sehr gerne Golf in C.
ungolfed:
Ich weiß nicht, ob die Verwendung von Regex-ähnlicher Syntax
scanf
die Regeln übertrifft, aber es funktioniert ganz gut. (Nun, technisch ist es keine vollständige Regex)Eine andere zu berücksichtigende Sache ist, dass dieser Code nur für Wörter funktioniert, die kürzer als 99 Bytes sind. Aber ich denke, diese Lösung wird in den meisten Fällen funktionieren.
quelle
Haskell: 127 Zeichen
quelle
PHP, 82
Verwendung :
quelle
C #,
133131quelle
&&c!=32
? Ich spreche nicht fließend C #, aber ich würde vermuten, dass das Konvertieren eines Leerzeichens in Großbuchstaben zu einem Leerzeichen führt.Mathematica, 66 Bytes
Ich würde verwenden
ToCamelCase
, aber es wird der Abstand nicht beibehalten.quelle
R
139105 BytesUngolfed + Erklärung:
R mit Regex,
4941 + 30 = 71 BytesIch bin wirklich verblüfft. Dies hat tatsächlich eine bessere Punktzahl mit regulären Ausdrücken mit der Strafe.
Dies entspricht einem einzelnen Zeichen am Anfang der Zeichenfolge oder nach einer beliebigen Anzahl von Leerzeichen und ersetzt es durch eine Großbuchstabenversion des Captures. Beachten Sie, dass die Bewerbung
\\U
legitim ist und keine Auswirkungen auf Nicht-Briefe hat.pe=T
wird interpretiert alsperl = TRUE
es die teilweise Übereinstimmung von Funktionsparametern und dem Synonym für R ausnutztTRUE
. Aus irgendeinem Grund verwendet R standardmäßig keinen regulären Ausdruck im Perl-Stil.Vielen Dank an MickyT, der 8 Bytes beim Regex-Ansatz gespart hat!
quelle
(^.| +.)
. Alles ist in Ordnung.