Hintergrundgeschichte
Lerne meinen Freund Jimmy kennen:
/o\
Jimmy ist eine kleine Figur, die gerne auf Plattformen steht. Hier ist Jimmy, der sicher auf einer Plattform steht:
/o\
-------------
Jetzt hat Jimmy einen guten Gleichgewichtssinn, so dass er sicher mit einem Bein von der Plattform stehen kann:
/o\
-------------------
Obwohl, wenn er mit zwei oder mehr Körperteilen von der Plattform entfernt steht, wird er fallen. Beides sind Beispiele, bei denen Jimmy fallen wird:
/o\ /o\
---------- ----------------------
Die Herausforderung
Ihre Herausforderung besteht darin, ein Programm zu schreiben, mit dem Sie anhand von Jimmys Plattform und Position bestimmen, ob Jimmy auf der Plattform stehen kann, ohne herunterzufallen.
Eingabe: Zwei Zeilen, die Jimmys Position und die Position der Plattform unter ihm zeigen. Dies kann von zwei separaten Eingängen, einem einzelnen Eingang oder einer Art Array stammen.
- Sie können Eingaben in jeder angemessenen Form vornehmen, einschließlich Funktionen und Standardeingaben. Verwenden Sie die Hardcodierung nur, wenn Ihre Sprache die anderen Eingabemethoden nicht unterstützt.
Ausgabe: Die booleschen Werte true und false oder die Ganzzahlen 1 oder 0 stehen für true / false.
- Der boolesche Wert basiert darauf, ob Jimmy auf der Plattform bleiben kann oder nicht - true, wenn Jimmy auf der Plattform bleiben kann, oder false, wenn er herunterfällt.
Die Plattformgröße ist beliebig und kann beliebig geändert werden. Ihr Programm sollte das berücksichtigen.
Die Plattform darf keine Länge von Null haben, und die Plattform muss vollständig sein (keine Löcher in der Plattform).
Denken Sie daran, dass Jimmy herunterfällt, wenn zwei seiner Körperteile von der Plattform hängen. Ein Körperteil ist ein ASCII-Zeichen seines Körpers.
Ein nachgestelltes Leerzeichen am Ende der Plattform ist nicht erforderlich, Ihr Programm sollte jedoch beide Situationen berücksichtigen, in denen nach der Plattform ein Leerzeichen und in denen kein Leerzeichen vorhanden ist.
Beachten Sie die verbotenen Regelungslücken .
Testfälle
/o\ ✔️ TRUE
-------------
/o\ ✔️ TRUE
----------
/o\ ❌ FALSE
------------------
/o\ ❌ FALSE
-------
/o\ ❌ FALSE
-
Wertung
Dies ist Codegolf , daher gewinnt die niedrigste Bytezahl.
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 bytes
ist 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=187586" 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>
Antworten:
Gelee , 6 Bytes
Probieren Sie es online!
Erläuterung:
quelle
S
summiert sich die Summe aus Spalten und Zeilen? : S Wenn ich das Wiki richtig angeschaut habe, funktioniert der Code folgendermaßen:n⁶
Überprüfe für jedes Zeichen, dass es nicht gleich einem Leerzeichen ist (dh['/o\\', ' -'] -> [[1,1,1],[0,1]]
);S
Summenliste (aber aus irgendeinem Grund summiert dies Spalten anstelle von Zeilen.[[1,1,1],[0,1]] -> [1,2,1]
);ċ2
Zähle die Anzahl von 2s;Ẓ
Überprüfen Sie, ob dies eine Primzahl ist (also 2 oder 3), nachdem das Ergebnis implizit ausgegeben wurde. Aber ich hätte erwartet[[1,1,1],[0,1]]
, dass die Summe[3,1]
...S
entspricht, dh0;+/Ɗ
durch Addition (die vektorisiert) mit dem Anfangswert zu reduzieren0
.§
tut, was Sie erwartet hattenS
.JavaScript (ES6), 38 Byte
Übernimmt die Eingabe als0 oder 1 .
(a)(b)
. GibtProbieren Sie es online!
Wie?
Wir suchen die Position des Mittelteils
"o"
von Jimmys Körper in der ersten Saite und prüfen, ob sich an derselben Position ein Strich in der zweiten Saite befindet.Der einzige Fall, in dem Jimmy in dieser Situation unsicher wäre, ist mit einer Single-Dash-Plattform:
Deshalb achten wir zusätzlich darauf, dass die Plattform mindestens2 mal breit ist :
JavaScript (ES6), 36 Byte
Alternative Version, wenn wir davon ausgehen, dass unter Jimmy immer Bindestriche oder Leerzeichen stehen (dh die Eingabe ist rechteckig).
Probieren Sie es online!
Nutzt die Tatsache aus, dass der Zwang zu einem numerischen Wert0 für ein Leerzeichen und NaN für einen Bindestrich ist.
quelle
"/o\\\n__"
Excel,
674544 BytesSetzen Sie Jimmy
A1
auf eine PlattformA2
.2 Bedingungen geprüft:
o
) auf der Plattform?-
?quelle
<>
zu>
Python 3,
8843 BytesDie Eingabe erfolgt in Form einer Liste mit zwei Zeichenfolgen: Die erste Zeichenfolge ist die erste Zeile; Die zweite Zeichenfolge ist die zweite Zeile.
Probieren Sie es online!
Eine andere Version, die 43 Bytes lang ist (ich konnte sie nicht kürzer als 43 bekommen):
Probieren Sie es online!
Dank eines Tipps von Jo King um 42 Byte gesunken.
Alte Version:
-2 Bytes dank Sriotchilism O'Zaic.
Dies funktioniert, indem Sie zwei separate Eingaben vornehmen und dann die entsprechenden Buchstaben koppeln. Es zählt die Anzahl der Paare, bei denen keines der Zeichen ein Leerzeichen ist, und gibt dann True zurück, wenn diese Anzahl größer als 1 ist.
quelle
Perl 6 , 18 Bytes
Probieren Sie es online!
Nimmt zwei Parameter und gibt einen Booleschen Wert zurück, der angibt, ob Jimmy auf der Plattform bleibt. Dies funktioniert durch XOR-Verknüpfung der beiden Zeilen und durch Überprüfen, ob sich noch ein Teil von Jimmy auf der Plattform befindet.
Erläuterung:
quelle
Python 2 ,
4237 BytesProbieren Sie es online!
5 Bytes thx bis negative sieben
quelle
"--"in [...]
für -5 BytesHaskell , 34 Bytes
Probieren Sie es online!
Ich habe dieses erhalten, indem ich meine unten stehende Technik mit der anderen Haskell-Antwort kombiniert habe .
Haskell , 45 Bytes
Probieren Sie es online!
Dies zählt die Anzahl der Körperteile (keine Leerzeichen), die sich auf der Plattform befinden, und überprüft dann, ob sie größer als 1 sind. Der Grund, warum wir Körperteile auf der Plattform und keine Körperteile auszählen, liegt darin, dass
zipWith
die obere Linie zerschnitten wird die Länge des Bodens zu sein und damit Jimmy Körperteile abhacken kann. Dies verhindert, dass wir etwas tun müssencycle" "
, um die Liste aufzufüllen.quelle
MathGolf ,
614 BytesProbieren Sie es online!
8 Bytes mussten hinzugefügt werden, um den von Nick Kennedy präsentierten Edge Case zu berücksichtigen.
Prüft ob
"-o-"
es sich um eine Teilzeichenfolge der komprimierten Zeichenfolge beider Zeilen und der komprimierten Zeichenfolge handelt, bei der in der ersten Eingabezeile das erste Zeichen entfernt wurde. Nimmt die Eingabe als zwei separate Zeichenfolgen an, wobei die einzige Änderung darin besteht, dass das Zeichen als/o\\
, since, eingegeben wird\\
in MathGolf der richtige Weg ist, einen umgekehrten Schrägstrich in eine Zeichenfolge einzugeben.Erläuterung
quelle
05AB1E (Legacy) ,
987 Bytes-1 Byte danke an @ Mr.Xcoder mit dem Ansatz von
ðм2ù
.Eingabe als Liste von zwei Zeichenfolgen.
Funktioniert nur in der Vorgängerversion von 05AB1E, da
ζ
sowohl eine Liste von Zeichenfolgen als auch eine 2D-Liste von Zeichen transponiert werden kann, während dieζ
in der neuen 05AB1E-Version nur mit der 2D-Liste von Zeichen funktioniert.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
bytes
mit der Codepage verknüpfe , damit Sie wissen, dass sie nicht in UTF-8 codiert ist, sondern stattdessen eine benutzerdefinierte Codierung verwendet. ;) Wenn du willst, kann ich meine Antwort bearbeiten, um die Codierung unter den Titel zu setzen, aber ehrlich gesagt sollte der Bestenlisten-Code in der Lage sein, damit umzugehen.https://github.com/Adriandmen/05AB1E/wiki/Codepage?7
, um 7 zur letzten Nummer zu machen, ohne die URL ungültig zu machen?Ruby , 28 Bytes
Probieren Sie es online!
quelle
Dyalog APL Extended,
11108 BytesProbieren Sie es online!
Erläuterung:
-2 Dank an Adám.
quelle
2≤1⊥∧⌿⍤<
Excel, 36 Bytes
Jimmy in
A1
, auf einer Plattform inA2
.Findet die Position von Jimmy, nimmt die 3 Bytes der Plattform und schneidet Leerzeichen ab. Wenn die resultierende Plattformlänge lang genug ist, steht Jimmy.
quelle
EXCEL,
9471 Bytes.VBA (Excel), 87 ByteA1
= Jimmy,A2
= Plattform-23 Bytes. Danke @Wernisch.
?[(FIND("-",A2)-FIND("/",A1)<2)*(FIND("\",A1)-LEN(A2)<2)]*(len(replace([A2]," ",""))>1)
quelle
trim
statt verwendenlen(replace
?/// ,
85 9387 BytesProbieren Sie es online!
Der Ausgang ist eine 1, wenn Jimmy sicher ist. Ansonsten wird nichts ausgegeben. (Unär 1 und 0.) Da es keine andere Möglichkeit gibt, Eingaben in /// vorzunehmen, muss diese fest codiert werden:
Beispielsweise:
( Online ausprobieren! )
Beachten Sie das Leerzeichen nach dem
<INPUT HERE>
.Erläuterung:
HINWEIS! Der Erklärungscode kann aufgrund der Kommentare nicht ausgeführt werden. Die Kommentare sind in geschweiften Klammern eingeschlossen. Auch der ursprüngliche Code verwendet einen Golf, bei dem
//
durch ersetzt wird~
. Dieser Code wird in der Erläuterung weggelassen.///
Golf-Tricks.quelle
R , 35 Bytes
Probieren Sie es online!
Beyogen auf @ EriktheOutgolfers exzellenter Gelee-Antwort , bitte stimmen Sie dieser auch zu!
Die Eingabe ist eine 2D-Matrix von Zeichen.
quelle
Haskell, 59 Bytes
Probieren Sie es online!
Die Funktion heißt so:
f "/o\\ " " -- "
Wie es funktioniert (z
f "/o\\" " -"
):b++cycle" "
- Fügt eine unendliche Anzahl von Leerzeichen nach ein,b
um sicherzustellen, dass Jimmy immer über einem-
oder steht.
" -"
→ steht" - ..."
zip a$b++cycle" "
- Zippt die beiden Saiten zusammen ([('/',' '), ('o','-'), ('\\',' ')]
)(p,q)<-zip a$b++cycle
- Für jedes Paar in der ZIP-Liste[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Erzeugt eine Liste von1
s, deren Länge die Anzahl der Paare ist, die die Bedingungen erfüllen:elem p"/o\\"
- Das Zeichen in der oberen Zeichenfolge ist eines von Jimmys Körperteilen. (Zufrieden mit allen drei Paaren in diesem Beispiel)q==' '
- Das Zeichen in der unteren Zeichenfolge ist ein Leerzeichen. (Zufrieden mit('/', ' ')
und('\\', ' ')
)Das Paar muss also eines sein, bei dem sich ein Körperteil von Jimmy über einem Feld befindet.
Da in diesem Beispiel zwei Paare beide Bedingungen erfüllen, lautet die Liste
[1,1]
sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Nehmen Sie die Summe der1
s (dh die Länge der Liste), die in diesem Beispiel ist2
.sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']<2
- Überprüfen Sie, ob die Anzahl der Körperteile über einem Leerzeichen weniger als 2 beträgt. In diesem Beispiel ist dies nicht der Fall, sodass Jimmy herunterfällt. :(quelle
C (gcc) , 73 Bytes
Probieren Sie es online!
quelle
index()
stattdessen vorstrchr()
Kotlin, 60 Bytes
Erläuterung:
quelle
/// 57 Bytes
Probieren Sie es online!
Fügen Sie die Eingabe an das Ende des Programms an, um es auszuführen. Gibt die leere Zeichenfolge zurück, wenn Jimmy von der Plattform fällt, andernfalls eine Zeichenfolge mit Ausrufezeichen.
/|/\/\//
ersetzt|
durch//
, wodurch der Code sowohl kürzer als auch lesbarer wird (|
wird verwendet , um jeden Ersatz abgrenzen)/\/o\\/J| J/J*/
Ersetzt JimmyJ
aus Gründen der Kürze durch und ändert das Feld links von ihm in das Feld*
rechts von ihm/* /| -/ | //
löscht*
s und mit dem Leerzeichen links von der Plattform. Wenn noch zwei oder mehr Plätze frei sind, fällt Jimmy nach links ab und die Plattform wird gelöscht. Dieser Teil entfernt auch alle Leerzeichen rechts von der Plattform./*-/|--/!/
storniert*
s und mit der Länge der Plattform. Wenn noch mindestens zwei-
übrig sind, fällt Jimmy nicht nach rechts ab und wird durch a ersetzt!
./-/|*/|J//
löscht alle verbleibenden Zeichen, die nicht vorhanden sind!
quelle
Japt , 8 Bytes
Versuch es
quelle
Retina 0.8.2 , 16 Bytes
Probieren Sie es online! Link enthält Testsuite. Erläuterung:
Löschen Sie das Leerzeichen und das erste Zeichen der nächsten Zeile, während sich in der ersten Zeile noch ein Leerzeichen befindet und beide Zeilen weiterhin mehr als ein Zeichen enthalten. Hinweis: Dies setzt voraus, dass nach Jimmy kein Leerzeichen vorhanden ist. +1 Byte erforderlich, wenn der nachfolgende Speicherplatz zugelassen werden muss.
Überprüfen Sie, ob sich unter Jimmy mindestens zwei Plattformteile befinden.
quelle
Perl 5
-pl
, 42 BytesProbieren Sie es online!
quelle
Ruby 2.5.3, 44 Bytes
Eingabe als zwei Arrays. Auf jeden Fall nicht der golffreundlichste Ansatz (siehe Antwort von GB), aber ich mag jede Ausrede, um die
zip
Funktion zu nutzen .quelle
PowerShell ,
63..5553 Byte-1 Byte dank mazzy
Probieren Sie es online!
Nimmt die Eingabe als zwei Zeilen.
Abgerollt:
quelle
C # (Visual C # Interactive Compiler) ,
444039 Byte-4 Bytes dank Jo King
Probieren Sie es online!
quelle
Python 3.7 ,
7156 BytesSehr einfache Version und die kürzeste, die ich mir vorstellen kann, diesen Ansatz zu verwenden. Input
s
ist eine Liste von zwei Strings, der erste für die Jimmy-Reihe, der zweite für die Plattform. Zippen Sie die übereinander liegenden Zeichen und prüfen Sie, ob-
in mindestens zwei Fällen unter einem Teil von Jimmy liegen.EDIT: Durch Blue um einige Bytes reduziert!
quelle
s
sollte es zwei Listen geben, eine für Jimmy und eine für die Plattform?). Es gibt auch einige Stellen, an denen Sie Bytes speichern können: Anstatt eine Liste zu summieren, können Sie den unformatierten Iterator summieren (entfernen Sie die Klammern). anstatt zu überprüfen>=2
, überprüfen Sie>1
; Sie können 1 und 0 summierenTrue
undFalse
mögen, ohne das Wenn-Sonst zu benötigen. Bevor Sie eine neue Antwort in derselben Sprache veröffentlichen, sollten Sie sich die vorherigen ansehen, um festzustellen, ob Sie sich verbessern können.Chevron,
8487 BytesDies ist eine ziemlich neue Sprache meiner eigenen Schöpfung - Prototyp-Interpreter, Dokumentation und Beispielprogramme finden Sie unter https://github.com/superloach/chevron .
Erläuterung:
>^__>^j
- Jimmy als TXT-Eingang nehmen^i<<0
- Index auf 0 initialisieren^i<<^i+1
- Index erhöhen^h<^i>^j
- Holen Sie sich den Charakter von Jimmy bei Index->+2??^h=/
- Spring aus der Schlaufe von Jimmy's linkem Bein->-3
- Zurück zum Anfang der Schleife springen>^__>^p
- Plattform als TXT-Eingang nehmen^q<^i|2>^p
- 3 Zeichen unter Jimmy ausschneiden->+2??^q<--
- Wenn 2 Bindestriche unter Jimmy liegen, springe zum wahren Ausgang><0
- Falscher Ausgang><1
- Wahrhaftiger Ausgangquelle
C (gcc), 103 Bytes
Probieren Sie es online!
Wäre viel kürzer ( 75 Byte ), wenn davon ausgegangen werden könnte, dass nach der Plattform ein Leerzeichen folgt.
quelle
Japt
-¡
, 9 Bytes-1 Byte, wenn die Eingabe umgekehrt werden kann.
Probieren Sie es online aus
quelle
V , 18 Bytes
Probieren Sie es online!
Leerzeichen nur ausgeben, wenn die Plattform herunterfällt. Gib etwas aus, das kein Leerzeichen ist, wenn Jimmy auf der Plattform bleibt.
quelle