Kann Jimmy an seinem Seil hängen?


18

Noch eine Jimmy-Herausforderung von seinem ursprünglichen Vater. Sehen Sie sich diese anderen schönen Herausforderungen an .


Wie Sie alle wissen, haben wir in letzter Zeit Herausforderungen im Zusammenhang mit Jimmy auf Plattformen gesehen. Jetzt ist Jimmy ein Akrobat, wie ich bereits erwähnte, und er hat andere Tricks im Ärmel.

Einer dieser Tricks hängt an Seilen. Hier ist ein Beispiel für ein Seil, an dem Jimmy hängen könnte:

            ||
            ||
            ||
            ||
            ||
            ||

Wenn Jimmy an einem Seil hängt, sieht es so aus:

            ||
            ||
           /o\
            ||
            ||
            ||

Er kann links oder rechts vom Seil hängen.

            ||
            ||
            ||
            /o\
            ||
            ||

ist auch gültig. Aber er kann nicht nur an einem Körperteil hängen, also ungefähr so:

            ||
            ||
            ||
          /o\|
            ||
            ||

ist ungültig. Beachten Sie, dass, wenn er an einem Körperteil hängt, die andere Hälfte des Seils sichtbar ist, weil Jimmy es nicht verdeckt.

Jimmy mag es auch nicht, am Boden des Seils zu hängen - es macht ihm Angst - also das:

            ||
            ||
            ||
            ||
            ||
            /o\

ist ungültig.

Die Herausforderung

Nehmen Sie die Eingabe einer Jimmy-Situation wie oben und geben Sie an, ob Jimmy durch einen wahren oder falschen Wert am Seil festhält oder nicht.

Die Besonderheiten

  • Schreiben Sie ein Programm, das Eingaben entgegennimmt. Dies kann über eine Funktion oder eine andere geeignete Eingabemethode erfolgen.

    1. Die Eingabe sollte eine Szene aus einem Jimmy und einem Seil sein, wie oben dargestellt.
  • Das Programm sollte einen echten oder falschen Wert an die Konsole ausgeben, der davon abhängt, ob Jimmy am Seil hängen kann oder ob er vom Seil fallen würde.

  • Die Kriterien, nach denen Jimmy am Seil hängen kann:

    1. Zwei seiner Körperteile sind am Seil.

    2. Er ist nicht am Boden des Seils.

    3. Er schwebt nicht in der Luft.

  • Sie können davon ausgehen, dass das Seil gerade ist, aus ||Segmenten besteht und länger als ein Zeichen ist.

  • Sie können davon ausgehen, dass ein ganzes Seil und ein einziger Jimmy in Ihrer Szene präsent sind, nicht mehr und nicht weniger.

  • Sie können davon ausgehen, dass sich am unteren Ende des Seils keine nachlaufenden Newlines befinden.

  • Sie müssen vor und nach dem Seil beliebig viele Vor- und Nachlaufstrecken abdecken.

Testfälle

           ||
           ||
           ||                 TRUTHY
           /o\
           ||
           ||


            ||
            ||
          /o\|                FALSY
            ||
            ||


        ||
       /o\                    TRUTHY
        ||


            ||
           /o\                FALSY


         /o\
          ||                  TRUTHY


            ||
            ||
       /o\  ||                FALSY
            ||
            ||

Wertung

Das ist , sodass die niedrigste Punktzahl in Bytes nach etwa einer Woche erreicht wird.

Bestenliste

