Usando dois programas vinculados, produza números ordinais até n


19

... Números ordinais (ou numerais ordinais) são palavras que representam posição ou classificação em uma ordem seqüencial.

insira a descrição da imagem aqui

Da Wikipedia .

Sua tarefa é, usando 2 programas separados (dos quais podem ser criados em 2 idiomas diferentes), para produzir a sequência ordinal do primeiro ao nth. Você estará imprimindo a palavra completa secondem oposição a 2nd.

O desafio dos números ordinais já foi levantado antes, particularmente nesta entrada . Nesse desafio, os ordinais são apenas um veículo para facilitar as condições exclusivas detalhadas abaixo.


Parte 1

Você deve criar um programa que, quando recebida a entrada de, ndeve produzir algo .
nsempre será um número inteiro positivo, diferente de zero, não maior que 999.

A saída válida inclui, mas não está limitada a :

  • Qualquer saída para stdout/ stderr/ etc
  • Criação de arquivos / pastas / etc
  • Uma interface gráfica ou imagens de qualquer tipo

Qualquer coisa serve.


Parte 2

Você deve criar um programa que use a saída do programa da parte 1 para gerar uma sequência de números ordinais, iniciando em 1 (primeiro), até o que nfoi analisado na parte 1.

Condições Gerais:

  • O total de bytes da parte 2 não deve exceder o total de bytes da parte 1 (menor ou igual a).

Condições de saída:

  • Não diferencia maiúsculas de minúsculas.
  • A saída deve conter apenas a sequência ordinal (somente caracteres aZ) e espaço em branco (novas linhas permitidas).
  • Pode ser enviado para qualquer fonte, desde que seja visível durante ou após a execução.
  • O programa não precisa terminar enquanto sua saída estiver correta.
  • Não é necessário que a saída tenha gramática, mas pode opcionalmente incluí-la (hífens, vírgulas, "ands" etc.). nine hundred ninety ninthé tão aceitável quanto nine hundred and ninety-ninth.

Saída de amostra

Onde né 8

FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH

Pontuação

A hierarquia das condições de vitória é:

  1. O menor número de bytes na parte 1
  2. O menor número de bytes na parte 2
Entry #1 | Part 1 = 32 bytes, Part 2 = 22 bytes
Entry #2 | Part 1 = 31 bytes, part 2 = 30 bytes

Entry #2 wins - Part 1 contains 31 bytes vs 32 bytes

---

Entry #1 | Part 1 = 21 bytes, Part 2 = 33 bytes
Entry #2 | Part 1 = 80 bytes, Part 2 = 70 bytes

Entry #2 wins - Entry #1 disqualified (Part 2 contains more bytes than Part 1)

---

Entry #1 | Part 1 = 50 bytes, Part 2 = 49 bytes
Entry #2 | Part 1 = 50 bytes, Part 2 = 50 bytes

Entry #1 wins - Part 1 is equal, Part 2 contains 49 bytes vs 50 bytes

5
Qual é o ponto da parte 1 (como na, por que esse desafio não pôde ser marcado apenas com a menor submissão da parte 2)? Além disso, no seu segundo exemplo de pontuação, a primeira entrada não é inválida (parte 2> parte 1) e, se não, não seria melhor que a segunda entrada? Além disso, recomendo ter pelo menos um link para um conjunto de regras formal para definir ordinais; por exemplo, 111 deve dizer one hundred and eleventhou one hundred eleventh?
HyperNeutrino 15/07

3
@HyperNeutrino Acho que a idéia é tentar dividir o trabalho entre os dois da maneira mais uniforme possível durante o golfe - se eu fizer a saída de p1 [30, 'second']para, 32então o p2 terá menos trabalho para fazer isso se tivesse saída, apenas 32.
Jonathan Allan

4
Talvez eu esteja perdendo algo estúpido, mas das duas últimas entradas nos exemplos de pontuação, por que a entrada 1 não ganha? a parte 1 tem os mesmos bytes, a parte 2 é menor ou igual à parte 1 para ambos e a entrada 1 parte 2 tem menos bytes que a entrada 2 parte 2.
Patrick Roberts

@PatrickRoberts Como a Parte 2 deve conter bytes iguais ou inferiores à Parte 1. Como a Parte 1 tem 21 bytes, mas a Parte 2 tem 33 bytes, a Entrada 1 é desqualificada. Infelizmente, essas informações estão escondidas e não são explicitamente declaradas nas condições de vitória no momento.
Cronocida 15/07

@PatrickRoberts Isso é importante, porque, caso contrário, você pode usar uma linguagem que passe implicitamente a entrada como saída quando um programa de 0 byte for executado para a Parte 1
Cronocida

