Wyzwanie
Wyświetl alfabet z danej litery odczytanej z danych wejściowych konsoli. Jeśli litera jest pisana wielkimi literami, musisz wyświetlać wielkie litery alfabetu. Wydrukowany alfabet musi kończyć się literą poprzedzającą wstawioną. Jeżeli do parametru dodany zostanie parametr dodatkowy (prosta kropka .
), alfabet powinien być wydrukowany jedną literę w każdym wierszu. W przeciwnym razie alfabet powinien być wydrukowany w tym samym wierszu, oddzielony prostą spacją. Jeśli do programu zostanie wysłane nieprawidłowe wejście, nic nie wydrukuje.
Przykłady danych wejściowych:
Wejście:
c
Wyjście programu:
d e f g h i j k l m n o p q r s t u v w x y z a b
Wejście
H.
Wyjście programu:
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
Odpowiedzi:
GolfScript
48 75 73 70 67 66 63 5753Dema online:
Przypadek testowy 1 („c”)
Przypadek testowy 2 („H.”)
Przypadek testowy 3 (nieprawidłowe dane wejściowe)
Aktualizacja:
Teraz zaimplementowana jest również ostatnia reguła. Dzięki Ventero za zwrócenie uwagi na problem.
Aktualizacja:
Przepisałem kod od zera i znalazłem nowe sposoby jego dalszego skrócenia.
Historia modyfikacji:
źródło
If wrong input is send to the program it will not print anything.
C,
135 129128 znakówCholera, tyle różnych magicznych liczb, ale nie ma sposobu, aby się ich pozbyć.
Musi być uruchamiany z wejściem jako parametrem programu. Teraz podąża za „błędnym wejściem”.
Wyjaśnienie:
**b+6&31
Część wykorzystuje fakt, że kody ASCII dla małych liter / znaków wielkimi są takie same, jeśli tylko patrząc na ostatnie 5 bitów, a pozostałe 5 bitów są w zakresie 1..26.Wersja bez wymogu „błędnego wprowadzenia” (82 znaków):
źródło
test
, nazwij go jaktest c
lubtest X.
main(a,b)char**b;{
. Ponadtob++
można zastąpić*b[1]
->**b
ib[1][1]
->1[*b]
.Ruby,
727161 znakówTa wersja ruby używa wyrażenia regularnego do weryfikacji danych wejściowych. Na szczęście metoda ciągu Ruby
succ
wykonuje dla nas większość pracy (w tym zawijanie).Edytuj: 61 znaków przy pomocy Chrona i Ventero .
źródło
c=gets[0];25.times{$><<c.next![-1]+($1?$/:' ')}if~/^[a-z](\.)?$/i
gets;25.times{$><<$_=$_.next[0]+($1?$/:' ')}if~/^[a-z](\.)?$/i
- w zasadzie to samo, co wasze, tylko znęcanie się$_
i$/
+=
zamiast+
, możesz upuścić nawiasy$1?$/:' '
.Rubin:
12711392 (?) Znaków(Nie mogę znaleźć reguły dotyczącej wyniku karnego przy użyciu
-p
. Na razie dodano 1. Jeśli nie, popraw mnie.)Przykładowy przebieg:
źródło
Ruby,
10195Wypróbuj online
źródło
('a'..'z').to_a
=>[*?a..?z]
GolfScript,
8072 znakówWiele kodu testuje poprawność danych wejściowych i opcję „nic nie drukuj”. Rzeczywista logika składa się tylko z 37 znaków.
Przypadki testowe online
źródło
k / k4
66 64 63 60 5856 + 2 karykara za globalną init init, algorytm wynosi 56 jak poniżej:
56:
58:
60:
63:
64:
EDYTOWAĆ:
Dodano karę 2 za globalną inicjalizację (x :), to samo, jeśli funkcja zawijania w nawiasy (jak sugeruje Slackware)
nie jest pewna, czy zmiana przestrzeni nazw również powinna zostać ukarana ... to kolejne 3
Przykład:
źródło
Perl,
1311271171121061041029896929190937166656458 znakówStosowanie:
Dodano jedną postać do liczby
n
opcji.Największe cięcie było możliwe tylko dzięki obserwacji zachowania
++
postaci w odpowiedzi Jona Purdy'ego .źródło
s/a.$1/az/
aby zaoszczędzić jeszcze 2.chop().($2?$/:$")
->chop,$2?$/:$"
za 4 kolejnePerl,
149, 167Aktualizacja
źródło
$s=($d)?"\n":" ";
z$s=$d?$/:$";
, a może po prostu pozbyć się$s
całkowiciePython, 83
źródło
PHP,
120119113źródło
$v[1]=='.'?"\n":" "
wynik w zmiennej $ s, pozwól PHP obliczyć go za każdym razem wecho
instrukcji. W ten sposób możesz oszczędzić 6 znaków.Mathematica
158 159 204 199 183 167 165162Kod
Stosowanie
źródło
J 43
Przykłady:
tuvwxyzabcdefghijklmn opqr
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
To rozwiązanie ewoluowało na forum programowania J: http://jsoftware.com/pipermail/programming/2012-August/029072.html
Autorzy: AlvordBossCerovskiCyrEllerHuiLambertMcCormickMillerQuintanaSchottSherlockTaylorTherriault
Wyjaśnienie
Wyrażenia J są wykonywane od prawej, przekazując bieżący wynik w lewo, gdy jest on oceniany. Ponieważ jest interaktywny, możemy spojrzeć na fragmenty rozwiązania w izolacji, aby lepiej je zrozumieć.
Środkowa część generuje wielkie i małe litery alfabetu w Unicode:
Czasownik „u:” konwertuje swój prawy argument liczbowy na znaki Unicode. Argument numeryczny jest generowany na podstawie wartości ASCII dla wielkich i małych liter poprzez dodanie liczb dla „A” i „a” do wartości od 0 do 25 generowanych przez „i.26”:
Część po prawej,
sprawdza (i.) pozycję prawego argumentu (]) w lewym ([) - który jest wektorem liter powyżej - i upuszcza (}.) jeszcze jeden (>:) niż ta liczba. „0” stosuje to wyrażenie do argumentów 0-wymiarowych (skalarnych).
Fraza „25 {.” Bierze pierwsze 25 elementów wektora po prawej stronie.
Przedostatnia fraza „1j1 #” po lewej stronie replikuje swój prawy argument zgodnie z liczbą po lewej. Prosta liczba wykonuje prostą replikację:
Jednak liczba zespolona - oznaczona literą „j” między częścią rzeczywistą a urojoną - wstawia element wypełniający zgodnie z częścią urojoną. W tym miejscu wskazujemy jeden element wypełniający jeden po prawej stronie „j”.
Podobnie jak w przypadku większości prymitywów J, czasownik replikacyjny (#) działa na tablicach numerycznych w sposób analityczny, jak działa na tablicach znaków. Jak pokazano tutaj,
widzimy, że domyślnym numerycznym elementem wypełniającym jest zero, podczas gdy dla znaków jest to znak spacji.
Wreszcie lewy token „|:” transponuje wynik poprzednich czasowników na prawo.
Wyjaśnienie dostarczone przez Devona McCormicka. Dziękuję Devon.
źródło
pieprzenie mózgu, 303
Obecnie nie obsługuje tej
If wrong input is send to the program it will not print anything
części i prawdopodobnie może być krótszy. Planuję to naprawić później. W tej chwili mój mózg jest zbyt dziwny, by kontynuować.źródło
C 110
Czasami drukuje „spacje” między literami, czasem nie.
Nieco bardziej czytelny:
Działa:
źródło
JavaScript, 137
Niestety trochę za dużo (
String.fromCharCode
icharCodeAt
).źródło
Perl,
77767068Edycje:
Zapisano postać za pomocą wyrażenia regularnego zamiast
substr
.Zapisano 6 znaków za pomocą
map
zamiastfor
.Zapisano 2 znaki, pomijając ostatnią linię.
źródło
\n
twój finałprint
, który pozwoli zaoszczędzić kilka znaków\n
, dzięki.R, 219
Brzydkie, długie ... wciąż działa.
Stosowanie:
źródło
C, 146 znaków (straszne)
Nie mam dużego doświadczenia w C, co prawdopodobnie pokazuje ...>. <Miałem wrażenie, że znaki będące liczbami całkowitymi byłyby pomocne, ale tak naprawdę nie wywarło to tak dużego wpływu, jak miałem nadzieję ... Zostawię tu jednak moją próbę, możesz zaproponować ulepszenia.
Wersja nieuprawniona:
źródło
VBA 225
Sformatowany do uruchomienia z bezpośredniego okna:
Podzielony na poszczególne linie (musi być otoczony
Sub
blokiem i potrzebuje innejprint
metody do pracy w module, dzięki czemu kod będzie dłuższy):źródło
Java 8, 127 bajtów
Wyjaśnienie:
Wypróbuj online.
źródło
Świnka,
91,86,82,79, 76Nie taki nowoczesny język;) Jestem pewien, że zostało trochę miejsca na optymalizację ..
Wyjaśnienie:
odczytać wejście
sprawdź, czy t pasuje do wymaganego wejścia
podstawowy dla pętli przez alfabet. Zauważ, że świnka ściśle ocenia od lewej do prawej. Prawda = 1, więc otrzymasz wynik 65 lub 97 dla p, # jest operatorem modulo
testy:
(potrzebujesz env środowiska uruchomieniowego świnki, tj. Caché, aby to uruchomić)
edycja: pogrubiony nagłówek
edycja: miałem złe rozwiązanie, naprawione teraz. Dzięki rtfs i Averroees za zwrócenie na to uwagi
źródło
JavaScript: 141
Skomentowana wersja:
jsFiddle DEMO
źródło
Oto moja pierwsza próba z APL.
jeśli mogę użyć jednej zmiennej globalnej,
A←2 26⍴6↓26⌽⎕UCS 65+⍳58
to mogę skrócić powyższe do następujących:źródło
C ++ 11
źródło
C (111)
sekcja
Działa] $ ./test 5
Działa] $ ./test W XYZABCDEFGHIJKLMNOPQRSTUV
Działa] $ ./test M NOPQRSTUVWXYZABCDEFGHIJKL
Działa] $ ./test g hijklmnopqrstuvwxyzabcdef
Działa] $ ./test [
Działa] $ ./test a bcdefghijklmnopqrstuvwxyz
Działa] $ ./test Z ABCDEFGHIJKLMNOPQRSTUVWXY
Dziękuję za jedzenie do namysłu.
źródło
[A-Za-z]\.?
, jeśli dobrze zrozumiałem pytanie.Perl, 226 znaków
źródło
die
oświadczenie może zostać zmniejszone, oszczędzającC # 170
Bez kompresji
źródło
1
: Jeśli litera jest pisana wielkimi literami, musisz wyświetlać wielkie litery.2
: Wydrukowany alfabet musi kończyć się literą poprzedzającą wstawioną.3
: Jeśli do parametru dodany zostanie parametr dodatkowy (prosta kropka), alfabet powinien zostać wydrukowany jedna litera w każdym wierszu. W przeciwnym razie alfabet powinien być wydrukowany w tym samym wierszu, oddzielony prostą spacją.4
: Jeśli do programu zostanie wysłane nieprawidłowe wejście, nic nie wydrukuje. To chybienie 4 na 4.char
zvar
i golenie 1 punkt swój wynik, luźne.ToCharArray()
(astring
jest char-array można już iteracyjnego!), Stracićstring[] a
, ponieważ nie mamy do czynienia z argumentów wiersza poleceń, tracą przestrzeń nazw, stałej „c” należy czytać z danych wejściowych konsoli, zgubić ciąg alfabetu i zamiast tego użyć ASCII itp. To wspaniale, że grasz, ale postaraj się podjąć przyzwoity wysiłek; większość twoich zgłoszeń wydaje się trollować.C, 117
Podziękowania dla schnaadera za lewę d + 6 i 31.
http://ideone.com/ts1Gs9
źródło
Bash: 110 bajtów
Jeśli chodzi o wyjaśnienia, jest to dość proste, bez magicznych sztuczek - jest to po prostu coś, do czego dobrze nadaje się bash. Pod względem nieoczywistych bitów:
{a..z}
jest bardzo niewykorzystaną sztuczką w bashu - rozwija się doa b c d...
. Możesz zrobić to samo, aby wygenerować sekwencje numeryczne.[[ $1 =~ [a-z] ]]
uruchamia dopasowanie wyrażenia regularnego względem pierwszego argumentu programu dla znaków od a do z. Podobnie dla AZ. Potrzebujesz do tego podwójnych nawiasów kwadratowych,[
nie możesz tego zrobić.${1:1:1}
pobiera podłańcuch 1 $ (pierwszy argument), jeden znak w środku, jeden znak długi - to znaczy zwraca drugi znak ciągu, zgodnie z oczekiwaniami.
.sed 's/ /\n/g'
Proste wyrażenie: wyszukuje i zamienia spacje na nowe linie. Jeśli.
jest drugim znakiem ciągu, wprowadzamy do niego dane wejściowe lub w inny sposób ...cat
jest tutaj ostatnia sztuczka - jeśli nie chcemy zastępować spacji nowymi liniami, zamiast tego karmimy cat stdin, który po prostu wyprowadza go ponownie.źródło