Inspirado en este desafío (¡gracias @cairdcoinheringaahing por el título!), Su tarea es tomar dos cadenas ASCII imprimibles y multiplicarlas por elementos con las siguientes reglas.
¿Como funciona?
Dadas dos cadenas (por ejemplo, split
y isbn
) primero, truncará la más larga para que tengan la misma longitud y luego determine sus códigos ASCII :
split -> spli -> [115, 112, 108, 105]
isbn -> isbn -> [105, 115, 98, 110]
El siguiente paso será asignarlos al rango [0..94]
restando 32
cada código:
[115, 112, 108, 105] -> [83, 80, 76, 73]
[105, 115, 98, 110] -> [73, 83, 66, 78]
Ahora los multiplicará por módulo en cuanto a elementos 95
(para permanecer en el rango de impresión):
[83, 80, 76, 73] ⊗ [73, 83, 66, 78] -> [74, 85, 76, 89]
Agregar 32
para volver al rango [32..126]
:
[74, 85, 76, 89] -> [106, 117, 108, 121]
Y el paso final es asignarlos de nuevo a los caracteres ASCII:
[106, 117, 108, 121] -> "july"
Reglas
- Escribirás un programa / función que implemente los pasos descritos en dos cadenas e imprima o devuelva la cadena resultante
- El formato de entrada es flexible: puede tomar dos cadenas, una tupla de cadenas, una lista de cadenas, etc.
- La entrada puede consistir en una o dos cadenas vacías
- La entrada será caracteres en el rango imprimible (
[32..126]
) - El resultado se imprime en la consola o devuelve una cadena
- La salida puede tener espacios en blanco al final
Casos de prueba
"isbn", "split" -> "july"
"", "" -> ""
"", "I don't matter" -> ""
" ", "Me neither :(" -> " "
"but I do!", "!!!!!!!!!" -> "but I do!"
'quotes', '""""""' -> 'ck_iKg'
"wood", "hungry" -> "yarn"
"tray", "gzip" -> "jazz"
"industry", "bond" -> "drop"
"public", "toll" -> "fall"
"roll", "dublin" -> "ball"
"GX!", "GX!" -> "!!!"
"4 lll 4", "4 lll 4" -> "4 lll 4"
"M>>M", "M>>M" -> ">MM>"
Nota : Las citas son solo para facilitar la lectura, en el sexto caso de prueba que utilicé en '
lugar de "
.
abc, def -> [['a', 'b', 'c'], ['d', 'e', 'f']]
Respuestas:
MATL , 12 bytes
Pruébalo en línea!
Explicación
fuente
Jalea ,
1512 bytesPruébalo en línea!
-3 gracias a Jonathan Allan .
fuente
ØṖ
, conz⁶O_32P€‘ịØṖ
- es mejor que verifique que la aritmética funcione.Python 3 ,
807471 bytes¡Gracias a @shooqie por jugar 3 bytes!
Pruébalo en línea!
fuente
(s, t)
como una tupla:lambda t:''.join(map(lambda x,y:chr((ord(x)-32)*(ord(y)-32)%95+32),*t))
Python 2 ,
7570 bytes-3 bytes gracias a la sugerencia de Dennis de la sugerencia de shooqie. -2 bytes gracias a la sugerencia de Zacharý.
Pruébalo en línea!
fuente
lambda*t:''.join(chr(((ord(i)-32)*(ord(j)-32))%95+32)for i,j in zip(*t))
((ord(i)-32)*(ord(j)-32))%95+32
=>(ord(i)-32)*(ord(j)-32)%95+32
...map
. Llegué un poco tarde.Haskell ,
6057 bytesPruébalo en línea!
La primera línea es una función anónima que toma dos argumentos.
Esta es una implementación directa del algoritmo:
zipWith
toma ambas cadenas y aplica una función determinada a los pares de caracteres. Maneja el truncamiento y también funciona para cadenas vacías.fromEnum
ytoEnum
son alternativas aord
ychr
para cambiar entre los personajes y sus valores ASCII que no necesitan una larga importación.Editar: -3 bytes gracias a Bruce Forte.
fuente
3
bytes extrayendo-32
y guardando esos paréntesis, consulte aquí .C ++,
331291282270268 bytes, Versión 2 =178176150148 bytesVersión original :
-40 bytes gracias a Bruce Forte
-39 bytes gracias a Zacharý
Versión 2, inspirada en las respuestas de otras personas.
Si la primera versión usa una lambda, es porque quería probar C ++ 11 std :: función asíncrona que acabo de aprender, así que la guardé sin ningún motivo ...
Versión más legible:
fuente
#include <string>
=>#include<string>
y#include <algorithm>
=>#include<algorithm>
?string
y utilizarla en consecuencia.Dyalog APL,
3634332524 bytes¡Pruébelo en línea (TryAPL)!
¡Pruébelo en línea (TIO)!
La entrada es una lista de cadenas y tiene espacios en blanco al final.
Así es como funciona:
fuente
tryapl.org
, así que aquí hay un TIO para aquellos que quieran probarlo.FSharp 275 bytes
fuente
CJam , 23 bytes
Pruébalo en línea!
fuente
C # (.NET Core) ,
100 9695 bytesPruébalo en línea!
-4 bytes gracias a @ Zacharý
-1 byte moviendo el incremento
Utiliza una lambda y abusa del hecho de que los personajes son básicamente ints.
fuente
(l[i]-32)*(n[i]-32)%95+32
?Console
y puede usar curry para guardar un byte. Compilar a un meAction<string, Action<string>>
gustal=>n=>
y llamar como("word")("string")
Mathematica, 114 bytes
entrada
fuente
Apilado , 52 bytes
Pruébalo en línea!
Función que toma dos argumentos de la pila.
Explicación
Veamos la primera parte, suponiendo que los dos elementos principales son
'split'
y'isbn'
:Esta parte realiza el recorte.
Luego:
Entonces, la última parte:
fuente
R , 88 bytes
función anónima; toma la entrada como dos cadenas; El tercer argumento es solo para garantizar que se trata de una función de una línea y guardar algunos bytes.
El siguiente enlace TIO devuelve una matriz con entradas nombradas con la primera entrada.
¡Pruebe todos los casos de prueba!
fuente
Perl 5 , 65 bytes
64 bytes de código +
-p
bandera.Pruébalo en línea!
fuente
D, 113 bytes
Este es un puerto de la solución C ++ de HatsuPointerKun , ¡no se olvide de votarlos!
Pruébalo en línea!
fuente
05AB1E ,
1615 bytesPruébalo en línea!
-1 para Emigna señalando
₃
empujones95
.es otro.
fuente
₃
Guarda un byte. Lástima lo de la entrada de cadena vacía. Deø
lo contrario , ahorraría algunos más.Java 8,
1271159795 bytesExplicación:
Pruébalo aquí
fuente
C #, 166 bytes
Estoy seguro de que hay mucho golf por hacer, pero no tengo tiempo en este momento.
Pruébalo en línea!
Versión completa / formateada:
fuente
(((c-32)*(t.Substring(0,l)[i]-32))%95)+32)
puede ser((c-32)*(t.Substring(0,l)[i]-32)%95+32)
(podría haber jodido a los padres allí ... ¡parece lisp!)Lisp común, 99 bytes
Pruébalo en línea!
fuente
Japt , 24 bytes
Devuelve una cadena con caracteres nulos finales (
\u0000
) cuando la primera entrada es más larga que la segunda.Pruébalo en línea! con la
-Q
bandera para mostrar la salida formateada, incluidos los caracteres nulos.Ejecute todos los casos de prueba usando mi WIP CodePen.
fuente
Python 2 ,
9573 bytesPruébalo en línea!
fuente
(((ord(x[i])-32)*(ord(y[i])-32))%95)+32
=>(ord(x[i])-32)*(ord(y[i])-32)%95+32
Carbón , 30 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. De hecho, escribí el cálculo como
(32 - ord(q)) * (32 - ord(h))
porque evita literales numéricos consecutivos, pero supongo que podría haber escrito en su(ord(q) - ord(" ")) * (ord(h) - ord(" "))
lugar.fuente
Perl 5 , 95 bytes
Pruébalo en línea!
Explicación:
fuente
Pip , 19 bytes
Toma las cadenas como argumentos de línea de comandos. Pruébalo en línea!
Explicación
fuente
Factor , 45
Es una cita (lambda),
call
con dos cadenas en la pila, deja la nueva cadena en la pila.Como una palabra:
fuente
K (oK) , 26 bytes
Solución:
Pruébalo en línea!
Ejemplo:
Explicación:
La evaluación se realiza de derecha a izquierda:
fuente
PHP, 112 bytes
fuente
for($i=0;$i<strlen($a=$argv[1])&&$i<strlen($b=$argv[2]);)echo chr((ord($a[$i])-32)*(ord($b[$i++])-32)%95+32);
Además, no estoy completamente seguro de si también es posible reemplazarlo&&
con&
PHP, reduciéndolo en otro byte a 108 .JavaScript (ES6), 89 bytes
Javascript y la maldición de los nombres largos de funciones ...
Usar curry y el hecho de que
charCodeAt
vuelveNaN
cuando se llama con una posición no válida Puede haber nulos finales en la salida.Prueba
fuente