Sie können die Bestenliste für diesen Beitrag anzeigen, indem Sie das Widget / Snippet unten erweitern. Damit Ihr Beitrag in die Rangliste aufgenommen wird, benötigen Sie einen Header ( # header text) mit folgenden Informationen:

  • Der Name der Sprache (Ende mit Komma ,oder Bindestrich -), gefolgt von ...

  • Die Anzahl der Bytes als letzte Zahl in Ihrer Kopfzeile.

Beispielsweise JavaScript (ES6), 72 bytesist gültig, aber Fortran, 143 bytes (8-bit)ungültig, da die Byteanzahl nicht die letzte Zahl in der Kopfzeile ist (Ihre Antwort wird als 8 Byte erkannt - nutzen Sie dies nicht).

<!-- Run the snippet to see the leaderboard. Report any bugs to @xMikee1 on Github. -->    <iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=187759" width="100%" height="100%" style="border:none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>


1
Wird das Seil immer die gleiche Anzahl von Zwischenräumen haben, oder kann das variieren?
mprogrammer

@ Maxwell Das kann variieren.
connectyourcharger

Können wir die Eingabe als eine Art Liste betrachten, in der jede Zeile eine separate Zeichenfolge ist, oder muss es eine einzelne Zeichenfolge sein?
mprogrammer

19
Jimmy sollte wirklich Urlaub machen
Luis Mendo

7
@ LuisMendo Jimmy widmet sich dem, was er tut!
connectyourcharger

Antworten:


13

Japt , 5 Bytes

Ich denke , das ist richtig; Ich habe gerade für 16 Stunden gearbeitet und kaum meinen Namen wissen , so würde ich nicht überrascht sein , wenn es nicht!

Õø|io

Versuch es

Õø|io     :Implicit input
Õ         :Transpose
 ø        :Contains?
  |io     :  "|" prepended with "o"

2
16 Stunden? Nun , das ist Hingabe!
connectyourcharger

2
Warten Sie, bis Sie 16 Stunden gebraucht haben, um 5 Bytes aufzuschreiben? ;-)
Cullub

Sieht aus, als ob Sie eine Pause brauchen (der gleiche Rat gilt für den kleinen Jimmy!).
Ihavenoidea

@connectyourcharger, nein, das ist mein Leben! Engagement würde es ohne Pause tun. Was ich getan habe!
Shaggy

1
@ihavenoidea, Pfft! Ich schlafe wenn ich tot bin!
Shaggy

22

Python 2 oder 3 ,  33  30 Bytes

-3 dank Maxwell

lambda l:'o'in map(max,l[:-1])

Eine unbenannte Funktion, eine Liste von Linien zu akzeptieren

Probieren Sie es online!

Wie?

Es muss einen von Jimmy verdeckten Seilabschnitt geben, der nicht der unterste ist.

lambda l:'o'in map(max,l[:-1])
lambda l:                      # a function taking l (the lines as strings)
                       l[:-1]  # strip off the last line
               map(max,      ) # maximum of each line (where '|'>'o'>'\'>'/'>' ')
         'o'in                 # was 'o' one of them? (hence Jimmy obscured all the rope)

Speichern Sie drei Bytes:lambda l:'o'in map(max,l[:-1])
mprogrammer

Oh, sehr klug - danke!
Jonathan Allan

Das ist eine sehr clevere Verwendung von ASCII-Werten. Nett.
Fonds Monica Strafanzeige

16

Python 2, 28 Bytes

lambda x:"o', '|"in`zip(*x)`

Probieren Sie es online!

Wie funktioniert es? Es nimmt die Eingabe als eine Liste von Strings und Reißverschluss schließt sich den String. Jimmy bleibt am Seil, wenn ein "|" Dieser Code verbindet alle Zeilen und prüft, ob ein "o" gefolgt von einem "|"

Kommentierter Code:

lambda x: # Creates an anonymous function that takes one argument
  "o', '|" # If this substring is in the zip object, then Jimmy's "o" is above a "|"
    in
    `    # Back quotes change the object into its string representation
    zip(*x)` # Joins the lines together

(Alte Antwort) Python 2 oder 3, 39 Bytes

lambda x:1-all("|"in i for i in x[:-1])

Eine Funktion, die Eingabe als eine Liste von Zeichenketten führt, wobei jeder String eine andere Zeile.

-11 Bytes dank xnor! -2 Bytes danke an Jonathan Allan!

