En los idiomas de estilo Lisp, una lista generalmente se define así:
(list 1 2 3)
Para los propósitos de este desafío, todas las listas solo contendrán enteros positivos u otras listas. También dejaremos de lado la listpalabra clave al principio, por lo que la lista ahora se verá así:
(1 2 3)
Podemos obtener el primer elemento de una lista usando car. Por ejemplo:
(car (1 2 3))
==> 1
Y podemos obtener la lista original con el primer elemento eliminado con cdr:
(cdr (1 2 3))
==> (2 3)
Importante: cdrsiempre devolverá una lista, incluso si esa lista tuviera un solo elemento:
(cdr (1 2))
==> (2)
(car (cdr (1 2)))
==> 2
Las listas también pueden estar dentro de otras listas:
(cdr (1 2 3 (4 5 6)))
==> (2 3 (4 5 6))
Escriba un programa que devuelva el código que usa cary cdrpara devolver cierto número entero en una lista. En el código que devuelve su programa, puede suponer que la lista está almacenada l, el entero objetivo está enl algún lugar y que todos los enteros son únicos.
Ejemplos:
Entrada: (6 1 3) 3
Salida: (car (cdr (cdr l)))
Entrada: (4 5 (1 2 (7) 9 (10 8 14))) 8
Salida: (car (cdr (car (cdr (cdr (cdr (cdr (car (cdr (cdr l))))))))))
Entrada: (1 12 1992) 1
Salida: (car l)
fuente

(1 2 3) 16si regresamos()?(1 2 3) 16lo que nunca se mostrará un caso como .Respuestas:
CJam, 59
Pruébalo en línea
Explicación:
fuente
Lisp común, 99
La siguiente solución de 99 bytes es una versión CL de la buena respuesta de Scheme .
Originalmente intenté usar
positionyposition-if, pero resultó no ser tan compacto como me hubiera gustado (209 bytes):Expandido
Ejemplo
La lista está citada, pero si realmente quieres, puedo usar una macro. El valor devuelto es [1] :
Para las pruebas, solía generar una forma lambda donde
lera una variable:Llamar a esto con la lista original devuelve 14.
[1] también
(caddar (cddddr (caddr l)))sería buenofuente
Retina ,
170142125115114878483757370696867 bytesSí,
menos del 50% demás de 100 bytes de mi primer intento. :)Para ejecutar el código desde un solo archivo, use el
-sbandera.Todavía no estoy convencido de que esto sea óptimo ... No tendré mucho tiempo en los próximos días, eventualmente agregaré una explicación.
fuente
Pyth, 62 bytes
Pruébelo en línea: demostración o pruebas
Explicación:
El primer bit
JvXz"() ,][")reemplaza los caracteres"() "con los caracteres"[],"en la cadena de entrada, que termina en una representación de una lista de estilo Python. Lo evalúo y lo guardo enJ.Luego reduzco la cadena
G = "l"conu...\l. Aplico la función interna...varias vecesGhasta que el valor deGya no cambia y luego imprimoG.La función interna hace lo siguiente: Si
Jya es igual al número de entrada, no modifiqueG(?qJQG). De lo contrario, aplanaré la listaJ[:1]y comprobaré si el número de entrada está en esa lista y guardaré esto en la variableK(K}Quu+GHNY<J1)). Tenga en cuenta que Pyth no tiene un operador de aplanamiento, por lo que esto requiere bastantes bytes. SiKes verdadero, entonces actualizo J conJ[0], de lo contrario conJ[1:](=J?KhJtJ). Y luego reemplazoGcon"(cdr G)"y reemplazodela, siKes verdadero (++XWK"(cdr "\d\aG\)).fuente
Esquema (R5RS), 102 bytes
fuente
PHP - 177 bytes
He agregado algunas líneas nuevas para facilitar la lectura:
Aquí está la versión sin golf:
fuente
Haskell,
190188 bytesl "(4 5 (1 2 (7) 9 (10 8 14)))" 8evalúa a
"(car (cdr (car (cdr (cdr (cdr (cdr (car (cdr (cdr l))))))))))"fuente
(ycen funcióncen una cadena:c(h:s)="(c"++h:...hser un Char!Lisp común,
168bytesAlgo estúpido de recursión, probablemente podría condensarse un poco más:
Bastante impreso:
fuente