DRUKUJ jak TO

17

Napisz program, który pobiera dane wejściowe do STDIN i sprawia, że ​​wszystkie małe litery (w tym litery akcentowane) w tym 2k-1słowie są wielkie, a wszystkie wielkie litery (w tym także litery akcentowane) w tym 2ksłowie małe litery ( kjest liczbą całkowitą dodatnią). Program nie powinien wpływać na żadne inne znaki w żadnym słowie. Na przykład, jeśli ciąg jest Ook! O0k!, to wynik powinien być OOK! o0k!.

Nowe słowo powstaje, gdy po znaku różnym od spacji występuje niezerowa ilość białych znaków. Białe spacje na początku danych wejściowych należy zignorować. Jeśli słowo nie zawiera żadnych zmienionych znaków, program powinien nadal traktować je jako słowo i kontynuować.

Przykładowe dane wejściowe (różne dane wejściowe są oddzielone pustym znakiem nowej linii)

Nineteen Eighty-Four (1984)

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

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

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

Przykładowe wyniki

NINETEEN eighty-four (1984)

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

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

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

To jest golf golfowy, chłopaki. Obowiązują standardowe zasady CG. Najkrótszy program w bajtach wygrywa.


Jestem prawie pewien, że zasłoniłem wszystkie luki dotyczące białych znaków i znaków nieliterowych, ale jeśli coś przeoczyłem, powiedz mi.


Dzięki @Optimizer za utworzenie następującego fragmentu kodu. Aby użyć, kliknij „Pokaż fragment kodu”, przewiń w dół i kliknij „► Uruchom fragment kodu”.

Arktur
źródło
5
Co z akcentowanymi postaciami? Czy musimy je zignorować? Czy funkcje są dozwolone?
Downgoat
Kiedy pisałem pytanie, nie miałem na myśli znaków akcentujących, ale przypuszczam, że się liczą. Funkcje są dozwolone.
Arcturus
Jakie znaki białych znaków musimy uwzględnić? Czy możemy założyć, że znaki inne niż spacje będą drukowane?
Dennis
Wszystkie znaki spacji i tak.
Arcturus

Odpowiedzi:

4

Skrypt Vima, 22 21 bajtów

nm Q vEUWvEuWQ|norm Q

Wyjaśnienie:

Pierwsze polecenie odwzorowuje Qna:

vEUzmień słowo na wielkie,
Waby przejść do następnego słowa
vEuuczyń słowo na małe litery,
Waby przejść do następnego słowa
Q powtórz mapowanie rekurencyjne

i |norm Q wykonuje mapowanie

Korzystanie z programu

Oto jak Vim może czytać ze standardowego wejścia:

$ 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

Otworzy się Vim wyświetlający to:

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
źródło
6

GNU sed, 28

Wynik obejmuje +2 za -rzprzekazany do GNU sed.

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

Wyjście testowe

$ 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~~~
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
$ 
Cyfrowa trauma
źródło
5

Perl, 26 bajtów

25 bajtów kodu + 1 bajtowy wiersz poleceń

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

Dzięki ThisSuitIsBlackNot za naprawienie kilku błędów!

Stosowanie:

perl -p entry.pl
Jarmex
źródło
3

Pyth, 23

jdmjbmrk=xZ!!kcdbcjb.zd

Wypróbuj online lub uruchom pakiet testowy

Na przemian pyth loweri upperfunkcje, którymi są r...0lubr...1 . Prawdopodobnie wpłynie to na znaki Unicode, czekając na wyjaśnienie OP, aby zmienić.

Czuję, że coś musi grać w golfa. W szczególności XOR do zmiany przełącznika, na którym upper/ lowernależy użyć.

FryAmTheEggman
źródło
Jeśli poprawnie zinterpretowałem pytanie, dane A\nBpowinny zostać wydrukowane A\nb.
Dennis
To nie jest poprawna interpretacja pytania. A new word is formed when there is a nonzero amount of whitespace after a non-whitespace character.Dane wyjściowe dla A\nBto A\NB. Ale wygląda na to, że Twoja odpowiedź na CJAM była poprawna.
Arcturus
@Dennis dzięki, powinno zostać naprawione teraz.
FryAmTheEggman
2

Perl, 87 bajtów

Po mappewnym czasie z użyciem wyrażeń regularnych nie mogłem znaleźć eleganckiego rozwiązania, więc oto rezultat:

