DRUCKEN wie DIESES

17

Schreiben Sie ein Programm, das eine Eingabe in STDIN vornimmt und alle Kleinbuchstaben (einschließlich Akzentbuchstaben) in 2k-1Großbuchstaben und alle Großbuchstaben (einschließlich Akzentbuchstaben) in 2kKleinbuchstaben ( kpositive Ganzzahl) schreibt. Das Programm sollte keine anderen Zeichen in einem Wort beeinflussen. Wenn die Zeichenfolge beispielsweise "" lautet Ook! O0k!, sollte die Ausgabe "" lauten OOK! o0k!.

Ein neues Wort wird gebildet, wenn nach einem Nicht-Leerzeichen ein Leerzeichen ungleich Null steht. Leerzeichen am Anfang einer Eingabe sollten ignoriert werden. Wenn ein Wort keine geänderten Zeichen enthält, sollte das Programm es dennoch als Wort betrachten und fortfahren.

Beispieleingaben (Unterschiedliche Eingaben werden durch eine Leerzeile getrennt)

Nineteen Eighty-Four (1984)

Programming Puzzles & Code Golf   - 
Hooray for Code Golf Stack Exchange!

     2be or not 2be, that is the ~~~QuEsTiOn~~~

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

Beispielausgaben

NINETEEN eighty-four (1984)

PROGRAMMING puzzles & code GOLF   - 
HOORAY for CODE golf STACK exchange!

     2BE or NOT 2be, THAT is THE ~~~question~~~

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

Das ist Codegolf, Jungs. Es gelten die Standard-CG-Regeln. Kürzestes Programm in Bytes gewinnt.


Ich bin mir ziemlich sicher, dass ich alle Lücken in Bezug auf Leerzeichen und Nicht-Buchstaben-Zeichen geschlossen habe, aber wenn ich welche verpasst habe, sag es mir bitte.


Vielen Dank an @Optimizer für das Erstellen des folgenden Code-Snippets. Klicken Sie dazu auf "Code-Snippet anzeigen", scrollen Sie nach unten und klicken Sie auf "► Code-Snippet ausführen".

Arcturus
quelle
5
Was ist mit Zeichen mit Akzent? Müssen wir diese ignorieren? Sind Funktionen erlaubt?
Downgoat
Ich hatte keine Akzentzeichen im Sinn, als ich die Frage schrieb, aber ich nehme an, sie würden zählen. Funktionen sind erlaubt.
Arcturus
Welche Leerzeichen müssen wir berücksichtigen? Können wir davon ausgehen, dass Nicht-Leerzeichen druckbar sind?
Dennis
Alle Leerzeichen und ja.
Arcturus

Antworten:

4

Vim-Skript, 22 21 Bytes

nm Q vEUWvEuWQ|norm Q

Erläuterung:

Der erste Befehl entspricht Q:

vEUwort groß
Wschreiben zum nächsten wort
vEuschreiben wort klein
Wschreiben zum nächsten wort
Qwiederholen rekursive Zuordnung

und |norm Qführt das Mapping aus

Nutzung des Programms

So bringt man Vim dazu, von stdin zu lesen:

$ vim - -c 'nm Q vEUWvEuWQ|norm Q'
Vim: Reading from stdin
This is the first line!
This is the second line!
This is the third and last line I type to check if this works!
^D

Dies öffnet Vim und zeigt Folgendes an :

THIS is THE first LINE.
this IS the SECOND line.
THIS is THE third AND last LINE i TYPE to CHECK if THIS works!
~
~
~
wefwefa3
quelle
6

GNU sed, 28

Die Punktzahl enthält +2 für -rzan GNU sed übergeben.

s/(\S+\s*)(\S*)/\U\1\L\2/g

Ausgang testen

$ for t in 'Nineteen Eighty-Four (1984)' \
> 'Programming Puzzles & Code Golf   - 
> Hooray for Code Golf Stack Exchange!' \
> '     2be or not 2be, that is the ~~~QuEsTiOn~~~' \
> '++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.'; do
> echo "$t" | sed -zrf PRINTlikeTHIS.sed
> done
NINETEEN eighty-four (1984)
PROGRAMMING puzzles & code GOLF   - 
HOORAY for CODE golf STACK exchange!
     2BE or NOT 2be, THAT is THE ~~~question~~~
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
$ 
Digitales Trauma
quelle
5

