Modifizierter Boggle Checker mit modifiziertem Boggle-fähigem Code


19

Hintergrund

Boggle ist ein Brettspiel, bei dem die Spieler auf einem 4-mal-4-Brett aus zufälligen Alphabeten nach englischen Wörtern suchen müssen. Wörter können konstruiert werden, indem nacheinander benachbarte Zellen auf der Tafel ausgewählt werden. ("benachbart" bedeutet horizontal, vertikal oder diagonal benachbart.) Dieselbe Zelle kann auch nur einmal in einem Wort verwendet werden.

Das Folgende ist eine Beispieltafel:

I L A W
B N G E
I U A O
A S R L

Auf diesem Board BINGO, ORANGEund WEARSgelten Worte, aber SURGEund RUSSIAnicht sind:

  • SURGE: Es gibt kein benachbartes Paar auf dem Brett RG.
  • RUSSIA: Skann nicht zweimal verwendet werden.

Modified Boggle ist eine modifizierte Version von Boggle mit den folgenden Regeln:

  • Die nBoardgröße ist -by- n, wobei njede positive ganze Zahl sein kann.
  • Jede Zelle kann ein beliebiges Byte zwischen 0 und 255 enthalten.
  • Eine Zelle kann mehrmals verwendet werden, jedoch nicht zweimal hintereinander .

Unter Verwendung des Beispiels Platine oben, zusätzlich zu BINGO, ORANGEund WEARS, LANGUAGEwird eine gültige Zeichenfolge (da Gzweimal verwendet wird, aber nicht zweimal hintereinander) , aber RUSSIAist immer noch nicht (durch SSpair).

Hier ist ein weiteres Beispiel mit einem Codefragment. Die Zeichenfolge from itertools import*\nbefindet sich auf der folgenden Tafel, aber nicht from itertoosl import*oder from itertools import *:

f   i   ' ' s
r   t   m   l
e   o   o   p
\n  *   t   r

Beachten Sie, dass Sie zwei benötigen o, um der ooSequenz zu entsprechen.

Herausforderung

Schreiben Sie eine Funktion oder ein Programm, das anhand einer modifizierten Boggle-Platine B(beliebiger Größe) und einer Zeichenfolge sfeststellt, ob ses sich auf befindet B.

Beschränkungen

Ihr Code selbst sollte auch auf eine modifizierte Boggle-Platine passen b. Das heißt, Sie müssen das Board bin Ihrem Beitrag zusammen mit Ihrem Code anzeigen, damit Ihre Funktion / Ihr Programm true ausgibt, wenn es angegeben ist, bund Ihren Code als Eingabe.

Wertung

Das Ergebnis Ihrer Einreichung ist die Seitenlänge des kleinsten Brettes, auf bdas Sie Ihren Code einfügen können. Krawatten werden durch die üblichen Regeln gebrochen , dh die Länge Ihres Codes in Bytes. Die Einsendung mit der niedrigsten Punktzahl (für beide Kriterien) gewinnt.

Hat zum Beispiel from itertools import*\ndie Punktzahl 4 (unter Verwendung der obigen Karte) und eine Codelänge von 23 Bytes.

Ein- und Ausgang

Für die Eingabe können Sie eine beliebige Methode für Bund verwenden s. Dies beinhaltet eine Liste von Zeichen und eine Liste von Zeichencodes, 2D oder abgeflacht oder was auch immer sinnvoll ist. Optional können Sie die Kartengröße als Teil der Eingabe verwenden.

Für die Ausgabe können Sie eine der folgenden Optionen auswählen:

  • Wahrheits - und Falschheitswerte gemäß der Konvention Ihrer Sprache oder
  • Ein vordefinierter Wert für true bzw. false.

Bitte geben Sie Ihre Eingabe- / Ausgabemethode in Ihrem Beitrag an.


Ich vermute, dass ein Esolang mit einem sehr kleinen Zeichensatz, der auf einen 2x2-Zeichensatz passt, am
Uhr

Und jedes Unary- Programm wird 4 Punkte erzielen, aber es ist fast garantiert, dass es aufgrund der Gleichheitsregel gegen eine Sprache, die 4 verschiedene Symbole verwendet, verliert.
Arnauld

@Arnauld Ich dachte vielleicht tinyBF und wenn du zwei benachbarte Symbole brauchst, machst du einfach so +=+=etwas. Das Problem ist die ==Ausgabefunktion ...
HyperNeutrino