Probieren Sie es online! (Wenn Sie mehr Testfälle, um zu versuchen, legte sie lediglich ein „“ Nach jedem Satz von Linien in dem Eingabefeld ein.)

Wie funktioniert das? Nun, wenn Jimmy voll am Seil ist, dann hat diese Linie kein "|" Zeichen. Aus diesem Grund können wir jede Zeile überprüfen, und wenn wir eine finden, die kein "|" Charaktere, dann wissen wir, dass Jimmy am Seil bleiben kann. Jimmy kann sich jedoch nicht an der Unterseite des Seils festhalten; Aus diesem Grund nehmen wir die letzte Zeile nicht in unseren Scheck auf. Wenn die letzte Zeile nur ein Teil des Seils ist, spielt es keine Rolle, da wir weiter oben noch eine gültige Zeile finden, aber wenn die letzte Zeile die mit Jimmy ist, wird sie keine Zeile finden ohne "|" überall und wird False zurückgeben.


Können Sie dies tun, ohne zu überprüfen, ob die Zeile ein "/" enthält?
6.

@xnor Yup! -11 bytes
mprogrammer

1
Speichern Sie ein paar wie folgt:lambda x:1-all("|"in i for i in x[:-1])
Jonathan Allan

1
Autsch, du warst schneller :)
Daniil Tutubalin

1
@KlaymenDK Die Funktion durchläuft x [: - 1] und nicht x. x [: - 1] enthält alle Elemente der Liste mit Ausnahme des letzten Elements, da Sie in Python negative Indizes verwenden können. Daher gibt es (richtig) ein falsches Ergebnis zurück, wenn Jimmy am Ende des Seils ist.
mprogrammer

8

Jelly ,  9 7  6 Bytes

Ṗ<”|ṀẠ

Ein monadischer Link, der eine Liste von Zeilen akzeptiert

Probieren Sie es online!

Wie?

Es muss einen von Jimmy verdeckten Seilabschnitt geben, der nicht der unterste ist.

Ṗ<”|ṀẠ - Main Link: list of lines of characters
Ṗ      - remove last line
  ”|   - pipe character
 <     - less than? (vectorises) - Note that all other characters are
    Ṁ  - maximum
     Ạ - all?

1
Ich finde es so komisch, diese Herausforderungen über Jimmies zu schreiben. Es fängt an, dass du dich komisch fühlst, wenn du dir mehrere Jimmies vorstellst, die an demselben Seil hängen.
connectyourcharger

1
@connectyourcharger Vorahnung?
negative sieben

@negativeseven Möglicherweise. Ich habe mir bereits ein Meta-Community-Wiki überlegt, um alle Jimmy-Beiträge zu indizieren.
connectyourcharger

1
Neun Bytes, und wir finden immer noch heraus, wie jemand sterben kann.
IMustBeSomeone

1
" Note that all other characters are [less than '|']"?
Erik der Outgolfer

5

Brainfuck, 79 64 Bytes

>>+<<,[----------[<]>>[.-]+<[>-]+[---------<-->]<[<]>>[-]<[>]<,]

Probieren Sie es online!

Gibt das 0x01-Byte für "truthy" und nichts für "falsy" aus.

Z: 0
A: input
B: 0
C: has no | been found on this line?

>>+<<                       initialize C to 1
,[                          loop over each char

  ----------                set A to 0 if input was \n
  [<]>>                     move to C if input was \n; B otherwise
  [                         if input was \n and C is true
    .-                      output 1
  ]

  +                         this will reinitialize C to 1 if input was \n
                            but also clobber B with 1 if it wasn't
                            now we have { 0   0   0  (1)} if input was \n;
                                        { 0   _  (1)  _ } otherwise
  <[>-]                     clear own cell if the one to the left is positive
                            this yields { 0   0  (0)  1 } and
                                        { 0   _  (0)  _ } as desired

  +[---------<-->]          set A to 0 if input was |
  <[<]>>                    move to C if input was |; B otherwise
  [-]                       zero out current cell: clears C if input was |
  <[>]<                     realign pointer onto A

,]                          break on end of input