@a=split(" ",lc(<>));while($i<=$#a/2){@a[$i*2]=uc(@a[$i*2]);$i++;}print(join(" ", @a));
Codefun64
źródło
1
Niezłe rozwiązanie. Czy <STDIN> można zastąpić <>, aby zapisać kilka bajtów? Czy można również pominąć $ i = 0?
steve
@steve Thanks; i tak, że wraz z niewielką poprawką (przetestowano go przy użyciu innych danych wejściowych i miał mały błąd), są teraz uwzględnione. Dzięki za pomysły! Jestem bardzo przyzwyczajony do pełnego, jawnego kodowania: P
Codefun64
1
@ Codefun64 Witamy w PPCG! Możesz pominąć większość nawiasów, aby zapisać więcej bajtów, ponieważ są one opcjonalne w Perlu, np. lc(<>), może być lc<>i użycie modyfikatora instrukcji dla twojego whilepozwala również pominąć nawias np. print$i++while$i<10vs while($i<10){print$i++}. Jest przydatna strona, która bardzo mi pomogła Wskazówka dotycząca gry w golfa w Perlu
Dom Hastings
2

Rubinowy, 56 bajtów

$><<gets.gsub(/\S+/){($.+=1)%2>0?$&.downcase: $&.upcase}
daniero
źródło
2

JavaScript ES6, 74 71 bajtów

.toUpperCase()i .toLowerCase()absolutnie zabijaj liczbę bajtów (dodaje 32 bajty 0.o). Większość obejść kończy się jednak większą liczbą bajtów

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

Nie tak czysty, jak się spodziewałem, co wydaje się być motywem moich odpowiedzi Groovy.

  • +17, aby naprawić zachowanie za pomocą wiodących białych znaków
  • -5 do usuwania końcowego znaku nowej linii i przełączania z .isEmpty () na .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
źródło
1

Lua, 96 bajtów

i=0 print(io.read'*l':gsub('%S+',function(x)i=i+1 return i%2==1 and x:upper() or x:lower()end))
Zaraz
źródło
Spowoduje to wydrukowanie liczby po wyjściu.
Trebuchette
1

Python 3, 103 95 bajtów

print(' '.join(b.lower()if a%2 else b.upper()for a,b in enumerate(input().strip().split(' '))))
Zach Gates
źródło
Możesz zamienić warunek na, [b.upper(),b.lower()][a%2]aby zaoszczędzić 4 bajty (zakładając, że poprawnie policzyłem na telefonie komórkowym).
PurkkaKoodari
1

STATA, 252 bajty

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

Oczekuje danych wejściowych w postaci pliku csv (jedna kolumna) o nazwie ab

Wyjaśnienie:

Wczytaj dane (domyślna nazwa zmiennej to v1, którą można skrócić do v). Utwórz nową zmienną b równą pierwszemu słowu (token oddzielony spacjami) v dla każdego wiersza. Dla każdego wiersza, podczas gdy następne słowo nie jest puste (występuje tylko wtedy, gdy nie ma już więcej znaków w tym wierszu), zamień słowo w v na wersję tego słowa pisaną wielkimi lub małymi literami w bieżącym wierszu, w zależności od liczby (mod 2 ) słowa zostały już znalezione. Następnie zdobądź następne słowo i powtórz. Po zakończeniu wydrukuj całą linię.

znaczniki
źródło
1

Delfy, 290 bajtów

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.

Niezbyt dobry język do gry w golfa ...

James
źródło
Witamy w Programowaniu Puzzle i Code Golf!
Dennis
1

Lua, 88 bajtów

a=io.read():gsub("%g+",function(s)m=not m return m and s:upper()or s:lower()end)print(a)
Trebuchette
źródło
1

CJam, 28 bajtów

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

Obecnie rozważam pierwsze 33 znaki ASCII / Unicode (i tylko te) białe znaki. Czekam na wyjaśnienia, aby wiedzieć, czy jest to ważne, czy nie.

Wypróbuj online w interpretatorze CJam .

Dennis
źródło
1

Pyth, 17 22 bajtów

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

Wypróbuj tutaj

klaskać
źródło
Wiodąca skrzynka kosmiczna zawodzi, ale nadal jest ładna.
tjbtech
To również nie obsługuje danych wejściowych w więcej niż jednym wierszu i drukuje końcowe spacje.
FryAmTheEggman
Dokonam refaktoryzacji, kiedy będę mógł, dzięki: D
klaszczę
0

C #, 104 100 99 bajtów

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

Ma 79 bajtów

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

źródło