2
@ l4m2 Das Lösen mit einer solchen Sprache ist immer willkommen, aber hüte dich vor Jo Kings Warnung.
Bubbler

3
Ist das wirklich eine eingeschränkte Quelle ? Ich denke, es ist nur eine zweifache Herausforderung (eher für Nicht-Golf-Sprachen), bei der Sie sowohl Code als auch das kleinstmögliche Boggle-Board finden sollen, in das der Code passt.
Erik der Outgolfer

Antworten:


10

Python 2, Punktzahl 3, 20972 Bytes

exec'cecxc%c'%(1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1)+…

Vollständiger Code ist die Ausgabe von: Online ausprobieren!

Passt auf das Boggle Board:

e x (
c % 1
' + )

Dekodiert und führt dieses Programm aus:

cecxc=any
c,cec=input()
cxec=len(c)
cexec=lambda    cxc,cexc,c,cec:cexc<=''or   cxc[cec][c]==cexc[0]>0<cecxc(cexec(cxc,cexc[1:],cxcxc,cxcec)for cxcxc   in(c-(c>0),c,c+(+1+c<cxec))for  cxcec   in(cec-(cec>0),cec,cec+(+1+cec<cxec))if(cxcxc,cxcec)!=(c,cec))
cxc=range(cxec)
print   cecxc(cexec(c,cec,cexc,cxec)for cexc    in  cxc for cxec    in  cxc)

Was Eingaben wie: ['ILAW','BNGE','IUAO','ASRL'], 'LANGUAGE'


Hm, anscheinend habe ich in Jelly einen Weg gefunden, das zu tun.
Erik der Outgolfer

5

CJam , Score 2, 9351 Bytes

'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~)))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))'))))))))~))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))))))))))))))))))))))))))))))))))))))))))))))))))))~'))))))))))))))))))')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))'))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))~'))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))~'))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))~

Probieren Sie es online! Erwartet Eingaben wie:

["ILWA" "BNGE" "IUAO" "ASRL"]
LANGUAGE

und passt auf das Boggle Board:

' )
~ )

Konstruiert den String l~:Q,:K;{\:Y;\:X;:C,!_{;QY=X=C0==_{;[X(XX)]K,&[Y(YY)]K,&m*[XY]a-C1>:D;{~DF}%:|}&}|}:F;l:R;K,2m*{~RF}%:|~und wertet ihn als CJam-Code aus.


Sofern es nicht irgendwo ein eingebautes Gerät gibt (ich sehe Sie an, Mathematica), ist eine Punktzahl von 2 die niedrigste, die Sie bekommen können. Die Herausforderung besteht nun darin, eine kürzere Version derselben Größe zu erstellen.
Ingenieur Toast

@EngineerToast Nicht irgendeiner. Es muss ein 1-Byte-Speicherplatz sein, da Sie nicht mehr als einmal hintereinander denselben Speicherplatz verwenden können.
mbomb007

@ mbomb007 Genau das habe ich gemeint, aber nicht explizit gesagt. Die Klarstellung schließt aus, dass Sprachen wie Unary oder alles andere, was genau dasselbe Zeichen ist, wiederholt werden.
Ingenieur Toast

3

Sauber , 12 Punkte (175 Bytes)

(Dies wird mit ziemlicher Sicherheit von einem Esolang und wahrscheinlich auch von normalen Sprachen übertroffen.)

import StdEnv;>[]_ _ _ _=True;>[c:s]i j n a=i<n&&j<n&&i>=0&&j>=0&&a.[i,j]==c&&or[>s k l n a\\k<-[i-1..i+1],l<-[j-1..j+1]|i<>k||j<>l];$n c a=or[>c i j n a\\i<-[0..n],j<-[0..n]]

