Deszcz alfabetu
Zadanie:
Podstawową przesłanką jest wydrukowanie ciągu wejściowego, a następnie powtórzenie każdego znaku pionowo, w oparciu o jego (indeksowaną 0) pozycję w alfabecie (bez rozróżniania wielkości liter) A-Z
. A
jest w miejscu 0, więc się nie powtarza, e
jest w pozycji 4, więc jest powtarzane 4 razy, P
jest w pozycji 15, więc jest powtarzane 15 razy, !
nie jest w nim, A-Z
więc jest powtarzane 0 razy itp.
Dla jasności wszystko, co wykracza poza zakres B-Zb-z
, na przykład cyfry lub znaki specjalne, nie będzie powtarzane, a zatem pojawi się tylko w pierwszym wierszu.
To jest golf golfowy , więc zwycięzcą jest najkrótsze rozwiązanie w każdym języku.
Wejście:
- Dane wejściowe będą znajdować się w standardowym zestawie znaków do wydruku ASCII, od 32
~
. - Łańcuch wejściowy będzie miał 1 znak lub więcej.
- Nie będzie żadnych początkowych ani końcowych białych znaków.
- Możesz wziąć dane wejściowe jako ciąg znaków (
"hello"
) lub listę znaków (["h", "e", "l", "l", "o"]
)
Przykłady:
Wejście aaaa
daje:
aaaa
Wejście abcda
daje:
abcda
bcd
cd
d
Wejście Programming Puzzles & Code Golf!
, daje:
Programming Puzzles & Code Golf!
Progr mming Puzzles Code Golf
Progr mming Puzzles Code Golf
Progr mming Puzzles ode Golf
Progr mming Puzzles o e Golf
Progr mming Puzzl s o Golf
Progr mming Puzzl s o Gol
Pro r mmin Puzzl s o ol
Pro r mmin Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzz s o o
Pro r n Puzz s o o
Pro r Puzz s o o
Pr r Puzz s
r r uzz s
r r uzz s
uzz s
uzz
uzz
zz
zz
zz
zz
zz
Wejście ~|[abc<0>cba]|~
, daje:
~|[abc<0>cba]|~
bc cb
c c
Uwagi:
- obowiązują standardowe luki
- wyjściem może być lista ciągów znaków, ale:
- obce końcowe znaki nowej linii są niedozwolone (dopuszczalne jest pojedyncze
\n
w ostatniej linii) - wyjściem może być lista list znaków, o ile wygląda na to, że pada deszcz
- brak wiodącej nowej linii
- dla naszych skandynawskich użytkowników, którzy mają kilka dodatkowych liter w swoim alfabecie „AZ”, zachęcamy do ich wspierania, ale nie jest to część wyzwania
\n
przyjęcia?Odpowiedzi:
Kod maszynowy 6502 (C64), 113 bajtów
Demo online
Zastosowanie:
sys49152,"[string]"
npsys49152,"Programming Puzzles & Code Golf!"
.Ważne: Jeśli program został załadowany z dysku (jak w wersji demonstracyjnej online),
new
najpierw wydaj polecenie! Jest to konieczne, ponieważ ładowanie programu maszynowego niszczy niektóre wskaźniki C64 BASIC.Uwaga: C64 jest domyślnie w trybie bez małych liter - aby móc wprowadzić ciąg znaków składający się z małych liter, najpierw przełącz na tryb małych liter, naciskając
SHIFT
+CBM
.Wyjaśnienie
Oto skomentowana lista dezasemblacji:
źródło
05AB1E ,
1312 bajtówWypróbuj online!
Wyjaśnienie
źródło
Ask
dla tegoPyth,
12109 bajtówZestaw testowy.
Wyjaśnienie:
12 bajtów:
(z końcowym znakiem nowej linii)
Zestaw testowy.
Wyjaśnienie:
źródło
j
Python 3 , 83 bajty
Wypróbuj online! Pobiera listę znaków. Zwraca listę list znaków.
Python 2 , 90 bajtów
Wypróbuj online! Bierze sznurek. Zwraca ciąg.
źródło
Mathematica,
11589 bajtówTo trwa jak
input
na liście znaków[{"a", "b", "c", "d", "a"}]
i wyświetla listę list znakówWypróbuj online!
-26 bajtów od Misza Ławrow
-5 bajtów od user202729
ale jeśli chcesz zobaczyć dane wyjściowe takie jak w przypadku testowym, wypróbuj ten kod (128 bajtów)
Wypróbuj online!
źródło
∞
(3 bajty) ->\[Infinity]
(11 bajtów)).\[Infinity]
(11 bajtów) można zastąpićInfinity
(8 bajtów) lub\:221e
(6 bajtów). Ostatni to domyślna reprezentacja znaków specjalnych bez nazw. (chociaż nie jest to główna część)Infinity
całkowicie tego uniknąć . Problematyczne jest to,If[(d=Min@Position[Alphabet[],If[UpperCaseQ@#,ToLowerCase@#,#]])==∞,1,d]
że możemy to zmienićMax@Position[Alphabet[]/."a"->#,#|ToLowerCase@#]
. (Przeszukując listę{#,b,c,d,...,y,z}
, gwarantujemy, że znajdziemy#
przynajmniej raz.)Dyalog APL ,
2722 bajtów5 bajtów zapisanych dzięki @ Adám
Wypróbuj online!
W jaki sposób?
⍴¨⍨
- uformuj każdy znak na długość1⌈
- co najmniej jeden lub⎕A⍳819⌶⍨∘1
- indeks wielkich liter alfabetu27|
- moduł 27↑
- spłaszczyć do matrycy⍉
- i transponowaćźródło
⍉∘↑⊢⍴¨⍨1⌈27|⎕A⍳819⌶⍨∘1
Węgiel drzewny , 12 bajtów
Wypróbuj online!
-3 dzięki Neilowi .
źródło
Python,
105103 bajtów2 bajty zapisane dzięki @TFeld
Wypróbuj online!
źródło
Python 2 ,
1111069998978793 bajtówWypróbuj online!
źródło
while
można go zastąpić,exec
aby zaoszczędzić kilka bajtów,i
można zacząć od 65, aby zaoszczędzić jeden i osiągnąć 87 bajtówz
lubZ
.exec
zmianę ...C # (.NET Core) , 162 bajty
Wypróbuj online!
źródło
using System.Linq;
jest niestety obowiązkowy, aby dodać do liczby bajtów (lub powinieneś zmienićMax
naSystem.Linq.Max
iSelect
naSystem.Linq.Max
, który byłby wyższy niż tylkousing System.Linq;
raz). Ponownie witamy i życzymy miłego pobytu. Och, i widzę @IanH. wspomniano już Porady dotyczące gry w golfa w C #. Porady dotyczące gry w golfa w <wszystkich językach> mogą być również interesujące.Bash,
78,7671 bajtówW zależności od sortowania (domyślnie LC_ALL) można zapisać więcej bajtów
Wypróbuj online
źródło
Perl 5 , 43 bajtów
41 bajtów kodu + 2 dla
-nl
.Wypróbuj online!
źródło
s/["-$c]/ /gi
i-l
niepotrzebneJavaScript (ES6),
877876 bajtów-9 bajtów dzięki @RickHitchcock .
-2 bajty dzięki @Neil .
Pobiera dane wejściowe jako ciąg znaków i zwraca jeden znak nowej linii.
Przypadki testowe
Pokaż fragment kodu
źródło
f=(s,i=10)=>s.trim()&&s+'newline'+f(s.replace(/./g,c=>parseInt(c,36)-i?c:" "),i+1)
s
jest naprawdę fajny.parseInt(c,36)-i>0
parseInt(c,36)>i
zamiast tego użyć do zapisania 2 bajtów?R,
118114 bajtówDzięki @Giuseppe za te 4 bajty wyłączone
Wypróbuj online!
Krótkie wyjaśnienie:
źródło
a
są wszystkie spacje, to nic nie wydrukuje ... ale możesz zmienićwhile
stan, wgrepl()|!F
którym bajt jest nadal krótszy niż oryginalna odpowiedź.R ,
125123 bajtówOutgolfed by plannapus
Wypróbuj online!
Drukuje na standardowe wyjście z jednym końcowym znakiem nowej linii i czyta z
stdin()
.Rozbijmy to:
Alternatywna odpowiedź, 106 bajtów
Wypróbuj online!
Funkcjonować; wypisuje na standardowe wyjście, ale w zasadzie moja powyższa odpowiedź została przeniesiona, aby zaakceptować listę znaków zamiast rozdzielać ciąg, więc mam wrażenie, że to „oszustwo”. Co więcej, podejście Plannapusa z wyrażeniem regularnym jest całkiem fajne!
źródło
Octave / MATLAB,
7466 bajtówWypróbuj online!
źródło
Japt ,
15141110 bajtówPierwsza szansa, aby zagrać z nowymi metodami wypełniania strun Japt, aby nadal było miejsce na ulepszenia.
Spróbuj
Wyjaśnienie
Domniemane wprowadzanie ciągu
U
.Przekaż każdą kolumnę
U
przez funkcję, gdzieZ
jest bieżący element (lub litera, w tym przypadku).Konwertuj
Z
na wielkie litery (u
), uzyskaj jego charcode (c
) i odejmij (u
) 64 (I
).Padaj początkiem
Z
samego siebie, aż osiągnie tę długość.Alternatywny
Spróbuj
źródło
ùZ
nap
oszczędzanie b ... nieważne, to naprawdę sprytne ...p
( może być 1 w historii edycji), ale ostatecznieù
wygrałem.Haskell ,
137136127119 bajtówWypróbuj online!
Dość długo, ale nie mogę wymyślić żadnego sposobu, aby go skrócić.
Wydaje mi się, że musi być jakiś sposób krótszy niż składnia if-then, ale nie widzę tego.EDYCJA: Dzięki @streetster za pomoc w goleniu jednego bajtu! Z początku nie korzystałem
toUpper
z powodu kosztów importu,Data.Char
ale zapomniałem, że zapewnia równieżord
znacznie krótszy niżfromEnum
EDYCJA 2: Podziękowania dla @Laikoni za wygolenie kolejnych 6 bajtów i zidentyfikowanie błędu, który teraz naprawiłem. Użyłem 26 zamiast 25, ponieważ zapomniałem, że tablice Haskell są włącznie. Potem zauważyłem, że mogę użyć
last
zamiast tego,head
co pozwoliłoby mi użyć0:
zamiast++[0]
.EDYCJA 3: Jeszcze raz dziękuję Laikoni za te 8 bajtów. Właściwie to zapomniałem o tej przestrzeni. Z jakiegoś powodu Sublime Text wyrzuca się bez niego i zapomniałem go usunąć. Nie wiedziałem, że listy linii są dozwolone, powinienem był uważniej przeczytać zasady.
źródło
if i>p c then ' ' else c
Można skrócićlast$c:[' '|i>p c]
.[k |
i dozwolone jest zwracanie listy wierszy, więc nie potrzebujeszunlines
. Wreszcie, możesz być zainteresowany naszym czatem Haskell .Excel VBA, 110 bajtów
Anonimowa natychmiastowa funkcja okna VBE Funkcja, która pobiera dane wejściowe zgodnie z oczekiwaniami
Variant\String
z zakresu[A1]
i wykorzystuje je do wywołania alfabetu w bezpośrednim oknie VBE.Próbki we / wy
źródło
?A1:...
[]
wskazuje, że zawarty ciąg powinien zostać przetworzony na obiekt w / on / jako skoroszyt,[A1]
wywołanie może nie zostać zredukowane doA1
- ponieważ nie pobierze i nie wydrukuje początkowych danych wejściowych z zakresu[A1]
; raczej pozostawi pustą linię i wszystkie kolejne linie zostaną wydrukowanePHP,
69 78 7785 + 1 bajtywymaga PHP <7. Uruchom jako potok z
-nR
lub spróbuj online .źródło
$c=A;!$c[1];$c++
. Niezłe! Niestetyextraneous trailing newlines are not allowed (single \n on final line is acceptable)
. Tak więc zawiedzie dla wszystkich ciągów niezawierającychz
.Bash + sed, 37
Wypróbuj online .
źródło
C (gcc) , 189 bajtów
Wypróbuj online!
źródło
puts("");
zamiastputchar(10)
Rubinowy,
706774 bajtówDzięki @TuukkaX za wskazanie, że niektóre pareny mogą zostać upuszczone (-3 bajty)
Niestety musiałem wtedy dodać 7 bajtów, ponieważ oryginalna wersja nie obsługiwała „z”.
Nazywając to:
źródło
Oracle SQL, 186 bajtów
Zakłada, że ciąg będzie w tabeli
t
w kolumniev
:SQL Fiddle
Konfiguracja schematu Oracle 11g R2 :
Zapytanie 1 :
Wyniki :
źródło
Galaretka , 15 bajtów
Wypróbuj online!
źródło
Haskell , 98 bajtów
Wypróbuj online!
Przykładowe zastosowania:
f "[Abc]"
dostarcza listę linii:["[Abc]"," bc "," c "]
. UżyjputStr.unlines.f $ "[Abc]"
dla ładnego wydruku:Częściowo zainspirowany przezNow bezpośrednio na podstawie odpowiedzi Haskell użytkownika 1472751 .Poprzednie podejście (
10099 bajtów)Wypróbuj online!
źródło
PowerShell ,
122127 bajtówWypróbuj online!
Krótkie dzięki temu, w jaki sposób PowerShell może dynamicznie rzutować pomiędzy
[char]
i[int]
, ale długie ze względu na usunięcie zbędnych białych znaków i obliczenie, czy wypisać spację czy znak.Bugfix dzięki beatcracker.
źródło
~|[abc<0>cba]|~
przypadku testowym. Spróbuj tego:param($a)$a;(1..25|%{$i=$_;(-join([char[]]$a|%{(' ',$_)[$_-match'[a-z]'-and[math]::Max(0,($_-bor32)-96-$i)]})).TrimEnd()})-ne''
Java 8,
151147144143139 bajtówWyjaśnienie:
Wypróbuj tutaj.
źródło
q ,
4237 bajtów-5 dzięki streetster!
stare rozwiązanie + objaśnienie:
źródło
{(+)max[m]$(m:1+mod[.Q.a?(_)x]26)#'x}
dla 37, nie pamiętam, jak to rozwiązałem, tworząc pytanie, choć prawdopodobnie bardzo podobne!_
, wpisałemlower
interpreter q i dostałemk){$[~t&77h>t:abs@@x;.z.s'x;19<t;.z.s@. x;~t in 10 11h;'`type;_x]}
. stąd udzielam mojej odpowiedzi w q hahaSOGL V0.12 ,
1211 bajtówWypróbuj tutaj!
Wyjaśnienie:
źródło