Invertir e invertir una cadena
Reto
En este desafío. Escribirá un programa que generará o devolverá la entrada, invertida e invertida.
Primero, cada carácter debe convertirse a su código de carácter. Entonces, eso debería convertirse a base-2. A continuación, esa cadena debe invertirse. Después, la cadena debe invertirse (1 -> 0 y 0 -> 1). Finalmente, eso debe convertirse de nuevo a la base 2 y luego volver a convertirse en un personaje. Si un carácter resulta ser no imprimible, opcionalmente puede generarlo pero no es necesario eliminarlo.
H -> 72 -> 1001000 -> 0001001 -> 1110110 -> 118 -> v
e -> 101 -> 1100101 -> 1010011 -> 0101100 -> 44 -> ,
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
, -> 44 -> 101100 -> 001101 -> 110010 -> 50 -> 2
-> 32 -> 100000 -> 000001 -> 111110 -> 62 -> >
W -> 87 -> 1010111 -> 1110101 -> 0001010 -> 10 -> (newline)
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
r -> 114 -> 1110010 -> 0100111 -> 1011000 -> 88 -> X
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
d -> 100 -> 1100100 -> 0010011 -> 1101100 -> 108 -> l
! -> 33 -> 100001 -> 100001 -> 011110 -> 30 -> (unprintable)
Tanteo
El código más corto en bytes gana.
-15% de bonificación: si su programa elimina no imprimibles de la salida. Esto debe ser al menos todos los caracteres por debajo de 32, excepto las nuevas líneas (char 10)
GBktnkZs
0010000
, debe tratarse como10000
tal, lo contrario sería00001
Respuestas:
CJam, 14
Pruébalo en línea
Explicación:
Muy claro:
Versión "imprimible", 20 - 15% = 17
fuente
Pyth, 14 bytes
Pruébalo en línea.
Cómo funciona
fuente
smCi!MvM_.Bd2z
smCi.r_.Bd`T2z
smCiqR\0_.Bd2z
Perl,
5751 caracteres(Código de 50 caracteres + opción de línea de comando de 1 carácter).
Ejecución de muestra:
fuente
-p
s/./$_=unpack b8,$&;s|0+$||;"chr 0b".y|10|01|r/gee
.unpack b8,$&
es más corto quesprintf'%b',ord$&
, y además decodifica en orden inverso. Desafortunadamente, también produce ceros finales, que deben eliminarse.unpack
Todavía es un terreno inexplorado para mí.-p
s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee
. Invierta el personaje, no es necesario transliterar;)JavaScript (
ES6ES7),119114108 bytesEsto resultó mucho más de lo esperado :(
¡Gracias a @vihan por 5 bytes guardados! ¡Gracias a @ETHProductions por otros 6 bytes guardados!
Para probar: Ejecute el fragmento a continuación, ingrese la entrada como
"Hello, World!"
y haga clic en Probar.fuente
parseInt
con+('0b'+<code>)
como se describe aquí y otro utilizandow^1
en lugar de+!+w
x=>String.fromCharCode(...[for(y of x)if((c=+('0b'+[...y.charCodeAt().toString(2)].reverse().map(z=>z^1).join``)) >31||c==10)c])
(127 - 15% = 107.95) Sin embargo, quizás esto no sea legal; solo maneja10 == \n
, no13 == \r
. @ Vɪʜᴀɴ ¿Cuál es tu opinión?Unexpected token '>'
cuando trato de ejecutar el fragmento.JavaScript (ES7), 126 bytes - 15% = 107.1
Estaba jugando con esta respuesta para ver si valía la pena. Aparentemente lo es. El conjunto de pruebas fue robado de la misma respuesta, pero agregué mi propio giro: ¡soporte completo del bono del 15%! :)
fuente
getScore()
función que verifica elHello, World!
cumplimiento del caso de prueba (contiene convenientemente una nueva línea y caracteres no imprimibles), y devuelve el puntaje multiplicado por .85 o 1, dependiendo del resultado. Y sí, el acceso al fragmento no minimizado sería excelente. :)PHP -
187182163 bytesPase el valor como
GET["s"]
.array_map devuelve una matriz con todos los elementos del segundo parámetro (una matriz) después de aplicar la función de devolución de llamada (primer parámetro) a todos ellos.
No estoy seguro de si debería tomar el 15% de descuento, ya
echo
que no genera caracteres no imprimibles, pero no los eliminé.Me alegro de haber terminado, ya que este es el primer desafío en el que participo.
fuente
$m='array_map';echo join($m("chr",$m("bindec",$m(function($v){return strtr($v,[1,0]);},$m("strrev",$m("decbin",$m("ord",str_split($s))))))));
.STDIN
. Por cierto, no es necesario usar comillas alrededor de la cadena ("chr"
,"bindec"
, ...) ya que no se preocupan por las advertencias. Eso debería ahorrarte 12 bytes.str_split($s)
con,str_split(fgets(STDIN))
por ejemplo.K5, 28 bytes
Esto es un poco incómodo porque el
decode
operador de K5 realiza una conversión de base de ancho fijo, por lo que para cumplir con la declaración del problema tengo que recortar los ceros a la izquierda. La lambda{x@&|\x}
logra este paso.Frotis:
Reunir:
Seleccionar:
Todo el programa en acción:
Creo que el comportamiento natural de OK con los no imprimibles lo hace elegible para -15%, lo que le da un puntaje de 28 * 0.85 = 23.8 .
fuente
Julia, 77 bytes - 15% = 65.45
Esto crea una función sin nombre que acepta una cadena y devuelve una cadena. Se eliminan los caracteres no imprimibles, lo que califica esto para la bonificación.
Sin golf:
fuente
filter(isprint,)
y solo 11.55 bytes guardados a través del bono.s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)
(para 56 bytes)filter(isprint,)
ambos lo califica para el bono y lo hace cumplir con las reglas.\x04
y similares), entoncesprint()
cuesta siete, lo que generaría 56 hasta 63.PowerShell,
199 175(171 - 15%) = 145.35Utiliza
una cantidad desafortunada dealgunas llamadas / incorporaciones de .NET, lo que aumentasignificativamenteel código.Explicado:
Toma la entrada
param(..)
y la convierte como unachar[]
para que podamos trabajarla adecuadamente.El siguiente bit
(..)-join''
recopila y une nuestra salida.Dentro de esos parens, iteramos
$a|%{..}
como un bucle foreach.Dentro del bucle:
$b
, que es nuestra carta de entrada emitida como int+$_
y[convert]
ed a base2
$c
, es complicado, así que comencemos adentro y salgamos$b
con(-join$b[$b.length..0])
"$(..)"
[convert]
esToInt32
desde la base2
, que finalmente se almacena en$c
$c
es mayor31
o igual que10
, lo convertimos como un carácter y ese valor se deja en la tubería para la salida (que es lo que se recopila y-join''
edita, arriba), de lo contrario no queda nada en esta iteración en particularUf.
También califica para el bono de -15%.
Ejemplo
fuente
Función C, 63
fuente
𝔼𝕊𝕄𝕚𝕟, 39 caracteres / 73 bytes
Try it here (Firefox only).
fuente
Minkolang 0.11 , 26 bytes
Pruébalo aquí
Explicación
fuente
MATLAB, 60 bytes
Básicamente, cada carácter a su vez se convierte en una cadena binaria (sin ceros a la izquierda). La matriz se voltea y se resta de 97 ('0' + '1') que invierte el carácter. Esto se convierte de nuevo a decimal. Después de que se hayan procesado todos los caracteres, toda la matriz se convierte de nuevo en caracteres antes de ser devuelta.
fuente
Pitón 3,
9591Implementación directa.
Sin golf:
fuente
Ruby, 62 caracteres
Ejecución de muestra:
fuente
C #, 156 bytes - 15% = 132.6
Sangría y nuevas líneas para mayor claridad:
fuente
Javascript 123 bytes
fuente
Retina ,
1107629 bytes - 15% = 534,65 (no competitivo)Utiliza características agregadas después de la fecha de desafío. (Comportamiento implícito de
$*
,¶
, clasificación)La retina no tiene una función incorporada para convertir un personaje a su ordinal ASCII o hacia atrás ... así que contemple su longitud brillante. Esto maneja ASCII imprimible y elimina las no imprimibles y las nuevas líneas. El recuento de bytes asume la codificación ISO 8859-1.
El código contiene caracteres no imprimibles.
Pruébalo en línea
Si revisa el tutorial de Retina para aritmética unaria , reconocerá varias piezas diferentes de mi código como provenientes de allí.
Gracias a Martin por jugar cientos de bytes
fuente
Java, 205 - 15% = 174.2
Sin golf:
Creo que esta solución es un poco interesante en su uso de los
Integer
métodosInteger.reverse
y enInteger.numberOfLeadingZeros
lo que suenan, y el cambio de-1 >>> s
dóndes
es el número de ceros a la izquierda, para que la máscara enmascare los bits altos que no queremos. Solo lamento que el nombre del último método sea tan detallado, pero eso es lo que obtengo por jugar al golf en Java.Salida:
fuente
Japt, 25 bytes
¿Desea crear un programa JavaScript de golf, pero el método más corto involucra muchos nombres de funciones largos? Para eso fue hecho Japt. :)
¡Pruébelo en el intérprete en línea !
Cómo funciona
Usando la versión actual de Japt (a partir de v1.4.4), el recuento de bytes se puede reducir a 14:
¡Pruébalo en línea!
fuente
Haskell, 167 bytes
Desafortunadamente, Haskell se vuelve bastante detallado cuando necesita leer / imprimir en otra base ...
fuente
Perl 6, 66 bytes
Hacer todo lo posible al eliminar los caracteres de control que no se imprimen me lleva a (83 + 1) -15% = 71.4
Si elimino el código que elimina los caracteres de control, guardo bastante 65 + 1 = 66
(Solía en
»
lugar de>>
para mayor claridad)fuente
Gelatina , 6 bytes (no competitiva)
Pruébalo en línea!
Explicación:
fuente
Raqueta 250 15% de bonificación = 212 bytes
Sin golf:
Pruebas:
Salida:
fuente
PHP, 80 bytes
toma entrada de STDIN; corre con
-R
.versión de bonificación,
97110 bytes -> 93.5 puntajeimprime ASCII 10 y 32 a 126 (nueva línea e imprimibles)
desglose, TiO y si es posible algo de golf seguirá; Estoy cansado ahora mismo.
fuente