4

05AB1E , 5 Bytes

Çü%àθ

Probieren Sie es online!

Ç         # convert the input to a 2D array of codepoints
 ü%       # pairwise modulo (vectorized)
   à      # maximum (*not* vectorized, returns a single number)
    θ     # tail (last digit)

Die einzigen Zeichen, die in der Eingabe erscheinen können, sind \o/ |mit den entsprechenden Codepunkten 92, 111, 47, 32, 124 (es gibt keine Zeilenumbrüche, da wir die Eingabe als Array von Zeilen gewählt haben). Die möglichen Ergebnisse durch Modulieren von zwei dieser Zahlen sind 0, 13, 15, 17, 19, 28, 30, 32, 45, 47, 92, 111. 111 ist die größte davon und auch die einzige, die mit 1 endet Daher gibt der Code nur dann wahrheitsgetreu aus, wenn 111 in der Liste vorhanden ist (in 05AB1E ist nur 1 wahrheitsgetreu). 111 ist 111 ( o)% 124 ( |) und tritt daher nur auf, wenn in der Eingabe ein oüber a steht |.


1
Sehr schön mit dem paarweisen Modulo.
Kevin Cruijssen



2

JavaScript, 39 33 Bytes

Vielen Dank an Daniil Tutubalin für das Golfen mit 2 Bytes

x=>!!x.match(/^( *)\/[^|]*\n/m)

Dies passt zu jeder Linie, die nicht die Linie ist, in der sein linker Arm auftaucht und keines der Seile zeigt.

Probieren Sie es online!


Es scheint zum Scheitern verurteilt , wenn er am Ende des Seils ist
fənɛtɪk

Es sollte scheitern, wenn er ganz unten ist, oder? Denn Jimmy fällt, wenn er am Ende des Seils ist
Programmierer

Ich meine, als ich ihn an den Boden des Seils legte, kehrte Ihre Funktion aus irgendeinem Grund am 1.
6.

Hm, dann vergiss es.
mprogrammer

1
Was ist /^ *.o. *\n/?
Dienstag,

2

/// , 53 50 Bytes

/~/\/\~/\/o\\/1~1 /1~ 1/1~|1~/1|~/|~/1.~/ ~/.~/
~.

Probieren Sie es online!

Da es keine andere Möglichkeit gibt, Eingaben in /// vorzunehmen, ist diese fest codiert:

/~/\/\~/\/o\\/1~1 /1~ 1/1~|1~/1|~/|~/1.~/ ~/.~/
~<INPUT HERE>.

Erläuterung:

Die allgemeine Vorgehensweise besteht darin, Jimmy durch eine unäre 1 zu ersetzen und ihn dann aus allen Situationen zu entfernen, in denen er in Gefahr ist. Überlebt er, wird er ausgegeben. Wenn nicht, dann ist nichts. Die ~im Code sind ein Ersatz für// , mit dem der Code hier um 3 Bytes gekürzt werden kann. Sie sind in der Erläuterung weggelassen.

/{/\//
/}/\/\//

          {The top two lines allow me to leave comments without disturbing the code.}

/\/o\\/1/ {Replace Jimmy with a 1.}
/1 /1/    {Get rid of any spaces in front of Jimmy. This moves Jimmy towards the rope from the left.}
/ 1/1/    {Get rid of any spaces after Jimmy. This moves Jimmy towards the rope from the right.}

/|1//     {If Jimmy is touching the rope, remove him and the rope.}
/1|//     {This is based on the observation that in all cases where Jimmy is safe, there is no visible rope on his line.}


/|//      {Remove any remaining rope. If Jimmy was touching a rope, it's already too late for him.}
/1.//     {This handles the case where Jimmy is at the bottom of the rope (hence the period at the end).}


/ //      {The remaining lines clean up the output.}
/.//
/
//

           ||
           ||
           ||
           /o\
           ||.

Probieren Sie es online!


2

Ruby 2.5.5, 22 Bytes