Respostas:


14

Marreta 0.5.1 / Marreta 0.5.1, 10 bytes

Programa 1 (10 bytes):

⣘⢷⠾⣃⢖⣎⢅⡨⠱⢳

Descomprime nesta função da Wolfram Language:

{Range[#1], "Ordinal"} &

Programa 2 (7 bytes):

⡾⡁⢚⣷⣬⠤⣾

Descomprime nesta função da Wolfram Language:

StringRiffle[IntegerName @@ #1, " "] &

Experimente online!


9

R (com englishpacote), 16 bytes / 16 bytes

 Parte 1, 16 bytes

f=function(n)1:n

Parte 2, 16 bytes

english::ordinal

Requer o englishpacote (que não está instalado no TIO, infelizmente).

english::ordinal(f(22))saídas first second third fourth fifth sixth seventh eighth ninth tenth eleventh twelfth thirteenth fourteenth fifteenth sixteenth seventeenth eighteenth nineteenth twentieth twenty first twenty second.

Obviamente, a parte 1 poderia ser muito mais curta (3 bytes :) seq, mas isso contraria a restrição de que a parte 2 não deve exceder a parte 1.


@Giuseppe Sure. Embora eu argumentasse que os pacotes CRAN fazem parte do R, isso deve ser permitido desde que contemos os caracteres necessários para carregá-los e anexá-los.
Robin Ryder

Eu acredito que o meta consenso é que o uso de uma biblioteca externa conta essencialmente como "outra linguagem"; veja, por exemplo, este post que trata de sinalizadores de compilador, mas tem uma observação sobre as bibliotecas externas do Python. A resposta aqui é instrutiva com muitos exemplos, mas não consigo usar a função de pesquisa na meta para encontrar a declaração definitiva.
Giuseppe



4

Python 3 (parte 1 e parte 2)

Infelizmente, o Nodebox é muito prolixo ... não há muito espaço para jogar golfe.

Parte 1 76 bytes

for  i  in  range  (  1 ,  int  (  input  (  ) ) + 1 ) : print ( i ,end=" ")

Parte 2 (usa a biblioteca NodeBox ) 76 bytes

import en.number as n
for i in input().split():print(n.ordinal(n.spoken(i)))

5
Sua resposta deve ser válida; nesse caso, sua parte 2 é mais longa que a parte 1, o que é inválido. Você não pode marcar uma resposta como "não concorrente" e enviar um envio inválido. o rótulo "não concorrente" é um rótulo obsoleto para desafios enviados em idiomas ou versões de idiomas que pós-datam, que costumavam ser proibidos, mas permitidos no status "não concorrente" para envios interessantes.
HyperNeutrino 15/07

1
@HyperNeutrino Desculpe, achei que as regras exigiam que a Parte 1 fosse mais curta que a Parte 2. Marquei isso como não concorrente porque usava uma biblioteca para resolver esse problema.
A

2
Tecnicamente, o uso de bibliotecas externas parece estar bem: codegolf.meta.stackexchange.com/q/188
Jono 2906

1
import en.number as neconomiza quatro bytes em cada parte.
Khuldraeseth na'Barya 15/07

1

JavaScript (Node.js), 47 bytes / 47 bytes

Duas funções no mesmo ambiente Node.js, invocadas como g(f(n)). Usa o número do pacote npm em palavras .

Parte 1, 47 bytes (40 bytes + 7 espaços)

n=>H=>{for(i=0;i<n;)console.log(H(++i))}       

Parte 2, 47 bytes

F=>F(require("number-to-words").toWordsOrdinal)

Experimente no Runkit!


JavaScript (Node.js), 48 bytes / 43 bytes

Parte 1, 48 bytes

n=>[n,require("number-to-words").toWordsOrdinal]

Parte 2, 43 bytes

([n,F])=>{for(i=0;i<n;)console.log(F(++i))}

Experimente no Runkit!


1

Perl 5.10 / Lisp comum, 34/26 bytes

Portanto, o Common Lisp formattem isso como um built-in, porque é claro que sim.

Programa 1 (34 bytes)

say"(format t\"~:r \"$_)"for 1..<>

Perl faz toda a iteração. O código Common Lisp equivalente ( (dotimes(i(read)) ...)) é mais longo que o Perl, muito mais golfista ... for 1..<>. O Perl gera um monte de código Common Lisp.

Programa 2 (26 bytes)

(loop(eval(read nil nil)))

É um REPL, menos o P. Ele lê a entrada padrão e, bem, a executa. Não termina, mas as regras explicitamente dizem que tudo bem.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.