IMPRIMA así

17

Escriba un programa que tome una entrada a STDIN y haga todas las letras minúsculas (incluidas las letras acentuadas) en la 2k-1palabra mayúscula y todas las letras mayúsculas (también las letras acentuadas) en la 2kpalabra minúscula ( kes un entero positivo). El programa no debe afectar a otros caracteres en ninguna palabra. Por ejemplo, si la cadena es Ook! O0k!, entonces la salida debería ser OOK! o0k!.

Se forma una nueva palabra cuando hay una cantidad distinta de espacio en blanco después de un carácter que no es un espacio en blanco. El espacio en blanco al comienzo de una entrada debe ignorarse. Si una palabra no contiene ningún carácter modificado, el programa aún debe considerarla como una palabra y continuar.

Entradas de muestra (las diferentes entradas están separadas por una nueva línea en blanco)

Nineteen Eighty-Four (1984)

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

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

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

Resultados de muestra

NINETEEN eighty-four (1984)

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

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

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

Este es el código de golf, amigos. Se aplican las reglas estándar de CG. El programa más corto en bytes gana.


Estoy bastante seguro de que cubrí todas las lagunas relacionadas con los espacios en blanco y los caracteres que no son letras, pero si me he perdido alguno, dígame.


Gracias a @Optimizer por crear el siguiente fragmento de código. Para usar, haga clic en "Mostrar fragmento de código", desplácese hasta la parte inferior y haga clic en "► Ejecutar fragmento de código".

Arcturus
fuente
55
¿Qué pasa con los caracteres acentuados? ¿Tenemos que ignorar esos? ¿Se permiten funciones?
Downgoat
No tenía en mente los caracteres de acento cuando escribí la pregunta, pero supongo que contarían. Se permiten funciones.
Arcturus
¿Qué caracteres de espacios en blanco tenemos que tener en cuenta? ¿Podemos suponer que los caracteres que no sean espacios en blanco serán imprimibles?
Dennis
Todos los espacios en blanco, y sí.
Arcturus

Respuestas:

4

Guión Vim, 22 21 bytes

nm Q vEUWvEuWQ|norm Q

Explicación:

El primer comando se asigna Qa:

vEUhacer que la palabra en mayúscula
Wvaya a la siguiente palabra
vEuhacer que la palabra en minúscula
Wvaya a la siguiente palabra
Q repetir mapeo recursivo

y |norm Q ejecuta el mapeo

Uso del programa

Así es como haces que Vim lea de 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

Esto abrirá Vim mostrando esto:

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
fuente
6

GNU sed, 28

La puntuación incluye +2 para -rzpasar a GNU sed.

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

Prueba de salida

$ 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~~~
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
$ 
Trauma digital
fuente
5

Perl, 26 bytes

Código de 25 bytes + línea de comando de 1 byte

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

¡Gracias a ThisSuitIsBlackNot por corregir un par de errores!

Uso:

perl -p entry.pl
Jarmex
fuente
3

Pyth, 23

jdmjbmrk=xZ!!kcdbcjb.zd

Pruébelo en línea o ejecute el conjunto de pruebas

Alterna entre pyth's lowery upperfunciones, que son r...0or...1 . Esto probablemente afectará a los caracteres unicode, esperando que la aclaración de OP cambie.

Siento que algo debe ser golfable. Particularmente el XOR para cambiar el interruptor en el cual upper/ lowerdebe usarse.

FryAmTheEggman
fuente
Si interpreté la pregunta correctamente, la entrada A\nBdebería imprimirse A\nb.
Dennis
Esa no es una interpretación correcta de la pregunta. A new word is formed when there is a nonzero amount of whitespace after a non-whitespace character.La salida para A\nBes A\NB. Pero parece que su respuesta de CJAM fue correcta.
Arcturus
@ Dennis gracias, debería arreglarse ahora.
FryAmTheEggman
2

Perl, 87 bytes

Después de jugar con ambas expresiones regulares y mappor un tiempo, no pude encontrar una solución elegante, así que este es el resultado:

@a=split(" ",lc(<>));while($i<=$#a/2){@a[$i*2]=uc(@a[$i*2]);$i++;}print(join(" ", @a));
Codefun64
fuente
1
Buena solución ¿Podría <STDIN> ser reemplazado con <> para guardar algunos bytes? Además, ¿se puede omitir $ i = 0?
Steve
@steve Gracias; y sí, eso junto con una corrección menor (lo probé con una entrada diferente y tenía un pequeño error) ahora están incluidos. Gracias por las ideas! Estoy muy acostumbrado a la codificación detallada y explícita: P
Codefun64
1
@ Codefun64 ¡Bienvenido a PPCG! Puede omitir la mayoría de sus paréntesis para guardar más bytes, ya que son opcionales en Perl, por ejemplo. lc(<>), podría ser lc<>y el uso de un modificador de instrucción para su le whilepermite omitir el paréntesis también, por ejemplo. print$i++while$i<10vs while($i<10){print$i++}. Hay una página útil que me ayudó mucho Sugerencia para jugar al golf en Perl
Dom Hastings
2

Ruby, 56 bytes

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

JavaScript ES6, 74 71 bytes

.toUpperCase()y .toLowerCase()mata absolutamente el recuento de bytes (agrega 32 bytes 0.o). Sin embargo, la mayoría de las soluciones terminan con más bytes

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

No tan limpio como esperaba que fuera, lo que parece ser un tema con mis respuestas Groovy.

  • +17 para corregir el comportamiento con espacios en blanco iniciales
  • -5 para eliminar la nueva línea final y cambiar de .isEmpty () a .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
fuente
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))
Luego
fuente
Esto imprime un número después de la salida.
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(' '))))
Puertas de Zach
fuente
Puede reemplazar el condicional con [b.upper(),b.lower()][a%2]para guardar 4 bytes (suponiendo que conté correctamente en el móvil).
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']
}

Espera entrada como un archivo csv (una columna) llamado ab

Explicación:

Leer datos en (el nombre de variable predeterminado es v1, acortable a v). Haga una nueva variable b igual a la primera palabra (token separado por espacios) de v para cada línea. Para cada línea, mientras que la siguiente palabra no está vacía (solo ocurre si no hay más caracteres en esa línea), reemplace la palabra en v con la versión en mayúscula o minúscula de esa palabra en la línea actual, dependiendo de cuántos (mod 2 ) ya se han encontrado palabras. Luego obtenga la siguiente palabra y repita. Imprima toda la línea cuando termine con ella.

comentarios
fuente
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.

No es realmente un buen idioma para jugar al golf con ...

James
fuente
¡Bienvenido a 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
fuente
1

CJam, 28 bytes

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

Actualmente estoy considerando los primeros 33 caracteres ASCII / Unicode (y solo esos) espacios en blanco. Estoy esperando aclaraciones para saber si esto es válido o no.

Pruébelo en línea en el intérprete de CJam .

Dennis
fuente
1

Pyth, 17 22 bytes

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

Pruébalo aquí

aplaudir
fuente
El caso espacial principal falla pero sigue siendo agradable.
tjbtech
Esto tampoco maneja la entrada en más de una línea e imprime un espacio final.
FryAmTheEggman
Refactorizaré cuando pueda, gracias: D
aplauso el
0

C #, 104 100 99 bytes

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

Son 79 bytes con

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

fuente