IMPRIMEZ COMME CECI

17

Écrivez un programme qui prend une entrée dans STDIN et met toutes les lettres minuscules (y compris les lettres accentuées) dans le 2k-1e mot en majuscules et toutes les lettres majuscules (y compris les lettres accentuées) dans le 2ke mot en minuscules ( kest un entier positif). Le programme ne doit affecter aucun autre caractère dans aucun mot. Par exemple, si la chaîne est Ook! O0k!, alors la sortie devrait être OOK! o0k!.

Un nouveau mot est formé lorsqu'il y a une quantité d'espaces non nulle après un caractère non blanc. Les espaces au début d'une entrée doivent être ignorés. Si un mot ne contient aucun caractère modifié, le programme doit toujours le considérer comme un mot et continuer.

Exemples d'entrées (les différentes entrées sont séparées par une nouvelle ligne vierge)

Nineteen Eighty-Four (1984)

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

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

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

Exemples de sorties

NINETEEN eighty-four (1984)

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

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

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

C'est du golf de code, les gars. Les règles CG standard s'appliquent. Le programme le plus court en octets gagne.


Je suis presque sûr d'avoir couvert toutes les lacunes concernant les espaces et les caractères non alphabétiques, mais si j'en ai manqué, dites-le moi.


Merci à @Optimizer d' avoir créé l'extrait de code suivant. Pour l'utiliser, cliquez sur "Afficher l'extrait de code", faites défiler vers le bas et cliquez sur "► Exécuter l'extrait de code".

Arcturus
la source
5
Et les caractères accentués? Faut-il les ignorer? Les fonctions sont-elles autorisées?
Downgoat
Je n'avais pas de caractères accentués en tête quand j'ai écrit la question, mais je suppose qu'ils compteraient. Les fonctions sont autorisées.
Arcturus
Quels caractères d'espacement devons-nous prendre en compte? Pouvons-nous supposer que les caractères non blancs seront imprimables?
Dennis
Tous les caractères d'espacement, et oui.
Arcturus

Réponses:

4

Script Vim, 22 21 octets

nm Q vEUWvEuWQ|norm Q

Explication:

La première commande correspond Qà:

vEUrendre le mot en majuscule
Waller au mot suivant
vEufaire le mot en minuscule
Waller au mot suivant
Qrépéter le mappage récursif

et |norm Qexécute le mappage

Utilisation du programme

Voici comment faire lire Vim depuis stdin:

$ 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

Cela ouvrira Vim affichant ceci:

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
la source
6

GNU sed, 28

Le score inclut +2 pour -rzpassé à GNU sed.

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

Sortie test

$ 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~~~
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
$ 
Traumatisme numérique
la source
5

Perl, 26 octets

Code de 25 octets + ligne de commande de 1 octet

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

Merci à ThisSuitIsBlackNot pour avoir corrigé quelques bugs!

Usage:

perl -p entry.pl
Jarmex
la source
3

Pyth, 23

jdmjbmrk=xZ!!kcdbcjb.zd

Essayez-le en ligne ou exécutez la suite de tests

Alterne entre pyth loweret upperfonctions, qui sont r...0ou r...1. Cela affectera probablement les caractères unicode, en attendant la clarification de l'OP pour changer.

J'ai l'impression que quelque chose doit être jouable au golf. En particulier le XOR pour changer le commutateur sur lequel upper/ qui lowerdoit être utilisé.

FryAmTheEggman
la source
Si j'ai bien interprété la question, la saisie A\nBdoit s'imprimer A\nb.
Dennis
Ce n'est pas une interprétation correcte de la question. A new word is formed when there is a nonzero amount of whitespace after a non-whitespace character.La sortie pour A\nBest A\NB. Mais il semble que votre réponse CJAM soit exacte.
Arcturus
@Dennis merci, devrait être corrigé maintenant.
FryAmTheEggman
2

Perl, 87 octets

Après avoir baisé avec les expressions régulières et mappendant un certain temps, je n'ai pas pu trouver de solution élégante, voici donc le résultat:

