Reto:
Dada una cadena que solo contiene letras mayúsculas y / o minúsculas (lo que prefiera), coloque tape
horizontalmente para arreglarlo. Hacemos esto mediante la comprobación de la diferencia de dos letras adyacentes en el alfabeto (ignorando envolvente y sólo en el futuro), y llenando el espacio con tanto TAPE
/ tape
como sería necesario.
Ejemplo:
Entrada: abcmnnnopstzra
Salida:abcTAPETAPETmnnnopTAstTAPETzra
¿Por qué?
- Entre
c
ym
debe serdefghijkl
(longitud 9), así que llenamos esto conTAPETAPET
; - Entre
p
ys
debe serqr
(longitud 2), así que llenamos esto conTA
; - Entre
t
yz
debe seruvwxy
(longitud 5), así que llenamos esto conTAPET
.
Reglas de desafío:
- La diferencia solo se aplica hacia adelante, por lo que no hay cinta entre ellos
zra
. - Es posible tener múltiples de las mismas letras adyacentes como
nnn
. - Se le permite tomar la entrada en cualquier formato razonable. Puede ser una sola cadena, cadena-matriz / lista, serie de caracteres / lista, etc. La salida tiene la misma flexibilidad.
- Puede usar minúsculas y / o mayúsculas de la forma que desee. Esto se aplica tanto a la entrada, salida y
TAPE
. - Es posible que no
TAPE
sea necesario, en cuyo caso la entrada permanece sin cambios.
Reglas generales:
- Este es el código de golf , por lo que gana la respuesta más corta en bytes.
No permita que los lenguajes de código de golf lo desalienten de publicar respuestas con idiomas que no sean de codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace a una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba:
Input: "abcmnnnopstzra"
Output: "abcTAPETAPETmnnnopTAstTAPETzra"
Input: "aza"
Output: "aTAPETAPETAPETAPETAPETAPEza"
Input: "ghijk"
Output: "ghijk"
Input: "aabbddeeffiiacek"
Output: "aabbTddeeffTAiiaTcTeTAPETk"
Input: "zyxxccba"
Output: "zyxxccba"
Input: "abccxxyz"
Output: "abccTAPETAPETAPETAPETAPExxyz"
Input: "abtapegh"
Output: "abTAPETAPETAPETAPETtaTAPETAPETAPETApeTgh"
Input: "tape"
Output: "taTAPETAPETAPETApe"
ab[TAPETAPETAPETAPET]TA[TAPETAPETAPETA]PE[T]gh
(se agregó el[]
para hacerlo más legible).Respuestas:
05AB1E ,
1412 bytesPruébalo en línea!
Explicación
fuente
-d
para obtener el volcado bruto de la operación por operación de la pila de lo que está sucediendo en lugar de una explicación, pero trato de publicarlos también, no es sencillo, especialmente en algunos de la mía jajaja.Jalea , 13 bytes
Pruébalo en línea!
Explicación
fuente
abctapetapetmnnnopapstetapezra
lugar deabctapetapetmnnnoptasttapetzra
.Haskell , 58 bytes
Pruébalo en línea! La función se
f
repite sobre la cadena y mira caracteres consecutivosx
yy
.cycle"TAPE"
produce la cadena infinita"TAPETAPETAPE..."
.[x..y]
obtiene el rango de caracteres a partirx
dey
incluido, así que tenemos que restar dos de la longitud. En caso de quex
ocurra más tarde en el alfabetoy
o ambos sean del mismo carácter, obtenemos un número negativo después de restar, pero afortunadamente lostake
acepta también y simplemente no toma nada.fuente
Perl 5 ,
-F
46 bytesPruébalo en línea!
fuente
P,E,T,A
lugar deT,A,P,E
, pero ahora me doy cuenta de que has usado en((P,E,T,A)x7)[2..-$^H+($^H=ord)
lugar de((T,A,P,E)x7)[0..-$^H+($^H=ord)-2
guardar dos bytes. ¡Buena respuesta!^H
(\x08
)!do$0
), pero aquí solo hay 2 bytes, por lo que no me molestéPython 2 ,
968780 bytesPruébalo en línea!
fuente
Haskell , 64 bytes
Maneja cadenas de letras mayúsculas o minúsculas, pero no ambas.
Pruébalo en línea!
fuente
C, 84 bytes
Pruébalo en línea!
C (ejecutar en el símbolo del sistema de Windows), 81 bytes
Salida:
fuente
Python 3 , 98 bytes
Pruébalo en línea!
-1 byte gracias a Asone Tuhid
fuente
Scala , 66 bytes
Pruébalo en línea!
Explicación
fuente
PHP , 85 bytes
Pruébalo en línea!
Explicación
fuente
Javascript,
131127bytes4 bytes guardados gracias a Rick Hitchcock.
Desenrollado
Mi problema aquí es que Javascript no tenía una forma limpia de obtener la distancia entre los caracteres a y b.
fuente
charCodeAt
a una variable:z=(a=>[...a].reduce((x,y)=>x+[...Array((f=y[c='charCodeAt']()-x.slice(-1)[c]())>1?f-1:0)].reduce((e,r,t)=>e+"TAPE"[t%4],"")+y))
Python 2/3 ,
7069 bytesPruébalo en línea!
fuente
Carbón de leña , 20 bytes
Pruébalo en línea! Explicación:
fuente
Pip , 29 bytes
Toma la entrada como un argumento de línea de comandos (en mayúsculas o minúsculas, no importa). Pruébalo en línea!
Explicación
fuente
JavaScript (ES6),
8078 bytesLa distancia entre dos caracteres se puede determinar convirtiendo su concatenación en la base 36, restando 370, módulo 37.
Por ejemplo,
(parseInt('cy',36)-370)%37 == 22
.Luego podemos usar
padEnd
para rellenar los huecos y la recursión para manejar el bucle.Casos de prueba:
Mostrar fragmento de código
fuente
K4 , 48 bytes
Solución:
Ejemplos:
Explicación:
Solución bastante simple, pero un alto conteo de bytes ... Encuentra los deltas, toma de la cadena
"TAPE"
, únete al corte de cadena original donde los deltas son> 1.fuente
Excel VBA, 106 bytes
Una función de ventana inmediata anónima de VBE que toma la entrada como una cadena en mayúscula a través de la celda
A1
y las salidas a la ventana inmediata de VBE.fuente
Ruby ,
5953 bytesPruébalo en línea!
En realidad, esto es bastante sencillo: tomamos la entrada al
dividir nuestra cadena enuna serie de caracteres (gracias a Asone Tuhid por señalar esto) y aplicamos la operación de reducción, donde justificamos cada carácter a la longitud requerida usando "TAPE" como cadena de relleno.fuente
K (oK) , 33 bytes
Pruébalo en línea!
{ }
función anónima con argumentox
-':x
reste cada anterior (use un 0 imaginario antes del primer elemento)1_
soltar el primer elemento0,
anteponer un 0-1+
agregar -10|
max (0, ...)(
...)#\:"TAPE"
remodelar la cadena"TAPE"
a cada elemento de la lista de la izquierda(
...),'x
agregue el carácter correspondientex
a cada cadena reformada,/
concatenar todofuente
Ruby ,
78 77 6462 bytes-1 byte gracias a Kevin Cruijssen
Pruébalo en línea!
fuente
ord-l[-1].ord-1
aord+~l[-1].ord
. Buena respuesta, sin embargo. +1 de mi parteJava (JDK) , 91 bytes
Pruébalo en línea!
Explicación
Créditos
var
fuente
int p=123
salvaría un personaje. No importa lo quep
esté en la primera iteración, siempre que sea mayor o igual que el primer carácter. El valor más grande que puede tener el primer carácter es'z'
== ASCII122
, por lo que 123 es lo suficientemente bueno. Además, si usó letras mayúsculas, podría usar 91 en lugar de 123, guardando otro carácter.C # (.NET Core) ,
122111 bytesGuardado 11 bytes gracias a @KevinCruijssen
Pruébalo en línea!
Explicación:
fuente
while
a unafor
y la eliminación de los corchetes:for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+=t[(e-d)%4]);
. :) Ah, y ya que usted está usandot="ETAP"
solamente una vez, se puede utilizar directamente, y el cambiostring
avar
ahorrar 7 bytes más:s=>{var r=""+s[0];for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+="ETAP"[(e-d)%4]);return r;}
.Yabasic , 119 bytes
Una función anónima que toma la entrada como una cadena en mayúscula y las salidas a STDOUT.
Pruébalo en línea!
fuente
Python 3, 90 bytes
Pruébalo en línea
fuente
**title**
a#title
. Además, ¿le importaría agregar un enlace TryItOnline con código de prueba?Clojure,
139119 bytesFunción anónima que toma la cadena y devuelve la grabada. Como siempre, Clojure no parece funcionar demasiado bien. Lo que realmente no pude resolver es buscar el siguiente personaje de una manera corta. En el último personaje obtendría una
OutOfBoundsException
razón obvia. Así que lo puse a sucycle
alrededor. Quizás haya una solución más elegante.Sin golf
Actualizar
Se las arregló para eliminar algunos bytes. Se deshizo de la molesta
if
declaración al disminuir la diferencia.take
produce una lista vacía si el número es 0 o menos, lo que a su vez da como resultado una cadena vacía.Sin golf
fuente
APL (Dyalog Classic) , 30 bytes
Pruébalo en línea!
{ }
función anónima con argumento⍵
⎕a⍳⍵
encontrar índices de sus caracteres en el alfabeto2-/
diferencias por pares (anterior menos siguiente)1+
agregar 1-
negar0⌈
max (0, ...)0,
anteponer un 0⍴∘'TAPE'¨
remodelar cíclicamente la cadena'TAPE'
a cada⍵,¨⍨
agregue cada carácter del argumento a la cadena reformada correspondiente∊
aplanarfuente
CJam ,
2725 bytesPruébalo en línea!
Lejos, lejos de los otros idiomas de golf, pero de todos modos estoy orgulloso de este golf.
Explicación
fuente
Casco ,
2625 bytesPruébalo en línea!
fuente
PowerShell , 72 bytes
Pruébalo en línea!
fuente
Java,
213166153 bytespruébalo en línea
Por favor, ayúdame a mejorarlo.
Gracias a @cairdcoinheringaahing por el consejo sobre espacios en blanco. Gracias a @RM por el consejo sobre la cinta. Gracias a @KevinCruijssen por los consejos lambda y expresiones.
fuente
"TAPETAPETAPETAPETAPETAPET".substring...
.int a=1,l=i.length;a<=l;a++
puede serint a=0,l=i.length;++a<=l;
,char u=i[a-1];o+=u;if(a<l){char n=
puede serchar u=i[a-1],n;o+=u;if(a<l){n=
,(n-u)
no necesita el paréntesis yn-u-1
puede sern+~u
. Además, su respuesta es actualmente un fragmento en lugar de una función. Para que sea una lambda, deberá agregarlai->{
al frente y}
al final. En total: Pruébelo en línea. 153 bytes