Perl, 26 Bytes

25 Byte Code + 1 Byte Befehlszeile

s/\S+/++$i%2?uc$&:lc$&/eg

Vielen Dank an ThisSuitIsBlackNot für die Behebung einiger Fehler!

Verwendung:

perl -p entry.pl
Jarmex
quelle
3

Pyth, 23

jdmjbmrk=xZ!!kcdbcjb.zd

Probieren Sie es online aus oder führen Sie die Testsuite aus

Wechselt zwischen Pyths lowerund upperFunktionen, die r...0oder sind r...1. Dies wirkt sich wahrscheinlich auf Unicode-Zeichen aus, die auf eine Änderung der OP-Erklärung warten.

Ich habe das Gefühl, dass etwas golfen kann. Insbesondere die XOR-Funktion zum Ändern des Schalters, der von upper/ verwendet lowerwerden soll.

FryAmTheEggman
quelle
Wenn ich die Frage richtig interpretiert habe, A\nBsollte die Eingabe gedruckt werden A\nb.
Dennis
Das ist keine korrekte Interpretation der Frage. A new word is formed when there is a nonzero amount of whitespace after a non-whitespace character.Die Ausgabe für A\nBist A\NB. Aber Ihre CJAM-Antwort hat es anscheinend richtig gemacht.
Arcturus
@Dennis danke, sollte jetzt behoben sein.
FryAmTheEggman
2

Perl, 87 Bytes

Nachdem mapich mit beiden regulären Ausdrücken und für eine Weile geschraubt hatte, konnte ich keine elegante Lösung finden, also ist dies das Ergebnis:

