Estoy reproduciendo la segunda parte del primer día de Adviento de Código, con permiso del creador.
Santa está tratando de entregar regalos en un gran edificio de apartamentos, pero no puede encontrar el piso correcto; las instrucciones que recibió son un poco confusas. Comienza en la planta baja (planta 0) y luego sigue las instrucciones de un personaje a la vez.
Un paréntesis de apertura (
significa que debe subir un piso y un paréntesis de cierre )
significa que debe bajar un piso.
El edificio de apartamentos es muy alto y el sótano es muy profundo; nunca encontrará los pisos superiores o inferiores.
Dado un conjunto de instrucciones, encuentre la posición del primer personaje que lo hace entrar al sótano (piso -1).
Como ejemplos:
la entrada )
hace que ingrese al sótano en la posición de personaje 1.
la entrada ()())
hace que ingrese al sótano en la posición 5 del personaje.
Aquí se proporciona una entrada larga que debería dar la solución 1797.
Este es el código de golf, por lo que gana la solución más corta.
Respuestas:
Jalea,
87 bytes¡Gracias a @ Sp3000 por jugar golf en 1 byte!
Pruébalo en línea!
Cómo funciona
fuente
Python 2, 44 bytes
Hallvabo, xsot, mitchs y whatisgolf encontraron esta solución inteligente en este problema en Anarchy golf . Si alguno de ustedes quiere publicarlo, lo eliminaré.
El truco es dejar que el analizador de Python haga el trabajo. La función
input()
intenta evaluar una cadena de entrada y arroja un error en el primer par sin emparejar. Este error, cuando se detecta, tiene formaque incluye el número de carácter donde se produjo el error.
fuente
Python,
7977 bytesProbablemente haya una mejor manera de hacer esto, pero no tengo ideas. También esta es mi primera publicación en codegolf.
Gracias a @Erwan. para jugar golf en 2 bytes.
fuente
[0:g]
por[:g]
-2*ord(z)+81
por2*(z<')')-1
Pitón 3, 59
Guardado 3 bytes gracias a grc.
Realmente no me gusta hacer indexación manual de cadenas en Python. Se siente tan mal.
fuente
C, 55 bytes
Pruébalo aquí .
Editar: No estoy seguro de por qué dejé una variable no utilizada allí ...
fuente
CJam, 10 bytes
o
o (créditos a Dennis)
Pruébalo aquí.
Explicación
Como A Simmons ya señaló,
()
es una elección afortunada para CJam ya que esos son los operadores de decremento / incremento, respectivamente. Eso significa que si comenzamos desde cero, estamos buscando el paso en el que Santa llega al piso 1.fuente
Laberinto , 18 bytes
Pruébalo en línea! Esta respuesta fue el resultado de colaborar con @ MartinBüttner.
Explicación
La cartilla habitual de Labyrinth (digo "usual", pero en realidad lo reescribo cada vez):
n*10 + <digit>
. Esto permite la acumulación fácil de grandes números. Para comenzar un nuevo número, use_
, que empuja a cero.Este código es un poco extraño ya que, para fines de golf, el bucle principal combina dos tareas en una. Para la primera mitad de la primera pasada, esto es lo que sucede:
Ahora que la pila se ha inicializado con un -1 en la parte superior, puede comenzar el procesamiento real. Esto es lo que hace el bucle principal.
El último duplicado agrega un elemento a la pila para cada iteración que realizamos. Esto es importante porque, cuando llegamos a cero y avanzamos en el NOP, hacemos:
fuente
Oracle SQL 11.2,
160159 bytesSin golf
fuente
retina ,
2221Pruébelo en línea o pruebe el gran caso de prueba. (La URL es grande para el caso de prueba grande, avíseme si se rompe para usted, parece estar bien en Chrome).
¡1 byte guardado gracias a Martin!
Hacemos coincidir el primer conjunto de paréntesis equilibrados y lo extraemos, luego contamos el número de veces que la cadena vacía coincidirá con ese resultado. No estoy seguro de si esta es la mejor manera de hacer esto en Retina, particularmente si el modo PCRE lo hace más corto, pero usar el
$#_
reemplazo parece ser más largo debido a errores de apagado y el problema de tener más de una coincidencia.Este algoritmo causa un comportamiento extraño para la entrada inválida, esencialmente supone que si Santa no llega al sótano, se teletransporta misteriosamente allí después de los otros movimientos.
fuente
Grep + AWK, 51 bytes
El
grep
comando coloca a cada personaje en una nueva línea.fuente
Pyth, 13 bytes
Explicación
Pruébalo aquí
Algoritmo antiguo, 15 bytes
Explicación:
Pruébalo aquí
O si se le permite usar caracteres que no sean
(
y)
, 9 bytes (mover el preprocesamiento a la entrada)Explicación
Pruébalo aquí
fuente
JavaScript (ES6), 58 bytes
Funciona eliminando recursivamente un par de
()
s coincidentes hasta que el primer carácter sea a)
. Advertencia: no intente esto en cadenas que no tienen suficiente)
s. Ejemplo:En este punto, ve que se eliminaron 12 caracteres en total, por lo que la respuesta es 13.
fuente
MATL ,
1211 bytes1 byte guardado usando la idea de Dennis de computar -1 elevado a la cadena de entrada
Pruébalo en línea!
fuente
CJam,
1210 BytesPruébalo aquí
Dos bytes guardados gracias a Martin.
Explicación:
fuente
Javascript, 117 bytes
Ignora a otros personajes. Usos
prompt
yalert
.fuente
Perl, 34 + 1 = 35 bytes
Gracias a Dennis por algunos consejos.
Corre con la
-p
bandera. Funciona en Perl 5.10, pero las versiones posteriores necesitan un espacio aquí:++ while
Versión más antigua y sin golf:
fuente
Python, 44 bytes
El piso
i
comienza en1
para que terminemosi
siendo el valor falsey0
. Si no se termina, agregue recursivamente uno al resultado con el primer carácter eliminado y el número de piso actualizado en función de ese carácter.fuente
Javascript, 57 bytes
Bastante simple, solo itera sobre la entrada, incs if '(' decs if ')'. Retornos en primer negativo.
fuente
Ruby, 47 bytes
Función anónima.
fuente
C, 73 bytes
Espera entrada en STDIN; no pueden aparecer caracteres distintos de
(
y)
en la entrada (al menos hasta que hayamos alcanzado la respuesta). La entrada debe ser ASCII.Emite la respuesta en STDOUT.
Utiliza la diferencia de 1 bit entre el ASCII para
(
y)
.Versión bien formateada:
fuente
f=c=0
a la inicialización del buclefor(f=c=0;f!=...
para guardar un byte?PowerShell,
756562 bytesUtiliza una técnica similar a la de los números binarios Parenthifiable para recorrer todos los caracteres de entrada, manteniendo una
$c
onza de+1
cada uno(
y-1
para cada uno)
, luego prueba si hemos dado negativo (es decir, estamos en el sótano).Editar - salvado 10 bytes por iteración sobre los personajes reales en lugar de sus índices
Edición 2 - salvó 3 bytes adicionales mediante el canje de verificación de la igualdad para la fundición de módulo de manera implícita
fuente
Mathematica,
6255 bytes¡Todos los nombres largos de funciones! Funciona de manera similar a la respuesta CJam de Simmons.
fuente
Befunge 25 bytes
Salidas en unario. Esto lo iniciará en el piso uno y continuará hasta 0.
fuente
Raqueta (102)
Sin golf
fuente
APL, 18 caracteres
En inglés:
¯1*')'=⍵
: -1 donde input = ")", 1 de lo contrario;+\
: suma corriente;1⍳⍨¯1=
: encuentra el índice del primer -1.fuente
Lua,
928987 bytesToma un argumento de línea de comandos.
Editar: Guardado 3 Bytes
Editar: guardó 2 bytes y corrigió un error que podría ocurrir en casos extremos, ahora sale a través de su código de salida
Sin golf
fuente
k / kona ,
2321 bytes2 bytes guardados eliminando paréntesis innecesarios.
Uso:
fuente
Perl, 40 + 1 = 41 bytes
Requiere la
-p
bandera:Asume una entrada válida.
Cómo funciona:
fuente
Javascript (ES6),
6867 bytesToma entrada como primer argumento
Explicación
fuente
Python (3.5),
787162 bytesuna solución recursiva
es similar a esta solución para mini golf
podemos suponer que santa siempre llega al sótano
fuente