Dies definiert eine Funktion, $ :: Int [Char] {#String} -> Booldie prüft, ob das zweite Argument (das Wort) im dritten Argument (die Tafel) gefunden werden kann, wenn das erste Argument als width angegeben wird.

Markiert in der Tafel, auf die dies passt (siehe unten), *unbenutzte Stellen. Es gibt 16 davon auf einer Tafel der Größe 12 × 12 = 144, was bedeutet, dass 128 effektiv genutzt werden (ein Wirkungsgrad von 175/128 ≈ 1,37 ). Es ist zwar möglich, dasselbe Programm auf 11 × 11 zu erhalten, dies geschieht jedoch alles von Hand und ist sehr mühsam. Mein Chef würde sich wahrscheinlich nicht freuen, wenn ich versuchen würde, es auf 11 × 11 zu bringen.

* * & & * * * * * * * ;
s [ n < j * * u r T > v
  > r & i > * e =   [ n
l k o & 0 = n   ; _ ] E
  & a . = ] a j i > [ d
a n & c [ j . + ] s c t
\ k < - i , - . 1 | : S
\ * 1 l . + 1 = i j |  
[ i \ . , ] o a < > k t
0 - < \ a   r >   l ] r
. j , * n j [ i c $ ; o
. n ] ] * *     n i m p

Probieren Sie es online aus (mit dem Programm selbst als Eingabe)!


2

Java, 23 Punkte, 538 507 Bytes

NSFW

import java.util.function.*;import java.util.stream.*;class B{static BiFunction<char[][],String,BiFunction<Integer,Integer,Byte>>f;{f=(b,s)->(i,j)->{try{if(b[i][j]!=s.charAt(0))return 0;}catch(Exception e){return 0;}if(s.length()<2)return 1;byte t=0;for(int k=9;k-->1;){t|=f.apply(b,s.substring(1)).apply(i+~k%3+1,j+~(k/3)%3+1);}return t;};BiFunction<char[][],String,Byte>g=(b,s)->{int l=b.length;return (byte)IntStream.range(0,l*l).map(i->f.apply(b,s).apply(i%l,i/l)).reduce((x,y)->x+y-x*y).getAsInt();};}}

Probieren Sie es online!

Kompiliert mit JDK 9, sollte aber mit 8 funktionieren.

Ich wusste nicht, was ich mit den Importen und dem statischen Feld anfangen sollte (was eigentlich notwendig ist), also entschied ich mich, nur die ganze Klasse zu nehmen und die Lambdas in einen Initialisierer zu stecken. Das Lambda gkann dann auf ein 2D-Array und eine Zeichenfolge angewendet werden und gibt zurück, 1ob sich die Zeichenfolge auf der Platine befindet und 0wenn nicht (als Byte3 Zeichen kürzer als Integer).

Kredit zu diesem Kerl für einen (in meinem Fall) kürzer als hartzucodieren Weg zu Adresse benachbarter Zellen.

Irgendwann im Laufe der Entwicklung dieser Monstrosität habe ich mich dafür eingesetzt, dass sie mit Lambdas funktioniert. Bis dies geschah, wurde sie immer schlimmer. Es kommt nicht einmal den anderen Antworten nahe und ist wahrscheinlich nicht einmal der optimalen Lösung in Java nahe, aber hey, es passt ziemlich gut auf ein 23x23-Board (was nicht optimal ist, aber vielleicht näher als das Programm selbst) :