->x{x.pop;!x.all? /\|/}

Erwartet ein Array von Zeilen. Benötigt mindestens Version 2.5.5, da dies der Fall istArray#all?(pattern) es hinzugefügt wurde.

Aufgrund der Einschränkungen, dass die Eingabe immer eine gültige Szene von Jimmy und einem Seil ist, läuft es darauf hinaus, ob in einer der Zeilen vor der letzten Zeile das Seil verdeckt ist.




1

Netzhaut , 9 Bytes

m`^[^|]+^

Probieren Sie es online!

Jetzt habe ich noch nie in Retina programmiert, aber soweit ich das beurteilen kann, funktioniert es. Es ist ein regulärer Ausdruck, der einen String findet, der (1) den Anfang der Eingabe enthält, (2) kein "|" Zeichen und (3) eine neue Zeile.

Personen, die mit regulären Ausdrücken oder Retina besser vertraut sind, werden aufgefordert, Vorschläge zu unterbreiten. -2 Bytes dank Neil!


Zwei Alternativen: 1) Entfernen Sie das, \nweil eine neue Zeile kein |und damit sowieso übereinstimmt, und das Finale ^reicht aus, um sicherzustellen, dass Sie tatsächlich eine neue Zeile übereinstimmen. 2) Verwenden Sie eine Pilcrow anstelle von \nund entfernen Sie das Ende ^(da dies nach einem Zeilenumbruch im mehrzeiligen Modus immer der Fall ist).
Neil


1

Befunge-98 (PyFunge) , 26 24 Bytes

]~:a-!#v_' `+
^_-3q#$<
@

Probieren Sie es online!

Beendet mit Rückkehrcode 3, wenn \n auftritt und die letzte Zeile 3 Zeichen ohne Leerzeichen enthielt, andernfalls wird mit dem Rückkehrcode 0 auf EOF beendet. Dies setzt also voraus, dass die letzte Zeile keine nachgestellte Zeile enthält.

Präpariert

]~                     :a-!#v_                ' `+
 Read character,      Branch downwards if   Increment counter on 
 branch up (and        equal to 10 ('\n')   the stack if greater
 loop around) if                            than 32 (' ') and
 end of stream                              implicitly loop

^_-3q#$<                    <
 Return with code 3
 if counter is equal to 3,
 otherwise reset counter
 and return to beginning

@
 Return with exit
 code 0

1

05AB1E (Legacy) , 6 Byte

ζJ„o|å

Hafen von @Shaggy Japt-Antwort .

Eingabe als Liste von Zeilen.

Probieren Sie es online aus.

Erläuterung:

ζ       # Zip/transpose the (implicit) strings in the input-list, with space as filler
        # (NOTE: zip/transpose doesn't work on string-list in the new version of 05AB1E,
        #  which is why we use the legacy version)
 J      # Join these zipped/transposed lines together to a single string
  o  # And check if it contains the string "o|"
        # (after which the result is output implicitly)


1

Ulme 0,19, 68 Bytes

f r=List.any(not<<String.contains"|")(List.take((List.length r)-1)r)

Nimmt die Eingabe als eine Liste von Zeilen. Wenn die letzte Zeile ignoriert wird, wird geprüft, ob es welche mit der Nummer no gibt'|' sie leer ist. Dies bedeutet, dass das Seil vollständig von Jimmy bedeckt ist.

Überprüfen Sie alle Testfälle hier .




0

Pyret, 79 Bytes

{(l):all2({(r,n):string-char-at(n,string-index-of(r,"o") == "|")},l,link(0,l))}

Erwartet ein Array von Zeilen als Zeichenfolgen. Erstellt eine Kopie, in der link(0,l)alle Zeilen um eins nach unten verschoben werden. Durchläuft jede Zeile rund nwobei n die Zeile unter r ist. Überprüft, ob sich Jimmys Körper "o"an einer Position befindet und in der Reihe darunter ein Rohr befindet (dh Jimmy hängt am Seil und ist nicht unten).

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.