Herausforderung
Erstellen Sie das kürzeste Programm, das den Anforderungen entspricht
Bedarf
Der Code muss ein 5x5-Raster von 0 erzeugen, wie folgt:
00000 00000 00000 00000 00000
Der Code muss eine Eingabe (Spalte, Zeile, Zeichen) akzeptieren. Das Raster muss sich entsprechend ändern:
Start:
00000 00000 00000 00000 00000
Eingang:
(2,5,*)
Ausgabe:
0*000 00000 00000 00000 00000
(Hinweis: Die linke untere Ecke ist Position 1,1.)
Das Programm muss eine andere Fehlermeldung als das Raster zurück , wenn die Zeile / Spalte Eingabe nicht 1,2,3,4 ist, oder 5. Dieses jede Mitteilung Ihrer Wahl sein kann (solange es nicht das Gitter ist), so
0
ist eine akzeptable Fehlerausgabe.Das Programm muss mit allen druckbaren ASCII-Zeichen (einer US-Tastatur) arbeiten.
DER GEWINNER
Der Gewinner ist die Person, die den kürzesten Code hat und alle Anforderungen erfüllt. Wenn mehr als eine Antwort funktioniert und dieselbe (kürzeste) Länge hat, gewinnt die Person, die zuerst geantwortet hat.
0
für Fehler und das Raster für Erfolg zurückkehren?Antworten:
Dyalog APL ,
171310 BytesFordert zur Eingabe eines umschlossenen Arrays mit (Zeile, Spalte) und eines Zeichens auf. Gibt INDEX ERROR bei fehlerhafter Eingabe aus.
Probieren Sie es online!
⊖
Flip auf den Kopf das Ergebnis von⍞
Eingegebenes Zeichen@
Ersetzen des Inhalts an Position⎕
ausgewertete Eingabe (eingeschlossene Zeile, Spalte)⊢
von5 5⍴
5 × 5 Array von0
Nullenquelle
⊢
notwendig Ich denke in diesem Fall ist es überflüssig.(⊂⎕)5 5
ein einzelnes Array mit 3 Elementen - das Argument dafür⍴
.Rubin,
157149 BytesFehler bei fehlerhafter Eingabe oder nicht gebundener Position
Dank an ConorO'Brien (8 Bytes) und ängstlich (2 Bytes) für die Unterstützung beim Speichern von Bytes
quelle
loop do...end
->loop{...}
; Ich denke,Array.new(5,[0]*5)
funktioniert auch oder sogar[*[0]*5]*5
.Array.new(5,[0]*5)
machen Sie eine Reihe von Referenz und[*[0]*5]*5
machen Sie eine flache Reihe*
. Dann entsteht immer noch ein Array von Referenzen.Array.new(5){[0]*5}
kann durch ersetzt werden(1..5).map{[0]*5}
, um 2 Bytes zu sparen.Batch, 199 Bytes
Fehler aus, wenn die Position außerhalb des Bereichs liegt.
quelle
<
, wie^<
. Ich bin mir nicht sicher.PHP,
11110097 BytesDruckt,
E
wenn Zeile / Spalte außerhalb des Bereichs liegen.Laufen Sie mit
php -r <code> <row> <column> <character>
quelle
Python, 66 Bytes
quelle
Dyalog APL,
242018 Bytes4 Bytes gespart dank Zgarb! 2 Bytes gespart dank Adam!
Fordert zur Eingabe auf. Unten finden Sie eine Erklärung.
20 Bytes
Ordnen Sie eine Funktion zu und rufen Sie sie auf
y x f 'c'
. Z.B:Erläuterung
{...}
ist eine Funktion mit linkem⍺
und rechtem Argument⍵
.⋄
Separate Anweisungen, daher gibt es drei Anweisungen:Die erste Anweisung
a←5 5⍴0
setzta
auf ein5
By-5
Raster von0
s.Die zweite Anweisung wird das Element an den Koordinaten diktiert von
⍺
zu⍵
(das heißt, das Zeichen).Schließlich führen wir das
⊖
ausa
und geben es zurück, wobei wir die erstena
umgekehrten Ergebnisse erhalten .quelle
{a←5 5⍴0⋄a[⊂⌽⍺]←⍵⋄⊖a}
spart ein paar Bytes.a←5 5⍴0⋄a[⊂⎕]←⍞⋄⊖a
JavaScript (ES6),
7376 BytesLöst ein aus,
TypeError
wenn die Spalte oder die Zeile außerhalb des Bereichs liegt.Demo
Code-Snippet anzeigen
quelle
c
oderr
weniger als 1 ist?c == 0 || r == 0
. Aber ich denke, Sie haben Recht: Ich werde es aktualisieren, um negative Werte zu vermeiden.199 Bytes
Basierend auf der Antwort von Pete Arden
Ungolfed:
quelle
05AB1E ,
2722 BytesGibt kein Raster zurück, wenn Zeile / Spalte> 5 ist.
Probieren Sie es online!
Vorherige Version
quelle
Gelee , 28 Bytes
Das fühlt sich viel zu lang an ...
TryItOnline!
Wie?
quelle
JavaScript (ES6), 89 Byte
Weil ich Rekursion liebe. Wirft ein
ReferenceError
auf ungültige Koordinaten.quelle
Mathematica, 38 Bytes
quelle
Brain-Flak 415 Bytes
Beinhaltet +3 für
-c
Probieren Sie es online!
Fügt zuerst das Zeichen ein, dann die Zeile und dann die Spalte ohne Leerzeichen.
Das meiste davon ist nur Fehlerbehandlung. Brain-Flak kann nicht gut überprüfen, ob Werte in einem Bereich liegen. Bei Fehlern wird entweder nichts ausgegeben oder nur das Zeichen, das eingefügt werden sollte. Das Lösen des eigentlichen Problems dauert nur 211 Bytes:
quelle
Excel VBA, 67 Bytes
Ausgaben im Bereich A1: E5 auf dem aktiven Blatt des vba-Projekts werden mit beendet
wenn eine ungültige Eingabe bereitgestellt wird.
Code:
Verwendung:
Ausgabe (aus obigem Beispiel) :
quelle
208 Bytes
Golf gespielt:
Ungolfed:
Testen:
quelle
c
und / oderr
außerhalb des zulässigen Bereichs liegen, wird eine ausgelöst,IndexOutOfRangeException
sodass Sie möglicherweise die erste if-Anweisung entfernen können, obwohl ich die Spezifikationen nicht ordnungsgemäß darauf überprüft habe. Sie können zu einem kompilieren,Func<int, int, char, string>
um Bytes zu sparen, ich glaube, Sie müssenusing System.Linq;
wegen desReverse
Aufrufs hinzufügen , obwohl ich mich nicht aus dem Kopf erinnern kannd[r - 1] = d[r - 1].Substring(0, c - 1) + a + d[r - 1].Substring(c);
,d[--r] = d[r].Substring(0, c - 1) + a + d[r].Substring(c);
um 4 Bytes zu speichernWinDbg, 95 Bytes
Fast die Hälfte davon überprüft nur, ob die Indizes im Bereich liegen ... Die Eingabe erfolgt durch Setzen der Pseudo-Register
$t0
,$t1
und$t2
(wo$t2
hält der ASCII - Wert der Kohle zu ersetzen). Zum Beispiel(2,5,*)
wie das Beispiel wäre:Druckt
0
bei einem Fehler.Wie es funktioniert:
Beispielausgabe:
quelle
Haskell, 77 Bytes
Anwendungsbeispiel:
Wenn
x
undy
in Reichweite sind, durchlaufen äußere und innere Schleife[1..5]
und nehmen das Zeichen,c
wenn es das gegebenex
undy
und ein0
anderes trifft . Wennx
odery
nicht in Reichweite ist, wird eineNon-exhaustive patterns
Ausnahme ausgelöst.quelle
Oktave 49 Bytes
quelle
QBIC ,
5350 BytesBEARBEITEN: Jetzt, da ich weiß, dass ich das Startraster nicht mehr anzeigen muss, habe ich die Benutzereingaben
_!_!_?
gegen Befehlszeilenparameter ausgetauscht::;
und 3 Byte gespart.Originalversion: Dies hält zwischen dem Drucken des 0-Gitters und der Eingabe der Koordinaten für die Ersetzung an, wobei das 0-Gitter angezeigt wird.
Druckt 5 Zeichenfolgen mit 5 Zeichen
0
, fordert den Benutzer auf, 2 numerische Eingaben und 1 Zeichenfolge einzugeben, prüft, ob die Zahlen <5 sind, und verwendet die QBasic-LOCATE
Funktion, um das richtige Zeichen zu ersetzen.quelle
Java, 99 Bytes
quelle
> <> (Fisch), 36 Bytes (nicht konkurrierend)
Probieren Sie es hier aus!
Dies geschieht , indem die Parameter auf dem Stapel wie [run
chr
,y
,x
]. Eine der unteren Nullen wirdchr
durch den Befehl tatsächlich geändertp
. Es gibt wahrscheinlich bessere Möglichkeiten, dies zu tun, aber ich dachte, dies sei eine einzigartige und unterhaltsame Situation, in der diese> <> -Funktion nützlich ist.Erläuterung
Dieses Programm subtrahiert einfach 1 von
x
(wie in> <>,0
wäre eigentlich die erste Spalte), tauschtx
mity
und ändert dann den Codebox-Punktx, y
inchr
viap
.y
muss nicht um 1 subtrahiert werden, da der Code bereits um 1 versetzt ist!Nicht konkurrierende Erklärung
Dies ist nicht konkurrierend, da es keine Ausgabe erzeugt. Ich fand das einfach extrem amüsant. Wenn dies als gültige Ausgabe angesehen wird, lassen Sie es mich bitte wissen!
Es ist auch nicht konkurrierend, weil
y
es 0 sein kann, aber ich glaube, das ist das einzige Problem mit der Antwort. Ich werde das Problem beheben, wenn dies als gültige Ausgabe betrachtet wird, aber ansonsten macht es die Antwort nur weniger unterhaltsam ...quelle
Bash, 59 Bytes
Golf gespielt
$ 1 , $ 2 - Zeile, Spalte, $ 3 - Ersatzzeichen, Fehler wird über den Exit-Code gemeldet
Prüfung
quelle
Vim,
60,47,4276 TastenanschlägeDie Eingabe erfolgt im Format (in der ersten Zeile):
Mit dem Cursor am Anfang beginnen
Wenn die Eingabe ungültig ist, wird ausgelöst:
E492: Not an editor command: ^
Die Cide, die die Ausgabe erzeugt, ist nur
42
Bytes, aber um einen Fehler zu erzeugen, wird mein Bytecount drastisch erhöht.quelle
Java 8,
194192 BytesProbieren Sie es hier mit der richtigen Eingabe.
Versuche es hier mit falscher Eingabe.
Dies wären
116 bis114 Bytes als Funktion anstelle des vollständigen Programms:Probieren Sie es hier aus.
Erläuterung:
quelle