Backstory
Rencontrez mon ami Jimmy:
/o\
Jimmy est un petit personnage qui aime se tenir debout sur les plateformes. Voici Jimmy debout en toute sécurité sur une plate-forme:
/o\
-------------
Maintenant, Jimmy a un bon sens de l'équilibre, il peut donc se tenir en toute sécurité avec une jambe hors de la plate-forme, comme ceci:
/o\
-------------------
Bien que s'il se tient avec deux ou plusieurs parties du corps hors de la plate-forme, il tombera. Ces deux exemples sont ceux où Jimmy tombera:
/o\ /o\
---------- ----------------------
Le défi
Votre défi est d'écrire un programme pour déterminer, étant donné une chaîne avec la plate-forme et la position de Jimmy, si Jimmy peut se tenir sur la plate-forme sans tomber.
Entrée: deux lignes montrant la position de Jimmy et la position de la plate-forme sous lui. Cela peut provenir de deux entrées distinctes, d'une seule entrée ou d'un tableau quelconque.
- Vous pouvez saisir des informations sous toute forme raisonnable, y compris des fonctions et des entrées standard. N'utilisez le codage en dur que si votre langue ne prend pas en charge les autres méthodes de saisie.
Sortie: les valeurs booléennes true et false, ou les entiers 1 ou 0 pour représenter respectivement true / false.
- La valeur booléenne est basée sur le fait que Jimmy puisse rester sur la plate-forme ou non - vrai si Jimmy peut rester sur la plate-forme, ou faux s'il tombera.
La taille de la plateforme est arbitraire et peut être modifiée à volonté. Votre programme devrait en tenir compte.
La plate-forme ne peut pas avoir une longueur nulle et la plate-forme doit être complète (pas de trous dans la plate-forme).
N'oubliez pas que Jimmy tombe lorsque deux de ses parties du corps pendent de la plate-forme. Une partie du corps est un caractère ASCII de son corps.
Il n'est pas nécessaire de laisser un espace à la fin de la plate-forme, mais votre programme doit prendre en compte les deux situations, où il y a un espace après la plate-forme et où il n'y en a pas.
Faites attention aux failles standard qui sont interdites.
Cas de test
/o\ ✔️ TRUE
-------------
/o\ ✔️ TRUE
----------
/o\ ❌ FALSE
------------------
/o\ ❌ FALSE
-------
/o\ ❌ FALSE
-
Notation
Il s'agit de code-golf , donc le nombre d'octets le plus bas l'emporte.
Classement
Vous pouvez afficher le classement de cet article en développant le widget / extrait ci-dessous. Pour que votre message soit inclus dans le classement, vous avez besoin d'un en-tête ( # header text
) avec les informations suivantes:
Le nom de la langue (terminez-le par une virgule
,
ou un tiret-
), suivi de ...Le nombre d'octets, comme le dernier nombre à apparaître dans votre en-tête.
Par exemple, JavaScript (ES6), 72 bytes
est valide, mais Fortran, 143 bytes (8-bit)
n'est pas valide car le nombre d'octets n'est pas le dernier nombre dans l'en-tête (votre réponse sera reconnue comme 8 octets - n'en profitez pas).
<!-- 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>
Réponses:
Gelée , 6 octets
Essayez-le en ligne!
Explication:
la source
S
somme des colonnes au lieu des lignes? : S Si j'ai regardé correctement le wiki, le code fait:n⁶
vérifier pour chaque caractère qu'il n'est pas égal à un espace (ie['/o\\', ' -'] -> [[1,1,1],[0,1]]
);S
liste de somme (mais pour une raison quelconque, cela résume les colonnes au lieu des lignes .. donc[[1,1,1],[0,1]] -> [1,2,1]
);ċ2
compter le montant de 2s;Ẓ
vérifiez s'il s'agit d'un nombre premier (donc 2 ou 3), une fois le résultat implicitement émis. Mais je m'attendais[[1,1,1],[0,1]]
à résumer à[3,1]
..S
est équivalent à0;+/Ɗ
, c'est-à-dire, réduire par addition (qui vectorise) avec la valeur initiale0
.§
fait ce que vous attendiezS
de faire.JavaScript (ES6), 38 octets
Prend l'entrée comme0 ou 1 .
(a)(b)
. RenvoieEssayez-le en ligne!
Comment?
Nous recherchons la position de la partie médiane
"o"
du corps de Jimmy dans la première chaîne et testons s'il y a un tiret dans la deuxième chaîne à la même position.Le seul cas où Jimmy serait dangereux dans cette situation est avec une plate-forme à un seul tiret:
Nous nous assurons donc en outre que la plate-forme a une largeur d'au moins2 :
JavaScript (ES6), 36 octets
Version alternative si nous supposons qu'il y a toujours des tirets ou des espaces sous Jimmy (c'est-à-dire que l'entrée est rectangulaire).
Essayez-le en ligne!
Profite du fait que la contrainte à une valeur numérique est0 pour un espace et NaN pour un tiret.
la source
"/o\\\n__"
Excel,
674544 octetsMettez Jimmy dedans
A1
, sur une plateformeA2
.2 conditions vérifiées:
o
sur la plate-forme?-
?la source
<>
pour>
Python 3,
8843 octetsL'entrée est donnée sous la forme d'une liste contenant deux chaînes: la première chaîne est la première ligne; la deuxième chaîne est la deuxième ligne.
Essayez-le en ligne!
Une autre version, liant pour 43 octets (je n'ai pas pu l'obtenir plus court que 43):
Essayez-le en ligne!
En baisse de 42 octets grâce à une astuce de Jo King.
Ancienne version:
-2 octets grâce au Sriotchilism O'Zaic.
Cela fonctionne en prenant deux entrées distinctes, puis en associant les lettres correspondantes. Il compte le nombre de paires où aucun caractère n'est un espace, puis renvoie True si ce nombre est supérieur à 1.
la source
Perl 6 , 18 octets
Essayez-le en ligne!
Prend deux paramètres et renvoie un booléen indiquant si Jimmy restera sur la plate-forme. Cela fonctionne en XORant les deux lignes ensemble et en vérifiant si l'une des parties de Jimmy est toujours sur la plate-forme.
Explication:
la source
Python 2 ,
4237 octetsEssayez-le en ligne!
5 octets thx à sept négatifs
la source
"--"in [...]
pour -5 octetsHaskell , 34 octets
Essayez-le en ligne!
J'ai obtenu celui-ci en combinant ma technique ci-dessous avec l'autre réponse haskell .
Haskell , 45 octets
Essayez-le en ligne!
Cela compte le nombre de parties du corps (caractères non-espace) qui sont au-dessus de la plate-forme et vérifie ensuite qu'il est supérieur à 1. La raison pour laquelle nous comptons les parties du corps sur la plate-forme plutôt que les parties du corps est que
zipWith
cela coupera la ligne supérieure être la longueur du fond et peut donc couper les parties du corps de Jimmy. Cela nous empêche d'avoir à faire quelque chose commecycle" "
remplir la liste.la source
MathGolf ,
614 octetsEssayez-le en ligne!
8 octets ont dû être ajoutés pour tenir compte du cas de bord présenté par Nick Kennedy.
Vérifie si
"-o-"
est une sous-chaîne de la chaîne zippée des deux lignes et la chaîne zippée où la première ligne d'entrée a le premier caractère supprimé. Prend l'entrée comme deux chaînes distinctes, avec le seul changement étant que le caractère est entré comme/o\\
, car\\
c'est la bonne façon d'entrer une barre oblique inverse dans une chaîne dans MathGolf.Explication
la source
05AB1E (hérité) ,
987 octets-1 octet grâce à @ Mr.Xcoder avec l'approche de
ðм2ù
.Entrée sous forme de liste de deux chaînes.
Fonctionne uniquement dans la version héritée de 05AB1E, car
ζ
peut transposer une liste de chaînes ainsi qu'une liste 2D de caractères, tandis queζ
dans la nouvelle version 05AB1E ne fonctionne qu'avec la liste 2D de caractères.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
bytes
à la page de codes afin que vous sachiez qu'il n'est pas encodé en UTF-8 mais utilise un encodage personnalisé à la place. ;) Si vous voulez, je peux modifier ma réponse pour mettre l'encodage sous le titre, mais honnêtement, le code du classement devrait être capable de le gérer à mon humble avis.https://github.com/Adriandmen/05AB1E/wiki/Codepage?7
faire de 7 le dernier numéro sans invalider l'URL?Rubis , 28 octets
Essayez-le en ligne!
la source
Dyalog APL Extended,
11108 octetsEssayez-le en ligne!
Explication:
-2 merci à Adám.
la source
2≤1⊥∧⌿⍤<
Excel, 36 bytes
Jimmy in
A1
, on a platform inA2
.Finds the position of Jimmy, and takes the 3 bytes of the platform and trims off spaces. If the resulting platform length is long enough, Jimmy stands.
la source
EXCEL,
9471 bytes .VBA (Excel), 87 bytesA1
= Jimmy ,A2
= platform-23 bytes. Thank you @Wernisch.
?[(FIND("-",A2)-FIND("/",A1)<2)*(FIND("\",A1)-LEN(A2)<2)]*(len(replace([A2]," ",""))>1)
la source
trim
instead oflen(replace
?///,
85 9387 bytesTry it online!
Output's a 1 if Jimmy is safe. Otherwise outputs nothing. (Unary 1 and 0.) Because there is no other way to take input in ///, it needs to be hard-coded:
For example:
(Try it online!)
Note the space after the
<INPUT HERE>
.Explanation:
NOTE! The explanation code cannot be run due to the comments. The comments are enclosed in curly braces. Also, the original code uses a golf where
//
is replaced with~
. This code is omitted from the explanation.///
golf trick.la source
R, 35 bytes
Try it online!
Based on @EriktheOutgolfer’s excellent Jelly answer so please upvote that one too!
Input is a 2-d matrix of characters.
la source
Haskell, 59 bytes
Try it online!
The function is called like so:
f "/o\\ " " -- "
How it works (for
f "/o\\" " -"
):b++cycle" "
- Adds an infinite number of spaces afterb
to ensure that Jimmy is always above a-
or(
" -"
→" - ..."
zip a$b++cycle" "
- Zips the two strings together ([('/',' '), ('o','-'), ('\\',' ')]
)(p,q)<-zip a$b++cycle
- For each pair in the zipped list[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Generates a list of1
s, whose length is the number of pairs satisfying the conditions:elem p"/o\\"
- The character in the top string is one of Jimmy's body parts. (Satisfied by all three pairs in this example)q==' '
- The character in the bottom string is a space. (Satisfied by('/', ' ')
and('\\', ' ')
)So, the pair has to be one where one of Jimmy's body parts is above a space.
Because in this example, two pairs satisfy both conditions, the list is
[1,1]
sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Take the sum of those1
s (i.e. the length of the list), which in this example is2
.sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']<2
- Check if the number of body parts above a space is less than 2. In this example, it's not, so Jimmy will fall off. :(la source
C (gcc), 73 bytes
Try it online!
la source
index()
instead ofstrchr()
Kotlin, 60 bytes
Explanation:
la source
///, 57 bytes
Try it online!
Append the input to the end of the program in order to run. Returns the empty string if Jimmy falls off the platform, a string of exclamation points otherwise.
/|/\/\//
replaces|
with//
, which makes the code both shorter and more readable (|
is used to demarcate each replacement)/\/o\\/J| J/J*/
replaces Jimmy withJ
for brevity and changes the space to the left of him to*
to the right of him/* /| -/ | //
cancels out*
s and with the space to the left of the platform. If there are two or more spaces left, Jimmy is falling off to the left, and the platform is deleted. This part also removes any whitespace to the right of the platform./*-/|--/!/
cancels out*
s and with length of the platform. If there are at least two-
left, Jimmy isn't falling off to the right, so they are replaced with a!
./-/|*/|J//
deletes every remaining character that isn't!
la source
Japt, 8 bytes
Try it
la source
Retina 0.8.2, 16 bytes
Try it online! Link includes test suite. Explanation:
While there is still a space on the first line, and both lines still have more than one character, delete the space and the first character of the next line. Note: This assumes that there is no trailing space after Jimmy. +1 byte needed if trailing space needs to be allowed.
Check that there are at least two pieces of platform under Jimmy.
la source
Perl 5
-pl
, 42 bytesTry it online!
la source
Ruby 2.5.3, 44 bytes
Input taken as two arrays. Definitely not the most golf-friendly approach (see G B's answer), but I like any excuse to use the
zip
function.la source
PowerShell,
63..5553 bytes-1 byte thanks to mazzy
Try it online!
Takes input as two lines.
Unrolled:
la source
C# (Visual C# Interactive Compiler),
444039 bytes-4 bytes thanks to Jo King
Try it online!
la source
Python 3.7,
7156 BytesVery simple version and the shortest I could think of using this approach. Input
s
is a list of two strings, the first one for the Jimmy-row, the second one for the platform. Zip the characters which are above one another and then check whether-
is below a part of Jimmy in at least two instances.EDIT: Reduced by quite a few Bytes thanks to Blue!
la source
s
should be two lists, one for jimmy and one for the platform?). Also, there are a few places you can save bytes: instead of summing a list, you can sum the raw iterator (remove the brackets); instead of checking>=2
, check>1
; you can sumTrue
andFalse
like 1 and 0, no need for the if-else. Finally, before posting a new answer in the same language, you should look at the previous ones to see if you can improve.Chevron,
8487 bytesThis is a fairly new language of my own creation - prototype interpreter, documentation, and example programs can be found at https://github.com/superloach/chevron.
Explanation:
>^__>^j
- take jimmy as TXT input^i<<0
- initialise index to 0^i<<^i+1
- increment index^h<^i>^j
- get character of jimmy at index->+2??^h=/
- jump out of loop at jimmy's left leg->-3
- hop back to beginning of loop>^__>^p
- take platform as TXT input^q<^i|2>^p
- cut out 3 characters under jimmy->+2??^q<--
- if 2 dashes under jimmy, jump to truthy exit><0
- falsy exit><1
- truthy exitla source
C (gcc), 103 bytes
Try it online!
Would be much shorter (75 bytes), if it could be assumed that there is trailing whitespace after the platform.
la source
Japt
-¡
, 9 bytes-1 byte if the input can be reversed.
Try it online
la source
V, 18 bytes
Try it online!
Output whitespace only if jimmy fall of the platform. Output something non-whitespace if jimmy stay on the platform.
la source