Wyzwanie
Utwórz najkrótszy program spełniający wymagania
Wymagania
Kod musi wygenerować siatkę 5 x 5 zer, tak jak poniżej:
00000 00000 00000 00000 00000
Kod musi akceptować dane wejściowe (kolumna, wiersz, znak). Siatka musi się odpowiednio zmienić:
Początek:
00000 00000 00000 00000 00000
Wejście:
(2,5,*)
Wynik:
0*000 00000 00000 00000 00000
(Uwaga: lewy dolny róg to pozycja 1,1.)
Program musi zwrócić komunikat o błędzie inny niż siatka, jeśli dane wejściowe wiersza / kolumny nie wynoszą 1,2,3,4 lub 5. Może to być dowolny wybrany komunikat (o ile nie jest to siatka), więc
0
jest akceptowalny wynik błędu.Program musi działać ze wszystkimi drukowalnymi znakami ASCII (klawiatury amerykańskiej).
ZWYCIĘZCA
Zwycięzcą zostanie osoba, która ma najkrótszy kod i spełnia wszystkie wymagania. Jeśli więcej niż jedna odpowiedź działa i ma tę samą (najkrótszą) długość, zwycięzcą zostanie osoba, która udzieliła pierwszej odpowiedzi.
0
błąd i siatkę sukcesu?Odpowiedzi:
Dyalog APL ,
171310 bajtówMonituje o zamkniętą tablicę zawierającą (wiersz, kolumnę), a następnie o znak. Podaje BŁĄD INDEKSU w przypadku błędnego wejścia.
Wypróbuj online!
⊖
odwróć do góry nogami wynik⍞
wprowadzony znak@
zastępując zawartość na miejscu⎕
ocena wejściowa (zamknięty wiersz, kolumna)⊢
z5 5⍴
Tablica 5 × 50
zeraźródło
⊢
konieczne? Myślę, że w tym przypadku jest to zbędne.(⊂⎕)5 5
jako pojedynczą 3-elementową tablicę - argument za⍴
.Rubin,
157149 bajtówBłąd przy nieprawidłowo wprowadzonym wejściu lub poza ograniczoną pozycją
Dzięki ConorO'Brien (8 bajtów) i niepotrzebnym (2 bajty) za pomoc w oszczędzaniu bajtów
źródło
loop do...end
->loop{...}
; Myślę, że teżArray.new(5,[0]*5)
działa, a nawet[*[0]*5]*5
.Array.new(5,[0]*5)
utwórz tablicę referencyjną i[*[0]*5]*5
*
. To wciąż tworzy tablicę referencji.Array.new(5){[0]*5}
można zastąpić,(1..5).map{[0]*5}
aby zaoszczędzić 2 bajty.Partia, 199 bajtów
Błędy, jeśli pozycja jest poza zakresem.
źródło
<
, na przykład^<
. nie jestem pewien.PHP,
11110097 bajtówwypisuje,
E
jeśli wiersz / kolumna jest poza zakresem.Biegnij z
php -r <code> <row> <column> <character>
źródło
Python, 66 bajtów
źródło
Dyalog APL,
242018 bajtówZaoszczędź 4 bajty dzięki Zgarb! Zaoszczędził 2 bajty dzięki Adamowi!
Monity o dane wejściowe. Poniżej wyjaśnienie.
20 bajtów
Przypisz do funkcji i wywołaj ją
y x f 'c'
. Na przykład:Wyjaśnienie
{...}
jest funkcją z lewym argumentem⍺
i prawym argumentem⍵
.⋄
rozdziela instrukcje, więc są trzy instrukcje:Pierwsze oświadczenie
a←5 5⍴0
zestawya
do A5
według5
siatki0
s.Druga instrukcja ustawia element pod współrzędnymi podyktowanych
⍺
do⍵
(czyli postać).Wreszcie możemy wykonać
⊖
naa
i powrócić że otrzymując z pierwszych oa
odwróceniu.źródło
{a←5 5⍴0⋄a[⊂⌽⍺]←⍵⋄⊖a}
oszczędza kilka bajtów.a←5 5⍴0⋄a[⊂⎕]←⍞⋄⊖a
JavaScript (ES6),
7376 bajtówZgłasza a,
TypeError
jeśli kolumna lub wiersz jest poza zakresem.Próbny
Pokaż fragment kodu
źródło
c
czyr
jest mniejszy niż 1?c == 0 || r == 0
. Ale myślę, że masz rację: zaktualizuję go, aby zapobiec ujemnym wartościom.C #, 199 bajtów
Na podstawie odpowiedzi Pete Arden
Nie golfowany:
źródło
05AB1E ,
2722 bajtówNie zwraca siatki, gdy wiersz / kolumna> 5.
Wypróbuj online!
Poprzednia wersja
źródło
Galaretka , 28 bajtów
To wydaje się zbyt długie ...
TryItOnline!
W jaki sposób?
źródło
JavaScript (ES6), 89 bajtów
Ponieważ uwielbiam rekurencję. Zgłasza
ReferenceError
niepoprawne współrzędne.źródło
Mathematica, 38 bajtów
źródło
Brain-Flak 415 Bytes
Obejmuje +3 za
-c
Wypróbuj online!
Najpierw wstawia znak, a następnie wiersz, a następnie kolumnę bez spacji.
Większość z nich to po prostu obsługa błędów. Brain-Flak nie ma dobrego sposobu na sprawdzenie, czy wartości mieszczą się w zakresie. W przypadku błędów albo nie wyświetla niczego, albo po prostu znak, który miał zostać wstawiony. Rozwiązanie rzeczywistego problemu zajmuje tylko 211 bajtów:
źródło
Excel VBA, 67 bajtów
Wyjścia do zakresu A1: E5 w arkuszu aktywnym projektu vba, wyjście z
gdy podano nieprawidłowe dane wejściowe.
Kod:
Stosowanie:
Dane wyjściowe (z powyższego przykładu) :
źródło
C #, 208 bajtów
Gra w golfa:
Nie golfowany:
Testowanie:
źródło
c
i / lubr
są poza zakresem, wyrzuci to,IndexOutOfRangeException
więc możesz być w stanie usunąć pierwszą instrukcję if, chociaż nie sprawdziłem w tym celu specyfikacji poprawnie. Możesz skompilować doFunc<int, int, char, string>
bajtów, aby zaoszczędzić bajty, uważam, że musisz dodaćusing System.Linq;
z powoduReverse
połączenia, chociaż nie pamiętam z głowyd[r - 1] = d[r - 1].Substring(0, c - 1) + a + d[r - 1].Substring(c);
abyd[--r] = d[r].Substring(0, c - 1) + a + d[r].Substring(c);
zapisać 4 bajtyWinDbg, 95 bajtów
Prawie połowa z nich po prostu weryfikacji indeksy są w zakresie ... Wejście odbywa się poprzez ustawienie pseudohalogenek rejestrów
$t0
,$t1
oraz$t2
(jeśli$t2
posiada wartość ASCII char zastąpić). Na przykład,(2,5,*)
podobnie jak w przykładzie:Drukuje
0
po błędzie.Jak to działa:
Przykładowe dane wyjściowe:
źródło
Haskell, 77 bajtów
Przykład użycia:
Jeżeli
x
iy
znajduje się w zasięgu, zewnętrznej i wewnętrznej pętli[1..5]
i podjąć charc
jeśli natrafi danax
iy
a0
inaczej. Jeślix
luby
nie jest w zasięgu,Non-exhaustive patterns
zgłaszany jest wyjątek.źródło
Oktawa 49 bajtów
źródło
QBIC ,
5350 bajtówEDYCJA: Teraz, gdy wiem, że nie muszę pokazywać początkowej siatki, podmieniłem dane wejściowe użytkownika
_!_!_?
dla parametrów wiersza poleceń::;
, oszczędzając 3 bajty.Wersja oryginalna: Zatrzymuje się między wydrukowaniem siatki 0 a pobraniem współrzędnych dla zamiany, pokazując siatkę 0.
Drukuje 5 łańcuchów po 5
0
', prosi użytkownika o 2 wejścia numeryczne i 1 ciąg znaków, sprawdza, czy liczby są mniejsze niż 5 i używaLOCATE
funkcji QBasic do podstawienia właściwego znaku.źródło
Java, 99 bajtów
źródło
> <> (Ryby), 36 bajtów (niekonkurujące)
Wypróbuj tutaj!
To jest przez wprowadzenie parametrów na stosie, na przykład [
chr
,y
,x
]. Jedna z zer na dole jest faktycznie zmieniana nachr
instrukcjęp
. Są prawdopodobnie lepsze sposoby na zrobienie tego, ale myślałem, że była to wyjątkowa i zabawna sytuacja, w której ta funkcja> <> jest przydatna.Wyjaśnienie
Ten program po prostu odejmuje 1 od
x
(jak w> <>,0
tak naprawdę byłaby to pierwsza kolumna), zamienia zax
pomocąy
, a następnie zmienia punkt codeboxx, y
nachr
viap
.y
nie trzeba odejmować 1, ponieważ kod jest już przesunięty o 1!Wyjaśnienie niekonkurencyjne
Jest to niekonkurencyjne, ponieważ w rzeczywistości nie generuje wyników. Właśnie to uznałem za bardzo zabawne. Jeśli jest to uważane za prawidłowe wyjście, daj mi znać!
Jest również niekonkurencyjny, ponieważ
y
może wynosić 0, ale uważam, że to jedyny problem z odpowiedzią. Naprawię to, jeśli jest to uważane za prawidłowe wyjście, ale w przeciwnym razie po prostu sprawia, że odpowiedź jest mniej zabawna ...źródło
Bash, 59 bajtów
Grał w golfa
1 USD , $ 2 - wiersz, kolumna, $ 3 - wymiana char, zgłaszany jest błąd poprzez kod wyjścia
Test
źródło
Vim,
60474276 klawiszyDane wejściowe mają format (w pierwszym wierszu):
Kursor zaczyna się od początku
Jeśli dane wejściowe są nieprawidłowe, wówczas wyrzuca:
E492: Not an editor command: ^
Cide, który produkuje dane wyjściowe, to tylko
42
bajty, ale w celu stworzenia błędu moja liczba bajtów jest drastycznie zwiększona.źródło
Java 8,
194192 bajtyWypróbuj tutaj z poprawnym wprowadzeniem.
Wypróbuj tutaj z niepoprawnym wprowadzeniem.
Będzie to
116114 bajtów zamiast funkcji zamiast pełnego programu:Wypróbuj tutaj.
Wyjaśnienie:
źródło