duce((x,y)->x+y-x*y).ge
e l=b.length;return (bt
rt3+1,j+~(k/3)%3+1);}yA
.n%te t=0;for(int k=rts
)iky0;}catchExcepti9e)I
){~b (b,s)->(i,j)-o;tIn
l>+;n=ring,iFunct>nkunt
/-i1rftass B{stai{ -rt(
i)( u{Slport jatote-nS)
,synt;,cmutil.vinr)> t;
l,lref];i.porfac<y{1tr}
%bpur>[*;amitu. I{r;}e;
i(pt)>].*vaj nuBnie);a}
y=ae)e[m.noitctitft{Bm}
lg.r0traerts.liFe(uti.}
p>))(yhc<noitcnugbr|Fr 
pe12tB,regetnI,re[n=ua 
at(<Arahc.s=!]j[]i fng 
.yg)(htgnel.s(fi};0.ce 
)Bnirtsbus.s,b(ylppat( 
s,gnirtS,][][rahc<noi0 
,b(ylppa.f>-i(pm.)l*l,                            

Natürlich gab es zu diesem Zeitpunkt keinen Grund, dies von Hand zu versuchen. Als Bonus habe ich folgende (naive) Funktion verwendet, um den Code auf das Board zu komprimieren:

static char[][] toBoggleBoard(String s, int n) {

    char[][] board = new char[n][n];
    int i = n / 2;
    int j = i;
    int[] d = {1, 0};

    s = s + s.charAt(s.length() - 1); //the last char gets eaten don't ask me why PS editing loop condition does make it work but causes a StringIndexOutOfBoundsException
    board[i][j] = s.charAt(0);
    s = s.substring(1);
    while (s.length() > 0)
    {
        int[] ra = add(d, right(d));
        int[] r = right(d);
        int[] l = left(d);

        if (board[i + d[0]][j + d[1]] > 0)
        {
            if (board[i + d[0]][j + d[1]] == s.charAt(0))
            {
                i += d[0];
                j += d[1];
                s = s.substring(1);
            }
            else
            {
                i += l[0];
                j += l[1];
                board[i][j] = s.charAt(0);
                s = s.substring(1);
            }
        }
        else if (board[i + ra[0]][j + ra[1]] == s.charAt(0))
        {
            i += ra[0];
            j += ra[1];
            s = s.substring(1);
        }
        else if (board[i + r[0]][j + r[1]] > 0)
        {
            i += d[0];
            j += d[1];
            board[i][j] = s.charAt(0);
            s = s.substring(1);
        }
        else
        {
            int[] rb = sub(r, d);
            d = r;
            if (board[i + rb[0]][j + rb[1]] > 0)
            {
                continue;
            }
            else
            {
                i += d[0];
                j += d[1];
                board[i][j] = s.charAt(0);
                s = s.substring(1);
            }   
        }
    }

    for (int k = 0; k < board.length; ++k)
    {
        for (int l = 0; l < board.length; ++l)
        {
            if (board[k][l] == 0)
            {
                board[k][l] = ' ';
            }
        }
    }

    return board;
}

static int[] left(int[] d) {
    return new int[]{-d[1], d[0]};
}

static int[] right(int[] d) {
    return new int[]{d[1], -d[0]};
}

static int[] add(int[] x, int[] y) {
    return new int[]{x[0] + y[0], x[1] + y[1]};
}

static int[] sub(int[] x, int[] y) {
    return new int[]{x[0] - y[0], x[1] - y[1]};
}

Es ordnet seine Eingabe einer Spirale zu, bei der die Snaking-Implementierung nicht funktioniert hat , und lässt nach Möglichkeit Zeichen weg. Es ist ziemlich einfach, könnte also wahrscheinlich verbessert werden, und ich habe vergessen, die Prüfung auf Zeichen in der Rückwärtsrichtung hinzuzufügen (Update: Ich habe es hinzugefügt und es hat zu falschen Ergebnissen geführt) , also könnte ich wahrscheinlich ein oder zwei Zeichen abschneiden, aber ich bezweifle, dass es funktioniert auf einem 22x22.

Bearbeiten: 6 Leerzeichen an Stellen entfernt, an denen sie nicht sein mussten. 13 Bytes wurden eingespart, indem eine Überprüfung der Array-Indizes durch einen Try-Catch ersetzt wurde. 12 Bytes durch Verschieben der Kartengröße in eine int.


1

Jelly , 2316 Bytes, Punktzahl 3

1111111111111111111111111111111,11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,111111111111111111111111111111111111111111111111,11111111111111111111,11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,1111111111111111111,11111111111111111111111111111111111111111111111,111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,1111111111111,1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111D§ịØJv

Probieren Sie es online!

Tafel:

1,v
D1J
§ịØ

Hinweis: Dies ist eine (etwas) triviale Lösung. Wir danken Lynn für die Idee .

Gibt eine nicht-leere Liste , wenn sfinden Sie in B, und eine leere Liste , wenn nicht. Die hinzugefügte Fußzeile hilft dabei, dies zu verdeutlichen.


Ich war mir nicht sicher, ob das erlaubt war. Ich wollte 0 zurückgeben, wenn ses nicht gefunden werden konnte, oder eine positive Ganzzahl, wenn es gefunden werden konnte. Die Regeln geben jedoch "Einen vordefinierten Wert für true bzw. false" an. Oder sind leer / nicht leer für falsche / wahre Konventionen in Jelly?

@ Keelan Jellys "if-like" -Konstrukt, das standardmäßig die Wahrhaftigkeit eines Werts definiert, betrachtet eine leere Liste als falsch und jede andere Liste als wahr. Es ist wirklich nur die Konvention von Python 3 (da Jelly darin implementiert ist).
Erik der Outgolfer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.