@a=split(" ",lc(<>));while($i<=$#a/2){@a[$i*2]=uc(@a[$i*2]);$i++;}print(join(" ", @a));
Codefun64
la source
1
Belle solution. <STDIN> pourrait-il être remplacé par <> pour économiser quelques octets? De plus, le $ i = 0 pourrait-il être ignoré?
steve
@steve Merci; et oui, avec un correctif mineur (testé avec une entrée différente, et il y avait une petite erreur), sont maintenant inclus. Merci pour les idées! Je suis très habitué au codage explicite et verbeux: P
Codefun64
1
@ Codefun64 Bienvenue chez PPCG! Vous pouvez ignorer la plupart de vos parenthèses pour enregistrer plus d'octets car ils sont facultatifs en Perl, par exemple. lc(<>), pourrait l'être lc<>et l'utilisation d'un modificateur de déclaration pour votre whilepermet également d'ignorer les parenthèses, par exemple. print$i++while$i<10par rapport à while($i<10){print$i++}. Il y a une page utile qui m'a beaucoup aidé. Astuce pour jouer au golf à Perl
Dom Hastings
2

Rubis, 56 octets

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

JavaScript ES6, 74 71 octets

.toUpperCase()et .toLowerCase()abattre absolument le nombre d'octets (ajoute 32 octets 0.o). La plupart des solutions de contournement se retrouvent cependant avec plus d'octets

s=>s.replace(/(\S+\s*)(\S*)/g,(_,a,b)=>a.toUpperCase()+b.toLowerCase())
Downgoat
la source
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()}

Pas aussi propre que je l'espérais, ce qui semble être un thème avec mes réponses Groovy.

  • +17 pour corriger le comportement avec le premier espace blanc
  • -5 pour supprimer la nouvelle ligne de fin et passer de .isEmpty () à .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
la source
1

Lua, 96 octets

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
la source
Cela imprime un nombre après la sortie.
Trebuchette
1

Python 3, 103 95 octets

print(' '.join(b.lower()if a%2 else b.upper()for a,b in enumerate(input().strip().split(' '))))
Zach Gates
la source
Vous pouvez remplacer le conditionnel par [b.upper(),b.lower()][a%2]pour économiser 4 octets (en supposant que je compte correctement sur mobile).
PurkkaKoodari
1

STATA, 252 octets

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']
}

Attend l'entrée en tant que fichier csv (une colonne) appelé ab

Explication:

Lire les données (le nom de variable par défaut est v1, raccourcissable en v). Faites une nouvelle variable b égale au premier mot (jeton séparé par un espace) de v pour chaque ligne. Pour chaque ligne, alors que le mot suivant n'est pas vide (ne se produit que s'il n'y a plus de caractères sur cette ligne), remplacez le mot en v par la version en majuscule ou en minuscule de ce mot dans la ligne actuelle, selon le nombre (mod 2 ) des mots ont déjà été trouvés. Obtenez ensuite le mot suivant et répétez. Imprimez la ligne entière lorsque vous avez terminé.

bmarks
la source
1

Delphi, 290 octets

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.

Pas vraiment une bonne langue pour jouer au golf avec ...

James
la source
Bienvenue sur Programmation Puzzles & Code Golf!
Dennis
1

Lua, 88 octets

a=io.read():gsub("%g+",function(s)m=not m return m and s:upper()or s:lower()end)print(a)
Trébuchette
la source
1

CJam, 28 octets

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

J'envisage actuellement les 33 premiers caractères ASCII / Unicode (et seulement ceux-ci). J'attends des éclaircissements pour savoir si c'est valide ou non.

Essayez-le en ligne dans l' interpréteur CJam .

Dennis
la source
1

Pyth, 17 22 octets

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

Essayez-le ici

taper
la source
Le boîtier spatial principal échoue mais reste agréable.
tjbtech
Cela ne gère pas non plus la saisie sur plusieurs lignes et imprime un espace de fin.
FryAmTheEggman
Je refaçonnerai quand je le pourrai, merci: D
clap
0

C #, 104 100 99 octets

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

C'est 79 octets avec

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

la source