@a=split(" ",lc(<>));while($i<=$#a/2){@a[$i*2]=uc(@a[$i*2]);$i++;}print(join(" ", @a));
Codefun64
quelle
1
Gute Lösung. Könnte <STDIN> durch <> ersetzt werden, um ein paar Bytes zu sparen? Könnte auch das $ i = 0 übersprungen werden?
Steve
@ Steve Danke; und ja, das zusammen mit einer kleinen Korrektur (getestet mit einer anderen Eingabe, und es hatte einen kleinen Fehler) sind jetzt enthalten. Danke für die Ideen! Ich bin sehr an ausführliche, explizite Codierung
gewöhnt
1
@ Codefun64 Willkommen bei PPCG! Sie können die meisten Ihrer Klammern überspringen, um mehr Bytes zu sparen, da diese in Perl optional sind, z. lc(<>), könnte lc<>und die Verwendung eines Anweisungsmodifikators für Ihre whileermöglicht es Ihnen, die Klammer zu überspringen, z. print$i++while$i<10vs. while($i<10){print$i++}. Es gibt eine nützliche Seite, die mir sehr geholfen hat. Tipp zum Golfen in Perl
Dom Hastings
2

Ruby, 56 Bytes

$><<gets.gsub(/\S+/){($.+=1)%2>0?$&.downcase: $&.upcase}
daniero
quelle
2

JavaScript ES6, 74 71 Bytes

.toUpperCase()und .toLowerCase()schlachten Sie die Byteanzahl absolut ab (addiert 32 Bytes 0.o). Die meisten Workarounds haben jedoch mehr Bytes

s=>s.replace(/(\S+\s*)(\S*)/g,(_,a,b)=>a.toUpperCase()+b.toLowerCase())
Downgoat
quelle
1

Groovy, 108 125 120

System.in.eachLine{def b;it.split(" ").any{if(!it.empty)b=!b;print "${b?it.toUpperCase():it.toLowerCase()} "};println()}

Nicht so sauber, wie ich es mir erhofft hatte, was ein Thema für meine Groovy-Antworten zu sein scheint.

  • +17, um das Verhalten mit führenden Leerzeichen zu korrigieren
  • -5 zum Entfernen von nachgestellten Zeilenumbrüchen und zum Wechseln von .isEmpty () nach .empty

 

$ cat tests.txt 
Nineteen Eighty-Four (1984)

Programming Puzzles & Code Golf   - 
Hooray for Code Golf Stack Exchange!

     2be or not 2be, that is the ~~~QuEsTiOn~~~

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
$ groovy PRINTlikeTHIS.groovy < tests.txt 
NINETEEN eighty-four (1984) 

PROGRAMMING puzzles & code GOLF   - 
HOORAY for CODE golf STACK exchange! 

     2BE or NOT 2be, THAT is THE ~~~question~~~ 

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. 
Una
quelle
1

Lua, 96 Bytes

i=0 print(io.read'*l':gsub('%S+',function(x)i=i+1 return i%2==1 and x:upper() or x:lower()end))
Anon
quelle
Dies gibt eine Zahl nach der Ausgabe aus.
Trebuchette
1

Python 3, 103 95 Bytes

print(' '.join(b.lower()if a%2 else b.upper()for a,b in enumerate(input().strip().split(' '))))
Zach Gates
quelle
Sie können die Bedingung durch ersetzen [b.upper(),b.lower()][a%2], um 4 Bytes zu sparen (vorausgesetzt, ich habe auf dem Handy richtig gezählt).
PurkkaKoodari
1

STATA, 252 Bytes

insheet using a.b
g b=word(v,1)
gl c=0
forv x=1/`=_N'{
loc d=1
while b[`x']!=""{
if !$c replace v=subinword(v,b,upper(b),1) if `x'==_n
if $c replace v=subinword(v,b,lower(b),1) if `x'==_n
loc ++d
replace b=word(v,`d') if `x'==_n
gl c=1-$c
}
di v[`x']
}

Erwartet die Eingabe als CSV-Datei (eine Spalte) mit dem Namen ab

Erläuterung:

Daten einlesen (Standardvariablenname ist v1, verkürzbar auf v). Machen Sie eine neue Variable b gleich dem ersten Wort (durch Leerzeichen getrenntes Token) von v für jede Zeile. Ersetzen Sie für jede Zeile, während das nächste Wort nicht leer ist (nur, wenn in dieser Zeile keine Zeichen mehr vorkommen), das Wort in v durch die Groß- oder Kleinbuchstabenversion dieses Wortes in der aktuellen Zeile, je nachdem wie viele (Mod 2) ) Wörter wurden bereits gefunden. Dann nimm das nächste Wort und wiederhole es. Drucken Sie die gesamte Zeile aus, wenn Sie fertig sind.

Markierungen
quelle
1

Delphi, 290 Bytes

program P;uses SysUtils;var s:string;i:word;w:byte;f:boolean;begin repeat readln(s);w:=0;f:=false; for I:=1 to length(s) do begin if s[i]>' ' then begin if w=0 then f:=not f;w:=1;if f then s[i]:=uppercase(s[i])[1] else s[i]:=lowercase(s[i])[1] end else w:=0 end;writeln(s)until false;end.

Nicht wirklich eine gute Sprache zum Golfspielen mit ...

James
quelle
Willkommen bei Programming Puzzles & Code Golf!
Dennis
1

Lua, 88 Bytes

a=io.read():gsub("%g+",function(s)m=not m return m and s:upper()or s:lower()end)print(a)
Trebuchette
quelle
1

CJam, 28 Bytes

q{C' >Sc'!<*X^:XCelCeu?:S}fC

Ich betrachte derzeit die ersten 33 ASCII / Unicode-Zeichen (und nur diese) Whitespace. Ich warte auf eine Klärung, um zu wissen, ob dies gültig ist oder nicht.

Probieren Sie es online im CJam-Interpreter aus .

Dennis
quelle
1

Pyth, 17 22 Bytes

FGcwd=+YrG=Z%+1Z2;jdY

Probieren Sie es hier aus

klatschen
quelle
Führender Raumfall scheitert aber trotzdem schön.
tjbtech
Dies behandelt auch keine Eingaben in mehr als einer Zeile und gibt ein nachgestelltes Leerzeichen aus.
FryAmTheEggman
Ich werde umgestalten, wenn ich kann, danke: D
klatschen
0

C #, 104 100 99 Bytes

static void Main(){string.Join(" ","".Split(' ').Select((o,i)=>i++%2==0?o.ToUpper():o.ToLower()));}

Es ist 79 Bytes mit

string.Join(" ","".Split(' ').Select((o,i)=>i++%2==0?o.ToUpper():o.ToLower()));

quelle